backport-util-concurrent-3.1-src/0000755001750700037720000000000010643402427015710 5ustar dawidkdclbackport-util-concurrent-3.1-src/test/0000755001750700037720000000000010643402426016666 5ustar dawidkdclbackport-util-concurrent-3.1-src/test/tck/0000755001750700037720000000000010643402426017447 5ustar dawidkdclbackport-util-concurrent-3.1-src/test/tck/backport.util.concurrent.1.4.library0000644001750700037720000000070210153210664026274 0ustar dawidkdcl backport.util.concurrent.1.4 [../../backport-util-concurrent.jar] [../../backport-util-concurrent-src.jar] [../../backport-util-concurrent-doc.jar] 1101857966720 backport-util-concurrent-3.1-src/test/tck/tck.jpx0000644001750700037720000000772010153210664020756 0ustar dawidkdcl backport-util-concurrent-3.1-src/test/tck/src/0000755001750700037720000000000010643402426020236 5ustar dawidkdclbackport-util-concurrent-3.1-src/test/tck/src/AtomicMarkableReferenceTest.java0000644001750700037720000001170710153210664026436 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; public class AtomicMarkableReferenceTest extends JSR166TestCase{ public static void main (String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(AtomicMarkableReferenceTest.class); } /** * constructor initializes to given reference and mark */ public void testConstructor(){ AtomicMarkableReference ai = new AtomicMarkableReference(one, false); assertEquals(one,ai.getReference()); assertFalse(ai.isMarked()); AtomicMarkableReference a2 = new AtomicMarkableReference(null, true); assertNull(a2.getReference()); assertTrue(a2.isMarked()); } /** * get returns the last values of reference and mark set */ public void testGetSet(){ boolean[] mark = new boolean[1]; AtomicMarkableReference ai = new AtomicMarkableReference(one, false); assertEquals(one,ai.getReference()); assertFalse(ai.isMarked()); assertEquals(one, ai.get(mark)); assertFalse(mark[0]); ai.set(two, false); assertEquals(two,ai.getReference()); assertFalse(ai.isMarked()); assertEquals(two, ai.get(mark)); assertFalse(mark[0]); ai.set(one, true); assertEquals(one,ai.getReference()); assertTrue(ai.isMarked()); assertEquals(one, ai.get(mark)); assertTrue(mark[0]); } /** * attemptMark succeeds in single thread */ public void testAttemptMark(){ boolean[] mark = new boolean[1]; AtomicMarkableReference ai = new AtomicMarkableReference(one, false); assertFalse(ai.isMarked()); assertTrue(ai.attemptMark(one, true)); assertTrue(ai.isMarked()); assertEquals(one, ai.get(mark)); assertTrue(mark[0]); } /** * compareAndSet succeeds in changing values if equal to expected reference * and mark else fails */ public void testCompareAndSet(){ boolean[] mark = new boolean[1]; AtomicMarkableReference ai = new AtomicMarkableReference(one, false); assertEquals(one, ai.get(mark)); assertFalse(ai.isMarked()); assertFalse(mark[0]); assertTrue(ai.compareAndSet(one, two, false, false)); assertEquals(two, ai.get(mark)); assertFalse(mark[0]); assertTrue(ai.compareAndSet(two, m3, false, true)); assertEquals(m3, ai.get(mark)); assertTrue(mark[0]); assertFalse(ai.compareAndSet(two, m3, true, true)); assertEquals(m3, ai.get(mark)); assertTrue(mark[0]); } /** * compareAndSet in one thread enables another waiting for reference value * to succeed */ public void testCompareAndSetInMultipleThreads() { final AtomicMarkableReference ai = new AtomicMarkableReference(one, false); Thread t = new Thread(new Runnable() { public void run() { while(!ai.compareAndSet(two, three, false, false)) Thread.yield(); }}); try { t.start(); assertTrue(ai.compareAndSet(one, two, false, false)); t.join(LONG_DELAY_MS); assertFalse(t.isAlive()); assertEquals(ai.getReference(), three); assertFalse(ai.isMarked()); } catch(Exception e) { unexpectedException(); } } /** * compareAndSet in one thread enables another waiting for mark value * to succeed */ public void testCompareAndSetInMultipleThreads2() { final AtomicMarkableReference ai = new AtomicMarkableReference(one, false); Thread t = new Thread(new Runnable() { public void run() { while(!ai.compareAndSet(one, one, true, false)) Thread.yield(); }}); try { t.start(); assertTrue(ai.compareAndSet(one, one, false, true)); t.join(LONG_DELAY_MS); assertFalse(t.isAlive()); assertEquals(ai.getReference(), one); assertFalse(ai.isMarked()); } catch(Exception e) { unexpectedException(); } } /** * repeated weakCompareAndSet succeeds in changing values when equal * to expected */ public void testWeakCompareAndSet(){ boolean[] mark = new boolean[1]; AtomicMarkableReference ai = new AtomicMarkableReference(one, false); assertEquals(one, ai.get(mark)); assertFalse(ai.isMarked()); assertFalse(mark[0]); while(!ai.weakCompareAndSet(one, two, false, false)); assertEquals(two, ai.get(mark)); assertFalse(mark[0]); while(!ai.weakCompareAndSet(two, m3, false, true)); assertEquals(m3, ai.get(mark)); assertTrue(mark[0]); } } backport-util-concurrent-3.1-src/test/tck/src/LinkedBlockingQueueTest.java0000644001750700037720000007630610365510635025644 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import java.util.NoSuchElementException; import java.util.Iterator; import java.util.ConcurrentModificationException; import java.util.ArrayList; public class LinkedBlockingQueueTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(LinkedBlockingQueueTest.class); } /** * Create a queue of given size containing consecutive * Integers 0 ... n. */ private LinkedBlockingQueue populatedQueue(int n) { LinkedBlockingQueue q = new LinkedBlockingQueue(n); assertTrue(q.isEmpty()); for(int i = 0; i < n; i++) assertTrue(q.offer(new Integer(i))); assertFalse(q.isEmpty()); assertEquals(0, q.remainingCapacity()); assertEquals(n, q.size()); return q; } /** * A new queue has the indicated capacity, or Integer.MAX_VALUE if * none given */ public void testConstructor1() { assertEquals(SIZE, new LinkedBlockingQueue(SIZE).remainingCapacity()); assertEquals(Integer.MAX_VALUE, new LinkedBlockingQueue().remainingCapacity()); } /** * Constructor throws IAE if capacity argument nonpositive */ public void testConstructor2() { try { LinkedBlockingQueue q = new LinkedBlockingQueue(0); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * Initializing from null Collection throws NPE */ public void testConstructor3() { try { LinkedBlockingQueue q = new LinkedBlockingQueue(null); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection of null elements throws NPE */ public void testConstructor4() { try { Integer[] ints = new Integer[SIZE]; LinkedBlockingQueue q = new LinkedBlockingQueue(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection with some null elements throws NPE */ public void testConstructor5() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); LinkedBlockingQueue q = new LinkedBlockingQueue(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements of collection used to initialize */ public void testConstructor6() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); LinkedBlockingQueue q = new LinkedBlockingQueue(Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * Queue transitions from empty to full when elements added */ public void testEmptyFull() { LinkedBlockingQueue q = new LinkedBlockingQueue(2); assertTrue(q.isEmpty()); assertEquals("should have room for 2", 2, q.remainingCapacity()); q.add(one); assertFalse(q.isEmpty()); q.add(two); assertFalse(q.isEmpty()); assertEquals(0, q.remainingCapacity()); assertFalse(q.offer(three)); } /** * remainingCapacity decreases on add, increases on remove */ public void testRemainingCapacity() { LinkedBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.remainingCapacity()); assertEquals(SIZE-i, q.size()); q.remove(); } for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.remainingCapacity()); assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * offer(null) throws NPE */ public void testOfferNull() { try { LinkedBlockingQueue q = new LinkedBlockingQueue(1); q.offer(null); shouldThrow(); } catch (NullPointerException success) { } } /** * add(null) throws NPE */ public void testAddNull() { try { LinkedBlockingQueue q = new LinkedBlockingQueue(1); q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * Offer succeeds if not full; fails if full */ public void testOffer() { LinkedBlockingQueue q = new LinkedBlockingQueue(1); assertTrue(q.offer(zero)); assertFalse(q.offer(one)); } /** * add succeeds if not full; throws ISE if full */ public void testAdd() { try { LinkedBlockingQueue q = new LinkedBlockingQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.add(new Integer(i))); } assertEquals(0, q.remainingCapacity()); q.add(new Integer(SIZE)); } catch (IllegalStateException success){ } } /** * addAll(null) throws NPE */ public void testAddAll1() { try { LinkedBlockingQueue q = new LinkedBlockingQueue(1); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll(this) throws IAE */ public void testAddAllSelf() { try { LinkedBlockingQueue q = populatedQueue(SIZE); q.addAll(q); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testAddAll2() { try { LinkedBlockingQueue q = new LinkedBlockingQueue(SIZE); Integer[] ints = new Integer[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testAddAll3() { try { LinkedBlockingQueue q = new LinkedBlockingQueue(SIZE); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll throws ISE if not enough room */ public void testAddAll4() { try { LinkedBlockingQueue q = new LinkedBlockingQueue(1); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (IllegalStateException success) {} } /** * Queue contains all elements, in traversal order, of successful addAll */ public void testAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); LinkedBlockingQueue q = new LinkedBlockingQueue(SIZE); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * put(null) throws NPE */ public void testPutNull() { try { LinkedBlockingQueue q = new LinkedBlockingQueue(SIZE); q.put(null); shouldThrow(); } catch (NullPointerException success){ } catch (InterruptedException ie) { unexpectedException(); } } /** * all elements successfully put are contained */ public void testPut() { try { LinkedBlockingQueue q = new LinkedBlockingQueue(SIZE); for (int i = 0; i < SIZE; ++i) { Integer I = new Integer(i); q.put(I); assertTrue(q.contains(I)); } assertEquals(0, q.remainingCapacity()); } catch (InterruptedException ie) { unexpectedException(); } } /** * put blocks interruptibly if full */ public void testBlockingPut() { Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { LinkedBlockingQueue q = new LinkedBlockingQueue(SIZE); for (int i = 0; i < SIZE; ++i) { q.put(new Integer(i)); ++added; } q.put(new Integer(SIZE)); threadShouldThrow(); } catch (InterruptedException ie){ threadAssertEquals(added, SIZE); } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * put blocks waiting for take when full */ public void testPutWithTake() { final LinkedBlockingQueue q = new LinkedBlockingQueue(2); Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { q.put(new Object()); ++added; q.put(new Object()); ++added; q.put(new Object()); ++added; q.put(new Object()); ++added; threadShouldThrow(); } catch (InterruptedException e){ threadAssertTrue(added >= 2); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); q.take(); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * timed offer times out if full and elements not taken */ public void testTimedOffer() { final LinkedBlockingQueue q = new LinkedBlockingQueue(2); Thread t = new Thread(new Runnable() { public void run() { try { q.put(new Object()); q.put(new Object()); threadAssertFalse(q.offer(new Object(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.offer(new Object(), LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success){} } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * take retrieves elements in FIFO order */ public void testTake() { try { LinkedBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.take()).intValue()); } } catch (InterruptedException e){ unexpectedException(); } } /** * take blocks interruptibly when empty */ public void testTakeFromEmpty() { final LinkedBlockingQueue q = new LinkedBlockingQueue(2); Thread t = new Thread(new Runnable() { public void run() { try { q.take(); threadShouldThrow(); } catch (InterruptedException success){ } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * Take removes existing elements until empty, then blocks interruptibly */ public void testBlockingTake() { Thread t = new Thread(new Runnable() { public void run() { try { LinkedBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.take()).intValue()); } q.take(); threadShouldThrow(); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * poll succeeds unless empty */ public void testPoll() { LinkedBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll()).intValue()); } assertNull(q.poll()); } /** * timed pool with zero timeout succeeds when non-empty, else times out */ public void testTimedPoll0() { try { LinkedBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll(0, TimeUnit.MILLISECONDS)).intValue()); } assertNull(q.poll(0, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * timed pool with nonzero timeout succeeds when non-empty, else times out */ public void testTimedPoll() { try { LinkedBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue()); } assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * Interrupted timed poll throws InterruptedException instead of * returning timeout status */ public void testInterruptedTimedPoll() { Thread t = new Thread(new Runnable() { public void run() { try { LinkedBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { threadAssertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue()); } threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * timed poll before a delayed offer fails; after offer succeeds; * on interruption throws */ public void testTimedPollWithOffer() { final LinkedBlockingQueue q = new LinkedBlockingQueue(2); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success) { } } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); assertTrue(q.offer(zero, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * peek returns next element, or null if empty */ public void testPeek() { LinkedBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.peek()).intValue()); q.poll(); assertTrue(q.peek() == null || i != ((Integer)q.peek()).intValue()); } assertNull(q.peek()); } /** * element returns next element, or throws NSEE if empty */ public void testElement() { LinkedBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.element()).intValue()); q.poll(); } try { q.element(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * remove removes next element, or throws NSEE if empty */ public void testRemove() { LinkedBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.remove()).intValue()); } try { q.remove(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * remove(x) removes x and returns true if present */ public void testRemoveElement() { LinkedBlockingQueue q = populatedQueue(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * An add following remove(x) succeeds */ public void testRemoveElementAndAdd() { try { LinkedBlockingQueue q = new LinkedBlockingQueue(); assertTrue(q.add(new Integer(1))); assertTrue(q.add(new Integer(2))); assertTrue(q.remove(new Integer(1))); assertTrue(q.remove(new Integer(2))); assertTrue(q.add(new Integer(3))); assertTrue(q.take() != null); } catch (Exception e){ unexpectedException(); } } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { LinkedBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.poll(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testClear() { LinkedBlockingQueue q = populatedQueue(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); assertEquals(SIZE, q.remainingCapacity()); q.add(one); assertFalse(q.isEmpty()); assertTrue(q.contains(one)); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { LinkedBlockingQueue q = populatedQueue(SIZE); LinkedBlockingQueue p = new LinkedBlockingQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testRetainAll() { LinkedBlockingQueue q = populatedQueue(SIZE); LinkedBlockingQueue p = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.remove(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { LinkedBlockingQueue q = populatedQueue(SIZE); LinkedBlockingQueue p = populatedQueue(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.remove()); assertFalse(q.contains(I)); } } } /** * toArray contains all elements */ public void testToArray() { LinkedBlockingQueue q = populatedQueue(SIZE); Object[] o = q.toArray(); try { for(int i = 0; i < o.length; i++) assertEquals(o[i], q.take()); } catch (InterruptedException e){ unexpectedException(); } } /** * toArray(a) contains all elements */ public void testToArray2() { LinkedBlockingQueue q = populatedQueue(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); try { for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.take()); } catch (InterruptedException e){ unexpectedException(); } } /** * toArray(null) throws NPE */ public void testToArray_BadArg() { try { LinkedBlockingQueue q = populatedQueue(SIZE); Object o[] = q.toArray(null); shouldThrow(); } catch(NullPointerException success){} } /** * toArray with incompatible array type throws CCE */ public void testToArray1_BadArg() { try { LinkedBlockingQueue q = populatedQueue(SIZE); Object o[] = q.toArray(new String[10] ); shouldThrow(); } catch(ArrayStoreException success){} } /** * iterator iterates through all elements */ public void testIterator() { LinkedBlockingQueue q = populatedQueue(SIZE); Iterator it = q.iterator(); try { while(it.hasNext()){ assertEquals(it.next(), q.take()); } } catch (InterruptedException e){ unexpectedException(); } } /** * iterator.remove removes current element */ public void testIteratorRemove () { final LinkedBlockingQueue q = new LinkedBlockingQueue(3); q.add(two); q.add(one); q.add(three); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), one); assertEquals(it.next(), three); assertFalse(it.hasNext()); } /** * iterator ordering is FIFO */ public void testIteratorOrdering() { final LinkedBlockingQueue q = new LinkedBlockingQueue(3); q.add(one); q.add(two); q.add(three); assertEquals(0, q.remainingCapacity()); int k = 0; for (Iterator it = q.iterator(); it.hasNext();) { int i = ((Integer)(it.next())).intValue(); assertEquals(++k, i); } assertEquals(3, k); } /** * Modifications do not cause iterators to fail */ public void testWeaklyConsistentIteration () { final LinkedBlockingQueue q = new LinkedBlockingQueue(3); q.add(one); q.add(two); q.add(three); try { for (Iterator it = q.iterator(); it.hasNext();) { q.remove(); it.next(); } } catch (ConcurrentModificationException e) { unexpectedException(); } assertEquals(0, q.size()); } /** * toString contains toStrings of elements */ public void testToString() { LinkedBlockingQueue q = populatedQueue(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * offer transfers elements across Executor tasks */ public void testOfferInExecutor() { final LinkedBlockingQueue q = new LinkedBlockingQueue(2); q.add(one); q.add(two); ExecutorService executor = Executors.newFixedThreadPool(2); executor.execute(new Runnable() { public void run() { threadAssertFalse(q.offer(three)); try { threadAssertTrue(q.offer(three, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertEquals(0, q.remainingCapacity()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); executor.execute(new Runnable() { public void run() { try { Thread.sleep(SMALL_DELAY_MS); threadAssertEquals(one, q.take()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); joinPool(executor); } /** * poll retrieves elements across Executor threads */ public void testPollInExecutor() { final LinkedBlockingQueue q = new LinkedBlockingQueue(2); ExecutorService executor = Executors.newFixedThreadPool(2); executor.execute(new Runnable() { public void run() { threadAssertNull(q.poll()); try { threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertTrue(q.isEmpty()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); executor.execute(new Runnable() { public void run() { try { Thread.sleep(SMALL_DELAY_MS); q.put(one); } catch (InterruptedException e) { threadUnexpectedException(); } } }); joinPool(executor); } /** * A deserialized serialized queue has same elements in same order */ public void testSerialization() { LinkedBlockingQueue q = populatedQueue(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); LinkedBlockingQueue r = (LinkedBlockingQueue)in.readObject(); assertEquals(q.size(), r.size()); while (!q.isEmpty()) assertEquals(q.remove(), r.remove()); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * drainTo(null) throws NPE */ public void testDrainToNull() { LinkedBlockingQueue q = populatedQueue(SIZE); try { q.drainTo(null); shouldThrow(); } catch(NullPointerException success) { } } /** * drainTo(this) throws IAE */ public void testDrainToSelf() { LinkedBlockingQueue q = populatedQueue(SIZE); try { q.drainTo(q); shouldThrow(); } catch(IllegalArgumentException success) { } } /** * drainTo(c) empties queue into another collection c */ public void testDrainTo() { LinkedBlockingQueue q = populatedQueue(SIZE); ArrayList l = new ArrayList(); q.drainTo(l); assertEquals(q.size(), 0); assertEquals(l.size(), SIZE); for (int i = 0; i < SIZE; ++i) assertEquals(l.get(i), new Integer(i)); q.add(zero); q.add(one); assertFalse(q.isEmpty()); assertTrue(q.contains(zero)); assertTrue(q.contains(one)); l.clear(); q.drainTo(l); assertEquals(q.size(), 0); assertEquals(l.size(), 2); for (int i = 0; i < 2; ++i) assertEquals(l.get(i), new Integer(i)); } /** * drainTo empties full queue, unblocking a waiting put. */ public void testDrainToWithActivePut() { final LinkedBlockingQueue q = populatedQueue(SIZE); Thread t = new Thread(new Runnable() { public void run() { try { q.put(new Integer(SIZE+1)); } catch (InterruptedException ie){ threadUnexpectedException(); } } }); try { t.start(); ArrayList l = new ArrayList(); q.drainTo(l); assertTrue(l.size() >= SIZE); for (int i = 0; i < SIZE; ++i) assertEquals(l.get(i), new Integer(i)); t.join(); assertTrue(q.size() + l.size() >= SIZE); } catch(Exception e){ unexpectedException(); } } /** * drainTo(null, n) throws NPE */ public void testDrainToNullN() { LinkedBlockingQueue q = populatedQueue(SIZE); try { q.drainTo(null, 0); shouldThrow(); } catch(NullPointerException success) { } } /** * drainTo(this, n) throws IAE */ public void testDrainToSelfN() { LinkedBlockingQueue q = populatedQueue(SIZE); try { q.drainTo(q, 0); shouldThrow(); } catch(IllegalArgumentException success) { } } /** * drainTo(c, n) empties first max {n, size} elements of queue into c */ public void testDrainToN() { LinkedBlockingQueue q = new LinkedBlockingQueue(); for (int i = 0; i < SIZE + 2; ++i) { for(int j = 0; j < SIZE; j++) assertTrue(q.offer(new Integer(j))); ArrayList l = new ArrayList(); q.drainTo(l, i); int k = (i < SIZE)? i : SIZE; assertEquals(l.size(), k); assertEquals(q.size(), SIZE-k); for (int j = 0; j < k; ++j) assertEquals(l.get(j), new Integer(j)); while (q.poll() != null) ; } } } backport-util-concurrent-3.1-src/test/tck/src/SynchronousQueueTest.java0000644001750700037720000006135110346121124025277 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import edu.emory.mathcs.backport.java.util.*; import java.util.Arrays; import java.util.NoSuchElementException; import java.util.Iterator; import java.util.ArrayList; public class SynchronousQueueTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(SynchronousQueueTest.class); } /** * A SynchronousQueue is both empty and full */ public void testEmptyFull() { SynchronousQueue q = new SynchronousQueue(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); assertEquals(0, q.remainingCapacity()); assertFalse(q.offer(zero)); } /** * A fair SynchronousQueue is both empty and full */ public void testFairEmptyFull() { SynchronousQueue q = new SynchronousQueue(true); assertTrue(q.isEmpty()); assertEquals(0, q.size()); assertEquals(0, q.remainingCapacity()); assertFalse(q.offer(zero)); } /** * offer(null) throws NPE */ public void testOfferNull() { try { SynchronousQueue q = new SynchronousQueue(); q.offer(null); shouldThrow(); } catch (NullPointerException success) { } } /** * add(null) throws NPE */ public void testAddNull() { try { SynchronousQueue q = new SynchronousQueue(); q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * offer fails if no active taker */ public void testOffer() { SynchronousQueue q = new SynchronousQueue(); assertFalse(q.offer(one)); } /** * add throws ISE if no active taker */ public void testAdd() { try { SynchronousQueue q = new SynchronousQueue(); assertEquals(0, q.remainingCapacity()); q.add(one); shouldThrow(); } catch (IllegalStateException success){ } } /** * addAll(null) throws NPE */ public void testAddAll1() { try { SynchronousQueue q = new SynchronousQueue(); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll(this) throws IAE */ public void testAddAllSelf() { try { SynchronousQueue q = new SynchronousQueue(); q.addAll(q); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testAddAll2() { try { SynchronousQueue q = new SynchronousQueue(); Integer[] ints = new Integer[1]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll throws ISE if no active taker */ public void testAddAll4() { try { SynchronousQueue q = new SynchronousQueue(); Integer[] ints = new Integer[1]; for (int i = 0; i < 1; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (IllegalStateException success) {} } /** * put(null) throws NPE */ public void testPutNull() { try { SynchronousQueue q = new SynchronousQueue(); q.put(null); shouldThrow(); } catch (NullPointerException success){ } catch (InterruptedException ie) { unexpectedException(); } } /** * put blocks interruptibly if no active taker */ public void testBlockingPut() { Thread t = new Thread(new Runnable() { public void run() { try { SynchronousQueue q = new SynchronousQueue(); q.put(zero); threadShouldThrow(); } catch (InterruptedException ie){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * put blocks waiting for take */ public void testPutWithTake() { final SynchronousQueue q = new SynchronousQueue(); Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { q.put(new Object()); ++added; q.put(new Object()); ++added; q.put(new Object()); ++added; q.put(new Object()); ++added; threadShouldThrow(); } catch (InterruptedException e){ assertTrue(added >= 1); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); q.take(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * timed offer times out if elements not taken */ public void testTimedOffer() { final SynchronousQueue q = new SynchronousQueue(); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertFalse(q.offer(new Object(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.offer(new Object(), LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success){} } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * take blocks interruptibly when empty */ public void testTakeFromEmpty() { final SynchronousQueue q = new SynchronousQueue(); Thread t = new Thread(new Runnable() { public void run() { try { q.take(); threadShouldThrow(); } catch (InterruptedException success){ } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * put blocks interruptibly if no active taker */ public void testFairBlockingPut() { Thread t = new Thread(new Runnable() { public void run() { try { SynchronousQueue q = new SynchronousQueue(true); q.put(zero); threadShouldThrow(); } catch (InterruptedException ie){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * put blocks waiting for take */ public void testFairPutWithTake() { final SynchronousQueue q = new SynchronousQueue(true); Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { q.put(new Object()); ++added; q.put(new Object()); ++added; q.put(new Object()); ++added; q.put(new Object()); ++added; threadShouldThrow(); } catch (InterruptedException e){ assertTrue(added >= 1); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); q.take(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * timed offer times out if elements not taken */ public void testFairTimedOffer() { final SynchronousQueue q = new SynchronousQueue(true); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertFalse(q.offer(new Object(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.offer(new Object(), LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success){} } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * take blocks interruptibly when empty */ public void testFairTakeFromEmpty() { final SynchronousQueue q = new SynchronousQueue(true); Thread t = new Thread(new Runnable() { public void run() { try { q.take(); threadShouldThrow(); } catch (InterruptedException success){ } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * poll fails unless active taker */ public void testPoll() { SynchronousQueue q = new SynchronousQueue(); assertNull(q.poll()); } /** * timed pool with zero timeout times out if no active taker */ public void testTimedPoll0() { try { SynchronousQueue q = new SynchronousQueue(); assertNull(q.poll(0, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * timed pool with nonzero timeout times out if no active taker */ public void testTimedPoll() { try { SynchronousQueue q = new SynchronousQueue(); assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * Interrupted timed poll throws InterruptedException instead of * returning timeout status */ public void testInterruptedTimedPoll() { Thread t = new Thread(new Runnable() { public void run() { try { SynchronousQueue q = new SynchronousQueue(); assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * timed poll before a delayed offer fails; after offer succeeds; * on interruption throws */ public void testTimedPollWithOffer() { final SynchronousQueue q = new SynchronousQueue(); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success) { } } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); assertTrue(q.offer(zero, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * Interrupted timed poll throws InterruptedException instead of * returning timeout status */ public void testFairInterruptedTimedPoll() { Thread t = new Thread(new Runnable() { public void run() { try { SynchronousQueue q = new SynchronousQueue(true); assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * timed poll before a delayed offer fails; after offer succeeds; * on interruption throws */ public void testFairTimedPollWithOffer() { final SynchronousQueue q = new SynchronousQueue(true); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success) { } } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); assertTrue(q.offer(zero, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * peek returns null */ public void testPeek() { SynchronousQueue q = new SynchronousQueue(); assertNull(q.peek()); } /** * element throws NSEE */ public void testElement() { SynchronousQueue q = new SynchronousQueue(); try { q.element(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * remove throws NSEE if no active taker */ public void testRemove() { SynchronousQueue q = new SynchronousQueue(); try { q.remove(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * remove(x) returns false */ public void testRemoveElement() { SynchronousQueue q = new SynchronousQueue(); assertFalse(q.remove(zero)); assertTrue(q.isEmpty()); } /** * contains returns false */ public void testContains() { SynchronousQueue q = new SynchronousQueue(); assertFalse(q.contains(zero)); } /** * clear ensures isEmpty */ public void testClear() { SynchronousQueue q = new SynchronousQueue(); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll returns false unless empty */ public void testContainsAll() { SynchronousQueue q = new SynchronousQueue(); Integer[] empty = new Integer[0]; assertTrue(q.containsAll(Arrays.asList(empty))); Integer[] ints = new Integer[1]; ints[0] = zero; assertFalse(q.containsAll(Arrays.asList(ints))); } /** * retainAll returns false */ public void testRetainAll() { SynchronousQueue q = new SynchronousQueue(); Integer[] empty = new Integer[0]; assertFalse(q.retainAll(Arrays.asList(empty))); Integer[] ints = new Integer[1]; ints[0] = zero; assertFalse(q.retainAll(Arrays.asList(ints))); } /** * removeAll returns false */ public void testRemoveAll() { SynchronousQueue q = new SynchronousQueue(); Integer[] empty = new Integer[0]; assertFalse(q.removeAll(Arrays.asList(empty))); Integer[] ints = new Integer[1]; ints[0] = zero; assertFalse(q.containsAll(Arrays.asList(ints))); } /** * toArray is empty */ public void testToArray() { SynchronousQueue q = new SynchronousQueue(); Object[] o = q.toArray(); assertEquals(o.length, 0); } /** * toArray(a) is nulled at position 0 */ public void testToArray2() { SynchronousQueue q = new SynchronousQueue(); Integer[] ints = new Integer[1]; assertNull(ints[0]); } /** * toArray(null) throws NPE */ public void testToArray_BadArg() { try { SynchronousQueue q = new SynchronousQueue(); Object o[] = q.toArray(null); shouldThrow(); } catch(NullPointerException success){} } /** * iterator does not traverse any elements */ public void testIterator() { SynchronousQueue q = new SynchronousQueue(); Iterator it = q.iterator(); assertFalse(it.hasNext()); try { Object x = it.next(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * iterator remove throws ISE */ public void testIteratorRemove() { SynchronousQueue q = new SynchronousQueue(); Iterator it = q.iterator(); try { it.remove(); shouldThrow(); } catch (IllegalStateException success) {} } /** * toString returns a non-null string */ public void testToString() { SynchronousQueue q = new SynchronousQueue(); String s = q.toString(); assertNotNull(s); } /** * offer transfers elements across Executor tasks */ public void testOfferInExecutor() { final SynchronousQueue q = new SynchronousQueue(); ExecutorService executor = Executors.newFixedThreadPool(2); final Integer one = new Integer(1); executor.execute(new Runnable() { public void run() { threadAssertFalse(q.offer(one)); try { threadAssertTrue(q.offer(one, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertEquals(0, q.remainingCapacity()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); executor.execute(new Runnable() { public void run() { try { Thread.sleep(SMALL_DELAY_MS); threadAssertEquals(one, q.take()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); joinPool(executor); } /** * poll retrieves elements across Executor threads */ public void testPollInExecutor() { final SynchronousQueue q = new SynchronousQueue(); ExecutorService executor = Executors.newFixedThreadPool(2); executor.execute(new Runnable() { public void run() { threadAssertNull(q.poll()); try { threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertTrue(q.isEmpty()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); executor.execute(new Runnable() { public void run() { try { Thread.sleep(SMALL_DELAY_MS); q.put(new Integer(1)); } catch (InterruptedException e) { threadUnexpectedException(); } } }); joinPool(executor); } /** * a deserialized serialized queue is usable */ public void testSerialization() { SynchronousQueue q = new SynchronousQueue(); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); SynchronousQueue r = (SynchronousQueue)in.readObject(); assertEquals(q.size(), r.size()); while (!q.isEmpty()) assertEquals(q.remove(), r.remove()); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * drainTo(null) throws NPE */ public void testDrainToNull() { SynchronousQueue q = new SynchronousQueue(); try { q.drainTo(null); shouldThrow(); } catch(NullPointerException success) { } } /** * drainTo(this) throws IAE */ public void testDrainToSelf() { SynchronousQueue q = new SynchronousQueue(); try { q.drainTo(q); shouldThrow(); } catch(IllegalArgumentException success) { } } /** * drainTo(c) of empty queue doesn't transfer elements */ public void testDrainTo() { SynchronousQueue q = new SynchronousQueue(); ArrayList l = new ArrayList(); q.drainTo(l); assertEquals(q.size(), 0); assertEquals(l.size(), 0); } /** * drainTo empties queue, unblocking a waiting put. */ public void testDrainToWithActivePut() { final SynchronousQueue q = new SynchronousQueue(); Thread t = new Thread(new Runnable() { public void run() { try { q.put(new Integer(1)); } catch (InterruptedException ie){ threadUnexpectedException(); } } }); try { t.start(); ArrayList l = new ArrayList(); Thread.sleep(SHORT_DELAY_MS); q.drainTo(l); assertTrue(l.size() <= 1); if (l.size() > 0) assertEquals(l.get(0), new Integer(1)); t.join(); assertTrue(l.size() <= 1); } catch(Exception e){ unexpectedException(); } } /** * drainTo(null, n) throws NPE */ public void testDrainToNullN() { SynchronousQueue q = new SynchronousQueue(); try { q.drainTo(null, 0); shouldThrow(); } catch(NullPointerException success) { } } /** * drainTo(this, n) throws IAE */ public void testDrainToSelfN() { SynchronousQueue q = new SynchronousQueue(); try { q.drainTo(q, 0); shouldThrow(); } catch(IllegalArgumentException success) { } } /** * drainTo(c, n) empties up to n elements of queue into c */ public void testDrainToN() { final SynchronousQueue q = new SynchronousQueue(); Thread t1 = new Thread(new Runnable() { public void run() { try { q.put(one); } catch (InterruptedException ie){ threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable() { public void run() { try { q.put(two); } catch (InterruptedException ie){ threadUnexpectedException(); } } }); try { t1.start(); t2.start(); ArrayList l = new ArrayList(); Thread.sleep(SHORT_DELAY_MS); q.drainTo(l, 1); assertTrue(l.size() == 1); q.drainTo(l, 1); assertTrue(l.size() == 2); assertTrue(l.contains(one)); assertTrue(l.contains(two)); t1.join(); t2.join(); } catch(Exception e){ unexpectedException(); } } } backport-util-concurrent-3.1-src/test/tck/src/ThreadTest.java0000644001750700037720000000465410153210664023156 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; public class ThreadTest extends JSR166TestCase { // public static void main(String[] args) { // junit.textui.TestRunner.run(suite()); // } // // public static Test suite() { // return new TestSuite(ThreadTest.class); // } // static class MyHandler implements Thread.UncaughtExceptionHandler { // public void uncaughtException(Thread t, Throwable e) { // e.printStackTrace(); // } // } // /** // * getUncaughtExceptionHandler returns ThreadGroup unless set, // * otherwise returning value of last setUncaughtExceptionHandler. // */ // public void testGetAndSetUncaughtExceptionHandler() { // // these must be done all at once to avoid state // // dependencies across tests // Thread current = Thread.currentThread(); // ThreadGroup tg = current.getThreadGroup(); // MyHandler eh = new MyHandler(); // assertEquals(tg, current.getUncaughtExceptionHandler()); // current.setUncaughtExceptionHandler(eh); // assertEquals(eh, current.getUncaughtExceptionHandler()); // current.setUncaughtExceptionHandler(null); // assertEquals(tg, current.getUncaughtExceptionHandler()); // } // // /** // * getDefaultUncaughtExceptionHandler returns value of last // * setDefaultUncaughtExceptionHandler. // */ // public void testGetAndSetDefaultUncaughtExceptionHandler() { // assertEquals(null, Thread.getDefaultUncaughtExceptionHandler()); // // failure due to securityException is OK. // // Would be nice to explicitly test both ways, but cannot yet. // try { // Thread current = Thread.currentThread(); // ThreadGroup tg = current.getThreadGroup(); // MyHandler eh = new MyHandler(); // Thread.setDefaultUncaughtExceptionHandler(eh); // assertEquals(eh, Thread.getDefaultUncaughtExceptionHandler()); // Thread.setDefaultUncaughtExceptionHandler(null); // } // catch(SecurityException ok) { // } // assertEquals(null, Thread.getDefaultUncaughtExceptionHandler()); // } // How to test actually using UEH within junit? } backport-util-concurrent-3.1-src/test/tck/src/ConcurrentSkipListMapTest.java0000644001750700037720000011270410431777323026217 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import java.util.Random; import java.util.BitSet; import java.util.Set; import java.util.Iterator; import java.util.Map; import java.util.Collection; import java.util.ArrayList; import java.util.NoSuchElementException; public class ConcurrentSkipListMapTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ConcurrentSkipListMapTest.class); } /** * Create a map from Integers 1-5 to Strings "A"-"E". */ private static ConcurrentSkipListMap map5() { ConcurrentSkipListMap map = new ConcurrentSkipListMap(); assertTrue(map.isEmpty()); map.put(one, "A"); map.put(five, "E"); map.put(three, "C"); map.put(two, "B"); map.put(four, "D"); assertFalse(map.isEmpty()); assertEquals(5, map.size()); return map; } /** * clear removes all pairs */ public void testClear() { ConcurrentSkipListMap map = map5(); map.clear(); assertEquals(map.size(), 0); } /** * */ public void testConstructFromSorted() { ConcurrentSkipListMap map = map5(); ConcurrentSkipListMap map2 = new ConcurrentSkipListMap(map); assertEquals(map, map2); } /** * Maps with same contents are equal */ public void testEquals() { ConcurrentSkipListMap map1 = map5(); ConcurrentSkipListMap map2 = map5(); assertEquals(map1, map2); assertEquals(map2, map1); map1.clear(); assertFalse(map1.equals(map2)); assertFalse(map2.equals(map1)); } /** * containsKey returns true for contained key */ public void testContainsKey() { ConcurrentSkipListMap map = map5(); assertTrue(map.containsKey(one)); assertFalse(map.containsKey(zero)); } /** * containsValue returns true for held values */ public void testContainsValue() { ConcurrentSkipListMap map = map5(); assertTrue(map.containsValue("A")); assertFalse(map.containsValue("Z")); } /** * get returns the correct element at the given key, * or null if not present */ public void testGet() { ConcurrentSkipListMap map = map5(); assertEquals("A", (String)map.get(one)); ConcurrentSkipListMap empty = new ConcurrentSkipListMap(); assertNull(empty.get(one)); } /** * isEmpty is true of empty map and false for non-empty */ public void testIsEmpty() { ConcurrentSkipListMap empty = new ConcurrentSkipListMap(); ConcurrentSkipListMap map = map5(); assertTrue(empty.isEmpty()); assertFalse(map.isEmpty()); } /** * firstKey returns first key */ public void testFirstKey() { ConcurrentSkipListMap map = map5(); assertEquals(one, map.firstKey()); } /** * lastKey returns last key */ public void testLastKey() { ConcurrentSkipListMap map = map5(); assertEquals(five, map.lastKey()); } /** * keySet.toArray returns contains all keys */ public void testKeySetToArray() { ConcurrentSkipListMap map = map5(); Set s = map.keySet(); Object[] ar = s.toArray(); assertTrue(s.containsAll(Arrays.asList(ar))); assertEquals(5, ar.length); ar[0] = m10; assertFalse(s.containsAll(Arrays.asList(ar))); } /** * descendingkeySet.toArray returns contains all keys */ public void testDescendingKeySetToArray() { ConcurrentSkipListMap map = map5(); Set s = map.descendingKeySet(); Object[] ar = s.toArray(); assertEquals(5, ar.length); assertTrue(s.containsAll(Arrays.asList(ar))); ar[0] = m10; assertFalse(s.containsAll(Arrays.asList(ar))); } /** * keySet returns a Set containing all the keys */ public void testKeySet() { ConcurrentSkipListMap map = map5(); Set s = map.keySet(); assertEquals(5, s.size()); assertTrue(s.contains(one)); assertTrue(s.contains(two)); assertTrue(s.contains(three)); assertTrue(s.contains(four)); assertTrue(s.contains(five)); } /** * keySet is ordered */ public void testKeySetOrder() { ConcurrentSkipListMap map = map5(); Set s = map.keySet(); Iterator i = s.iterator(); Integer last = (Integer)i.next(); assertEquals(last, one); while (i.hasNext()) { Integer k = (Integer)i.next(); assertTrue(last.compareTo(k) < 0); last = k; } } /** * descendingKeySet is ordered */ public void testDescendingKeySetOrder() { ConcurrentSkipListMap map = map5(); Set s = map.descendingKeySet(); Iterator i = s.iterator(); Integer last = (Integer)i.next(); assertEquals(last, five); while (i.hasNext()) { Integer k = (Integer)i.next(); assertTrue(last.compareTo(k) > 0); last = k; } } /** * Values.toArray contains all values */ public void testValuesToArray() { ConcurrentSkipListMap map = map5(); Collection v = map.values(); Object[] ar = v.toArray(); ArrayList s = new ArrayList(Arrays.asList(ar)); assertEquals(5, ar.length); assertTrue(s.contains("A")); assertTrue(s.contains("B")); assertTrue(s.contains("C")); assertTrue(s.contains("D")); assertTrue(s.contains("E")); } /** * values collection contains all values */ public void testValues() { ConcurrentSkipListMap map = map5(); Collection s = map.values(); assertEquals(5, s.size()); assertTrue(s.contains("A")); assertTrue(s.contains("B")); assertTrue(s.contains("C")); assertTrue(s.contains("D")); assertTrue(s.contains("E")); } /** * entrySet contains all pairs */ public void testEntrySet() { ConcurrentSkipListMap map = map5(); Set s = map.entrySet(); assertEquals(5, s.size()); Iterator it = s.iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); assertTrue( (e.getKey().equals(one) && e.getValue().equals("A")) || (e.getKey().equals(two) && e.getValue().equals("B")) || (e.getKey().equals(three) && e.getValue().equals("C")) || (e.getKey().equals(four) && e.getValue().equals("D")) || (e.getKey().equals(five) && e.getValue().equals("E"))); } } /** * descendingEntrySet contains all pairs */ public void testDescendingEntrySet() { ConcurrentSkipListMap map = map5(); Set s = map.descendingMap().entrySet(); assertEquals(5, s.size()); Iterator it = s.iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); assertTrue( (e.getKey().equals(one) && e.getValue().equals("A")) || (e.getKey().equals(two) && e.getValue().equals("B")) || (e.getKey().equals(three) && e.getValue().equals("C")) || (e.getKey().equals(four) && e.getValue().equals("D")) || (e.getKey().equals(five) && e.getValue().equals("E"))); } } /** * entrySet.toArray contains all entries */ public void testEntrySetToArray() { ConcurrentSkipListMap map = map5(); Set s = map.entrySet(); Object[] ar = s.toArray(); assertEquals(5, ar.length); for (int i = 0; i < 5; ++i) { assertTrue(map.containsKey(((Map.Entry)(ar[i])).getKey())); assertTrue(map.containsValue(((Map.Entry)(ar[i])).getValue())); } } /** * descendingEntrySet.toArray contains all entries */ public void testDescendingEntrySetToArray() { ConcurrentSkipListMap map = map5(); Set s = map.descendingMap().entrySet(); Object[] ar = s.toArray(); assertEquals(5, ar.length); for (int i = 0; i < 5; ++i) { assertTrue(map.containsKey(((Map.Entry)(ar[i])).getKey())); assertTrue(map.containsValue(((Map.Entry)(ar[i])).getValue())); } } /** * putAll adds all key-value pairs from the given map */ public void testPutAll() { ConcurrentSkipListMap empty = new ConcurrentSkipListMap(); ConcurrentSkipListMap map = map5(); empty.putAll(map); assertEquals(5, empty.size()); assertTrue(empty.containsKey(one)); assertTrue(empty.containsKey(two)); assertTrue(empty.containsKey(three)); assertTrue(empty.containsKey(four)); assertTrue(empty.containsKey(five)); } /** * putIfAbsent works when the given key is not present */ public void testPutIfAbsent() { ConcurrentSkipListMap map = map5(); map.putIfAbsent(six, "Z"); assertTrue(map.containsKey(six)); } /** * putIfAbsent does not add the pair if the key is already present */ public void testPutIfAbsent2() { ConcurrentSkipListMap map = map5(); assertEquals("A", map.putIfAbsent(one, "Z")); } /** * replace fails when the given key is not present */ public void testReplace() { ConcurrentSkipListMap map = map5(); assertNull(map.replace(six, "Z")); assertFalse(map.containsKey(six)); } /** * replace succeeds if the key is already present */ public void testReplace2() { ConcurrentSkipListMap map = map5(); assertNotNull(map.replace(one, "Z")); assertEquals("Z", map.get(one)); } /** * replace value fails when the given key not mapped to expected value */ public void testReplaceValue() { ConcurrentSkipListMap map = map5(); assertEquals("A", map.get(one)); assertFalse(map.replace(one, "Z", "Z")); assertEquals("A", map.get(one)); } /** * replace value succeeds when the given key mapped to expected value */ public void testReplaceValue2() { ConcurrentSkipListMap map = map5(); assertEquals("A", map.get(one)); assertTrue(map.replace(one, "A", "Z")); assertEquals("Z", map.get(one)); } /** * remove removes the correct key-value pair from the map */ public void testRemove() { ConcurrentSkipListMap map = map5(); map.remove(five); assertEquals(4, map.size()); assertFalse(map.containsKey(five)); } /** * remove(key,value) removes only if pair present */ public void testRemove2() { ConcurrentSkipListMap map = map5(); assertTrue(map.containsKey(five)); assertEquals("E", map.get(five)); map.remove(five, "E"); assertEquals(4, map.size()); assertFalse(map.containsKey(five)); map.remove(four, "A"); assertEquals(4, map.size()); assertTrue(map.containsKey(four)); } /** * lowerEntry returns preceding entry. */ public void testLowerEntry() { ConcurrentSkipListMap map = map5(); Map.Entry e1 = map.lowerEntry(three); assertEquals(two, e1.getKey()); Map.Entry e2 = map.lowerEntry(six); assertEquals(five, e2.getKey()); Map.Entry e3 = map.lowerEntry(one); assertNull(e3); Map.Entry e4 = map.lowerEntry(zero); assertNull(e4); } /** * higherEntry returns next entry. */ public void testHigherEntry() { ConcurrentSkipListMap map = map5(); Map.Entry e1 = map.higherEntry(three); assertEquals(four, e1.getKey()); Map.Entry e2 = map.higherEntry(zero); assertEquals(one, e2.getKey()); Map.Entry e3 = map.higherEntry(five); assertNull(e3); Map.Entry e4 = map.higherEntry(six); assertNull(e4); } /** * floorEntry returns preceding entry. */ public void testFloorEntry() { ConcurrentSkipListMap map = map5(); Map.Entry e1 = map.floorEntry(three); assertEquals(three, e1.getKey()); Map.Entry e2 = map.floorEntry(six); assertEquals(five, e2.getKey()); Map.Entry e3 = map.floorEntry(one); assertEquals(one, e3.getKey()); Map.Entry e4 = map.floorEntry(zero); assertNull(e4); } /** * ceilingEntry returns next entry. */ public void testCeilingEntry() { ConcurrentSkipListMap map = map5(); Map.Entry e1 = map.ceilingEntry(three); assertEquals(three, e1.getKey()); Map.Entry e2 = map.ceilingEntry(zero); assertEquals(one, e2.getKey()); Map.Entry e3 = map.ceilingEntry(five); assertEquals(five, e3.getKey()); Map.Entry e4 = map.ceilingEntry(six); assertNull(e4); } /** * lowerEntry, higherEntry, ceilingEntry, and floorEntry return * imutable entries */ public void testEntryImmutablity() { ConcurrentSkipListMap map = map5(); Map.Entry e = map.lowerEntry(three); assertEquals(two, e.getKey()); try { e.setValue("X"); fail(); } catch(UnsupportedOperationException success) {} e = map.higherEntry(zero); assertEquals(one, e.getKey()); try { e.setValue("X"); fail(); } catch(UnsupportedOperationException success) {} e = map.floorEntry(one); assertEquals(one, e.getKey()); try { e.setValue("X"); fail(); } catch(UnsupportedOperationException success) {} e = map.ceilingEntry(five); assertEquals(five, e.getKey()); try { e.setValue("X"); fail(); } catch(UnsupportedOperationException success) {} } /** * lowerKey returns preceding element */ public void testLowerKey() { ConcurrentSkipListMap q = map5(); Object e1 = q.lowerKey(three); assertEquals(two, e1); Object e2 = q.lowerKey(six); assertEquals(five, e2); Object e3 = q.lowerKey(one); assertNull(e3); Object e4 = q.lowerKey(zero); assertNull(e4); } /** * higherKey returns next element */ public void testHigherKey() { ConcurrentSkipListMap q = map5(); Object e1 = q.higherKey(three); assertEquals(four, e1); Object e2 = q.higherKey(zero); assertEquals(one, e2); Object e3 = q.higherKey(five); assertNull(e3); Object e4 = q.higherKey(six); assertNull(e4); } /** * floorKey returns preceding element */ public void testFloorKey() { ConcurrentSkipListMap q = map5(); Object e1 = q.floorKey(three); assertEquals(three, e1); Object e2 = q.floorKey(six); assertEquals(five, e2); Object e3 = q.floorKey(one); assertEquals(one, e3); Object e4 = q.floorKey(zero); assertNull(e4); } /** * ceilingKey returns next element */ public void testCeilingKey() { ConcurrentSkipListMap q = map5(); Object e1 = q.ceilingKey(three); assertEquals(three, e1); Object e2 = q.ceilingKey(zero); assertEquals(one, e2); Object e3 = q.ceilingKey(five); assertEquals(five, e3); Object e4 = q.ceilingKey(six); assertNull(e4); } /** * pollFirstEntry returns entries in order */ public void testPollFirstEntry() { ConcurrentSkipListMap map = map5(); Map.Entry e = map.pollFirstEntry(); assertEquals(one, e.getKey()); assertEquals("A", e.getValue()); e = map.pollFirstEntry(); assertEquals(two, e.getKey()); map.put(one, "A"); e = map.pollFirstEntry(); assertEquals(one, e.getKey()); assertEquals("A", e.getValue()); e = map.pollFirstEntry(); assertEquals(three, e.getKey()); map.remove(four); e = map.pollFirstEntry(); assertEquals(five, e.getKey()); try { e.setValue("A"); shouldThrow(); } catch (Exception ok) { } e = map.pollFirstEntry(); assertNull(e); } /** * pollLastEntry returns entries in order */ public void testPollLastEntry() { ConcurrentSkipListMap map = map5(); Map.Entry e = map.pollLastEntry(); assertEquals(five, e.getKey()); assertEquals("E", e.getValue()); e = map.pollLastEntry(); assertEquals(four, e.getKey()); map.put(five, "E"); e = map.pollLastEntry(); assertEquals(five, e.getKey()); assertEquals("E", e.getValue()); e = map.pollLastEntry(); assertEquals(three, e.getKey()); map.remove(two); e = map.pollLastEntry(); assertEquals(one, e.getKey()); try { e.setValue("E"); shouldThrow(); } catch (Exception ok) { } e = map.pollLastEntry(); assertNull(e); } /** * size returns the correct values */ public void testSize() { ConcurrentSkipListMap map = map5(); ConcurrentSkipListMap empty = new ConcurrentSkipListMap(); assertEquals(0, empty.size()); assertEquals(5, map.size()); } /** * toString contains toString of elements */ public void testToString() { ConcurrentSkipListMap map = map5(); String s = map.toString(); for (int i = 1; i <= 5; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } // Exception tests /** * get(null) of nonempty map throws NPE */ public void testGet_NullPointerException() { try { ConcurrentSkipListMap c = map5(); c.get(null); shouldThrow(); } catch(NullPointerException e){} } /** * containsKey(null) of nonempty map throws NPE */ public void testContainsKey_NullPointerException() { try { ConcurrentSkipListMap c = map5(); c.containsKey(null); shouldThrow(); } catch(NullPointerException e){} } /** * containsValue(null) throws NPE */ public void testContainsValue_NullPointerException() { try { ConcurrentSkipListMap c = new ConcurrentSkipListMap(); c.containsValue(null); shouldThrow(); } catch(NullPointerException e){} } /** * put(null,x) throws NPE */ public void testPut1_NullPointerException() { try { ConcurrentSkipListMap c = map5(); c.put(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * putIfAbsent(null, x) throws NPE */ public void testPutIfAbsent1_NullPointerException() { try { ConcurrentSkipListMap c = map5(); c.putIfAbsent(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * replace(null, x) throws NPE */ public void testReplace_NullPointerException() { try { ConcurrentSkipListMap c = map5(); c.replace(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * replace(null, x, y) throws NPE */ public void testReplaceValue_NullPointerException() { try { ConcurrentSkipListMap c = map5(); c.replace(null, one, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * remove(null) throws NPE */ public void testRemove1_NullPointerException() { try { ConcurrentSkipListMap c = new ConcurrentSkipListMap(); c.put("sadsdf", "asdads"); c.remove(null); shouldThrow(); } catch(NullPointerException e){} } /** * remove(null, x) throws NPE */ public void testRemove2_NullPointerException() { try { ConcurrentSkipListMap c = new ConcurrentSkipListMap(); c.put("sadsdf", "asdads"); c.remove(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * remove(x, null) returns false */ public void testRemove3() { try { ConcurrentSkipListMap c = new ConcurrentSkipListMap(); c.put("sadsdf", "asdads"); assertFalse(c.remove("sadsdf", null)); } catch(NullPointerException e){ fail(); } } /** * A deserialized map equals original */ public void testSerialization() { ConcurrentSkipListMap q = map5(); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); ConcurrentSkipListMap r = (ConcurrentSkipListMap)in.readObject(); assertEquals(q.size(), r.size()); assertTrue(q.equals(r)); assertTrue(r.equals(q)); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * subMap returns map with keys in requested range */ public void testSubMapContents() { ConcurrentSkipListMap map = map5(); NavigableMap sm = map.subMap(two, true, four, false); assertEquals(two, sm.firstKey()); assertEquals(three, sm.lastKey()); assertEquals(2, sm.size()); assertFalse(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertTrue(sm.containsKey(three)); assertFalse(sm.containsKey(four)); assertFalse(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); Iterator r = sm.descendingKeySet().iterator(); k = (Integer)(r.next()); assertEquals(three, k); k = (Integer)(r.next()); assertEquals(two, k); assertFalse(r.hasNext()); Iterator j = sm.keySet().iterator(); j.next(); j.remove(); assertFalse(map.containsKey(two)); assertEquals(4, map.size()); assertEquals(1, sm.size()); assertEquals(three, sm.firstKey()); assertEquals(three, sm.lastKey()); assertTrue(sm.remove(three) != null); assertTrue(sm.isEmpty()); assertEquals(3, map.size()); } public void testSubMapContents2() { ConcurrentSkipListMap map = map5(); NavigableMap sm = map.subMap(two, true, three, false); assertEquals(1, sm.size()); assertEquals(two, sm.firstKey()); assertEquals(two, sm.lastKey()); assertFalse(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertFalse(sm.containsKey(three)); assertFalse(sm.containsKey(four)); assertFalse(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); assertFalse(i.hasNext()); Iterator r = sm.descendingKeySet().iterator(); k = (Integer)(r.next()); assertEquals(two, k); assertFalse(r.hasNext()); Iterator j = sm.keySet().iterator(); j.next(); j.remove(); assertFalse(map.containsKey(two)); assertEquals(4, map.size()); assertEquals(0, sm.size()); assertTrue(sm.isEmpty()); assertTrue(sm.remove(three) == null); assertEquals(4, map.size()); } /** * headMap returns map with keys in requested range */ public void testHeadMapContents() { ConcurrentSkipListMap map = map5(); NavigableMap sm = map.headMap(four, false); assertTrue(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertTrue(sm.containsKey(three)); assertFalse(sm.containsKey(four)); assertFalse(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(one, k); k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); sm.clear(); assertTrue(sm.isEmpty()); assertEquals(2, map.size()); assertEquals(four, map.firstKey()); } /** * tailMap returns map with keys in requested range */ public void testTailMapContents() { ConcurrentSkipListMap map = map5(); NavigableMap sm = map.tailMap(two, true); assertFalse(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertTrue(sm.containsKey(three)); assertTrue(sm.containsKey(four)); assertTrue(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); k = (Integer)(i.next()); assertEquals(four, k); k = (Integer)(i.next()); assertEquals(five, k); assertFalse(i.hasNext()); Iterator r = sm.descendingKeySet().iterator(); k = (Integer)(r.next()); assertEquals(five, k); k = (Integer)(r.next()); assertEquals(four, k); k = (Integer)(r.next()); assertEquals(three, k); k = (Integer)(r.next()); assertEquals(two, k); assertFalse(r.hasNext()); Iterator ei = sm.entrySet().iterator(); Map.Entry e; e = (Map.Entry)(ei.next()); assertEquals(two, e.getKey()); assertEquals("B", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(three, e.getKey()); assertEquals("C", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(four, e.getKey()); assertEquals("D", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(five, e.getKey()); assertEquals("E", e.getValue()); assertFalse(i.hasNext()); NavigableMap ssm = sm.tailMap(four, true); assertEquals(four, ssm.firstKey()); assertEquals(five, ssm.lastKey()); assertTrue(ssm.remove(four) != null); assertEquals(1, ssm.size()); assertEquals(3, sm.size()); assertEquals(4, map.size()); } Random rnd = new Random(666); BitSet bs; /** * Submaps of submaps subdivide correctly */ public void testRecursiveSubMaps() { int mapSize = 1000; Class cl = ConcurrentSkipListMap.class; NavigableMap map = newMap(cl); bs = new BitSet(mapSize); populate(map, mapSize); check(map, 0, mapSize - 1, true); check(map.descendingMap(), 0, mapSize - 1, false); mutateMap(map, 0, mapSize - 1); check(map, 0, mapSize - 1, true); check(map.descendingMap(), 0, mapSize - 1, false); bashSubMap(map.subMap(new Integer(0), true, new Integer(mapSize), false), 0, mapSize - 1, true); } static NavigableMap newMap(Class cl) { NavigableMap result = null; try { result = (NavigableMap) cl.newInstance(); } catch(Exception e) { fail(); } assertEquals(result.size(), 0); assertFalse(result.keySet().iterator().hasNext()); return result; } void populate(NavigableMap map, int limit) { for (int i = 0, n = 2 * limit / 3; i < n; i++) { int key = rnd.nextInt(limit); put(map, key); } } void mutateMap(NavigableMap map, int min, int max) { int size = map.size(); int rangeSize = max - min + 1; // Remove a bunch of entries directly for (int i = 0, n = rangeSize / 2; i < n; i++) { remove(map, min - 5 + rnd.nextInt(rangeSize + 10)); } // Remove a bunch of entries with iterator for(Iterator it = map.keySet().iterator(); it.hasNext(); ) { if (rnd.nextBoolean()) { bs.clear(((Integer)it.next()).intValue()); it.remove(); } } // Add entries till we're back to original size while (map.size() < size) { int key = min + rnd.nextInt(rangeSize); assertTrue(key >= min && key<= max); put(map, key); } } void mutateSubMap(NavigableMap map, int min, int max) { int size = map.size(); int rangeSize = max - min + 1; // Remove a bunch of entries directly for (int i = 0, n = rangeSize / 2; i < n; i++) { remove(map, min - 5 + rnd.nextInt(rangeSize + 10)); } // Remove a bunch of entries with iterator for(Iterator it = map.keySet().iterator(); it.hasNext(); ) { if (rnd.nextBoolean()) { bs.clear(((Integer)it.next()).intValue()); it.remove(); } } // Add entries till we're back to original size while (map.size() < size) { int key = min - 5 + rnd.nextInt(rangeSize + 10); if (key >= min && key<= max) { put(map, key); } else { try { map.put(new Integer(key), new Integer(2 * key)); fail(); } catch(IllegalArgumentException e) { // expected } } } } void put(NavigableMap map, int key) { if (map.put(new Integer(key), new Integer(2 * key)) == null) bs.set(key); } void remove(NavigableMap map, int key) { if (map.remove(new Integer(key)) != null) bs.clear(key); } void bashSubMap(NavigableMap map, int min, int max, boolean ascending) { check(map, min, max, ascending); check(map.descendingMap(), min, max, !ascending); mutateSubMap(map, min, max); check(map, min, max, ascending); check(map.descendingMap(), min, max, !ascending); // Recurse if (max - min < 2) return; int midPoint = (min + max) / 2; // headMap - pick direction and endpoint inclusion randomly boolean incl = rnd.nextBoolean(); NavigableMap hm = map.headMap(new Integer(midPoint), incl); if (ascending) { if (rnd.nextBoolean()) bashSubMap(hm, min, midPoint - (incl ? 0 : 1), true); else bashSubMap(hm.descendingMap(), min, midPoint - (incl ? 0 : 1), false); } else { if (rnd.nextBoolean()) bashSubMap(hm, midPoint + (incl ? 0 : 1), max, false); else bashSubMap(hm.descendingMap(), midPoint + (incl ? 0 : 1), max, true); } // tailMap - pick direction and endpoint inclusion randomly incl = rnd.nextBoolean(); NavigableMap tm = map.tailMap(new Integer(midPoint),incl); if (ascending) { if (rnd.nextBoolean()) bashSubMap(tm, midPoint + (incl ? 0 : 1), max, true); else bashSubMap(tm.descendingMap(), midPoint + (incl ? 0 : 1), max, false); } else { if (rnd.nextBoolean()) { bashSubMap(tm, min, midPoint - (incl ? 0 : 1), false); } else { bashSubMap(tm.descendingMap(), min, midPoint - (incl ? 0 : 1), true); } } // subMap - pick direction and endpoint inclusion randomly int rangeSize = max - min + 1; int[] endpoints = new int[2]; endpoints[0] = min + rnd.nextInt(rangeSize); endpoints[1] = min + rnd.nextInt(rangeSize); Arrays.sort(endpoints); boolean lowIncl = rnd.nextBoolean(); boolean highIncl = rnd.nextBoolean(); if (ascending) { NavigableMap sm = map.subMap( new Integer(endpoints[0]), lowIncl, new Integer(endpoints[1]), highIncl); if (rnd.nextBoolean()) bashSubMap(sm, endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), true); else bashSubMap(sm.descendingMap(), endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), false); } else { NavigableMap sm = map.subMap( new Integer(endpoints[1]), highIncl, new Integer(endpoints[0]), lowIncl); if (rnd.nextBoolean()) bashSubMap(sm, endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), false); else bashSubMap(sm.descendingMap(), endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), true); } } /** * min and max are both inclusive. If max < min, interval is empty. */ void check(NavigableMap map, final int min, final int max, final boolean ascending) { class ReferenceSet { int lower(int key) { return ascending ? lowerAscending(key) : higherAscending(key); } int floor(int key) { return ascending ? floorAscending(key) : ceilingAscending(key); } int ceiling(int key) { return ascending ? ceilingAscending(key) : floorAscending(key); } int higher(int key) { return ascending ? higherAscending(key) : lowerAscending(key); } int first() { return ascending ? firstAscending() : lastAscending(); } int last() { return ascending ? lastAscending() : firstAscending(); } int lowerAscending(int key) { return floorAscending(key - 1); } int floorAscending(int key) { if (key < min) return -1; else if (key > max) key = max; // BitSet should support this! Test would run much faster while (key >= min) { if (bs.get(key)) return(key); key--; } return -1; } int ceilingAscending(int key) { if (key < min) key = min; else if (key > max) return -1; int result = bs.nextSetBit(key); return result > max ? -1 : result; } int higherAscending(int key) { return ceilingAscending(key + 1); } private int firstAscending() { int result = ceilingAscending(min); return result > max ? -1 : result; } private int lastAscending() { int result = floorAscending(max); return result < min ? -1 : result; } } ReferenceSet rs = new ReferenceSet(); // Test contents using containsKey int size = 0; for (int i = min; i <= max; i++) { boolean bsContainsI = bs.get(i); assertEquals(bsContainsI, map.containsKey(new Integer(i))); if (bsContainsI) size++; } assertEquals(map.size(), size); // Test contents using contains keySet iterator int size2 = 0; int previousKey = -1; for (Iterator itr = map.keySet().iterator(); itr.hasNext();) { int key = ((Integer)itr.next()).intValue(); assertTrue(bs.get(key)); size2++; assertTrue(previousKey < 0 || (ascending ? key - previousKey > 0 : key - previousKey < 0)); previousKey = key; } assertEquals(size2, size); // Test navigation ops for (int key = min - 1; key <= max + 1; key++) { assertEq((Integer)map.lowerKey(new Integer(key)), rs.lower(key)); assertEq((Integer)map.floorKey(new Integer(key)), rs.floor(key)); assertEq((Integer)map.higherKey(new Integer(key)), rs.higher(key)); assertEq((Integer)map.ceilingKey(new Integer(key)), rs.ceiling(key)); } // Test extrema if (map.size() != 0) { assertEq((Integer)map.firstKey(), rs.first()); assertEq((Integer)map.lastKey(), rs.last()); } else { assertEq(new Integer(rs.first()), -1); assertEq(new Integer(rs.last()), -1); try { map.firstKey(); fail(); } catch(NoSuchElementException e) { // expected } try { map.lastKey(); fail(); } catch(NoSuchElementException e) { // expected } } } static void assertEq(Integer i, int j) { if (i == null) assertEquals(j, -1); else assertEquals(i.intValue(), j); } static boolean eq(Integer i, int j) { return i == null ? j == -1 : i.intValue() == j; } } backport-util-concurrent-3.1-src/test/tck/src/TreeSubMapTest.java0000644001750700037720000010002110431777323023750 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.SortedMap; import java.util.ArrayList; public class TreeSubMapTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(TreeSubMapTest.class); } /** * Create a map from Integers 1-5 to Strings "A"-"E". */ private static NavigableMap map5() { TreeMap map = new TreeMap(); assertTrue(map.isEmpty()); map.put(zero, "Z"); map.put(one, "A"); map.put(five, "E"); map.put(three, "C"); map.put(two, "B"); map.put(four, "D"); map.put(seven, "F"); assertFalse(map.isEmpty()); assertEquals(7, map.size()); return map.subMap(one, true, seven, false); } private static NavigableMap map0() { TreeMap map = new TreeMap(); assertTrue(map.isEmpty()); return map.tailMap(one, true); } /** * Create a map from Integers -5 to -1 to Strings "A"-"E". */ private static NavigableMap dmap5() { TreeMap map = new TreeMap(); assertTrue(map.isEmpty()); map.put(m1, "A"); map.put(m5, "E"); map.put(m3, "C"); map.put(m2, "B"); map.put(m4, "D"); assertFalse(map.isEmpty()); assertEquals(5, map.size()); return map.descendingMap(); } private static NavigableMap dmap0() { TreeMap map = new TreeMap(); assertTrue(map.isEmpty()); return map; } /** * clear removes all pairs */ public void testClear() { NavigableMap map = map5(); map.clear(); assertEquals(map.size(), 0); } /** * Maps with same contents are equal */ public void testEquals() { NavigableMap map1 = map5(); NavigableMap map2 = map5(); assertEquals(map1, map2); assertEquals(map2, map1); map1.clear(); assertFalse(map1.equals(map2)); assertFalse(map2.equals(map1)); } /** * containsKey returns true for contained key */ public void testContainsKey() { NavigableMap map = map5(); assertTrue(map.containsKey(one)); assertFalse(map.containsKey(zero)); } /** * containsValue returns true for held values */ public void testContainsValue() { NavigableMap map = map5(); assertTrue(map.containsValue("A")); assertFalse(map.containsValue("Z")); } /** * get returns the correct element at the given key, * or null if not present */ public void testGet() { NavigableMap map = map5(); assertEquals("A", (String)map.get(one)); NavigableMap empty = map0(); assertNull(empty.get(one)); } /** * isEmpty is true of empty map and false for non-empty */ public void testIsEmpty() { NavigableMap empty = map0(); NavigableMap map = map5(); assertTrue(empty.isEmpty()); assertFalse(map.isEmpty()); } /** * firstKey returns first key */ public void testFirstKey() { NavigableMap map = map5(); assertEquals(one, map.firstKey()); } /** * lastKey returns last key */ public void testLastKey() { NavigableMap map = map5(); assertEquals(five, map.lastKey()); } /** * keySet returns a Set containing all the keys */ public void testKeySet() { NavigableMap map = map5(); Set s = map.keySet(); assertEquals(5, s.size()); assertTrue(s.contains(one)); assertTrue(s.contains(two)); assertTrue(s.contains(three)); assertTrue(s.contains(four)); assertTrue(s.contains(five)); } /** * keySet is ordered */ public void testKeySetOrder() { NavigableMap map = map5(); Set s = map.keySet(); Iterator i = s.iterator(); Integer last = (Integer)i.next(); assertEquals(last, one); while (i.hasNext()) { Integer k = (Integer)i.next(); assertTrue(last.compareTo(k) < 0); last = k; } } /** * values collection contains all values */ public void testValues() { NavigableMap map = map5(); Collection s = map.values(); assertEquals(5, s.size()); assertTrue(s.contains("A")); assertTrue(s.contains("B")); assertTrue(s.contains("C")); assertTrue(s.contains("D")); assertTrue(s.contains("E")); } /** * entrySet contains all pairs */ public void testEntrySet() { NavigableMap map = map5(); Set s = map.entrySet(); assertEquals(5, s.size()); Iterator it = s.iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); assertTrue( (e.getKey().equals(one) && e.getValue().equals("A")) || (e.getKey().equals(two) && e.getValue().equals("B")) || (e.getKey().equals(three) && e.getValue().equals("C")) || (e.getKey().equals(four) && e.getValue().equals("D")) || (e.getKey().equals(five) && e.getValue().equals("E"))); } } /** * putAll adds all key-value pairs from the given map */ public void testPutAll() { NavigableMap empty = map0(); NavigableMap map = map5(); empty.putAll(map); assertEquals(5, empty.size()); assertTrue(empty.containsKey(one)); assertTrue(empty.containsKey(two)); assertTrue(empty.containsKey(three)); assertTrue(empty.containsKey(four)); assertTrue(empty.containsKey(five)); } /** * remove removes the correct key-value pair from the map */ public void testRemove() { NavigableMap map = map5(); map.remove(five); assertEquals(4, map.size()); assertFalse(map.containsKey(five)); } /** * lowerEntry returns preceding entry. */ public void testLowerEntry() { NavigableMap map = map5(); Map.Entry e1 = map.lowerEntry(three); assertEquals(two, e1.getKey()); Map.Entry e2 = map.lowerEntry(six); assertEquals(five, e2.getKey()); Map.Entry e3 = map.lowerEntry(one); assertNull(e3); Map.Entry e4 = map.lowerEntry(zero); assertNull(e4); } /** * higherEntry returns next entry. */ public void testHigherEntry() { NavigableMap map = map5(); Map.Entry e1 = map.higherEntry(three); assertEquals(four, e1.getKey()); Map.Entry e2 = map.higherEntry(zero); assertEquals(one, e2.getKey()); Map.Entry e3 = map.higherEntry(five); assertNull(e3); Map.Entry e4 = map.higherEntry(six); assertNull(e4); } /** * floorEntry returns preceding entry. */ public void testFloorEntry() { NavigableMap map = map5(); Map.Entry e1 = map.floorEntry(three); assertEquals(three, e1.getKey()); Map.Entry e2 = map.floorEntry(six); assertEquals(five, e2.getKey()); Map.Entry e3 = map.floorEntry(one); assertEquals(one, e3.getKey()); Map.Entry e4 = map.floorEntry(zero); assertNull(e4); } /** * ceilingEntry returns next entry. */ public void testCeilingEntry() { NavigableMap map = map5(); Map.Entry e1 = map.ceilingEntry(three); assertEquals(three, e1.getKey()); Map.Entry e2 = map.ceilingEntry(zero); assertEquals(one, e2.getKey()); Map.Entry e3 = map.ceilingEntry(five); assertEquals(five, e3.getKey()); Map.Entry e4 = map.ceilingEntry(six); assertNull(e4); } /** * pollFirstEntry returns entries in order */ public void testPollFirstEntry() { NavigableMap map = map5(); Map.Entry e = map.pollFirstEntry(); assertEquals(one, e.getKey()); assertEquals("A", e.getValue()); e = map.pollFirstEntry(); assertEquals(two, e.getKey()); map.put(one, "A"); e = map.pollFirstEntry(); assertEquals(one, e.getKey()); assertEquals("A", e.getValue()); e = map.pollFirstEntry(); assertEquals(three, e.getKey()); map.remove(four); e = map.pollFirstEntry(); assertEquals(five, e.getKey()); try { e.setValue("A"); shouldThrow(); } catch (Exception ok) { } assertTrue(map.isEmpty()); Map.Entry f = map.firstEntry(); assertNull(f); e = map.pollFirstEntry(); assertNull(e); } /** * pollLastEntry returns entries in order */ public void testPollLastEntry() { NavigableMap map = map5(); Map.Entry e = map.pollLastEntry(); assertEquals(five, e.getKey()); assertEquals("E", e.getValue()); e = map.pollLastEntry(); assertEquals(four, e.getKey()); map.put(five, "E"); e = map.pollLastEntry(); assertEquals(five, e.getKey()); assertEquals("E", e.getValue()); e = map.pollLastEntry(); assertEquals(three, e.getKey()); map.remove(two); e = map.pollLastEntry(); assertEquals(one, e.getKey()); try { e.setValue("E"); shouldThrow(); } catch (Exception ok) { } e = map.pollLastEntry(); assertNull(e); } /** * size returns the correct values */ public void testSize() { NavigableMap map = map5(); NavigableMap empty = map0(); assertEquals(0, empty.size()); assertEquals(5, map.size()); } /** * toString contains toString of elements */ public void testToString() { NavigableMap map = map5(); String s = map.toString(); for (int i = 1; i <= 5; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } // Exception tests /** * get(null) of nonempty map throws NPE */ public void testGet_NullPointerException() { try { NavigableMap c = map5(); c.get(null); shouldThrow(); } catch(NullPointerException e){} } /** * containsKey(null) of nonempty map throws NPE */ public void testContainsKey_NullPointerException() { try { NavigableMap c = map5(); c.containsKey(null); shouldThrow(); } catch(NullPointerException e){} } /** * put(null,x) throws NPE */ public void testPut1_NullPointerException() { try { NavigableMap c = map5(); c.put(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * remove(null) throws NPE */ public void testRemove1_NullPointerException() { try { NavigableMap c = map5(); c.remove(null); shouldThrow(); } catch(NullPointerException e){} } /** * A deserialized map equals original */ public void testSerialization() { NavigableMap q = map5(); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); NavigableMap r = (NavigableMap)in.readObject(); assertFalse(r.isEmpty()); assertEquals(q.size(), r.size()); assertTrue(q.equals(r)); assertTrue(r.equals(q)); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * subMap returns map with keys in requested range */ public void testSubMapContents() { NavigableMap map = map5(); SortedMap sm = map.subMap(two, four); assertEquals(two, sm.firstKey()); assertEquals(three, sm.lastKey()); assertEquals(2, sm.size()); assertFalse(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertTrue(sm.containsKey(three)); assertFalse(sm.containsKey(four)); assertFalse(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); Iterator j = sm.keySet().iterator(); j.next(); j.remove(); assertFalse(map.containsKey(two)); assertEquals(4, map.size()); assertEquals(1, sm.size()); assertEquals(three, sm.firstKey()); assertEquals(three, sm.lastKey()); assertTrue(sm.remove(three) != null); assertTrue(sm.isEmpty()); assertEquals(3, map.size()); } public void testSubMapContents2() { NavigableMap map = map5(); SortedMap sm = map.subMap(two, three); assertEquals(1, sm.size()); assertEquals(two, sm.firstKey()); assertEquals(two, sm.lastKey()); assertFalse(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertFalse(sm.containsKey(three)); assertFalse(sm.containsKey(four)); assertFalse(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); assertFalse(i.hasNext()); Iterator j = sm.keySet().iterator(); j.next(); j.remove(); assertFalse(map.containsKey(two)); assertEquals(4, map.size()); assertEquals(0, sm.size()); assertTrue(sm.isEmpty()); assertTrue(sm.remove(three) == null); assertEquals(4, map.size()); } /** * headMap returns map with keys in requested range */ public void testHeadMapContents() { NavigableMap map = map5(); SortedMap sm = map.headMap(four); assertTrue(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertTrue(sm.containsKey(three)); assertFalse(sm.containsKey(four)); assertFalse(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(one, k); k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); sm.clear(); assertTrue(sm.isEmpty()); assertEquals(2, map.size()); assertEquals(four, map.firstKey()); } /** * headMap returns map with keys in requested range */ public void testTailMapContents() { NavigableMap map = map5(); SortedMap sm = map.tailMap(two); assertFalse(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertTrue(sm.containsKey(three)); assertTrue(sm.containsKey(four)); assertTrue(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); k = (Integer)(i.next()); assertEquals(four, k); k = (Integer)(i.next()); assertEquals(five, k); assertFalse(i.hasNext()); Iterator ei = sm.entrySet().iterator(); Map.Entry e; e = (Map.Entry)(ei.next()); assertEquals(two, e.getKey()); assertEquals("B", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(three, e.getKey()); assertEquals("C", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(four, e.getKey()); assertEquals("D", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(five, e.getKey()); assertEquals("E", e.getValue()); assertFalse(i.hasNext()); SortedMap ssm = sm.tailMap(four); assertEquals(four, ssm.firstKey()); assertEquals(five, ssm.lastKey()); assertTrue(ssm.remove(four) != null); assertEquals(1, ssm.size()); assertEquals(3, sm.size()); assertEquals(4, map.size()); } /** * clear removes all pairs */ public void testDescendingClear() { NavigableMap map = dmap5(); map.clear(); assertEquals(map.size(), 0); } /** * Maps with same contents are equal */ public void testDescendingEquals() { NavigableMap map1 = dmap5(); NavigableMap map2 = dmap5(); assertEquals(map1, map2); assertEquals(map2, map1); map1.clear(); assertFalse(map1.equals(map2)); assertFalse(map2.equals(map1)); } /** * containsKey returns true for contained key */ public void testDescendingContainsKey() { NavigableMap map = dmap5(); assertTrue(map.containsKey(m1)); assertFalse(map.containsKey(zero)); } /** * containsValue returns true for held values */ public void testDescendingContainsValue() { NavigableMap map = dmap5(); assertTrue(map.containsValue("A")); assertFalse(map.containsValue("Z")); } /** * get returns the correct element at the given key, * or null if not present */ public void testDescendingGet() { NavigableMap map = dmap5(); assertEquals("A", (String)map.get(m1)); NavigableMap empty = dmap0(); assertNull(empty.get(m1)); } /** * isEmpty is true of empty map and false for non-empty */ public void testDescendingIsEmpty() { NavigableMap empty = dmap0(); NavigableMap map = dmap5(); assertTrue(empty.isEmpty()); assertFalse(map.isEmpty()); } /** * firstKey returns first key */ public void testDescendingFirstKey() { NavigableMap map = dmap5(); assertEquals(m1, map.firstKey()); } /** * lastKey returns last key */ public void testDescendingLastKey() { NavigableMap map = dmap5(); assertEquals(m5, map.lastKey()); } /** * keySet returns a Set containing all the keys */ public void testDescendingKeySet() { NavigableMap map = dmap5(); Set s = map.keySet(); assertEquals(5, s.size()); assertTrue(s.contains(m1)); assertTrue(s.contains(m2)); assertTrue(s.contains(m3)); assertTrue(s.contains(m4)); assertTrue(s.contains(m5)); } /** * keySet is ordered */ public void testDescendingKeySetOrder() { NavigableMap map = dmap5(); Set s = map.keySet(); Iterator i = s.iterator(); Integer last = (Integer)i.next(); assertEquals(last, m1); while (i.hasNext()) { Integer k = (Integer)i.next(); assertTrue(last.compareTo(k) > 0); last = k; } } /** * values collection contains all values */ public void testDescendingValues() { NavigableMap map = dmap5(); Collection s = map.values(); assertEquals(5, s.size()); assertTrue(s.contains("A")); assertTrue(s.contains("B")); assertTrue(s.contains("C")); assertTrue(s.contains("D")); assertTrue(s.contains("E")); } /** * keySet.toArray returns contains all keys */ public void testDescendingAscendingKeySetToArray() { NavigableMap map = dmap5(); Set s = map.keySet(); Object[] ar = s.toArray(); assertTrue(s.containsAll(Arrays.asList(ar))); assertEquals(5, ar.length); ar[0] = m10; assertFalse(s.containsAll(Arrays.asList(ar))); } /** * descendingkeySet.toArray returns contains all keys */ public void testDescendingDescendingKeySetToArray() { NavigableMap map = dmap5(); Set s = map.descendingKeySet(); Object[] ar = s.toArray(); assertEquals(5, ar.length); assertTrue(s.containsAll(Arrays.asList(ar))); ar[0] = m10; assertFalse(s.containsAll(Arrays.asList(ar))); } /** * Values.toArray contains all values */ public void testDescendingValuesToArray() { NavigableMap map = dmap5(); Collection v = map.values(); Object[] ar = v.toArray(); ArrayList s = new ArrayList(Arrays.asList(ar)); assertEquals(5, ar.length); assertTrue(s.contains("A")); assertTrue(s.contains("B")); assertTrue(s.contains("C")); assertTrue(s.contains("D")); assertTrue(s.contains("E")); } /** * entrySet contains all pairs */ public void testDescendingEntrySet() { NavigableMap map = dmap5(); Set s = map.entrySet(); assertEquals(5, s.size()); Iterator it = s.iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); assertTrue( (e.getKey().equals(m1) && e.getValue().equals("A")) || (e.getKey().equals(m2) && e.getValue().equals("B")) || (e.getKey().equals(m3) && e.getValue().equals("C")) || (e.getKey().equals(m4) && e.getValue().equals("D")) || (e.getKey().equals(m5) && e.getValue().equals("E"))); } } /** * putAll adds all key-value pairs from the given map */ public void testDescendingPutAll() { NavigableMap empty = dmap0(); NavigableMap map = dmap5(); empty.putAll(map); assertEquals(5, empty.size()); assertTrue(empty.containsKey(m1)); assertTrue(empty.containsKey(m2)); assertTrue(empty.containsKey(m3)); assertTrue(empty.containsKey(m4)); assertTrue(empty.containsKey(m5)); } /** * remove removes the correct key-value pair from the map */ public void testDescendingRemove() { NavigableMap map = dmap5(); map.remove(m5); assertEquals(4, map.size()); assertFalse(map.containsKey(m5)); } /** * lowerEntry returns preceding entry. */ public void testDescendingLowerEntry() { NavigableMap map = dmap5(); Map.Entry e1 = map.lowerEntry(m3); assertEquals(m2, e1.getKey()); Map.Entry e2 = map.lowerEntry(m6); assertEquals(m5, e2.getKey()); Map.Entry e3 = map.lowerEntry(m1); assertNull(e3); Map.Entry e4 = map.lowerEntry(zero); assertNull(e4); } /** * higherEntry returns next entry. */ public void testDescendingHigherEntry() { NavigableMap map = dmap5(); Map.Entry e1 = map.higherEntry(m3); assertEquals(m4, e1.getKey()); Map.Entry e2 = map.higherEntry(zero); assertEquals(m1, e2.getKey()); Map.Entry e3 = map.higherEntry(m5); assertNull(e3); Map.Entry e4 = map.higherEntry(m6); assertNull(e4); } /** * floorEntry returns preceding entry. */ public void testDescendingFloorEntry() { NavigableMap map = dmap5(); Map.Entry e1 = map.floorEntry(m3); assertEquals(m3, e1.getKey()); Map.Entry e2 = map.floorEntry(m6); assertEquals(m5, e2.getKey()); Map.Entry e3 = map.floorEntry(m1); assertEquals(m1, e3.getKey()); Map.Entry e4 = map.floorEntry(zero); assertNull(e4); } /** * ceilingEntry returns next entry. */ public void testDescendingCeilingEntry() { NavigableMap map = dmap5(); Map.Entry e1 = map.ceilingEntry(m3); assertEquals(m3, e1.getKey()); Map.Entry e2 = map.ceilingEntry(zero); assertEquals(m1, e2.getKey()); Map.Entry e3 = map.ceilingEntry(m5); assertEquals(m5, e3.getKey()); Map.Entry e4 = map.ceilingEntry(m6); assertNull(e4); } /** * pollFirstEntry returns entries in order */ public void testDescendingPollFirstEntry() { NavigableMap map = dmap5(); Map.Entry e = map.pollFirstEntry(); assertEquals(m1, e.getKey()); assertEquals("A", e.getValue()); e = map.pollFirstEntry(); assertEquals(m2, e.getKey()); map.put(m1, "A"); e = map.pollFirstEntry(); assertEquals(m1, e.getKey()); assertEquals("A", e.getValue()); e = map.pollFirstEntry(); assertEquals(m3, e.getKey()); map.remove(m4); e = map.pollFirstEntry(); assertEquals(m5, e.getKey()); try { e.setValue("A"); shouldThrow(); } catch (Exception ok) { } e = map.pollFirstEntry(); assertNull(e); } /** * pollLastEntry returns entries in order */ public void testDescendingPollLastEntry() { NavigableMap map = dmap5(); Map.Entry e = map.pollLastEntry(); assertEquals(m5, e.getKey()); assertEquals("E", e.getValue()); e = map.pollLastEntry(); assertEquals(m4, e.getKey()); map.put(m5, "E"); e = map.pollLastEntry(); assertEquals(m5, e.getKey()); assertEquals("E", e.getValue()); e = map.pollLastEntry(); assertEquals(m3, e.getKey()); map.remove(m2); e = map.pollLastEntry(); assertEquals(m1, e.getKey()); try { e.setValue("E"); shouldThrow(); } catch (Exception ok) { } e = map.pollLastEntry(); assertNull(e); } /** * size returns the correct values */ public void testDescendingSize() { NavigableMap map = dmap5(); NavigableMap empty = dmap0(); assertEquals(0, empty.size()); assertEquals(5, map.size()); } /** * toString contains toString of elements */ public void testDescendingToString() { NavigableMap map = dmap5(); String s = map.toString(); for (int i = 1; i <= 5; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } // Exception testDescendings /** * get(null) of nonempty map throws NPE */ public void testDescendingGet_NullPointerException() { try { NavigableMap c = dmap5(); c.get(null); shouldThrow(); } catch(NullPointerException e){} } /** * put(null,x) throws NPE */ public void testDescendingPut1_NullPointerException() { try { NavigableMap c = dmap5(); c.put(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * A deserialized map equals original */ public void testDescendingSerialization() { NavigableMap q = dmap5(); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); NavigableMap r = (NavigableMap)in.readObject(); assertEquals(q.size(), r.size()); assertTrue(q.equals(r)); assertTrue(r.equals(q)); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * subMap returns map with keys in requested range */ public void testDescendingSubMapContents() { NavigableMap map = dmap5(); SortedMap sm = map.subMap(m2, m4); assertEquals(m2, sm.firstKey()); assertEquals(m3, sm.lastKey()); assertEquals(2, sm.size()); assertFalse(sm.containsKey(m1)); assertTrue(sm.containsKey(m2)); assertTrue(sm.containsKey(m3)); assertFalse(sm.containsKey(m4)); assertFalse(sm.containsKey(m5)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(m2, k); k = (Integer)(i.next()); assertEquals(m3, k); assertFalse(i.hasNext()); Iterator j = sm.keySet().iterator(); j.next(); j.remove(); assertFalse(map.containsKey(m2)); assertEquals(4, map.size()); assertEquals(1, sm.size()); assertEquals(m3, sm.firstKey()); assertEquals(m3, sm.lastKey()); assertTrue(sm.remove(m3) != null); assertTrue(sm.isEmpty()); assertEquals(3, map.size()); } public void testDescendingSubMapContents2() { NavigableMap map = dmap5(); SortedMap sm = map.subMap(m2, m3); assertEquals(1, sm.size()); assertEquals(m2, sm.firstKey()); assertEquals(m2, sm.lastKey()); assertFalse(sm.containsKey(m1)); assertTrue(sm.containsKey(m2)); assertFalse(sm.containsKey(m3)); assertFalse(sm.containsKey(m4)); assertFalse(sm.containsKey(m5)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(m2, k); assertFalse(i.hasNext()); Iterator j = sm.keySet().iterator(); j.next(); j.remove(); assertFalse(map.containsKey(m2)); assertEquals(4, map.size()); assertEquals(0, sm.size()); assertTrue(sm.isEmpty()); assertTrue(sm.remove(m3) == null); assertEquals(4, map.size()); } /** * headMap returns map with keys in requested range */ public void testDescendingHeadMapContents() { NavigableMap map = dmap5(); SortedMap sm = map.headMap(m4); assertTrue(sm.containsKey(m1)); assertTrue(sm.containsKey(m2)); assertTrue(sm.containsKey(m3)); assertFalse(sm.containsKey(m4)); assertFalse(sm.containsKey(m5)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(m1, k); k = (Integer)(i.next()); assertEquals(m2, k); k = (Integer)(i.next()); assertEquals(m3, k); assertFalse(i.hasNext()); sm.clear(); assertTrue(sm.isEmpty()); assertEquals(2, map.size()); assertEquals(m4, map.firstKey()); } /** * headMap returns map with keys in requested range */ public void testDescendingTailMapContents() { NavigableMap map = dmap5(); SortedMap sm = map.tailMap(m2); assertFalse(sm.containsKey(m1)); assertTrue(sm.containsKey(m2)); assertTrue(sm.containsKey(m3)); assertTrue(sm.containsKey(m4)); assertTrue(sm.containsKey(m5)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(m2, k); k = (Integer)(i.next()); assertEquals(m3, k); k = (Integer)(i.next()); assertEquals(m4, k); k = (Integer)(i.next()); assertEquals(m5, k); assertFalse(i.hasNext()); Iterator ei = sm.entrySet().iterator(); Map.Entry e; e = (Map.Entry)(ei.next()); assertEquals(m2, e.getKey()); assertEquals("B", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(m3, e.getKey()); assertEquals("C", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(m4, e.getKey()); assertEquals("D", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(m5, e.getKey()); assertEquals("E", e.getValue()); assertFalse(i.hasNext()); SortedMap ssm = sm.tailMap(m4); assertEquals(m4, ssm.firstKey()); assertEquals(m5, ssm.lastKey()); assertTrue(ssm.remove(m4) != null); assertEquals(1, ssm.size()); assertEquals(3, sm.size()); assertEquals(4, map.size()); } } backport-util-concurrent-3.1-src/test/tck/src/AbstractQueueTest.java0000644001750700037720000001132510365510635024516 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import java.io.*; import java.util.Iterator; import java.util.NoSuchElementException; public class AbstractQueueTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(AbstractQueueTest.class); } static class Succeed extends AbstractQueue { public boolean offer(Object x) { if (x == null) throw new NullPointerException(); return true; } public Object peek() { return one; } public Object poll() { return one; } public int size() { return 0; } public Iterator iterator() { return null; } // not needed } static class Fail extends AbstractQueue { public boolean offer(Object x) { if (x == null) throw new NullPointerException(); return false; } public Object peek() { return null; } public Object poll() { return null; } public int size() { return 0; } public Iterator iterator() { return null; } // not needed } /** * add returns true if offer succeeds */ public void testAddS() { Succeed q = new Succeed(); assertTrue(q.add(two)); } /** * add throws ISE true if offer fails */ public void testAddF() { Fail q = new Fail(); try { q.add(one); shouldThrow(); } catch (IllegalStateException success) { } } /** * add throws NPE if offer does */ public void testAddNPE() { Succeed q = new Succeed(); try { q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * remove returns normally if poll succeeds */ public void testRemoveS() { Succeed q = new Succeed(); q.remove(); } /** * remove throws NSEE if poll returns null */ public void testRemoveF() { Fail q = new Fail(); try { q.remove(); shouldThrow(); } catch (NoSuchElementException success) { } } /** * element returns normally if peek succeeds */ public void testElementS() { Succeed q = new Succeed(); q.element(); } /** * element throws NSEE if peek returns null */ public void testElementF() { Fail q = new Fail(); try { q.element(); shouldThrow(); } catch (NoSuchElementException success) { } } /** * addAll(null) throws NPE */ public void testAddAll1() { try { Succeed q = new Succeed(); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll(this) throws IAE */ public void testAddAllSelf() { try { Succeed q = new Succeed(); q.addAll(q); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testAddAll2() { try { Succeed q = new Succeed(); Integer[] ints = new Integer[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testAddAll3() { try { Succeed q = new Succeed(); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll throws ISE if an add fails */ public void testAddAll4() { try { Fail q = new Fail(); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (IllegalStateException success) {} } } backport-util-concurrent-3.1-src/test/tck/src/ReentrantLockTest.java0000644001750700037720000010514210434507235024521 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; import java.io.*; import java.util.Collection; public class ReentrantLockTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ReentrantLockTest.class); } /** * A runnable calling lockInterruptibly */ class InterruptibleLockRunnable implements Runnable { final ReentrantLock lock; InterruptibleLockRunnable(ReentrantLock l) { lock = l; } public void run() { try { lock.lockInterruptibly(); } catch(InterruptedException success){} } } /** * A runnable calling lockInterruptibly that expects to be * interrupted */ class InterruptedLockRunnable implements Runnable { final ReentrantLock lock; InterruptedLockRunnable(ReentrantLock l) { lock = l; } public void run() { try { lock.lockInterruptibly(); threadShouldThrow(); } catch(InterruptedException success){} } } /** * Subclass to expose protected methods */ static class PublicReentrantLock extends ReentrantLock { PublicReentrantLock() { super(); } PublicReentrantLock(boolean fair) { super(fair); } public Collection getQueuedThreads() { return super.getQueuedThreads(); } public Collection getWaitingThreads(Condition c) { return super.getWaitingThreads(c); } } /** * Constructor sets given fairness */ public void testConstructor() { ReentrantLock rl = new ReentrantLock(); assertFalse(rl.isFair()); ReentrantLock r2 = new ReentrantLock(true); assertTrue(r2.isFair()); } /** * locking an unlocked lock succeeds */ public void testLock() { ReentrantLock rl = new ReentrantLock(); rl.lock(); assertTrue(rl.isLocked()); rl.unlock(); } /** * locking an unlocked fair lock succeeds */ public void testFairLock() { ReentrantLock rl = new ReentrantLock(true); rl.lock(); assertTrue(rl.isLocked()); rl.unlock(); } /** * Unlocking an unlocked lock throws IllegalMonitorStateException */ public void testUnlock_IllegalMonitorStateException() { ReentrantLock rl = new ReentrantLock(); try { rl.unlock(); shouldThrow(); } catch(IllegalMonitorStateException success){} } /** * tryLock on an unlocked lock succeeds */ public void testTryLock() { ReentrantLock rl = new ReentrantLock(); assertTrue(rl.tryLock()); assertTrue(rl.isLocked()); rl.unlock(); } /** * hasQueuedThreads reports whether there are waiting threads */ public void testhasQueuedThreads() { final ReentrantLock lock = new ReentrantLock(true); // originally was non-fair Thread t1 = new Thread(new InterruptedLockRunnable(lock)); Thread t2 = new Thread(new InterruptibleLockRunnable(lock)); try { assertFalse(lock.hasQueuedThreads()); lock.lock(); t1.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.hasQueuedThreads()); t2.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.hasQueuedThreads()); t1.interrupt(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.hasQueuedThreads()); lock.unlock(); Thread.sleep(SHORT_DELAY_MS); assertFalse(lock.hasQueuedThreads()); t1.join(); t2.join(); } catch(Exception e){ unexpectedException(); } } /** * getQueueLength reports number of waiting threads */ public void testGetQueueLength() { final ReentrantLock lock = new ReentrantLock(true); // originally was non-fair Thread t1 = new Thread(new InterruptedLockRunnable(lock)); Thread t2 = new Thread(new InterruptibleLockRunnable(lock)); try { assertEquals(0, lock.getQueueLength()); lock.lock(); t1.start(); Thread.sleep(SHORT_DELAY_MS); assertEquals(1, lock.getQueueLength()); t2.start(); Thread.sleep(SHORT_DELAY_MS); assertEquals(2, lock.getQueueLength()); t1.interrupt(); Thread.sleep(SHORT_DELAY_MS); assertEquals(1, lock.getQueueLength()); lock.unlock(); Thread.sleep(SHORT_DELAY_MS); assertEquals(0, lock.getQueueLength()); t1.join(); t2.join(); } catch(Exception e){ unexpectedException(); } } /** * getQueueLength reports number of waiting threads */ public void testGetQueueLength_fair() { final ReentrantLock lock = new ReentrantLock(true); Thread t1 = new Thread(new InterruptedLockRunnable(lock)); Thread t2 = new Thread(new InterruptibleLockRunnable(lock)); try { assertEquals(0, lock.getQueueLength()); lock.lock(); t1.start(); Thread.sleep(SHORT_DELAY_MS); assertEquals(1, lock.getQueueLength()); t2.start(); Thread.sleep(SHORT_DELAY_MS); assertEquals(2, lock.getQueueLength()); t1.interrupt(); Thread.sleep(SHORT_DELAY_MS); assertEquals(1, lock.getQueueLength()); lock.unlock(); Thread.sleep(SHORT_DELAY_MS); assertEquals(0, lock.getQueueLength()); t1.join(); t2.join(); } catch(Exception e){ unexpectedException(); } } /** * hasQueuedThread(null) throws NPE */ public void testHasQueuedThreadNPE() { final ReentrantLock sync = new ReentrantLock(true); // originally was non-fair try { sync.hasQueuedThread(null); shouldThrow(); } catch (NullPointerException success) { } } /** * hasQueuedThread reports whether a thread is queued. */ public void testHasQueuedThread() { final ReentrantLock sync = new ReentrantLock(true); // originally was non-fair Thread t1 = new Thread(new InterruptedLockRunnable(sync)); Thread t2 = new Thread(new InterruptibleLockRunnable(sync)); try { assertFalse(sync.hasQueuedThread(t1)); assertFalse(sync.hasQueuedThread(t2)); sync.lock(); t1.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(sync.hasQueuedThread(t1)); t2.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(sync.hasQueuedThread(t1)); assertTrue(sync.hasQueuedThread(t2)); t1.interrupt(); Thread.sleep(SHORT_DELAY_MS); assertFalse(sync.hasQueuedThread(t1)); assertTrue(sync.hasQueuedThread(t2)); sync.unlock(); Thread.sleep(SHORT_DELAY_MS); assertFalse(sync.hasQueuedThread(t1)); Thread.sleep(SHORT_DELAY_MS); assertFalse(sync.hasQueuedThread(t2)); t1.join(); t2.join(); } catch(Exception e){ unexpectedException(); } } /** * getQueuedThreads includes waiting threads */ public void testGetQueuedThreads() { final PublicReentrantLock lock = new PublicReentrantLock(true); // originally was non-fair Thread t1 = new Thread(new InterruptedLockRunnable(lock)); Thread t2 = new Thread(new InterruptibleLockRunnable(lock)); try { assertTrue(lock.getQueuedThreads().isEmpty()); lock.lock(); assertTrue(lock.getQueuedThreads().isEmpty()); t1.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.getQueuedThreads().contains(t1)); t2.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.getQueuedThreads().contains(t1)); assertTrue(lock.getQueuedThreads().contains(t2)); t1.interrupt(); Thread.sleep(SHORT_DELAY_MS); assertFalse(lock.getQueuedThreads().contains(t1)); assertTrue(lock.getQueuedThreads().contains(t2)); lock.unlock(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.getQueuedThreads().isEmpty()); t1.join(); t2.join(); } catch(Exception e){ unexpectedException(); } } /** * timed tryLock is interruptible. */ public void testInterruptedException2() { final ReentrantLock lock = new ReentrantLock(); lock.lock(); Thread t = new Thread(new Runnable() { public void run() { try { lock.tryLock(MEDIUM_DELAY_MS,TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(InterruptedException success){} } }); try { t.start(); t.interrupt(); } catch(Exception e){ unexpectedException(); } } /** * TryLock on a locked lock fails */ public void testTryLockWhenLocked() { final ReentrantLock lock = new ReentrantLock(); lock.lock(); Thread t = new Thread(new Runnable() { public void run() { threadAssertFalse(lock.tryLock()); } }); try { t.start(); t.join(); lock.unlock(); } catch(Exception e){ unexpectedException(); } } /** * Timed tryLock on a locked lock times out */ public void testTryLock_Timeout() { final ReentrantLock lock = new ReentrantLock(); lock.lock(); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertFalse(lock.tryLock(1, TimeUnit.MILLISECONDS)); } catch (Exception ex) { threadUnexpectedException(); } } }); try { t.start(); t.join(); lock.unlock(); } catch(Exception e){ unexpectedException(); } } /** * getHoldCount returns number of recursive holds */ public void testGetHoldCount() { ReentrantLock lock = new ReentrantLock(); for(int i = 1; i <= SIZE; i++) { lock.lock(); assertEquals(i,lock.getHoldCount()); } for(int i = SIZE; i > 0; i--) { lock.unlock(); assertEquals(i-1,lock.getHoldCount()); } } /** * isLocked is true when locked and false when not */ public void testIsLocked() { final ReentrantLock lock = new ReentrantLock(); lock.lock(); assertTrue(lock.isLocked()); lock.unlock(); assertFalse(lock.isLocked()); Thread t = new Thread(new Runnable() { public void run() { lock.lock(); try { Thread.sleep(SMALL_DELAY_MS); } catch(Exception e) { threadUnexpectedException(); } lock.unlock(); } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.isLocked()); t.join(); assertFalse(lock.isLocked()); } catch(Exception e){ unexpectedException(); } } /** * lockInterruptibly is interruptible. */ public void testLockInterruptibly1() { final ReentrantLock lock = new ReentrantLock(); lock.lock(); Thread t = new Thread(new InterruptedLockRunnable(lock)); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); Thread.sleep(SHORT_DELAY_MS); lock.unlock(); t.join(); } catch(Exception e){ unexpectedException(); } } /** * lockInterruptibly succeeds when unlocked, else is interruptible */ public void testLockInterruptibly2() { final ReentrantLock lock = new ReentrantLock(); try { lock.lockInterruptibly(); } catch(Exception e) { unexpectedException(); } Thread t = new Thread(new InterruptedLockRunnable(lock)); try { t.start(); t.interrupt(); assertTrue(lock.isLocked()); assertTrue(lock.isHeldByCurrentThread()); t.join(); } catch(Exception e){ unexpectedException(); } } /** * Calling await without holding lock throws IllegalMonitorStateException */ public void testAwait_IllegalMonitor() { final ReentrantLock lock = new ReentrantLock(); final Condition c = lock.newCondition(); try { c.await(); shouldThrow(); } catch (IllegalMonitorStateException success) { } catch (Exception ex) { unexpectedException(); } } /** * Calling signal without holding lock throws IllegalMonitorStateException */ public void testSignal_IllegalMonitor() { final ReentrantLock lock = new ReentrantLock(); final Condition c = lock.newCondition(); try { c.signal(); shouldThrow(); } catch (IllegalMonitorStateException success) { } catch (Exception ex) { unexpectedException(); } } /** * awaitNanos without a signal times out */ public void testAwaitNanos_Timeout() { final ReentrantLock lock = new ReentrantLock(); final Condition c = lock.newCondition(); try { lock.lock(); long t = Utils.awaitNanos(c, 100); assertTrue(t <= 0); lock.unlock(); } catch (Exception ex) { unexpectedException(); } } /** * timed await without a signal times out */ public void testAwait_Timeout() { final ReentrantLock lock = new ReentrantLock(); final Condition c = lock.newCondition(); try { lock.lock(); c.await(SHORT_DELAY_MS, TimeUnit.MILLISECONDS); lock.unlock(); } catch (Exception ex) { unexpectedException(); } } /** * awaitUntil without a signal times out */ public void testAwaitUntil_Timeout() { final ReentrantLock lock = new ReentrantLock(); final Condition c = lock.newCondition(); try { lock.lock(); java.util.Date d = new java.util.Date(); c.awaitUntil(new java.util.Date(d.getTime() + 10)); lock.unlock(); } catch (Exception ex) { unexpectedException(); } } /** * await returns when signalled */ public void testAwait() { final ReentrantLock lock = new ReentrantLock(); final Condition c = lock.newCondition(); Thread t = new Thread(new Runnable() { public void run() { try { lock.lock(); c.await(); lock.unlock(); } catch(InterruptedException e) { threadUnexpectedException(); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); lock.lock(); c.signal(); lock.unlock(); t.join(SHORT_DELAY_MS); assertFalse(t.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * hasWaiters throws NPE if null */ public void testHasWaitersNPE() { final ReentrantLock lock = new ReentrantLock(); try { lock.hasWaiters(null); shouldThrow(); } catch (NullPointerException success) { } catch (Exception ex) { unexpectedException(); } } /** * getWaitQueueLength throws NPE if null */ public void testGetWaitQueueLengthNPE() { final ReentrantLock lock = new ReentrantLock(); try { lock.getWaitQueueLength(null); shouldThrow(); } catch (NullPointerException success) { } catch (Exception ex) { unexpectedException(); } } /** * getWaitingThreads throws NPE if null */ public void testGetWaitingThreadsNPE() { final PublicReentrantLock lock = new PublicReentrantLock(true); // originally was non-fair try { lock.getWaitingThreads(null); shouldThrow(); } catch (NullPointerException success) { } catch (Exception ex) { unexpectedException(); } } /** * hasWaiters throws IAE if not owned */ public void testHasWaitersIAE() { final ReentrantLock lock = new ReentrantLock(); final Condition c = (lock.newCondition()); final ReentrantLock lock2 = new ReentrantLock(); try { lock2.hasWaiters(c); shouldThrow(); } catch (IllegalArgumentException success) { } catch (Exception ex) { unexpectedException(); } } /** * hasWaiters throws IMSE if not locked */ public void testHasWaitersIMSE() { final ReentrantLock lock = new ReentrantLock(true); // originally was non-fair final Condition c = (lock.newCondition()); try { lock.hasWaiters(c); shouldThrow(); } catch (IllegalMonitorStateException success) { } catch (Exception ex) { unexpectedException(); } } /** * getWaitQueueLength throws IAE if not owned */ public void testGetWaitQueueLengthIAE() { final ReentrantLock lock = new ReentrantLock(); final Condition c = (lock.newCondition()); final ReentrantLock lock2 = new ReentrantLock(); try { lock2.getWaitQueueLength(c); shouldThrow(); } catch (IllegalArgumentException success) { } catch (Exception ex) { unexpectedException(); } } /** * getWaitQueueLength throws IMSE if not locked */ public void testGetWaitQueueLengthIMSE() { final ReentrantLock lock = new ReentrantLock(true); // originally was non-fair final Condition c = (lock.newCondition()); try { lock.getWaitQueueLength(c); shouldThrow(); } catch (IllegalMonitorStateException success) { } catch (Exception ex) { unexpectedException(); } } /** * getWaitingThreads throws IAE if not owned */ public void testGetWaitingThreadsIAE() { final PublicReentrantLock lock = new PublicReentrantLock(); final Condition c = (lock.newCondition()); final PublicReentrantLock lock2 = new PublicReentrantLock(); try { lock2.getWaitingThreads(c); shouldThrow(); } catch (IllegalArgumentException success) { } catch (Exception ex) { unexpectedException(); } } /** * getWaitingThreads throws IMSE if not locked */ public void testGetWaitingThreadsIMSE() { final PublicReentrantLock lock = new PublicReentrantLock(true); // originally was non-fair final Condition c = (lock.newCondition()); try { lock.getWaitingThreads(c); shouldThrow(); } catch (IllegalMonitorStateException success) { } catch (Exception ex) { unexpectedException(); } } /** * hasWaiters returns true when a thread is waiting, else false */ public void testHasWaiters() { final ReentrantLock lock = new ReentrantLock(true); // originally was non-fair final Condition c = lock.newCondition(); Thread t = new Thread(new Runnable() { public void run() { try { lock.lock(); threadAssertFalse(lock.hasWaiters(c)); threadAssertEquals(0, lock.getWaitQueueLength(c)); c.await(); lock.unlock(); } catch(InterruptedException e) { threadUnexpectedException(); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); lock.lock(); assertTrue(lock.hasWaiters(c)); assertEquals(1, lock.getWaitQueueLength(c)); c.signal(); lock.unlock(); Thread.sleep(SHORT_DELAY_MS); lock.lock(); assertFalse(lock.hasWaiters(c)); assertEquals(0, lock.getWaitQueueLength(c)); lock.unlock(); t.join(SHORT_DELAY_MS); assertFalse(t.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * getWaitQueueLength returns number of waiting threads */ public void testGetWaitQueueLength() { final ReentrantLock lock = new ReentrantLock(true); // originally was non-fair final Condition c = lock.newCondition(); Thread t1 = new Thread(new Runnable() { public void run() { try { lock.lock(); threadAssertFalse(lock.hasWaiters(c)); threadAssertEquals(0, lock.getWaitQueueLength(c)); c.await(); lock.unlock(); } catch(InterruptedException e) { threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable() { public void run() { try { lock.lock(); threadAssertTrue(lock.hasWaiters(c)); threadAssertEquals(1, lock.getWaitQueueLength(c)); c.await(); lock.unlock(); } catch(InterruptedException e) { threadUnexpectedException(); } } }); try { t1.start(); Thread.sleep(SHORT_DELAY_MS); t2.start(); Thread.sleep(SHORT_DELAY_MS); lock.lock(); assertTrue(lock.hasWaiters(c)); assertEquals(2, lock.getWaitQueueLength(c)); c.signalAll(); lock.unlock(); Thread.sleep(SHORT_DELAY_MS); lock.lock(); assertFalse(lock.hasWaiters(c)); assertEquals(0, lock.getWaitQueueLength(c)); lock.unlock(); t1.join(SHORT_DELAY_MS); t2.join(SHORT_DELAY_MS); assertFalse(t1.isAlive()); assertFalse(t2.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * getWaitingThreads returns only and all waiting threads */ public void testGetWaitingThreads() { final PublicReentrantLock lock = new PublicReentrantLock(true); // originally was non-fair final Condition c = lock.newCondition(); Thread t1 = new Thread(new Runnable() { public void run() { try { lock.lock(); threadAssertTrue(lock.getWaitingThreads(c).isEmpty()); c.await(); lock.unlock(); } catch(InterruptedException e) { threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable() { public void run() { try { lock.lock(); threadAssertFalse(lock.getWaitingThreads(c).isEmpty()); c.await(); lock.unlock(); } catch(InterruptedException e) { threadUnexpectedException(); } } }); try { lock.lock(); assertTrue(lock.getWaitingThreads(c).isEmpty()); lock.unlock(); t1.start(); Thread.sleep(SHORT_DELAY_MS); t2.start(); Thread.sleep(SHORT_DELAY_MS); lock.lock(); assertTrue(lock.hasWaiters(c)); assertTrue(lock.getWaitingThreads(c).contains(t1)); assertTrue(lock.getWaitingThreads(c).contains(t2)); c.signalAll(); lock.unlock(); Thread.sleep(SHORT_DELAY_MS); lock.lock(); assertFalse(lock.hasWaiters(c)); assertTrue(lock.getWaitingThreads(c).isEmpty()); lock.unlock(); t1.join(SHORT_DELAY_MS); t2.join(SHORT_DELAY_MS); assertFalse(t1.isAlive()); assertFalse(t2.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** A helper class for uninterruptible wait tests */ class UninterruptableThread extends Thread { private ReentrantLock lock; private Condition c; public volatile boolean canAwake = false; public volatile boolean interrupted = false; public volatile boolean lockStarted = false; public UninterruptableThread(ReentrantLock lock, Condition c) { this.lock = lock; this.c = c; } public synchronized void run() { lock.lock(); lockStarted = true; while (!canAwake) { c.awaitUninterruptibly(); } interrupted = isInterrupted(); lock.unlock(); } } /** * awaitUninterruptibly doesn't abort on interrupt */ public void testAwaitUninterruptibly() { final ReentrantLock lock = new ReentrantLock(); final Condition c = lock.newCondition(); UninterruptableThread thread = new UninterruptableThread(lock, c); try { thread.start(); while (!thread.lockStarted) { Thread.sleep(100); } lock.lock(); try { thread.interrupt(); thread.canAwake = true; c.signal(); } finally { lock.unlock(); } thread.join(); assertTrue(thread.interrupted); assertFalse(thread.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * await is interruptible */ public void testAwait_Interrupt() { final ReentrantLock lock = new ReentrantLock(); final Condition c = lock.newCondition(); Thread t = new Thread(new Runnable() { public void run() { try { lock.lock(); c.await(); lock.unlock(); threadShouldThrow(); } catch(InterruptedException success) { } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(SHORT_DELAY_MS); assertFalse(t.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * awaitNanos is interruptible */ public void testAwaitNanos_Interrupt() { final ReentrantLock lock = new ReentrantLock(); final Condition c = lock.newCondition(); Thread t = new Thread(new Runnable() { public void run() { try { lock.lock(); Utils.awaitNanos(c, 1000 * 1000 * 1000); // 1 sec lock.unlock(); threadShouldThrow(); } catch(InterruptedException success) { } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(SHORT_DELAY_MS); assertFalse(t.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * awaitUntil is interruptible */ public void testAwaitUntil_Interrupt() { final ReentrantLock lock = new ReentrantLock(); final Condition c = lock.newCondition(); Thread t = new Thread(new Runnable() { public void run() { try { lock.lock(); java.util.Date d = new java.util.Date(); c.awaitUntil(new java.util.Date(d.getTime() + 10000)); lock.unlock(); threadShouldThrow(); } catch(InterruptedException success) { } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(SHORT_DELAY_MS); assertFalse(t.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * signalAll wakes up all threads */ public void testSignalAll() { final ReentrantLock lock = new ReentrantLock(); final Condition c = lock.newCondition(); Thread t1 = new Thread(new Runnable() { public void run() { try { lock.lock(); c.await(); lock.unlock(); } catch(InterruptedException e) { threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable() { public void run() { try { lock.lock(); c.await(); lock.unlock(); } catch(InterruptedException e) { threadUnexpectedException(); } } }); try { t1.start(); t2.start(); Thread.sleep(SHORT_DELAY_MS); lock.lock(); c.signalAll(); lock.unlock(); t1.join(SHORT_DELAY_MS); t2.join(SHORT_DELAY_MS); assertFalse(t1.isAlive()); assertFalse(t2.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * await after multiple reentrant locking preserves lock count */ public void testAwaitLockCount() { final ReentrantLock lock = new ReentrantLock(); final Condition c = lock.newCondition(); Thread t1 = new Thread(new Runnable() { public void run() { try { lock.lock(); threadAssertEquals(1, lock.getHoldCount()); c.await(); threadAssertEquals(1, lock.getHoldCount()); lock.unlock(); } catch(InterruptedException e) { threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable() { public void run() { try { lock.lock(); lock.lock(); threadAssertEquals(2, lock.getHoldCount()); c.await(); threadAssertEquals(2, lock.getHoldCount()); lock.unlock(); lock.unlock(); } catch(InterruptedException e) { threadUnexpectedException(); } } }); try { t1.start(); t2.start(); Thread.sleep(SHORT_DELAY_MS); lock.lock(); c.signalAll(); lock.unlock(); t1.join(SHORT_DELAY_MS); t2.join(SHORT_DELAY_MS); assertFalse(t1.isAlive()); assertFalse(t2.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * A serialized lock deserializes as unlocked */ public void testSerialization() { ReentrantLock l = new ReentrantLock(); l.lock(); l.unlock(); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(l); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); ReentrantLock r = (ReentrantLock) in.readObject(); r.lock(); r.unlock(); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * toString indicates current lock state */ public void testToString() { ReentrantLock lock = new ReentrantLock(); String us = lock.toString(); assertTrue(us.indexOf("Unlocked") >= 0); lock.lock(); String ls = lock.toString(); assertTrue(ls.indexOf("Locked") >= 0); } } backport-util-concurrent-3.1-src/test/tck/src/ExecutorCompletionServiceTest.java0000644001750700037720000001661410346121124027113 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; public class ExecutorCompletionServiceTest extends JSR166TestCase{ public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ExecutorCompletionServiceTest.class); } /** * Creating a new ECS with null Executor throw NPE */ public void testConstructorNPE() { try { ExecutorCompletionService ecs = new ExecutorCompletionService(null); shouldThrow(); } catch (NullPointerException success) { } } /** * Creating a new ECS with null queue throw NPE */ public void testConstructorNPE2() { try { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e, null); shouldThrow(); } catch (NullPointerException success) { } } /** * Submitting a null callable throws NPE */ public void testSubmitNPE() { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { Callable c = null; ecs.submit(c); shouldThrow(); } catch (NullPointerException success) { } finally { joinPool(e); } } /** * Submitting a null runnable throws NPE */ public void testSubmitNPE2() { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { Runnable r = null; ecs.submit(r, Boolean.TRUE); shouldThrow(); } catch (NullPointerException success) { } finally { joinPool(e); } } /** * A taken submitted task is completed */ public void testTake() { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { Callable c = new StringTask(); ecs.submit(c); Future f = ecs.take(); assertTrue(f.isDone()); } catch (Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * Take returns the same future object returned by submit */ public void testTake2() { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { Callable c = new StringTask(); Future f1 = ecs.submit(c); Future f2 = ecs.take(); assertSame(f1, f2); } catch (Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * If poll returns non-null, the returned task is completed */ public void testPoll1() { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { assertNull(ecs.poll()); Callable c = new StringTask(); ecs.submit(c); Thread.sleep(SHORT_DELAY_MS); for (;;) { Future f = ecs.poll(); if (f != null) { assertTrue(f.isDone()); break; } } } catch (Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * If timed poll returns non-null, the returned task is completed */ public void testPoll2() { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { assertNull(ecs.poll()); Callable c = new StringTask(); ecs.submit(c); Future f = ecs.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS); if (f != null) assertTrue(f.isDone()); } catch (Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * Submitting to underlying AES that overrides newTaskFor(Callable) * returns and eventually runs Future returned by newTaskFor. */ public void testNewTaskForCallable() { final AtomicBoolean done = new AtomicBoolean(false); class MyCallableFuture extends FutureTask { MyCallableFuture(Callable c) { super(c); } protected void done() { done.set(true); } } ExecutorService e = new ThreadPoolExecutor( 1, 1, 30L, TimeUnit.SECONDS, new ArrayBlockingQueue(1)) { protected RunnableFuture newTaskFor(Callable c) { return new MyCallableFuture(c); } }; ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { assertNull(ecs.poll()); Callable c = new StringTask(); Future f1 = ecs.submit(c); assertTrue("submit must return MyCallableFuture", f1 instanceof MyCallableFuture); Future f2 = ecs.take(); assertSame("submit and take must return same objects", f1, f2); assertTrue("completed task must have set done", done.get()); } catch (Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * Submitting to underlying AES that overrides newTaskFor(Runnable,T) * returns and eventually runs Future returned by newTaskFor. */ public void testNewTaskForRunnable() { final AtomicBoolean done = new AtomicBoolean(false); class MyRunnableFuture extends FutureTask { MyRunnableFuture(Runnable t, Object r) { super(t, r); } protected void done() { done.set(true); } } ExecutorService e = new ThreadPoolExecutor( 1, 1, 30L, TimeUnit.SECONDS, new ArrayBlockingQueue(1)) { protected RunnableFuture newTaskFor(Runnable t, Object r) { return new MyRunnableFuture(t, r); } }; ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { assertNull(ecs.poll()); Runnable r = new NoOpRunnable(); Future f1 = ecs.submit(r, null); assertTrue("submit must return MyRunnableFuture", f1 instanceof MyRunnableFuture); Future f2 = ecs.take(); assertSame("submit and take must return same objects", f1, f2); assertTrue("completed task must have set done", done.get()); } catch (Exception ex) { unexpectedException(); } finally { joinPool(e); } } } backport-util-concurrent-3.1-src/test/tck/src/TreeSetTest.java0000644001750700037720000007273710431777323023342 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.Iterator; import java.util.SortedSet; import java.util.NoSuchElementException; import java.util.Random; import java.util.BitSet; public class TreeSetTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(TreeSetTest.class); } static class MyReverseComparator implements Comparator { public int compare(Object x, Object y) { int i = ((Integer)x).intValue(); int j = ((Integer)y).intValue(); if (i < j) return 1; if (i > j) return -1; return 0; } } /** * The number of elements to place in collections, arrays, etc. */ static final int SIZE = 20; /** * Create a set of given size containing consecutive * Integers 0 ... n. */ private TreeSet populatedSet(int n) { TreeSet q = new TreeSet(); assertTrue(q.isEmpty()); for(int i = n-1; i >= 0; i-=2) assertTrue(q.add(new Integer(i))); for(int i = (n & 1); i < n; i+=2) assertTrue(q.add(new Integer(i))); assertFalse(q.isEmpty()); assertEquals(n, q.size()); return q; } /** * Create set of first 5 ints */ private TreeSet set5() { TreeSet q = new TreeSet(); assertTrue(q.isEmpty()); q.add(one); q.add(two); q.add(three); q.add(four); q.add(five); assertEquals(5, q.size()); return q; } /** * A new set has unbounded capacity */ public void testConstructor1() { assertEquals(0, new TreeSet().size()); } /** * Initializing from null Collection throws NPE */ public void testConstructor3() { try { TreeSet q = new TreeSet((Collection)null); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection of null elements throws NPE */ public void testConstructor4() { try { Integer[] ints = new Integer[SIZE]; TreeSet q = new TreeSet(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection with some null elements throws NPE */ public void testConstructor5() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); TreeSet q = new TreeSet(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Set contains all elements of collection used to initialize */ public void testConstructor6() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); TreeSet q = new TreeSet(Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.pollFirst()); } finally {} } /** * The comparator used in constructor is used */ public void testConstructor7() { try { MyReverseComparator cmp = new MyReverseComparator(); TreeSet q = new TreeSet(cmp); assertEquals(cmp, q.comparator()); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); for (int i = SIZE-1; i >= 0; --i) assertEquals(ints[i], q.pollFirst()); } finally {} } /** * isEmpty is true before add, false after */ public void testEmpty() { TreeSet q = new TreeSet(); assertTrue(q.isEmpty()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.add(new Integer(2)); q.pollFirst(); q.pollFirst(); assertTrue(q.isEmpty()); } /** * size changes when elements added and removed */ public void testSize() { TreeSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.size()); q.pollFirst(); } for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * add(null) throws NPE if nonempty */ public void testAddNull() { try { TreeSet q = populatedSet(SIZE); q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * Add of comparable element succeeds */ public void testAdd() { TreeSet q = new TreeSet(); assertTrue(q.add(zero)); assertTrue(q.add(one)); } /** * Add of duplicate element fails */ public void testAddDup() { TreeSet q = new TreeSet(); assertTrue(q.add(zero)); assertFalse(q.add(zero)); } /** * Add of non-Comparable throws CCE */ public void testAddNonComparable() { try { TreeSet q = new TreeSet(); q.add(new Object()); q.add(new Object()); q.add(new Object()); shouldThrow(); } catch(ClassCastException success) {} } /** * addAll(null) throws NPE */ public void testAddAll1() { try { TreeSet q = new TreeSet(); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testAddAll2() { try { TreeSet q = new TreeSet(); Integer[] ints = new Integer[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testAddAll3() { try { TreeSet q = new TreeSet(); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Set contains all elements of successful addAll */ public void testAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(SIZE-1-i); TreeSet q = new TreeSet(); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(new Integer(i), q.pollFirst()); } finally {} } /** * pollFirst succeeds unless empty */ public void testPollFirst() { TreeSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pollFirst()).intValue()); } assertNull(q.pollFirst()); } /** * pollLast succeeds unless empty */ public void testPollLast() { TreeSet q = populatedSet(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.pollLast()).intValue()); } assertNull(q.pollFirst()); } /** * remove(x) removes x and returns true if present */ public void testRemoveElement() { TreeSet q = populatedSet(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { TreeSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.pollFirst(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testClear() { TreeSet q = populatedSet(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { TreeSet q = populatedSet(SIZE); TreeSet p = new TreeSet(); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testRetainAll() { TreeSet q = populatedSet(SIZE); TreeSet p = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.pollFirst(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { TreeSet q = populatedSet(SIZE); TreeSet p = populatedSet(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.pollFirst()); assertFalse(q.contains(I)); } } } /** * lower returns preceding element */ public void testLower() { TreeSet q = set5(); Object e1 = q.lower(three); assertEquals(two, e1); Object e2 = q.lower(six); assertEquals(five, e2); Object e3 = q.lower(one); assertNull(e3); Object e4 = q.lower(zero); assertNull(e4); } /** * higher returns next element */ public void testHigher() { TreeSet q = set5(); Object e1 = q.higher(three); assertEquals(four, e1); Object e2 = q.higher(zero); assertEquals(one, e2); Object e3 = q.higher(five); assertNull(e3); Object e4 = q.higher(six); assertNull(e4); } /** * floor returns preceding element */ public void testFloor() { TreeSet q = set5(); Object e1 = q.floor(three); assertEquals(three, e1); Object e2 = q.floor(six); assertEquals(five, e2); Object e3 = q.floor(one); assertEquals(one, e3); Object e4 = q.floor(zero); assertNull(e4); } /** * ceiling returns next element */ public void testCeiling() { TreeSet q = set5(); Object e1 = q.ceiling(three); assertEquals(three, e1); Object e2 = q.ceiling(zero); assertEquals(one, e2); Object e3 = q.ceiling(five); assertEquals(five, e3); Object e4 = q.ceiling(six); assertNull(e4); } /** * toArray contains all elements */ public void testToArray() { TreeSet q = populatedSet(SIZE); Object[] o = q.toArray(); Arrays.sort(o); for(int i = 0; i < o.length; i++) assertEquals(o[i], q.pollFirst()); } /** * toArray(a) contains all elements */ public void testToArray2() { TreeSet q = populatedSet(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); Arrays.sort(ints); for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.pollFirst()); } /** * iterator iterates through all elements */ public void testIterator() { TreeSet q = populatedSet(SIZE); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); } /** * iterator of empty set has no elements */ public void testEmptyIterator() { TreeSet q = new TreeSet(); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, 0); } /** * iterator.remove removes current element */ public void testIteratorRemove () { final TreeSet q = new TreeSet(); q.add(new Integer(2)); q.add(new Integer(1)); q.add(new Integer(3)); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), new Integer(2)); assertEquals(it.next(), new Integer(3)); assertFalse(it.hasNext()); } /** * toString contains toStrings of elements */ public void testToString() { TreeSet q = populatedSet(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * A deserialized serialized set has same elements */ public void testSerialization() { TreeSet q = populatedSet(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); TreeSet r = (TreeSet)in.readObject(); assertEquals(q.size(), r.size()); while (!q.isEmpty()) assertEquals(q.pollFirst(), r.pollFirst()); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * subSet returns set with keys in requested range */ public void testSubSetContents() { TreeSet set = set5(); SortedSet sm = set.subSet(two, four); assertEquals(two, sm.first()); assertEquals(three, sm.last()); assertEquals(2, sm.size()); assertFalse(sm.contains(one)); assertTrue(sm.contains(two)); assertTrue(sm.contains(three)); assertFalse(sm.contains(four)); assertFalse(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); Iterator j = sm.iterator(); j.next(); j.remove(); assertFalse(set.contains(two)); assertEquals(4, set.size()); assertEquals(1, sm.size()); assertEquals(three, sm.first()); assertEquals(three, sm.last()); assertTrue(sm.remove(three)); assertTrue(sm.isEmpty()); assertEquals(3, set.size()); } public void testSubSetContents2() { TreeSet set = set5(); SortedSet sm = set.subSet(two, three); assertEquals(1, sm.size()); assertEquals(two, sm.first()); assertEquals(two, sm.last()); assertFalse(sm.contains(one)); assertTrue(sm.contains(two)); assertFalse(sm.contains(three)); assertFalse(sm.contains(four)); assertFalse(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); assertFalse(i.hasNext()); Iterator j = sm.iterator(); j.next(); j.remove(); assertFalse(set.contains(two)); assertEquals(4, set.size()); assertEquals(0, sm.size()); assertTrue(sm.isEmpty()); assertFalse(sm.remove(three)); assertEquals(4, set.size()); } /** * headSet returns set with keys in requested range */ public void testHeadSetContents() { TreeSet set = set5(); SortedSet sm = set.headSet(four); assertTrue(sm.contains(one)); assertTrue(sm.contains(two)); assertTrue(sm.contains(three)); assertFalse(sm.contains(four)); assertFalse(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(one, k); k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); sm.clear(); assertTrue(sm.isEmpty()); assertEquals(2, set.size()); assertEquals(four, set.first()); } /** * tailSet returns set with keys in requested range */ public void testTailSetContents() { TreeSet set = set5(); SortedSet sm = set.tailSet(two); assertFalse(sm.contains(one)); assertTrue(sm.contains(two)); assertTrue(sm.contains(three)); assertTrue(sm.contains(four)); assertTrue(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); k = (Integer)(i.next()); assertEquals(four, k); k = (Integer)(i.next()); assertEquals(five, k); assertFalse(i.hasNext()); SortedSet ssm = sm.tailSet(four); assertEquals(four, ssm.first()); assertEquals(five, ssm.last()); assertTrue(ssm.remove(four)); assertEquals(1, ssm.size()); assertEquals(3, sm.size()); assertEquals(4, set.size()); } Random rnd = new Random(666); BitSet bs; /** * Subsets of subsets subdivide correctly */ public void testRecursiveSubSets() { int setSize = 1000; Class cl = TreeSet.class; NavigableSet set = newSet(cl); bs = new BitSet(setSize); populate(set, setSize); check(set, 0, setSize - 1, true); check(set.descendingSet(), 0, setSize - 1, false); mutateSet(set, 0, setSize - 1); check(set, 0, setSize - 1, true); check(set.descendingSet(), 0, setSize - 1, false); bashSubSet(set.subSet(new Integer(0), true, new Integer(setSize), false), 0, setSize - 1, true); } static NavigableSet newSet(Class cl) { NavigableSet result = null; try { result = (NavigableSet) cl.newInstance(); } catch(Exception e) { fail(); } assertEquals(result.size(), 0); assertFalse(result.iterator().hasNext()); return result; } void populate(NavigableSet set, int limit) { for (int i = 0, n = 2 * limit / 3; i < n; i++) { int element = rnd.nextInt(limit); put(set, element); } } void mutateSet(NavigableSet set, int min, int max) { int size = set.size(); int rangeSize = max - min + 1; // Remove a bunch of entries directly for (int i = 0, n = rangeSize / 2; i < n; i++) { remove(set, min - 5 + rnd.nextInt(rangeSize + 10)); } // Remove a bunch of entries with iterator for(Iterator it = set.iterator(); it.hasNext(); ) { if (rnd.nextBoolean()) { bs.clear(((Integer)it.next()).intValue()); it.remove(); } } // Add entries till we're back to original size while (set.size() < size) { int element = min + rnd.nextInt(rangeSize); assertTrue(element >= min && element<= max); put(set, element); } } void mutateSubSet(NavigableSet set, int min, int max) { int size = set.size(); int rangeSize = max - min + 1; // Remove a bunch of entries directly for (int i = 0, n = rangeSize / 2; i < n; i++) { remove(set, min - 5 + rnd.nextInt(rangeSize + 10)); } // Remove a bunch of entries with iterator for(Iterator it = set.iterator(); it.hasNext(); ) { if (rnd.nextBoolean()) { bs.clear(((Integer)it.next()).intValue()); it.remove(); } } // Add entries till we're back to original size while (set.size() < size) { int element = min - 5 + rnd.nextInt(rangeSize + 10); if (element >= min && element<= max) { put(set, element); } else { try { set.add(new Integer(element)); fail(); } catch(IllegalArgumentException e) { // expected } } } } void put(NavigableSet set, int element) { if (set.add(new Integer(element))) bs.set(element); } void remove(NavigableSet set, int element) { if (set.remove(new Integer(element))) bs.clear(element); } void bashSubSet(NavigableSet set, int min, int max, boolean ascending) { check(set, min, max, ascending); check(set.descendingSet(), min, max, !ascending); mutateSubSet(set, min, max); check(set, min, max, ascending); check(set.descendingSet(), min, max, !ascending); // Recurse if (max - min < 2) return; int midPoint = (min + max) / 2; // headSet - pick direction and endpoint inclusion randomly boolean incl = rnd.nextBoolean(); NavigableSet hm = set.headSet(new Integer(midPoint), incl); if (ascending) { if (rnd.nextBoolean()) bashSubSet(hm, min, midPoint - (incl ? 0 : 1), true); else bashSubSet(hm.descendingSet(), min, midPoint - (incl ? 0 : 1), false); } else { if (rnd.nextBoolean()) bashSubSet(hm, midPoint + (incl ? 0 : 1), max, false); else bashSubSet(hm.descendingSet(), midPoint + (incl ? 0 : 1), max, true); } // tailSet - pick direction and endpoint inclusion randomly incl = rnd.nextBoolean(); NavigableSet tm = set.tailSet(new Integer(midPoint),incl); if (ascending) { if (rnd.nextBoolean()) bashSubSet(tm, midPoint + (incl ? 0 : 1), max, true); else bashSubSet(tm.descendingSet(), midPoint + (incl ? 0 : 1), max, false); } else { if (rnd.nextBoolean()) { bashSubSet(tm, min, midPoint - (incl ? 0 : 1), false); } else { bashSubSet(tm.descendingSet(), min, midPoint - (incl ? 0 : 1), true); } } // subSet - pick direction and endpoint inclusion randomly int rangeSize = max - min + 1; int[] endpoints = new int[2]; endpoints[0] = min + rnd.nextInt(rangeSize); endpoints[1] = min + rnd.nextInt(rangeSize); Arrays.sort(endpoints); boolean lowIncl = rnd.nextBoolean(); boolean highIncl = rnd.nextBoolean(); if (ascending) { NavigableSet sm = set.subSet( new Integer(endpoints[0]), lowIncl, new Integer(endpoints[1]), highIncl); if (rnd.nextBoolean()) bashSubSet(sm, endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), true); else bashSubSet(sm.descendingSet(), endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), false); } else { NavigableSet sm = set.subSet( new Integer(endpoints[1]), highIncl, new Integer(endpoints[0]), lowIncl); if (rnd.nextBoolean()) bashSubSet(sm, endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), false); else bashSubSet(sm.descendingSet(), endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), true); } } /** * min and max are both inclusive. If max < min, interval is empty. */ void check(NavigableSet set, final int min, final int max, final boolean ascending) { class ReferenceSet { int lower(int element) { return ascending ? lowerAscending(element) : higherAscending(element); } int floor(int element) { return ascending ? floorAscending(element) : ceilingAscending(element); } int ceiling(int element) { return ascending ? ceilingAscending(element) : floorAscending(element); } int higher(int element) { return ascending ? higherAscending(element) : lowerAscending(element); } int first() { return ascending ? firstAscending() : lastAscending(); } int last() { return ascending ? lastAscending() : firstAscending(); } int lowerAscending(int element) { return floorAscending(element - 1); } int floorAscending(int element) { if (element < min) return -1; else if (element > max) element = max; // BitSet should support this! Test would run much faster while (element >= min) { if (bs.get(element)) return(element); element--; } return -1; } int ceilingAscending(int element) { if (element < min) element = min; else if (element > max) return -1; int result = bs.nextSetBit(element); return result > max ? -1 : result; } int higherAscending(int element) { return ceilingAscending(element + 1); } private int firstAscending() { int result = ceilingAscending(min); return result > max ? -1 : result; } private int lastAscending() { int result = floorAscending(max); return result < min ? -1 : result; } } ReferenceSet rs = new ReferenceSet(); // Test contents using containsElement int size = 0; for (int i = min; i <= max; i++) { boolean bsContainsI = bs.get(i); assertEquals(bsContainsI, set.contains(new Integer(i))); if (bsContainsI) size++; } assertEquals(set.size(), size); // Test contents using contains elementSet iterator int size2 = 0; int previousElement = -1; for (Iterator itr = set.iterator(); itr.hasNext();) { int element = ((Integer)itr.next()).intValue(); assertTrue(bs.get(element)); size2++; assertTrue(previousElement < 0 || (ascending ? element - previousElement > 0 : element - previousElement < 0)); previousElement = element; } assertEquals(size2, size); // Test navigation ops for (int element = min - 1; element <= max + 1; element++) { assertEq((Integer)set.lower(new Integer(element)), rs.lower(element)); assertEq((Integer)set.floor(new Integer(element)), rs.floor(element)); assertEq((Integer)set.higher(new Integer(element)), rs.higher(element)); assertEq((Integer)set.ceiling(new Integer(element)), rs.ceiling(element)); } // Test extrema if (set.size() != 0) { assertEq((Integer)set.first(), rs.first()); assertEq((Integer)set.last(), rs.last()); } else { assertEq(new Integer(rs.first()), -1); assertEq(new Integer(rs.last()), -1); try { set.first(); fail(); } catch(NoSuchElementException e) { // expected } try { set.last(); fail(); } catch(NoSuchElementException e) { // expected } } } static void assertEq(Integer i, int j) { if (i == null) assertEquals(j, -1); else assertEquals(i.intValue(), j); } static boolean eq(Integer i, int j) { return i == null ? j == -1 : i.intValue() == j; } } backport-util-concurrent-3.1-src/test/tck/src/AtomicBooleanTest.java0000644001750700037720000001102310253674160024455 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import java.io.*; public class AtomicBooleanTest extends JSR166TestCase { public static void main (String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(AtomicBooleanTest.class); } /** * constructor initializes to given value */ public void testConstructor() { AtomicBoolean ai = new AtomicBoolean(true); assertEquals(true,ai.get()); } /** * default constructed initializes to false */ public void testConstructor2() { AtomicBoolean ai = new AtomicBoolean(); assertEquals(false,ai.get()); } /** * get returns the last value set */ public void testGetSet() { AtomicBoolean ai = new AtomicBoolean(true); assertEquals(true,ai.get()); ai.set(false); assertEquals(false,ai.get()); ai.set(true); assertEquals(true,ai.get()); } /** * get returns the last value lazySet in same thread */ public void testGetLazySet() { AtomicBoolean ai = new AtomicBoolean(true); assertEquals(true,ai.get()); ai.lazySet(false); assertEquals(false,ai.get()); ai.lazySet(true); assertEquals(true,ai.get()); } /** * compareAndSet succeeds in changing value if equal to expected else fails */ public void testCompareAndSet() { AtomicBoolean ai = new AtomicBoolean(true); assertTrue(ai.compareAndSet(true,false)); assertEquals(false,ai.get()); assertTrue(ai.compareAndSet(false,false)); assertEquals(false,ai.get()); assertFalse(ai.compareAndSet(true,false)); assertFalse((ai.get())); assertTrue(ai.compareAndSet(false,true)); assertEquals(true,ai.get()); } /** * compareAndSet in one thread enables another waiting for value * to succeed */ public void testCompareAndSetInMultipleThreads() { final AtomicBoolean ai = new AtomicBoolean(true); Thread t = new Thread(new Runnable() { public void run() { while(!ai.compareAndSet(false, true)) Thread.yield(); }}); try { t.start(); assertTrue(ai.compareAndSet(true, false)); t.join(LONG_DELAY_MS); assertFalse(t.isAlive()); } catch(Exception e) { unexpectedException(); } } /** * repeated weakCompareAndSet succeeds in changing value when equal * to expected */ public void testWeakCompareAndSet() { AtomicBoolean ai = new AtomicBoolean(true); while(!ai.weakCompareAndSet(true,false)); assertEquals(false,ai.get()); while(!ai.weakCompareAndSet(false,false)); assertEquals(false,ai.get()); while(!ai.weakCompareAndSet(false,true)); assertEquals(true,ai.get()); } /** * getAndSet returns previous value and sets to given value */ public void testGetAndSet() { AtomicBoolean ai = new AtomicBoolean(true); assertEquals(true,ai.getAndSet(false)); assertEquals(false,ai.getAndSet(false)); assertEquals(false,ai.getAndSet(true)); assertEquals(true,ai.get()); } /** * a deserialized serialized atomic holds same value */ public void testSerialization() { AtomicBoolean l = new AtomicBoolean(); try { l.set(true); ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(l); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); AtomicBoolean r = (AtomicBoolean) in.readObject(); assertEquals(l.get(), r.get()); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * toString returns current value. */ public void testToString() { AtomicBoolean ai = new AtomicBoolean(); assertEquals(ai.toString(), Boolean.toString(false)); ai.set(true); assertEquals(ai.toString(), Boolean.toString(true)); } } backport-util-concurrent-3.1-src/test/tck/src/ThreadLocalTest.java0000644001750700037720000000575010153210664024127 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.Semaphore; public class ThreadLocalTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public static Test suite() { return new TestSuite(ThreadLocalTest.class); } static ThreadLocal tl = new ThreadLocal() { public Object initialValue() { return one; } }; static InheritableThreadLocal itl = new InheritableThreadLocal() { protected Object initialValue() { return zero; } protected Object childValue(Object parentValue) { return new Integer(((Integer)parentValue).intValue() + 1); } }; // /** // * remove causes next access to return initial value // */ // public void testRemove() { // assertEquals(tl.get(), one); // tl.set(two); // assertEquals(tl.get(), two); // tl.remove(); // assertEquals(tl.get(), one); // } // // /** // * remove in InheritableThreadLocal causes next access to return // * initial value // */ // public void testRemoveITL() { // assertEquals(itl.get(), zero); // itl.set(two); // assertEquals(itl.get(), two); // itl.remove(); // assertEquals(itl.get(), zero); // } private class ITLThread extends Thread { final int[] x; ITLThread(int[] array) { x = array; } public void run() { Thread child = null; if (((Integer)itl.get()).intValue() < x.length - 1) { child = new ITLThread(x); child.start(); } Thread.currentThread().yield(); int threadId = ((Integer)itl.get()).intValue(); for (int j = 0; j < threadId; j++) { x[threadId]++; Thread.currentThread().yield(); } if (child != null) { // Wait for child (if any) try { child.join(); } catch(InterruptedException e) { threadUnexpectedException(); } } } } /** * InheritableThreadLocal propagates generic values. */ public void testGenericITL() { final int threadCount = 10; final int x[] = new int[threadCount]; Thread progenitor = new ITLThread(x); try { progenitor.start(); progenitor.join(); for(int i = 0; i < threadCount; i++) { assertEquals(i, x[i]); } } catch(InterruptedException e) { unexpectedException(); } } } backport-util-concurrent-3.1-src/test/tck/src/ConcurrentSkipListSubMapTest.java0000644001750700037720000012366010431777323026674 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import junit.framework.*; import java.util.Collection; import java.util.Set; import java.util.Arrays; import java.util.Iterator; import java.util.Map; import java.util.ArrayList; import java.util.SortedMap; import java.io.*; import edu.emory.mathcs.backport.java.util.concurrent.*; public class ConcurrentSkipListSubMapTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ConcurrentSkipListSubMapTest.class); } /** * Create a map from Integers 1-5 to Strings "A"-"E". */ private static ConcurrentNavigableMap map5() { ConcurrentSkipListMap map = new ConcurrentSkipListMap(); assertTrue(map.isEmpty()); map.put(zero, "Z"); map.put(one, "A"); map.put(five, "E"); map.put(three, "C"); map.put(two, "B"); map.put(four, "D"); map.put(seven, "F"); assertFalse(map.isEmpty()); assertEquals(7, map.size()); return (ConcurrentNavigableMap)map.subMap(one, true, seven, false); } /** * Create a map from Integers -5 to -1 to Strings "A"-"E". */ private static ConcurrentNavigableMap dmap5() { ConcurrentSkipListMap map = new ConcurrentSkipListMap(); assertTrue(map.isEmpty()); map.put(m1, "A"); map.put(m5, "E"); map.put(m3, "C"); map.put(m2, "B"); map.put(m4, "D"); assertFalse(map.isEmpty()); assertEquals(5, map.size()); return (ConcurrentNavigableMap)map.descendingMap(); } private static ConcurrentNavigableMap map0() { ConcurrentSkipListMap map = new ConcurrentSkipListMap(); assertTrue(map.isEmpty()); return (ConcurrentNavigableMap)map.tailMap(one, true); } private static ConcurrentNavigableMap dmap0() { ConcurrentSkipListMap map = new ConcurrentSkipListMap(); assertTrue(map.isEmpty()); return map; } /** * clear removes all pairs */ public void testClear() { ConcurrentNavigableMap map = map5(); map.clear(); assertEquals(map.size(), 0); } /** * Maps with same contents are equal */ public void testEquals() { ConcurrentNavigableMap map1 = map5(); ConcurrentNavigableMap map2 = map5(); assertEquals(map1, map2); assertEquals(map2, map1); map1.clear(); assertFalse(map1.equals(map2)); assertFalse(map2.equals(map1)); } /** * containsKey returns true for contained key */ public void testContainsKey() { ConcurrentNavigableMap map = map5(); assertTrue(map.containsKey(one)); assertFalse(map.containsKey(zero)); } /** * containsValue returns true for held values */ public void testContainsValue() { ConcurrentNavigableMap map = map5(); assertTrue(map.containsValue("A")); assertFalse(map.containsValue("Z")); } /** * get returns the correct element at the given key, * or null if not present */ public void testGet() { ConcurrentNavigableMap map = map5(); assertEquals("A", (String)map.get(one)); ConcurrentNavigableMap empty = map0(); assertNull(empty.get(one)); } /** * isEmpty is true of empty map and false for non-empty */ public void testIsEmpty() { ConcurrentNavigableMap empty = map0(); ConcurrentNavigableMap map = map5(); assertTrue(empty.isEmpty()); assertFalse(map.isEmpty()); } /** * firstKey returns first key */ public void testFirstKey() { ConcurrentNavigableMap map = map5(); assertEquals(one, map.firstKey()); } /** * lastKey returns last key */ public void testLastKey() { ConcurrentNavigableMap map = map5(); assertEquals(five, map.lastKey()); } /** * keySet returns a Set containing all the keys */ public void testKeySet() { ConcurrentNavigableMap map = map5(); Set s = map.keySet(); assertEquals(5, s.size()); assertTrue(s.contains(one)); assertTrue(s.contains(two)); assertTrue(s.contains(three)); assertTrue(s.contains(four)); assertTrue(s.contains(five)); } /** * keySet is ordered */ public void testKeySetOrder() { ConcurrentNavigableMap map = map5(); Set s = map.keySet(); Iterator i = s.iterator(); Integer last = (Integer)i.next(); assertEquals(last, one); while (i.hasNext()) { Integer k = (Integer)i.next(); assertTrue(last.compareTo(k) < 0); last = k; } } /** * values collection contains all values */ public void testValues() { ConcurrentNavigableMap map = map5(); Collection s = map.values(); assertEquals(5, s.size()); assertTrue(s.contains("A")); assertTrue(s.contains("B")); assertTrue(s.contains("C")); assertTrue(s.contains("D")); assertTrue(s.contains("E")); } /** * keySet.toArray returns contains all keys */ public void testKeySetToArray() { ConcurrentNavigableMap map = map5(); Set s = map.keySet(); Object[] ar = s.toArray(); assertTrue(s.containsAll(Arrays.asList(ar))); assertEquals(5, ar.length); ar[0] = m10; assertFalse(s.containsAll(Arrays.asList(ar))); } /** * descendingkeySet.toArray returns contains all keys */ public void testDescendingKeySetToArray() { ConcurrentNavigableMap map = map5(); Set s = map.descendingKeySet(); Object[] ar = s.toArray(); assertEquals(5, ar.length); assertTrue(s.containsAll(Arrays.asList(ar))); ar[0] = m10; assertFalse(s.containsAll(Arrays.asList(ar))); } /** * Values.toArray contains all values */ public void testValuesToArray() { ConcurrentNavigableMap map = map5(); Collection v = map.values(); Object[] ar = v.toArray(); ArrayList s = new ArrayList(Arrays.asList(ar)); assertEquals(5, ar.length); assertTrue(s.contains("A")); assertTrue(s.contains("B")); assertTrue(s.contains("C")); assertTrue(s.contains("D")); assertTrue(s.contains("E")); } /** * entrySet contains all pairs */ public void testEntrySet() { ConcurrentNavigableMap map = map5(); Set s = map.entrySet(); assertEquals(5, s.size()); Iterator it = s.iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); assertTrue( (e.getKey().equals(one) && e.getValue().equals("A")) || (e.getKey().equals(two) && e.getValue().equals("B")) || (e.getKey().equals(three) && e.getValue().equals("C")) || (e.getKey().equals(four) && e.getValue().equals("D")) || (e.getKey().equals(five) && e.getValue().equals("E"))); } } /** * putAll adds all key-value pairs from the given map */ public void testPutAll() { ConcurrentNavigableMap empty = map0(); ConcurrentNavigableMap map = map5(); empty.putAll(map); assertEquals(5, empty.size()); assertTrue(empty.containsKey(one)); assertTrue(empty.containsKey(two)); assertTrue(empty.containsKey(three)); assertTrue(empty.containsKey(four)); assertTrue(empty.containsKey(five)); } /** * putIfAbsent works when the given key is not present */ public void testPutIfAbsent() { ConcurrentNavigableMap map = map5(); map.putIfAbsent(six, "Z"); assertTrue(map.containsKey(six)); } /** * putIfAbsent does not add the pair if the key is already present */ public void testPutIfAbsent2() { ConcurrentNavigableMap map = map5(); assertEquals("A", map.putIfAbsent(one, "Z")); } /** * replace fails when the given key is not present */ public void testReplace() { ConcurrentNavigableMap map = map5(); assertNull(map.replace(six, "Z")); assertFalse(map.containsKey(six)); } /** * replace succeeds if the key is already present */ public void testReplace2() { ConcurrentNavigableMap map = map5(); assertNotNull(map.replace(one, "Z")); assertEquals("Z", map.get(one)); } /** * replace value fails when the given key not mapped to expected value */ public void testReplaceValue() { ConcurrentNavigableMap map = map5(); assertEquals("A", map.get(one)); assertFalse(map.replace(one, "Z", "Z")); assertEquals("A", map.get(one)); } /** * replace value succeeds when the given key mapped to expected value */ public void testReplaceValue2() { ConcurrentNavigableMap map = map5(); assertEquals("A", map.get(one)); assertTrue(map.replace(one, "A", "Z")); assertEquals("Z", map.get(one)); } /** * remove removes the correct key-value pair from the map */ public void testRemove() { ConcurrentNavigableMap map = map5(); map.remove(five); assertEquals(4, map.size()); assertFalse(map.containsKey(five)); } /** * remove(key,value) removes only if pair present */ public void testRemove2() { ConcurrentNavigableMap map = map5(); assertTrue(map.containsKey(five)); assertEquals("E", map.get(five)); map.remove(five, "E"); assertEquals(4, map.size()); assertFalse(map.containsKey(five)); map.remove(four, "A"); assertEquals(4, map.size()); assertTrue(map.containsKey(four)); } /** * lowerEntry returns preceding entry. */ public void testLowerEntry() { ConcurrentNavigableMap map = map5(); Map.Entry e1 = map.lowerEntry(three); assertEquals(two, e1.getKey()); Map.Entry e2 = map.lowerEntry(six); assertEquals(five, e2.getKey()); Map.Entry e3 = map.lowerEntry(one); assertNull(e3); Map.Entry e4 = map.lowerEntry(zero); assertNull(e4); } /** * higherEntry returns next entry. */ public void testHigherEntry() { ConcurrentNavigableMap map = map5(); Map.Entry e1 = map.higherEntry(three); assertEquals(four, e1.getKey()); Map.Entry e2 = map.higherEntry(zero); assertEquals(one, e2.getKey()); Map.Entry e3 = map.higherEntry(five); assertNull(e3); Map.Entry e4 = map.higherEntry(six); assertNull(e4); } /** * floorEntry returns preceding entry. */ public void testFloorEntry() { ConcurrentNavigableMap map = map5(); Map.Entry e1 = map.floorEntry(three); assertEquals(three, e1.getKey()); Map.Entry e2 = map.floorEntry(six); assertEquals(five, e2.getKey()); Map.Entry e3 = map.floorEntry(one); assertEquals(one, e3.getKey()); Map.Entry e4 = map.floorEntry(zero); assertNull(e4); } /** * ceilingEntry returns next entry. */ public void testCeilingEntry() { ConcurrentNavigableMap map = map5(); Map.Entry e1 = map.ceilingEntry(three); assertEquals(three, e1.getKey()); Map.Entry e2 = map.ceilingEntry(zero); assertEquals(one, e2.getKey()); Map.Entry e3 = map.ceilingEntry(five); assertEquals(five, e3.getKey()); Map.Entry e4 = map.ceilingEntry(six); assertNull(e4); } /** * pollFirstEntry returns entries in order */ public void testPollFirstEntry() { ConcurrentNavigableMap map = map5(); Map.Entry e = map.pollFirstEntry(); assertEquals(one, e.getKey()); assertEquals("A", e.getValue()); e = map.pollFirstEntry(); assertEquals(two, e.getKey()); map.put(one, "A"); e = map.pollFirstEntry(); assertEquals(one, e.getKey()); assertEquals("A", e.getValue()); e = map.pollFirstEntry(); assertEquals(three, e.getKey()); map.remove(four); e = map.pollFirstEntry(); assertEquals(five, e.getKey()); try { e.setValue("A"); shouldThrow(); } catch (Exception ok) { } e = map.pollFirstEntry(); assertNull(e); } /** * pollLastEntry returns entries in order */ public void testPollLastEntry() { ConcurrentNavigableMap map = map5(); Map.Entry e = map.pollLastEntry(); assertEquals(five, e.getKey()); assertEquals("E", e.getValue()); e = map.pollLastEntry(); assertEquals(four, e.getKey()); map.put(five, "E"); e = map.pollLastEntry(); assertEquals(five, e.getKey()); assertEquals("E", e.getValue()); e = map.pollLastEntry(); assertEquals(three, e.getKey()); map.remove(two); e = map.pollLastEntry(); assertEquals(one, e.getKey()); try { e.setValue("E"); shouldThrow(); } catch (Exception ok) { } e = map.pollLastEntry(); assertNull(e); } /** * size returns the correct values */ public void testSize() { ConcurrentNavigableMap map = map5(); ConcurrentNavigableMap empty = map0(); assertEquals(0, empty.size()); assertEquals(5, map.size()); } /** * toString contains toString of elements */ public void testToString() { ConcurrentNavigableMap map = map5(); String s = map.toString(); for (int i = 1; i <= 5; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } // Exception tests /** * get(null) of nonempty map throws NPE */ public void testGet_NullPointerException() { try { ConcurrentNavigableMap c = map5(); c.get(null); shouldThrow(); } catch(NullPointerException e){} } /** * containsKey(null) of nonempty map throws NPE */ public void testContainsKey_NullPointerException() { try { ConcurrentNavigableMap c = map5(); c.containsKey(null); shouldThrow(); } catch(NullPointerException e){} } /** * containsValue(null) throws NPE */ public void testContainsValue_NullPointerException() { try { ConcurrentNavigableMap c = map0(); c.containsValue(null); shouldThrow(); } catch(NullPointerException e){} } /** * put(null,x) throws NPE */ public void testPut1_NullPointerException() { try { ConcurrentNavigableMap c = map5(); c.put(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * putIfAbsent(null, x) throws NPE */ public void testPutIfAbsent1_NullPointerException() { try { ConcurrentNavigableMap c = map5(); c.putIfAbsent(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * replace(null, x) throws NPE */ public void testReplace_NullPointerException() { try { ConcurrentNavigableMap c = map5(); c.replace(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * replace(null, x, y) throws NPE */ public void testReplaceValue_NullPointerException() { try { ConcurrentNavigableMap c = map5(); c.replace(null, one, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * remove(null) throws NPE */ public void testRemove1_NullPointerException() { try { ConcurrentNavigableMap c = map5(); c.remove(null); shouldThrow(); } catch(NullPointerException e){} } /** * remove(null, x) throws NPE */ public void testRemove2_NullPointerException() { try { ConcurrentNavigableMap c = map5(); c.remove(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * A deserialized map equals original */ public void testSerialization() { ConcurrentNavigableMap q = map5(); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); ConcurrentNavigableMap r = (ConcurrentNavigableMap)in.readObject(); assertEquals(q.size(), r.size()); assertTrue(q.equals(r)); assertTrue(r.equals(q)); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * subMap returns map with keys in requested range */ public void testSubMapContents() { ConcurrentNavigableMap map = map5(); SortedMap sm = map.subMap(two, four); assertEquals(two, sm.firstKey()); assertEquals(three, sm.lastKey()); assertEquals(2, sm.size()); assertFalse(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertTrue(sm.containsKey(three)); assertFalse(sm.containsKey(four)); assertFalse(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); Iterator j = sm.keySet().iterator(); j.next(); j.remove(); assertFalse(map.containsKey(two)); assertEquals(4, map.size()); assertEquals(1, sm.size()); assertEquals(three, sm.firstKey()); assertEquals(three, sm.lastKey()); assertTrue(sm.remove(three) != null); assertTrue(sm.isEmpty()); assertEquals(3, map.size()); } public void testSubMapContents2() { ConcurrentNavigableMap map = map5(); SortedMap sm = map.subMap(two, three); assertEquals(1, sm.size()); assertEquals(two, sm.firstKey()); assertEquals(two, sm.lastKey()); assertFalse(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertFalse(sm.containsKey(three)); assertFalse(sm.containsKey(four)); assertFalse(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); assertFalse(i.hasNext()); Iterator j = sm.keySet().iterator(); j.next(); j.remove(); assertFalse(map.containsKey(two)); assertEquals(4, map.size()); assertEquals(0, sm.size()); assertTrue(sm.isEmpty()); assertTrue(sm.remove(three) == null); assertEquals(4, map.size()); } /** * headMap returns map with keys in requested range */ public void testHeadMapContents() { ConcurrentNavigableMap map = map5(); SortedMap sm = map.headMap(four); assertTrue(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertTrue(sm.containsKey(three)); assertFalse(sm.containsKey(four)); assertFalse(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(one, k); k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); sm.clear(); assertTrue(sm.isEmpty()); assertEquals(2, map.size()); assertEquals(four, map.firstKey()); } /** * headMap returns map with keys in requested range */ public void testTailMapContents() { ConcurrentNavigableMap map = map5(); SortedMap sm = map.tailMap(two); assertFalse(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertTrue(sm.containsKey(three)); assertTrue(sm.containsKey(four)); assertTrue(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); k = (Integer)(i.next()); assertEquals(four, k); k = (Integer)(i.next()); assertEquals(five, k); assertFalse(i.hasNext()); Iterator ei = sm.entrySet().iterator(); Map.Entry e; e = (Map.Entry)(ei.next()); assertEquals(two, e.getKey()); assertEquals("B", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(three, e.getKey()); assertEquals("C", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(four, e.getKey()); assertEquals("D", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(five, e.getKey()); assertEquals("E", e.getValue()); assertFalse(i.hasNext()); SortedMap ssm = sm.tailMap(four); assertEquals(four, ssm.firstKey()); assertEquals(five, ssm.lastKey()); assertTrue(ssm.remove(four) != null); assertEquals(1, ssm.size()); assertEquals(3, sm.size()); assertEquals(4, map.size()); } /** * clear removes all pairs */ public void testDescendingClear() { ConcurrentNavigableMap map = dmap5(); map.clear(); assertEquals(map.size(), 0); } /** * Maps with same contents are equal */ public void testDescendingEquals() { ConcurrentNavigableMap map1 = dmap5(); ConcurrentNavigableMap map2 = dmap5(); assertEquals(map1, map2); assertEquals(map2, map1); map1.clear(); assertFalse(map1.equals(map2)); assertFalse(map2.equals(map1)); } /** * containsKey returns true for contained key */ public void testDescendingContainsKey() { ConcurrentNavigableMap map = dmap5(); assertTrue(map.containsKey(m1)); assertFalse(map.containsKey(zero)); } /** * containsValue returns true for held values */ public void testDescendingContainsValue() { ConcurrentNavigableMap map = dmap5(); assertTrue(map.containsValue("A")); assertFalse(map.containsValue("Z")); } /** * get returns the correct element at the given key, * or null if not present */ public void testDescendingGet() { ConcurrentNavigableMap map = dmap5(); assertEquals("A", (String)map.get(m1)); ConcurrentNavigableMap empty = dmap0(); assertNull(empty.get(m1)); } /** * isEmpty is true of empty map and false for non-empty */ public void testDescendingIsEmpty() { ConcurrentNavigableMap empty = dmap0(); ConcurrentNavigableMap map = dmap5(); assertTrue(empty.isEmpty()); assertFalse(map.isEmpty()); } /** * firstKey returns first key */ public void testDescendingFirstKey() { ConcurrentNavigableMap map = dmap5(); assertEquals(m1, map.firstKey()); } /** * lastKey returns last key */ public void testDescendingLastKey() { ConcurrentNavigableMap map = dmap5(); assertEquals(m5, map.lastKey()); } /** * keySet returns a Set containing all the keys */ public void testDescendingKeySet() { ConcurrentNavigableMap map = dmap5(); Set s = map.keySet(); assertEquals(5, s.size()); assertTrue(s.contains(m1)); assertTrue(s.contains(m2)); assertTrue(s.contains(m3)); assertTrue(s.contains(m4)); assertTrue(s.contains(m5)); } /** * keySet is ordered */ public void testDescendingKeySetOrder() { ConcurrentNavigableMap map = dmap5(); Set s = map.keySet(); Iterator i = s.iterator(); Integer last = (Integer)i.next(); assertEquals(last, m1); while (i.hasNext()) { Integer k = (Integer)i.next(); assertTrue(last.compareTo(k) > 0); last = k; } } /** * values collection contains all values */ public void testDescendingValues() { ConcurrentNavigableMap map = dmap5(); Collection s = map.values(); assertEquals(5, s.size()); assertTrue(s.contains("A")); assertTrue(s.contains("B")); assertTrue(s.contains("C")); assertTrue(s.contains("D")); assertTrue(s.contains("E")); } /** * keySet.toArray returns contains all keys */ public void testDescendingAscendingKeySetToArray() { ConcurrentNavigableMap map = dmap5(); Set s = map.keySet(); Object[] ar = s.toArray(); assertTrue(s.containsAll(Arrays.asList(ar))); assertEquals(5, ar.length); ar[0] = m10; assertFalse(s.containsAll(Arrays.asList(ar))); } /** * descendingkeySet.toArray returns contains all keys */ public void testDescendingDescendingKeySetToArray() { ConcurrentNavigableMap map = dmap5(); Set s = map.descendingKeySet(); Object[] ar = s.toArray(); assertEquals(5, ar.length); assertTrue(s.containsAll(Arrays.asList(ar))); ar[0] = m10; assertFalse(s.containsAll(Arrays.asList(ar))); } /** * Values.toArray contains all values */ public void testDescendingValuesToArray() { ConcurrentNavigableMap map = dmap5(); Collection v = map.values(); Object[] ar = v.toArray(); ArrayList s = new ArrayList(Arrays.asList(ar)); assertEquals(5, ar.length); assertTrue(s.contains("A")); assertTrue(s.contains("B")); assertTrue(s.contains("C")); assertTrue(s.contains("D")); assertTrue(s.contains("E")); } /** * entrySet contains all pairs */ public void testDescendingEntrySet() { ConcurrentNavigableMap map = dmap5(); Set s = map.entrySet(); assertEquals(5, s.size()); Iterator it = s.iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); assertTrue( (e.getKey().equals(m1) && e.getValue().equals("A")) || (e.getKey().equals(m2) && e.getValue().equals("B")) || (e.getKey().equals(m3) && e.getValue().equals("C")) || (e.getKey().equals(m4) && e.getValue().equals("D")) || (e.getKey().equals(m5) && e.getValue().equals("E"))); } } /** * putAll adds all key-value pairs from the given map */ public void testDescendingPutAll() { ConcurrentNavigableMap empty = dmap0(); ConcurrentNavigableMap map = dmap5(); empty.putAll(map); assertEquals(5, empty.size()); assertTrue(empty.containsKey(m1)); assertTrue(empty.containsKey(m2)); assertTrue(empty.containsKey(m3)); assertTrue(empty.containsKey(m4)); assertTrue(empty.containsKey(m5)); } /** * putIfAbsent works when the given key is not present */ public void testDescendingPutIfAbsent() { ConcurrentNavigableMap map = dmap5(); map.putIfAbsent(six, "Z"); assertTrue(map.containsKey(six)); } /** * putIfAbsent does not add the pair if the key is already present */ public void testDescendingPutIfAbsent2() { ConcurrentNavigableMap map = dmap5(); assertEquals("A", map.putIfAbsent(m1, "Z")); } /** * replace fails when the given key is not present */ public void testDescendingReplace() { ConcurrentNavigableMap map = dmap5(); assertNull(map.replace(six, "Z")); assertFalse(map.containsKey(six)); } /** * replace succeeds if the key is already present */ public void testDescendingReplace2() { ConcurrentNavigableMap map = dmap5(); assertNotNull(map.replace(m1, "Z")); assertEquals("Z", map.get(m1)); } /** * replace value fails when the given key not mapped to expected value */ public void testDescendingReplaceValue() { ConcurrentNavigableMap map = dmap5(); assertEquals("A", map.get(m1)); assertFalse(map.replace(m1, "Z", "Z")); assertEquals("A", map.get(m1)); } /** * replace value succeeds when the given key mapped to expected value */ public void testDescendingReplaceValue2() { ConcurrentNavigableMap map = dmap5(); assertEquals("A", map.get(m1)); assertTrue(map.replace(m1, "A", "Z")); assertEquals("Z", map.get(m1)); } /** * remove removes the correct key-value pair from the map */ public void testDescendingRemove() { ConcurrentNavigableMap map = dmap5(); map.remove(m5); assertEquals(4, map.size()); assertFalse(map.containsKey(m5)); } /** * remove(key,value) removes only if pair present */ public void testDescendingRemove2() { ConcurrentNavigableMap map = dmap5(); assertTrue(map.containsKey(m5)); assertEquals("E", map.get(m5)); map.remove(m5, "E"); assertEquals(4, map.size()); assertFalse(map.containsKey(m5)); map.remove(m4, "A"); assertEquals(4, map.size()); assertTrue(map.containsKey(m4)); } /** * lowerEntry returns preceding entry. */ public void testDescendingLowerEntry() { ConcurrentNavigableMap map = dmap5(); Map.Entry e1 = map.lowerEntry(m3); assertEquals(m2, e1.getKey()); Map.Entry e2 = map.lowerEntry(m6); assertEquals(m5, e2.getKey()); Map.Entry e3 = map.lowerEntry(m1); assertNull(e3); Map.Entry e4 = map.lowerEntry(zero); assertNull(e4); } /** * higherEntry returns next entry. */ public void testDescendingHigherEntry() { ConcurrentNavigableMap map = dmap5(); Map.Entry e1 = map.higherEntry(m3); assertEquals(m4, e1.getKey()); Map.Entry e2 = map.higherEntry(zero); assertEquals(m1, e2.getKey()); Map.Entry e3 = map.higherEntry(m5); assertNull(e3); Map.Entry e4 = map.higherEntry(m6); assertNull(e4); } /** * floorEntry returns preceding entry. */ public void testDescendingFloorEntry() { ConcurrentNavigableMap map = dmap5(); Map.Entry e1 = map.floorEntry(m3); assertEquals(m3, e1.getKey()); Map.Entry e2 = map.floorEntry(m6); assertEquals(m5, e2.getKey()); Map.Entry e3 = map.floorEntry(m1); assertEquals(m1, e3.getKey()); Map.Entry e4 = map.floorEntry(zero); assertNull(e4); } /** * ceilingEntry returns next entry. */ public void testDescendingCeilingEntry() { ConcurrentNavigableMap map = dmap5(); Map.Entry e1 = map.ceilingEntry(m3); assertEquals(m3, e1.getKey()); Map.Entry e2 = map.ceilingEntry(zero); assertEquals(m1, e2.getKey()); Map.Entry e3 = map.ceilingEntry(m5); assertEquals(m5, e3.getKey()); Map.Entry e4 = map.ceilingEntry(m6); assertNull(e4); } /** * pollFirstEntry returns entries in order */ public void testDescendingPollFirstEntry() { ConcurrentNavigableMap map = dmap5(); Map.Entry e = map.pollFirstEntry(); assertEquals(m1, e.getKey()); assertEquals("A", e.getValue()); e = map.pollFirstEntry(); assertEquals(m2, e.getKey()); map.put(m1, "A"); e = map.pollFirstEntry(); assertEquals(m1, e.getKey()); assertEquals("A", e.getValue()); e = map.pollFirstEntry(); assertEquals(m3, e.getKey()); map.remove(m4); e = map.pollFirstEntry(); assertEquals(m5, e.getKey()); try { e.setValue("A"); shouldThrow(); } catch (Exception ok) { } e = map.pollFirstEntry(); assertNull(e); } /** * pollLastEntry returns entries in order */ public void testDescendingPollLastEntry() { ConcurrentNavigableMap map = dmap5(); Map.Entry e = map.pollLastEntry(); assertEquals(m5, e.getKey()); assertEquals("E", e.getValue()); e = map.pollLastEntry(); assertEquals(m4, e.getKey()); map.put(m5, "E"); e = map.pollLastEntry(); assertEquals(m5, e.getKey()); assertEquals("E", e.getValue()); e = map.pollLastEntry(); assertEquals(m3, e.getKey()); map.remove(m2); e = map.pollLastEntry(); assertEquals(m1, e.getKey()); try { e.setValue("E"); shouldThrow(); } catch (Exception ok) { } e = map.pollLastEntry(); assertNull(e); } /** * size returns the correct values */ public void testDescendingSize() { ConcurrentNavigableMap map = dmap5(); ConcurrentNavigableMap empty = dmap0(); assertEquals(0, empty.size()); assertEquals(5, map.size()); } /** * toString contains toString of elements */ public void testDescendingToString() { ConcurrentNavigableMap map = dmap5(); String s = map.toString(); for (int i = 1; i <= 5; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } // Exception testDescendings /** * get(null) of nm1mpty map throws NPE */ public void testDescendingGet_NullPointerException() { try { ConcurrentNavigableMap c = dmap5(); c.get(null); shouldThrow(); } catch(NullPointerException e){} } /** * containsKey(null) of nm1mpty map throws NPE */ public void testDescendingContainsKey_NullPointerException() { try { ConcurrentNavigableMap c = dmap5(); c.containsKey(null); shouldThrow(); } catch(NullPointerException e){} } /** * containsValue(null) throws NPE */ public void testDescendingContainsValue_NullPointerException() { try { ConcurrentNavigableMap c = dmap0(); c.containsValue(null); shouldThrow(); } catch(NullPointerException e){} } /** * put(null,x) throws NPE */ public void testDescendingPut1_NullPointerException() { try { ConcurrentNavigableMap c = dmap5(); c.put(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * putIfAbsent(null, x) throws NPE */ public void testDescendingPutIfAbsent1_NullPointerException() { try { ConcurrentNavigableMap c = dmap5(); c.putIfAbsent(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * replace(null, x) throws NPE */ public void testDescendingReplace_NullPointerException() { try { ConcurrentNavigableMap c = dmap5(); c.replace(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * replace(null, x, y) throws NPE */ public void testDescendingReplaceValue_NullPointerException() { try { ConcurrentNavigableMap c = dmap5(); c.replace(null, m1, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * remove(null) throws NPE */ public void testDescendingRemove1_NullPointerException() { try { ConcurrentNavigableMap c = dmap5(); c.remove(null); shouldThrow(); } catch(NullPointerException e){} } /** * remove(null, x) throws NPE */ public void testDescendingRemove2_NullPointerException() { try { ConcurrentNavigableMap c = dmap5(); c.remove(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * A deserialized map equals original */ public void testDescendingSerialization() { ConcurrentNavigableMap q = dmap5(); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); ConcurrentNavigableMap r = (ConcurrentNavigableMap)in.readObject(); assertEquals(q.size(), r.size()); assertTrue(q.equals(r)); assertTrue(r.equals(q)); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * subMap returns map with keys in requested range */ public void testDescendingSubMapContents() { ConcurrentNavigableMap map = dmap5(); SortedMap sm = map.subMap(m2, m4); assertEquals(m2, sm.firstKey()); assertEquals(m3, sm.lastKey()); assertEquals(2, sm.size()); assertFalse(sm.containsKey(m1)); assertTrue(sm.containsKey(m2)); assertTrue(sm.containsKey(m3)); assertFalse(sm.containsKey(m4)); assertFalse(sm.containsKey(m5)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(m2, k); k = (Integer)(i.next()); assertEquals(m3, k); assertFalse(i.hasNext()); Iterator j = sm.keySet().iterator(); j.next(); j.remove(); assertFalse(map.containsKey(m2)); assertEquals(4, map.size()); assertEquals(1, sm.size()); assertEquals(m3, sm.firstKey()); assertEquals(m3, sm.lastKey()); assertTrue(sm.remove(m3) != null); assertTrue(sm.isEmpty()); assertEquals(3, map.size()); } public void testDescendingSubMapContents2() { ConcurrentNavigableMap map = dmap5(); SortedMap sm = map.subMap(m2, m3); assertEquals(1, sm.size()); assertEquals(m2, sm.firstKey()); assertEquals(m2, sm.lastKey()); assertFalse(sm.containsKey(m1)); assertTrue(sm.containsKey(m2)); assertFalse(sm.containsKey(m3)); assertFalse(sm.containsKey(m4)); assertFalse(sm.containsKey(m5)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(m2, k); assertFalse(i.hasNext()); Iterator j = sm.keySet().iterator(); j.next(); j.remove(); assertFalse(map.containsKey(m2)); assertEquals(4, map.size()); assertEquals(0, sm.size()); assertTrue(sm.isEmpty()); assertTrue(sm.remove(m3) == null); assertEquals(4, map.size()); } /** * headMap returns map with keys in requested range */ public void testDescendingHeadMapContents() { ConcurrentNavigableMap map = dmap5(); SortedMap sm = map.headMap(m4); assertTrue(sm.containsKey(m1)); assertTrue(sm.containsKey(m2)); assertTrue(sm.containsKey(m3)); assertFalse(sm.containsKey(m4)); assertFalse(sm.containsKey(m5)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(m1, k); k = (Integer)(i.next()); assertEquals(m2, k); k = (Integer)(i.next()); assertEquals(m3, k); assertFalse(i.hasNext()); sm.clear(); assertTrue(sm.isEmpty()); assertEquals(2, map.size()); assertEquals(m4, map.firstKey()); } /** * headMap returns map with keys in requested range */ public void testDescendingTailMapContents() { ConcurrentNavigableMap map = dmap5(); SortedMap sm = map.tailMap(m2); assertFalse(sm.containsKey(m1)); assertTrue(sm.containsKey(m2)); assertTrue(sm.containsKey(m3)); assertTrue(sm.containsKey(m4)); assertTrue(sm.containsKey(m5)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(m2, k); k = (Integer)(i.next()); assertEquals(m3, k); k = (Integer)(i.next()); assertEquals(m4, k); k = (Integer)(i.next()); assertEquals(m5, k); assertFalse(i.hasNext()); Iterator ei = sm.entrySet().iterator(); Map.Entry e; e = (Map.Entry)(ei.next()); assertEquals(m2, e.getKey()); assertEquals("B", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(m3, e.getKey()); assertEquals("C", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(m4, e.getKey()); assertEquals("D", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(m5, e.getKey()); assertEquals("E", e.getValue()); assertFalse(i.hasNext()); SortedMap ssm = sm.tailMap(m4); assertEquals(m4, ssm.firstKey()); assertEquals(m5, ssm.lastKey()); assertTrue(ssm.remove(m4) != null); assertEquals(1, ssm.size()); assertEquals(3, sm.size()); assertEquals(4, map.size()); } } backport-util-concurrent-3.1-src/test/tck/src/ConcurrentLinkedQueueTest.java0000644001750700037720000003577410431260156026234 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import java.util.Collection; import java.util.Arrays; import java.util.NoSuchElementException; import java.util.Iterator; import java.util.ConcurrentModificationException; import java.io.*; import edu.emory.mathcs.backport.java.util.concurrent.*; public class ConcurrentLinkedQueueTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ConcurrentLinkedQueueTest.class); } /** * Create a queue of given size containing consecutive * Integers 0 ... n. */ private ConcurrentLinkedQueue populatedQueue(int n) { ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); assertTrue(q.isEmpty()); for(int i = 0; i < n; ++i) assertTrue(q.offer(new Integer(i))); assertFalse(q.isEmpty()); assertEquals(n, q.size()); return q; } /** * new queue is empty */ public void testConstructor1() { assertEquals(0, new ConcurrentLinkedQueue().size()); } /** * Initializing from null Collection throws NPE */ public void testConstructor3() { try { ConcurrentLinkedQueue q = new ConcurrentLinkedQueue((Collection)null); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection of null elements throws NPE */ public void testConstructor4() { try { Integer[] ints = new Integer[SIZE]; ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection with some null elements throws NPE */ public void testConstructor5() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements of collection used to initialize */ public void testConstructor6() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * isEmpty is true before add, false after */ public void testEmpty() { ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); assertTrue(q.isEmpty()); q.add(one); assertFalse(q.isEmpty()); q.add(two); q.remove(); q.remove(); assertTrue(q.isEmpty()); } /** * size changes when elements added and removed */ public void testSize() { ConcurrentLinkedQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.size()); q.remove(); } for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * offer(null) throws NPE */ public void testOfferNull() { try { ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); q.offer(null); shouldThrow(); } catch (NullPointerException success) { } } /** * add(null) throws NPE */ public void testAddNull() { try { ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * Offer returns true */ public void testOffer() { ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); assertTrue(q.offer(zero)); assertTrue(q.offer(one)); } /** * add returns true */ public void testAdd() { ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); assertTrue(q.add(new Integer(i))); } } /** * addAll(null) throws NPE */ public void testAddAll1() { try { ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll(this) throws IAE */ public void testAddAllSelf() { try { ConcurrentLinkedQueue q = populatedQueue(SIZE); q.addAll(q); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testAddAll2() { try { ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); Integer[] ints = new Integer[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testAddAll3() { try { ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements, in traversal order, of successful addAll */ public void testAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * poll succeeds unless empty */ public void testPoll() { ConcurrentLinkedQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll()).intValue()); } assertNull(q.poll()); } /** * peek returns next element, or null if empty */ public void testPeek() { ConcurrentLinkedQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.peek()).intValue()); q.poll(); assertTrue(q.peek() == null || i != ((Integer)q.peek()).intValue()); } assertNull(q.peek()); } /** * element returns next element, or throws NSEE if empty */ public void testElement() { ConcurrentLinkedQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.element()).intValue()); q.poll(); } try { q.element(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * remove removes next element, or throws NSEE if empty */ public void testRemove() { ConcurrentLinkedQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.remove()).intValue()); } try { q.remove(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * remove(x) removes x and returns true if present */ public void testRemoveElement() { ConcurrentLinkedQueue q = populatedQueue(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { ConcurrentLinkedQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.poll(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testClear() { ConcurrentLinkedQueue q = populatedQueue(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); q.add(one); assertFalse(q.isEmpty()); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { ConcurrentLinkedQueue q = populatedQueue(SIZE); ConcurrentLinkedQueue p = new ConcurrentLinkedQueue(); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if change */ public void testRetainAll() { ConcurrentLinkedQueue q = populatedQueue(SIZE); ConcurrentLinkedQueue p = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.remove(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { ConcurrentLinkedQueue q = populatedQueue(SIZE); ConcurrentLinkedQueue p = populatedQueue(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.remove()); assertFalse(q.contains(I)); } } } /** * toArray contains all elements */ public void testToArray() { ConcurrentLinkedQueue q = populatedQueue(SIZE); Object[] o = q.toArray(); Arrays.sort(o); for(int i = 0; i < o.length; i++) assertEquals(o[i], q.poll()); } /** * toArray(a) contains all elements */ public void testToArray2() { ConcurrentLinkedQueue q = populatedQueue(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); Arrays.sort(ints); for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.poll()); } /** * toArray(null) throws NPE */ public void testToArray_BadArg() { try { ConcurrentLinkedQueue q = populatedQueue(SIZE); Object o[] = q.toArray(null); shouldThrow(); } catch(NullPointerException success){} } /** * toArray with incompatible array type throws CCE */ public void testToArray1_BadArg() { try { ConcurrentLinkedQueue q = populatedQueue(SIZE); Object o[] = q.toArray(new String[10] ); shouldThrow(); } catch(ArrayStoreException success){} } /** * iterator iterates through all elements */ public void testIterator() { ConcurrentLinkedQueue q = populatedQueue(SIZE); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); } /** * iterator ordering is FIFO */ public void testIteratorOrdering() { final ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); q.add(one); q.add(two); q.add(three); int k = 0; for (Iterator it = q.iterator(); it.hasNext();) { int i = ((Integer)(it.next())).intValue(); assertEquals(++k, i); } assertEquals(3, k); } /** * Modifications do not cause iterators to fail */ public void testWeaklyConsistentIteration () { final ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); q.add(one); q.add(two); q.add(three); try { for (Iterator it = q.iterator(); it.hasNext();) { q.remove(); it.next(); } } catch (ConcurrentModificationException e) { shouldThrow(); } assertEquals("queue should be empty again", 0, q.size()); } /** * iterator.remove removes current element */ public void testIteratorRemove () { final ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); q.add(one); q.add(two); q.add(three); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), two); assertEquals(it.next(), three); assertFalse(it.hasNext()); } /** * toString contains toStrings of elements */ public void testToString() { ConcurrentLinkedQueue q = populatedQueue(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * A deserialized serialized queue has same elements in same order */ public void testSerialization() { ConcurrentLinkedQueue q = populatedQueue(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); ConcurrentLinkedQueue r = (ConcurrentLinkedQueue)in.readObject(); assertEquals(q.size(), r.size()); while (!q.isEmpty()) assertEquals(q.remove(), r.remove()); } catch(Exception e){ unexpectedException(); } } } backport-util-concurrent-3.1-src/test/tck/src/ConcurrentSkipListSetTest.java0000644001750700037720000007465510431777323026251 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import junit.framework.*; import java.util.Comparator; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.SortedSet; import java.io.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.util.Random; import java.util.BitSet; import java.util.NoSuchElementException; public class ConcurrentSkipListSetTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ConcurrentSkipListSetTest.class); } static class MyReverseComparator implements Comparator { public int compare(Object x, Object y) { int i = ((Integer)x).intValue(); int j = ((Integer)y).intValue(); if (i < j) return 1; if (i > j) return -1; return 0; } } /** * Create a set of given size containing consecutive * Integers 0 ... n. */ private ConcurrentSkipListSet populatedSet(int n) { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); assertTrue(q.isEmpty()); for(int i = n-1; i >= 0; i-=2) assertTrue(q.add(new Integer(i))); for(int i = (n & 1); i < n; i+=2) assertTrue(q.add(new Integer(i))); assertFalse(q.isEmpty()); assertEquals(n, q.size()); return q; } /** * Create set of first 5 ints */ private ConcurrentSkipListSet set5() { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); assertTrue(q.isEmpty()); q.add(one); q.add(two); q.add(three); q.add(four); q.add(five); assertEquals(5, q.size()); return q; } /** * A new set has unbounded capacity */ public void testConstructor1() { assertEquals(0, new ConcurrentSkipListSet().size()); } /** * Initializing from null Collection throws NPE */ public void testConstructor3() { try { ConcurrentSkipListSet q = new ConcurrentSkipListSet((Collection)null); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection of null elements throws NPE */ public void testConstructor4() { try { Integer[] ints = new Integer[SIZE]; ConcurrentSkipListSet q = new ConcurrentSkipListSet(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection with some null elements throws NPE */ public void testConstructor5() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); ConcurrentSkipListSet q = new ConcurrentSkipListSet(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Set contains all elements of collection used to initialize */ public void testConstructor6() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); ConcurrentSkipListSet q = new ConcurrentSkipListSet(Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.pollFirst()); } finally {} } /** * The comparator used in constructor is used */ public void testConstructor7() { try { MyReverseComparator cmp = new MyReverseComparator(); ConcurrentSkipListSet q = new ConcurrentSkipListSet(cmp); assertEquals(cmp, q.comparator()); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); for (int i = SIZE-1; i >= 0; --i) assertEquals(ints[i], q.pollFirst()); } finally {} } /** * isEmpty is true before add, false after */ public void testEmpty() { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); assertTrue(q.isEmpty()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.add(new Integer(2)); q.pollFirst(); q.pollFirst(); assertTrue(q.isEmpty()); } /** * size changes when elements added and removed */ public void testSize() { ConcurrentSkipListSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.size()); q.pollFirst(); } for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * add(null) throws NPE */ public void testAddNull() { try { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * Add of comparable element succeeds */ public void testAdd() { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); assertTrue(q.add(zero)); assertTrue(q.add(one)); } /** * Add of duplicate element fails */ public void testAddDup() { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); assertTrue(q.add(zero)); assertFalse(q.add(zero)); } /** * Add of non-Comparable throws CCE */ public void testAddNonComparable() { try { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); q.add(new Object()); q.add(new Object()); q.add(new Object()); shouldThrow(); } catch(ClassCastException success) {} } /** * addAll(null) throws NPE */ public void testAddAll1() { try { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testAddAll2() { try { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); Integer[] ints = new Integer[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testAddAll3() { try { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Set contains all elements of successful addAll */ public void testAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(SIZE-1-i); ConcurrentSkipListSet q = new ConcurrentSkipListSet(); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(new Integer(i), q.pollFirst()); } finally {} } /** * pollFirst succeeds unless empty */ public void testPollFirst() { ConcurrentSkipListSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pollFirst()).intValue()); } assertNull(q.pollFirst()); } /** * pollLast succeeds unless empty */ public void testPollLast() { ConcurrentSkipListSet q = populatedSet(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.pollLast()).intValue()); } assertNull(q.pollFirst()); } /** * remove(x) removes x and returns true if present */ public void testRemoveElement() { ConcurrentSkipListSet q = populatedSet(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { ConcurrentSkipListSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.pollFirst(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testClear() { ConcurrentSkipListSet q = populatedSet(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { ConcurrentSkipListSet q = populatedSet(SIZE); ConcurrentSkipListSet p = new ConcurrentSkipListSet(); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testRetainAll() { ConcurrentSkipListSet q = populatedSet(SIZE); ConcurrentSkipListSet p = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.pollFirst(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { ConcurrentSkipListSet q = populatedSet(SIZE); ConcurrentSkipListSet p = populatedSet(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.pollFirst()); assertFalse(q.contains(I)); } } } /** * lower returns preceding element */ public void testLower() { ConcurrentSkipListSet q = set5(); Object e1 = q.lower(three); assertEquals(two, e1); Object e2 = q.lower(six); assertEquals(five, e2); Object e3 = q.lower(one); assertNull(e3); Object e4 = q.lower(zero); assertNull(e4); } /** * higher returns next element */ public void testHigher() { ConcurrentSkipListSet q = set5(); Object e1 = q.higher(three); assertEquals(four, e1); Object e2 = q.higher(zero); assertEquals(one, e2); Object e3 = q.higher(five); assertNull(e3); Object e4 = q.higher(six); assertNull(e4); } /** * floor returns preceding element */ public void testFloor() { ConcurrentSkipListSet q = set5(); Object e1 = q.floor(three); assertEquals(three, e1); Object e2 = q.floor(six); assertEquals(five, e2); Object e3 = q.floor(one); assertEquals(one, e3); Object e4 = q.floor(zero); assertNull(e4); } /** * ceiling returns next element */ public void testCeiling() { ConcurrentSkipListSet q = set5(); Object e1 = q.ceiling(three); assertEquals(three, e1); Object e2 = q.ceiling(zero); assertEquals(one, e2); Object e3 = q.ceiling(five); assertEquals(five, e3); Object e4 = q.ceiling(six); assertNull(e4); } /** * toArray contains all elements */ public void testToArray() { ConcurrentSkipListSet q = populatedSet(SIZE); Object[] o = q.toArray(); Arrays.sort(o); for(int i = 0; i < o.length; i++) assertEquals(o[i], q.pollFirst()); } /** * toArray(a) contains all elements */ public void testToArray2() { ConcurrentSkipListSet q = populatedSet(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); Arrays.sort(ints); for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.pollFirst()); } /** * iterator iterates through all elements */ public void testIterator() { ConcurrentSkipListSet q = populatedSet(SIZE); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); } /** * iterator of empty set has no elements */ public void testEmptyIterator() { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, 0); } /** * iterator.remove removes current element */ public void testIteratorRemove () { final ConcurrentSkipListSet q = new ConcurrentSkipListSet(); q.add(new Integer(2)); q.add(new Integer(1)); q.add(new Integer(3)); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), new Integer(2)); assertEquals(it.next(), new Integer(3)); assertFalse(it.hasNext()); } /** * toString contains toStrings of elements */ public void testToString() { ConcurrentSkipListSet q = populatedSet(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * A deserialized serialized set has same elements */ public void testSerialization() { ConcurrentSkipListSet q = populatedSet(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); ConcurrentSkipListSet r = (ConcurrentSkipListSet)in.readObject(); assertEquals(q.size(), r.size()); while (!q.isEmpty()) assertEquals(q.pollFirst(), r.pollFirst()); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * subSet returns set with keys in requested range */ public void testSubSetContents() { ConcurrentSkipListSet set = set5(); SortedSet sm = set.subSet(two, four); assertEquals(two, sm.first()); assertEquals(three, sm.last()); assertEquals(2, sm.size()); assertFalse(sm.contains(one)); assertTrue(sm.contains(two)); assertTrue(sm.contains(three)); assertFalse(sm.contains(four)); assertFalse(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); Iterator j = sm.iterator(); j.next(); j.remove(); assertFalse(set.contains(two)); assertEquals(4, set.size()); assertEquals(1, sm.size()); assertEquals(three, sm.first()); assertEquals(three, sm.last()); assertTrue(sm.remove(three)); assertTrue(sm.isEmpty()); assertEquals(3, set.size()); } public void testSubSetContents2() { ConcurrentSkipListSet set = set5(); SortedSet sm = set.subSet(two, three); assertEquals(1, sm.size()); assertEquals(two, sm.first()); assertEquals(two, sm.last()); assertFalse(sm.contains(one)); assertTrue(sm.contains(two)); assertFalse(sm.contains(three)); assertFalse(sm.contains(four)); assertFalse(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); assertFalse(i.hasNext()); Iterator j = sm.iterator(); j.next(); j.remove(); assertFalse(set.contains(two)); assertEquals(4, set.size()); assertEquals(0, sm.size()); assertTrue(sm.isEmpty()); assertFalse(sm.remove(three)); assertEquals(4, set.size()); } /** * headSet returns set with keys in requested range */ public void testHeadSetContents() { ConcurrentSkipListSet set = set5(); SortedSet sm = set.headSet(four); assertTrue(sm.contains(one)); assertTrue(sm.contains(two)); assertTrue(sm.contains(three)); assertFalse(sm.contains(four)); assertFalse(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(one, k); k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); sm.clear(); assertTrue(sm.isEmpty()); assertEquals(2, set.size()); assertEquals(four, set.first()); } /** * tailSet returns set with keys in requested range */ public void testTailSetContents() { ConcurrentSkipListSet set = set5(); SortedSet sm = set.tailSet(two); assertFalse(sm.contains(one)); assertTrue(sm.contains(two)); assertTrue(sm.contains(three)); assertTrue(sm.contains(four)); assertTrue(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); k = (Integer)(i.next()); assertEquals(four, k); k = (Integer)(i.next()); assertEquals(five, k); assertFalse(i.hasNext()); SortedSet ssm = sm.tailSet(four); assertEquals(four, ssm.first()); assertEquals(five, ssm.last()); assertTrue(ssm.remove(four)); assertEquals(1, ssm.size()); assertEquals(3, sm.size()); assertEquals(4, set.size()); } Random rnd = new Random(666); BitSet bs; /** * Subsets of subsets subdivide correctly */ public void testRecursiveSubSets() { int setSize = 1000; Class cl = ConcurrentSkipListSet.class; NavigableSet set = newSet(cl); bs = new BitSet(setSize); populate(set, setSize); check(set, 0, setSize - 1, true); check(set.descendingSet(), 0, setSize - 1, false); mutateSet(set, 0, setSize - 1); check(set, 0, setSize - 1, true); check(set.descendingSet(), 0, setSize - 1, false); bashSubSet(set.subSet(new Integer(0), true, new Integer(setSize), false), 0, setSize - 1, true); } static NavigableSet newSet(Class cl) { NavigableSet result = null; try { result = (NavigableSet) cl.newInstance(); } catch(Exception e) { fail(); } assertEquals(result.size(), 0); assertFalse(result.iterator().hasNext()); return result; } void populate(NavigableSet set, int limit) { for (int i = 0, n = 2 * limit / 3; i < n; i++) { int element = rnd.nextInt(limit); put(set, element); } } void mutateSet(NavigableSet set, int min, int max) { int size = set.size(); int rangeSize = max - min + 1; // Remove a bunch of entries directly for (int i = 0, n = rangeSize / 2; i < n; i++) { remove(set, min - 5 + rnd.nextInt(rangeSize + 10)); } // Remove a bunch of entries with iterator for(Iterator it = set.iterator(); it.hasNext(); ) { if (rnd.nextBoolean()) { bs.clear(((Integer)it.next()).intValue()); it.remove(); } } // Add entries till we're back to original size while (set.size() < size) { int element = min + rnd.nextInt(rangeSize); assertTrue(element >= min && element<= max); put(set, element); } } void mutateSubSet(NavigableSet set, int min, int max) { int size = set.size(); int rangeSize = max - min + 1; // Remove a bunch of entries directly for (int i = 0, n = rangeSize / 2; i < n; i++) { remove(set, min - 5 + rnd.nextInt(rangeSize + 10)); } // Remove a bunch of entries with iterator for(Iterator it = set.iterator(); it.hasNext(); ) { if (rnd.nextBoolean()) { bs.clear(((Integer)it.next()).intValue()); it.remove(); } } // Add entries till we're back to original size while (set.size() < size) { int element = min - 5 + rnd.nextInt(rangeSize + 10); if (element >= min && element<= max) { put(set, element); } else { try { set.add(new Integer(element)); fail(); } catch(IllegalArgumentException e) { // expected } } } } void put(NavigableSet set, int element) { if (set.add(new Integer(element))) bs.set(element); } void remove(NavigableSet set, int element) { if (set.remove(new Integer(element))) bs.clear(element); } void bashSubSet(NavigableSet set, int min, int max, boolean ascending) { check(set, min, max, ascending); check(set.descendingSet(), min, max, !ascending); mutateSubSet(set, min, max); check(set, min, max, ascending); check(set.descendingSet(), min, max, !ascending); // Recurse if (max - min < 2) return; int midPoint = (min + max) / 2; // headSet - pick direction and endpoint inclusion randomly boolean incl = rnd.nextBoolean(); NavigableSet hm = set.headSet(new Integer(midPoint), incl); if (ascending) { if (rnd.nextBoolean()) bashSubSet(hm, min, midPoint - (incl ? 0 : 1), true); else bashSubSet(hm.descendingSet(), min, midPoint - (incl ? 0 : 1), false); } else { if (rnd.nextBoolean()) bashSubSet(hm, midPoint + (incl ? 0 : 1), max, false); else bashSubSet(hm.descendingSet(), midPoint + (incl ? 0 : 1), max, true); } // tailSet - pick direction and endpoint inclusion randomly incl = rnd.nextBoolean(); NavigableSet tm = set.tailSet(new Integer(midPoint),incl); if (ascending) { if (rnd.nextBoolean()) bashSubSet(tm, midPoint + (incl ? 0 : 1), max, true); else bashSubSet(tm.descendingSet(), midPoint + (incl ? 0 : 1), max, false); } else { if (rnd.nextBoolean()) { bashSubSet(tm, min, midPoint - (incl ? 0 : 1), false); } else { bashSubSet(tm.descendingSet(), min, midPoint - (incl ? 0 : 1), true); } } // subSet - pick direction and endpoint inclusion randomly int rangeSize = max - min + 1; int[] endpoints = new int[2]; endpoints[0] = min + rnd.nextInt(rangeSize); endpoints[1] = min + rnd.nextInt(rangeSize); Arrays.sort(endpoints); boolean lowIncl = rnd.nextBoolean(); boolean highIncl = rnd.nextBoolean(); if (ascending) { NavigableSet sm = set.subSet( new Integer(endpoints[0]), lowIncl, new Integer(endpoints[1]), highIncl); if (rnd.nextBoolean()) bashSubSet(sm, endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), true); else bashSubSet(sm.descendingSet(), endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), false); } else { NavigableSet sm = set.subSet( new Integer(endpoints[1]), highIncl, new Integer(endpoints[0]), lowIncl); if (rnd.nextBoolean()) bashSubSet(sm, endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), false); else bashSubSet(sm.descendingSet(), endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), true); } } /** * min and max are both inclusive. If max < min, interval is empty. */ void check(NavigableSet set, final int min, final int max, final boolean ascending) { class ReferenceSet { int lower(int element) { return ascending ? lowerAscending(element) : higherAscending(element); } int floor(int element) { return ascending ? floorAscending(element) : ceilingAscending(element); } int ceiling(int element) { return ascending ? ceilingAscending(element) : floorAscending(element); } int higher(int element) { return ascending ? higherAscending(element) : lowerAscending(element); } int first() { return ascending ? firstAscending() : lastAscending(); } int last() { return ascending ? lastAscending() : firstAscending(); } int lowerAscending(int element) { return floorAscending(element - 1); } int floorAscending(int element) { if (element < min) return -1; else if (element > max) element = max; // BitSet should support this! Test would run much faster while (element >= min) { if (bs.get(element)) return(element); element--; } return -1; } int ceilingAscending(int element) { if (element < min) element = min; else if (element > max) return -1; int result = bs.nextSetBit(element); return result > max ? -1 : result; } int higherAscending(int element) { return ceilingAscending(element + 1); } private int firstAscending() { int result = ceilingAscending(min); return result > max ? -1 : result; } private int lastAscending() { int result = floorAscending(max); return result < min ? -1 : result; } } ReferenceSet rs = new ReferenceSet(); // Test contents using containsElement int size = 0; for (int i = min; i <= max; i++) { boolean bsContainsI = bs.get(i); assertEquals(bsContainsI, set.contains(new Integer(i))); if (bsContainsI) size++; } assertEquals(set.size(), size); // Test contents using contains elementSet iterator int size2 = 0; int previousElement = -1; for (Iterator itr = set.iterator(); itr.hasNext();) { int element = ((Integer)itr.next()).intValue(); assertTrue(bs.get(element)); size2++; assertTrue(previousElement < 0 || (ascending ? element - previousElement > 0 : element - previousElement < 0)); previousElement = element; } assertEquals(size2, size); // Test navigation ops for (int element = min - 1; element <= max + 1; element++) { assertEq((Integer)set.lower(new Integer(element)), rs.lower(element)); assertEq((Integer)set.floor(new Integer(element)), rs.floor(element)); assertEq((Integer)set.higher(new Integer(element)), rs.higher(element)); assertEq((Integer)set.ceiling(new Integer(element)), rs.ceiling(element)); } // Test extrema if (set.size() != 0) { assertEq((Integer)set.first(), rs.first()); assertEq((Integer)set.last(), rs.last()); } else { assertEq(new Integer(rs.first()), -1); assertEq(new Integer(rs.last()), -1); try { set.first(); fail(); } catch(NoSuchElementException e) { // expected } try { set.last(); fail(); } catch(NoSuchElementException e) { // expected } } } static void assertEq(Integer i, int j) { if (i == null) assertEquals(j, -1); else assertEquals(i.intValue(), j); } static boolean eq(Integer i, int j) { return i == null ? j == -1 : i.intValue() == j; } } backport-util-concurrent-3.1-src/test/tck/src/AtomicIntegerFieldUpdaterTest.java0000644001750700037720000002174510253674160027000 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; public class AtomicIntegerFieldUpdaterTest extends JSR166TestCase { // volatile int x = 0; // int w; // long z; // public static void main(String[] args){ // junit.textui.TestRunner.run(suite()); // } // public static Test suite() { // return new TestSuite(AtomicIntegerFieldUpdaterTest.class); // } // // /** // * Construction with non-existent field throws RuntimeException // */ // public void testConstructor() { // try{ // AtomicIntegerFieldUpdater // a = AtomicIntegerFieldUpdater.newUpdater // (AtomicIntegerFieldUpdaterTest.class, "y"); // shouldThrow(); // } // catch (RuntimeException rt) {} // } // // /** // * construction with field not of given type throws RuntimeException // */ // public void testConstructor2() { // try{ // AtomicIntegerFieldUpdater // a = AtomicIntegerFieldUpdater.newUpdater // (AtomicIntegerFieldUpdaterTest.class, "z"); // shouldThrow(); // } // catch (RuntimeException rt) {} // } // // /** // * construction with non-volatile field throws RuntimeException // */ // public void testConstructor3() { // try{ // AtomicIntegerFieldUpdater // a = AtomicIntegerFieldUpdater.newUpdater // (AtomicIntegerFieldUpdaterTest.class, "w"); // shouldThrow(); // } // catch (RuntimeException rt) {} // } // // /** // * get returns the last value set or assigned // */ // public void testGetSet() { // AtomicIntegerFieldUpdater a; // try { // a = AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(1,a.get(this)); // a.set(this,2); // assertEquals(2,a.get(this)); // a.set(this,-3); // assertEquals(-3,a.get(this)); // // } // // /** // * get returns the last value lazySet by same thread // */ // public void testGetLazySet() { // AtomicIntegerFieldUpdater a; // try { // a = AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(1,a.get(this)); // a.lazySet(this,2); // assertEquals(2,a.get(this)); // a.lazySet(this,-3); // assertEquals(-3,a.get(this)); // // } // // /** // * compareAndSet succeeds in changing value if equal to expected else fails // */ // public void testCompareAndSet() { // AtomicIntegerFieldUpdater a; // try { // a = AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertTrue(a.compareAndSet(this,1,2)); // assertTrue(a.compareAndSet(this,2,-4)); // assertEquals(-4,a.get(this)); // assertFalse(a.compareAndSet(this,-5,7)); // assertFalse((7 == a.get(this))); // assertTrue(a.compareAndSet(this,-4,7)); // assertEquals(7,a.get(this)); // } // // // /** // * compareAndSet in one thread enables another waiting for value // * to succeed // */ // public void testCompareAndSetInMultipleThreads() { // x = 1; // final AtomicIntegerFieldUpdater a; // try { // a = AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // // Thread t = new Thread(new Runnable() { // public void run() { // while(!a.compareAndSet(AtomicIntegerFieldUpdaterTest.this, 2, 3)) Thread.yield(); // }}); // try { // t.start(); // assertTrue(a.compareAndSet(this, 1, 2)); // t.join(LONG_DELAY_MS); // assertFalse(t.isAlive()); // assertEquals(a.get(this), 3); // } // catch(Exception e) { // unexpectedException(); // } // } // // /** // * repeated weakCompareAndSet succeeds in changing value when equal // * to expected // */ // public void testWeakCompareAndSet() { // AtomicIntegerFieldUpdater a; // try { // a = AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // while(!a.weakCompareAndSet(this,1,2)); // while(!a.weakCompareAndSet(this,2,-4)); // assertEquals(-4,a.get(this)); // while(!a.weakCompareAndSet(this,-4,7)); // assertEquals(7,a.get(this)); // } // // /** // * getAndSet returns previous value and sets to given value // */ // public void testGetAndSet() { // AtomicIntegerFieldUpdater a; // try { // a = AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(1,a.getAndSet(this, 0)); // assertEquals(0,a.getAndSet(this,-10)); // assertEquals(-10,a.getAndSet(this,1)); // } // // /** // * getAndAdd returns previous value and adds given value // */ // public void testGetAndAdd() { // AtomicIntegerFieldUpdater a; // try { // a = AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(1,a.getAndAdd(this,2)); // assertEquals(3,a.get(this)); // assertEquals(3,a.getAndAdd(this,-4)); // assertEquals(-1,a.get(this)); // } // // /** // * getAndDecrement returns previous value and decrements // */ // public void testGetAndDecrement() { // AtomicIntegerFieldUpdater a; // try { // a = AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(1,a.getAndDecrement(this)); // assertEquals(0,a.getAndDecrement(this)); // assertEquals(-1,a.getAndDecrement(this)); // } // // /** // * getAndIncrement returns previous value and increments // */ // public void testGetAndIncrement() { // AtomicIntegerFieldUpdater a; // try { // a = AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(1,a.getAndIncrement(this)); // assertEquals(2,a.get(this)); // a.set(this,-2); // assertEquals(-2,a.getAndIncrement(this)); // assertEquals(-1,a.getAndIncrement(this)); // assertEquals(0,a.getAndIncrement(this)); // assertEquals(1,a.get(this)); // } // // /** // * addAndGet adds given value to current, and returns current value // */ // public void testAddAndGet() { // AtomicIntegerFieldUpdater a; // try { // a = AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(3,a.addAndGet(this,2)); // assertEquals(3,a.get(this)); // assertEquals(-1,a.addAndGet(this,-4)); // assertEquals(-1,a.get(this)); // } // // /** // * decrementAndGet decrements and returns current value // */ // public void testDecrementAndGet() { // AtomicIntegerFieldUpdater a; // try { // a = AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(0,a.decrementAndGet(this)); // assertEquals(-1,a.decrementAndGet(this)); // assertEquals(-2,a.decrementAndGet(this)); // assertEquals(-2,a.get(this)); // } // // /** // * incrementAndGet increments and returns current value // */ // public void testIncrementAndGet() { // AtomicIntegerFieldUpdater a; // try { // a = AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(2,a.incrementAndGet(this)); // assertEquals(2,a.get(this)); // a.set(this,-2); // assertEquals(-1,a.incrementAndGet(this)); // assertEquals(0,a.incrementAndGet(this)); // assertEquals(1,a.incrementAndGet(this)); // assertEquals(1,a.get(this)); // } // } backport-util-concurrent-3.1-src/test/tck/src/SystemTest.java0000644001750700037720000000471210253735611023233 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; public class SystemTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public static Test suite() { return new TestSuite(SystemTest.class); } /** * Worst case rounding for millisecs; set for 60 cycle millis clock. * This value might need to be changed os JVMs with coarser * System.currentTimeMillis clocks. */ static final long MILLIS_ROUND = 17; /** * Nanos between readings of millis is no longer than millis (plus * possible rounding). * This shows only that nano timing not (much) worse than milli. */ public void testNanoTime1() { try { long m1 = System.currentTimeMillis(); Thread.sleep(1); long n1 = Utils.nanoTime(); Thread.sleep(SHORT_DELAY_MS); long n2 = Utils.nanoTime(); Thread.sleep(1); long m2 = System.currentTimeMillis(); long millis = m2 - m1; long nanos = n2 - n1; assertTrue(nanos >= 0); long nanosAsMillis = nanos / 1000000; assertTrue(nanosAsMillis <= millis + MILLIS_ROUND); } catch(InterruptedException ie) { unexpectedException(); } } /** * Millis between readings of nanos is less than nanos, adjusting * for rounding. * This shows only that nano timing not (much) worse than milli. */ public void testNanoTime2() { try { long n1 = Utils.nanoTime(); Thread.sleep(1); long m1 = System.currentTimeMillis(); Thread.sleep(SHORT_DELAY_MS); long m2 = System.currentTimeMillis(); Thread.sleep(1); long n2 = Utils.nanoTime(); long millis = m2 - m1; long nanos = n2 - n1; assertTrue(nanos >= 0); long nanosAsMillis = nanos / 1000000; assertTrue(millis <= nanosAsMillis + MILLIS_ROUND); } catch(InterruptedException ie) { unexpectedException(); } } } backport-util-concurrent-3.1-src/test/tck/src/ConcurrentHashMapTest.java0000644001750700037720000004155010365510635025335 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import java.util.Enumeration; import java.util.Set; import java.util.Collection; import java.util.ArrayList; import java.util.Map; import java.util.Iterator; public class ConcurrentHashMapTest extends JSR166TestCase{ public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ConcurrentHashMapTest.class); } /** * Create a map from Integers 1-5 to Strings "A"-"E". */ private static ConcurrentHashMap map5() { ConcurrentHashMap map = new ConcurrentHashMap(5); assertTrue(map.isEmpty()); map.put(one, "A"); map.put(two, "B"); map.put(three, "C"); map.put(four, "D"); map.put(five, "E"); assertFalse(map.isEmpty()); assertEquals(5, map.size()); return map; } /** * clear removes all pairs */ public void testClear() { ConcurrentHashMap map = map5(); map.clear(); assertEquals(map.size(), 0); } /** * Maps with same contents are equal */ public void testEquals() { ConcurrentHashMap map1 = map5(); ConcurrentHashMap map2 = map5(); assertEquals(map1, map2); assertEquals(map2, map1); map1.clear(); assertFalse(map1.equals(map2)); assertFalse(map2.equals(map1)); } /** * contains returns true for contained value */ public void testContains() { ConcurrentHashMap map = map5(); assertTrue(map.contains("A")); assertFalse(map.contains("Z")); } /** * containsKey returns true for contained key */ public void testContainsKey() { ConcurrentHashMap map = map5(); assertTrue(map.containsKey(one)); assertFalse(map.containsKey(zero)); } /** * containsValue returns true for held values */ public void testContainsValue() { ConcurrentHashMap map = map5(); assertTrue(map.containsValue("A")); assertFalse(map.containsValue("Z")); } /** * enumeration returns an enumeration containing the correct * elements */ public void testEnumeration() { ConcurrentHashMap map = map5(); Enumeration e = map.elements(); int count = 0; while(e.hasMoreElements()){ count++; e.nextElement(); } assertEquals(5, count); } /** * get returns the correct element at the given key, * or null if not present */ public void testGet() { ConcurrentHashMap map = map5(); assertEquals("A", (String)map.get(one)); ConcurrentHashMap empty = new ConcurrentHashMap(); assertNull(map.get("anything")); } /** * isEmpty is true of empty map and false for non-empty */ public void testIsEmpty() { ConcurrentHashMap empty = new ConcurrentHashMap(); ConcurrentHashMap map = map5(); assertTrue(empty.isEmpty()); assertFalse(map.isEmpty()); } /** * keys returns an enumeration containing all the keys from the map */ public void testKeys() { ConcurrentHashMap map = map5(); Enumeration e = map.keys(); int count = 0; while(e.hasMoreElements()){ count++; e.nextElement(); } assertEquals(5, count); } /** * keySet returns a Set containing all the keys */ public void testKeySet() { ConcurrentHashMap map = map5(); Set s = map.keySet(); assertEquals(5, s.size()); assertTrue(s.contains(one)); assertTrue(s.contains(two)); assertTrue(s.contains(three)); assertTrue(s.contains(four)); assertTrue(s.contains(five)); } /** * keySet.toArray returns contains all keys */ public void testKeySetToArray() { ConcurrentHashMap map = map5(); Set s = map.keySet(); Object[] ar = s.toArray(); assertTrue(s.containsAll(Arrays.asList(ar))); assertEquals(5, ar.length); ar[0] = m10; assertFalse(s.containsAll(Arrays.asList(ar))); } /** * Values.toArray contains all values */ public void testValuesToArray() { ConcurrentHashMap map = map5(); Collection v = map.values(); Object[] ar = v.toArray(); ArrayList s = new ArrayList(Arrays.asList(ar)); assertEquals(5, ar.length); assertTrue(s.contains("A")); assertTrue(s.contains("B")); assertTrue(s.contains("C")); assertTrue(s.contains("D")); assertTrue(s.contains("E")); } /** * entrySet.toArray contains all entries */ public void testEntrySetToArray() { ConcurrentHashMap map = map5(); Set s = map.entrySet(); Object[] ar = s.toArray(); assertEquals(5, ar.length); for (int i = 0; i < 5; ++i) { assertTrue(map.containsKey(((Map.Entry)(ar[i])).getKey())); assertTrue(map.containsValue(((Map.Entry)(ar[i])).getValue())); } } /** * values collection contains all values */ public void testValues() { ConcurrentHashMap map = map5(); Collection s = map.values(); assertEquals(5, s.size()); assertTrue(s.contains("A")); assertTrue(s.contains("B")); assertTrue(s.contains("C")); assertTrue(s.contains("D")); assertTrue(s.contains("E")); } /** * entrySet contains all pairs */ public void testEntrySet() { ConcurrentHashMap map = map5(); Set s = map.entrySet(); assertEquals(5, s.size()); Iterator it = s.iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); assertTrue( (e.getKey().equals(one) && e.getValue().equals("A")) || (e.getKey().equals(two) && e.getValue().equals("B")) || (e.getKey().equals(three) && e.getValue().equals("C")) || (e.getKey().equals(four) && e.getValue().equals("D")) || (e.getKey().equals(five) && e.getValue().equals("E"))); } } /** * putAll adds all key-value pairs from the given map */ public void testPutAll() { ConcurrentHashMap empty = new ConcurrentHashMap(); ConcurrentHashMap map = map5(); empty.putAll(map); assertEquals(5, empty.size()); assertTrue(empty.containsKey(one)); assertTrue(empty.containsKey(two)); assertTrue(empty.containsKey(three)); assertTrue(empty.containsKey(four)); assertTrue(empty.containsKey(five)); } /** * putIfAbsent works when the given key is not present */ public void testPutIfAbsent() { ConcurrentHashMap map = map5(); map.putIfAbsent(six, "Z"); assertTrue(map.containsKey(six)); } /** * putIfAbsent does not add the pair if the key is already present */ public void testPutIfAbsent2() { ConcurrentHashMap map = map5(); assertEquals("A", map.putIfAbsent(one, "Z")); } /** * replace fails when the given key is not present */ public void testReplace() { ConcurrentHashMap map = map5(); assertNull(map.replace(six, "Z")); assertFalse(map.containsKey(six)); } /** * replace succeeds if the key is already present */ public void testReplace2() { ConcurrentHashMap map = map5(); assertNotNull(map.replace(one, "Z")); assertEquals("Z", map.get(one)); } /** * replace value fails when the given key not mapped to expected value */ public void testReplaceValue() { ConcurrentHashMap map = map5(); assertEquals("A", map.get(one)); assertFalse(map.replace(one, "Z", "Z")); assertEquals("A", map.get(one)); } /** * replace value succeeds when the given key mapped to expected value */ public void testReplaceValue2() { ConcurrentHashMap map = map5(); assertEquals("A", map.get(one)); assertTrue(map.replace(one, "A", "Z")); assertEquals("Z", map.get(one)); } /** * remove removes the correct key-value pair from the map */ public void testRemove() { ConcurrentHashMap map = map5(); map.remove(five); assertEquals(4, map.size()); assertFalse(map.containsKey(five)); } /** * remove(key,value) removes only if pair present */ public void testRemove2() { ConcurrentHashMap map = map5(); map.remove(five, "E"); assertEquals(4, map.size()); assertFalse(map.containsKey(five)); map.remove(four, "A"); assertEquals(4, map.size()); assertTrue(map.containsKey(four)); } /** * size returns the correct values */ public void testSize() { ConcurrentHashMap map = map5(); ConcurrentHashMap empty = new ConcurrentHashMap(); assertEquals(0, empty.size()); assertEquals(5, map.size()); } /** * toString contains toString of elements */ public void testToString() { ConcurrentHashMap map = map5(); String s = map.toString(); for (int i = 1; i <= 5; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } // Exception tests /** * Cannot create with negative capacity */ public void testConstructor1() { try { new ConcurrentHashMap(-1,0,1); shouldThrow(); } catch(IllegalArgumentException e){} } /** * Cannot create with negative concurrency level */ public void testConstructor2() { try { new ConcurrentHashMap(1,0,-1); shouldThrow(); } catch(IllegalArgumentException e){} } /** * Cannot create with only negative capacity */ public void testConstructor3() { try { new ConcurrentHashMap(-1); shouldThrow(); } catch(IllegalArgumentException e){} } /** * get(null) throws NPE */ public void testGet_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.get(null); shouldThrow(); } catch(NullPointerException e){} } /** * containsKey(null) throws NPE */ public void testContainsKey_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.containsKey(null); shouldThrow(); } catch(NullPointerException e){} } /** * containsValue(null) throws NPE */ public void testContainsValue_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.containsValue(null); shouldThrow(); } catch(NullPointerException e){} } /** * contains(null) throws NPE */ public void testContains_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.contains(null); shouldThrow(); } catch(NullPointerException e){} } /** * put(null,x) throws NPE */ public void testPut1_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.put(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * put(x, null) throws NPE */ public void testPut2_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.put("whatever", null); shouldThrow(); } catch(NullPointerException e){} } /** * putIfAbsent(null, x) throws NPE */ public void testPutIfAbsent1_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.putIfAbsent(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * replace(null, x) throws NPE */ public void testReplace_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.replace(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * replace(null, x, y) throws NPE */ public void testReplaceValue_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.replace(null, one, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * putIfAbsent(x, null) throws NPE */ public void testPutIfAbsent2_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.putIfAbsent("whatever", null); shouldThrow(); } catch(NullPointerException e){} } /** * replace(x, null) throws NPE */ public void testReplace2_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.replace("whatever", null); shouldThrow(); } catch(NullPointerException e){} } /** * replace(x, null, y) throws NPE */ public void testReplaceValue2_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.replace("whatever", null, "A"); shouldThrow(); } catch(NullPointerException e){} } /** * replace(x, y, null) throws NPE */ public void testReplaceValue3_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.replace("whatever", one, null); shouldThrow(); } catch(NullPointerException e){} } /** * remove(null) throws NPE */ public void testRemove1_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.put("sadsdf", "asdads"); c.remove(null); shouldThrow(); } catch(NullPointerException e){} } /** * remove(null, x) throws NPE */ public void testRemove2_NullPointerException() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.put("sadsdf", "asdads"); c.remove(null, "whatever"); shouldThrow(); } catch(NullPointerException e){} } /** * remove(x, null) returns false */ public void testRemove3() { try { ConcurrentHashMap c = new ConcurrentHashMap(5); c.put("sadsdf", "asdads"); assertFalse(c.remove("sadsdf", null)); } catch(NullPointerException e){ fail(); } } /** * A deserialized map equals original */ public void testSerialization() { ConcurrentHashMap q = map5(); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); ConcurrentHashMap r = (ConcurrentHashMap)in.readObject(); assertEquals(q.size(), r.size()); assertTrue(q.equals(r)); assertTrue(r.equals(q)); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * SetValue of an EntrySet entry sets value in the map. */ public void testSetValueWriteThrough() { // Adapted from a bug report by Eric Zoerner ConcurrentHashMap map = new ConcurrentHashMap(2, 5.0f, 1); assertTrue(map.isEmpty()); for (int i = 0; i < 20; i++) map.put(new Integer(i), new Integer(i)); assertFalse(map.isEmpty()); Map.Entry entry1 = (Map.Entry)map.entrySet().iterator().next(); // assert that entry1 is not 16 assertTrue("entry is 16, test not valid", !entry1.getKey().equals(new Integer(16))); // remove 16 (a different key) from map // which just happens to cause entry1 to be cloned in map map.remove(new Integer(16)); entry1.setValue("XYZ"); assertTrue(map.containsValue("XYZ")); // fails } } backport-util-concurrent-3.1-src/test/tck/src/TreeSubSetTest.java0000644001750700037720000007516710431777323024014 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import java.util.Arrays; import java.util.Comparator; import java.util.Iterator; import java.util.SortedSet; public class TreeSubSetTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(TreeSubSetTest.class); } static class MyReverseComparator implements Comparator { public int compare(Object x, Object y) { int i = ((Integer)x).intValue(); int j = ((Integer)y).intValue(); if (i < j) return 1; if (i > j) return -1; return 0; } } /** * Create a set of given size containing consecutive * Integers 0 ... n. */ private NavigableSet populatedSet(int n) { TreeSet q = new TreeSet(); assertTrue(q.isEmpty()); for(int i = n-1; i >= 0; i-=2) assertTrue(q.add(new Integer(i))); for(int i = (n & 1); i < n; i+=2) assertTrue(q.add(new Integer(i))); assertTrue(q.add(new Integer(-n))); assertTrue(q.add(new Integer(n))); NavigableSet s = q.subSet(new Integer(0), true, new Integer(n), false); assertFalse(s.isEmpty()); assertEquals(n, s.size()); return s; } /** * Create set of first 5 ints */ private NavigableSet set5() { TreeSet q = new TreeSet(); assertTrue(q.isEmpty()); q.add(one); q.add(two); q.add(three); q.add(four); q.add(five); q.add(zero); q.add(seven); NavigableSet s = q.subSet(one, true, seven, false); assertEquals(5, s.size()); return s; } private NavigableSet dset5() { TreeSet q = new TreeSet(); assertTrue(q.isEmpty()); q.add(m1); q.add(m2); q.add(m3); q.add(m4); q.add(m5); NavigableSet s = q.descendingSet(); assertEquals(5, s.size()); return s; } private static NavigableSet set0() { TreeSet set = new TreeSet(); assertTrue(set.isEmpty()); return set.tailSet(m1, false); } private static NavigableSet dset0() { TreeSet set = new TreeSet(); assertTrue(set.isEmpty()); return set; } /** * A new set has unbounded capacity */ public void testConstructor1() { assertEquals(0, set0().size()); } /** * isEmpty is true before add, false after */ public void testEmpty() { NavigableSet q = set0(); assertTrue(q.isEmpty()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.add(new Integer(2)); q.pollFirst(); q.pollFirst(); assertTrue(q.isEmpty()); } /** * size changes when elements added and removed */ public void testSize() { NavigableSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.size()); q.pollFirst(); } for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * add(null) throws NPE */ public void testAddNull() { try { NavigableSet q = set0(); q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * Add of comparable element succeeds */ public void testAdd() { NavigableSet q = set0(); assertTrue(q.add(six)); } /** * Add of duplicate element fails */ public void testAddDup() { NavigableSet q = set0(); assertTrue(q.add(six)); assertFalse(q.add(six)); } /** * Add of non-Comparable throws CCE */ public void testAddNonComparable() { try { NavigableSet q = set0(); q.add(new Object()); q.add(new Object()); q.add(new Object()); shouldThrow(); } catch(ClassCastException success) {} } /** * addAll(null) throws NPE */ public void testAddAll1() { try { NavigableSet q = set0(); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testAddAll2() { try { NavigableSet q = set0(); Integer[] ints = new Integer[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testAddAll3() { try { NavigableSet q = set0(); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i+SIZE); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Set contains all elements of successful addAll */ public void testAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(SIZE-1- i); NavigableSet q = set0(); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(new Integer(i), q.pollFirst()); } finally {} } /** * poll succeeds unless empty */ public void testPoll() { NavigableSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pollFirst()).intValue()); } assertNull(q.pollFirst()); } /** * remove(x) removes x and returns true if present */ public void testRemoveElement() { NavigableSet q = populatedSet(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { NavigableSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.pollFirst(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testClear() { NavigableSet q = populatedSet(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { NavigableSet q = populatedSet(SIZE); NavigableSet p = set0(); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testRetainAll() { NavigableSet q = populatedSet(SIZE); NavigableSet p = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.pollFirst(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { NavigableSet q = populatedSet(SIZE); NavigableSet p = populatedSet(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.pollFirst()); assertFalse(q.contains(I)); } } } /** * lower returns preceding element */ public void testLower() { NavigableSet q = set5(); Object e1 = q.lower(three); assertEquals(two, e1); Object e2 = q.lower(six); assertEquals(five, e2); Object e3 = q.lower(one); assertNull(e3); Object e4 = q.lower(zero); assertNull(e4); } /** * higher returns next element */ public void testHigher() { NavigableSet q = set5(); Object e1 = q.higher(three); assertEquals(four, e1); Object e2 = q.higher(zero); assertEquals(one, e2); Object e3 = q.higher(five); assertNull(e3); Object e4 = q.higher(six); assertNull(e4); } /** * floor returns preceding element */ public void testFloor() { NavigableSet q = set5(); Object e1 = q.floor(three); assertEquals(three, e1); Object e2 = q.floor(six); assertEquals(five, e2); Object e3 = q.floor(one); assertEquals(one, e3); Object e4 = q.floor(zero); assertNull(e4); } /** * ceiling returns next element */ public void testCeiling() { NavigableSet q = set5(); Object e1 = q.ceiling(three); assertEquals(three, e1); Object e2 = q.ceiling(zero); assertEquals(one, e2); Object e3 = q.ceiling(five); assertEquals(five, e3); Object e4 = q.ceiling(six); assertNull(e4); } /** * toArray contains all elements */ public void testToArray() { NavigableSet q = populatedSet(SIZE); Object[] o = q.toArray(); Arrays.sort(o); for(int i = 0; i < o.length; i++) assertEquals(o[i], q.pollFirst()); } /** * toArray(a) contains all elements */ public void testToArray2() { NavigableSet q = populatedSet(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); Arrays.sort(ints); for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.pollFirst()); } /** * iterator iterates through all elements */ public void testIterator() { NavigableSet q = populatedSet(SIZE); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); } /** * iterator of empty set has no elements */ public void testEmptyIterator() { NavigableSet q = set0(); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, 0); } /** * iterator.remove removes current element */ public void testIteratorRemove () { final NavigableSet q = set0(); q.add(new Integer(2)); q.add(new Integer(1)); q.add(new Integer(3)); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), new Integer(2)); assertEquals(it.next(), new Integer(3)); assertFalse(it.hasNext()); } /** * toString contains toStrings of elements */ public void testToString() { NavigableSet q = populatedSet(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * A deserialized serialized set has same elements */ public void testSerialization() { NavigableSet q = populatedSet(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); NavigableSet r = (NavigableSet)in.readObject(); assertEquals(q.size(), r.size()); while (!q.isEmpty()) assertEquals(q.pollFirst(), r.pollFirst()); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * subSet returns set with keys in requested range */ public void testSubSetContents() { NavigableSet set = set5(); SortedSet sm = set.subSet(two, four); assertEquals(two, sm.first()); assertEquals(three, sm.last()); assertEquals(2, sm.size()); assertFalse(sm.contains(one)); assertTrue(sm.contains(two)); assertTrue(sm.contains(three)); assertFalse(sm.contains(four)); assertFalse(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); Iterator j = sm.iterator(); j.next(); j.remove(); assertFalse(set.contains(two)); assertEquals(4, set.size()); assertEquals(1, sm.size()); assertEquals(three, sm.first()); assertEquals(three, sm.last()); assertTrue(sm.remove(three)); assertTrue(sm.isEmpty()); assertEquals(3, set.size()); } public void testSubSetContents2() { NavigableSet set = set5(); SortedSet sm = set.subSet(two, three); assertEquals(1, sm.size()); assertEquals(two, sm.first()); assertEquals(two, sm.last()); assertFalse(sm.contains(one)); assertTrue(sm.contains(two)); assertFalse(sm.contains(three)); assertFalse(sm.contains(four)); assertFalse(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); assertFalse(i.hasNext()); Iterator j = sm.iterator(); j.next(); j.remove(); assertFalse(set.contains(two)); assertEquals(4, set.size()); assertEquals(0, sm.size()); assertTrue(sm.isEmpty()); assertFalse(sm.remove(three)); assertEquals(4, set.size()); } /** * headSet returns set with keys in requested range */ public void testHeadSetContents() { NavigableSet set = set5(); SortedSet sm = set.headSet(four); assertTrue(sm.contains(one)); assertTrue(sm.contains(two)); assertTrue(sm.contains(three)); assertFalse(sm.contains(four)); assertFalse(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(one, k); k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); sm.clear(); assertTrue(sm.isEmpty()); assertEquals(2, set.size()); assertEquals(four, set.first()); } /** * tailSet returns set with keys in requested range */ public void testTailSetContents() { NavigableSet set = set5(); SortedSet sm = set.tailSet(two); assertFalse(sm.contains(one)); assertTrue(sm.contains(two)); assertTrue(sm.contains(three)); assertTrue(sm.contains(four)); assertTrue(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); k = (Integer)(i.next()); assertEquals(four, k); k = (Integer)(i.next()); assertEquals(five, k); assertFalse(i.hasNext()); SortedSet ssm = sm.tailSet(four); assertEquals(four, ssm.first()); assertEquals(five, ssm.last()); assertTrue(ssm.remove(four)); assertEquals(1, ssm.size()); assertEquals(3, sm.size()); assertEquals(4, set.size()); } /** * size changes when elements added and removed */ public void testDescendingSize() { NavigableSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.size()); q.pollFirst(); } for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * Add of comparable element succeeds */ public void testDescendingAdd() { NavigableSet q = dset0(); assertTrue(q.add(m6)); } /** * Add of duplicate element fails */ public void testDescendingAddDup() { NavigableSet q = dset0(); assertTrue(q.add(m6)); assertFalse(q.add(m6)); } /** * Add of non-Comparable throws CCE */ public void testDescendingAddNonComparable() { try { NavigableSet q = dset0(); q.add(new Object()); q.add(new Object()); q.add(new Object()); shouldThrow(); } catch(ClassCastException success) {} } /** * addAll(null) throws NPE */ public void testDescendingAddAll1() { try { NavigableSet q = dset0(); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testDescendingAddAll2() { try { NavigableSet q = dset0(); Integer[] ints = new Integer[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testDescendingAddAll3() { try { NavigableSet q = dset0(); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i+SIZE); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Set contains all elements of successful addAll */ public void testDescendingAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(SIZE-1- i); NavigableSet q = dset0(); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(new Integer(i), q.pollFirst()); } finally {} } /** * poll succeeds unless empty */ public void testDescendingPoll() { NavigableSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pollFirst()).intValue()); } assertNull(q.pollFirst()); } /** * remove(x) removes x and returns true if present */ public void testDescendingRemoveElement() { NavigableSet q = populatedSet(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testDescendingContains() { NavigableSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.pollFirst(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testDescendingClear() { NavigableSet q = populatedSet(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testDescendingContainsAll() { NavigableSet q = populatedSet(SIZE); NavigableSet p = dset0(); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testDescendingRetainAll() { NavigableSet q = populatedSet(SIZE); NavigableSet p = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.pollFirst(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testDescendingRemoveAll() { for (int i = 1; i < SIZE; ++i) { NavigableSet q = populatedSet(SIZE); NavigableSet p = populatedSet(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.pollFirst()); assertFalse(q.contains(I)); } } } /** * lower returns preceding element */ public void testDescendingLower() { NavigableSet q = dset5(); Object e1 = q.lower(m3); assertEquals(m2, e1); Object e2 = q.lower(m6); assertEquals(m5, e2); Object e3 = q.lower(m1); assertNull(e3); Object e4 = q.lower(zero); assertNull(e4); } /** * higher returns next element */ public void testDescendingHigher() { NavigableSet q = dset5(); Object e1 = q.higher(m3); assertEquals(m4, e1); Object e2 = q.higher(zero); assertEquals(m1, e2); Object e3 = q.higher(m5); assertNull(e3); Object e4 = q.higher(m6); assertNull(e4); } /** * floor returns preceding element */ public void testDescendingFloor() { NavigableSet q = dset5(); Object e1 = q.floor(m3); assertEquals(m3, e1); Object e2 = q.floor(m6); assertEquals(m5, e2); Object e3 = q.floor(m1); assertEquals(m1, e3); Object e4 = q.floor(zero); assertNull(e4); } /** * ceiling returns next element */ public void testDescendingCeiling() { NavigableSet q = dset5(); Object e1 = q.ceiling(m3); assertEquals(m3, e1); Object e2 = q.ceiling(zero); assertEquals(m1, e2); Object e3 = q.ceiling(m5); assertEquals(m5, e3); Object e4 = q.ceiling(m6); assertNull(e4); } /** * toArray contains all elements */ public void testDescendingToArray() { NavigableSet q = populatedSet(SIZE); Object[] o = q.toArray(); Arrays.sort(o); for(int i = 0; i < o.length; i++) assertEquals(o[i], q.pollFirst()); } /** * toArray(a) contains all elements */ public void testDescendingToArray2() { NavigableSet q = populatedSet(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); Arrays.sort(ints); for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.pollFirst()); } /** * iterator iterates through all elements */ public void testDescendingIterator() { NavigableSet q = populatedSet(SIZE); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); } /** * iterator of empty set has no elements */ public void testDescendingEmptyIterator() { NavigableSet q = dset0(); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, 0); } /** * iterator.remove removes current element */ public void testDescendingIteratorRemove () { final NavigableSet q = dset0(); q.add(new Integer(2)); q.add(new Integer(1)); q.add(new Integer(3)); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), new Integer(2)); assertEquals(it.next(), new Integer(3)); assertFalse(it.hasNext()); } /** * toString contains toStrings of elements */ public void testDescendingToString() { NavigableSet q = populatedSet(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * A deserialized serialized set has same elements */ public void testDescendingSerialization() { NavigableSet q = populatedSet(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); NavigableSet r = (NavigableSet)in.readObject(); assertEquals(q.size(), r.size()); while (!q.isEmpty()) assertEquals(q.pollFirst(), r.pollFirst()); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * subSet returns set with keys in requested range */ public void testDescendingSubSetContents() { NavigableSet set = dset5(); SortedSet sm = set.subSet(m2, m4); assertEquals(m2, sm.first()); assertEquals(m3, sm.last()); assertEquals(2, sm.size()); assertFalse(sm.contains(m1)); assertTrue(sm.contains(m2)); assertTrue(sm.contains(m3)); assertFalse(sm.contains(m4)); assertFalse(sm.contains(m5)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(m2, k); k = (Integer)(i.next()); assertEquals(m3, k); assertFalse(i.hasNext()); Iterator j = sm.iterator(); j.next(); j.remove(); assertFalse(set.contains(m2)); assertEquals(4, set.size()); assertEquals(1, sm.size()); assertEquals(m3, sm.first()); assertEquals(m3, sm.last()); assertTrue(sm.remove(m3)); assertTrue(sm.isEmpty()); assertEquals(3, set.size()); } public void testDescendingSubSetContents2() { NavigableSet set = dset5(); SortedSet sm = set.subSet(m2, m3); assertEquals(1, sm.size()); assertEquals(m2, sm.first()); assertEquals(m2, sm.last()); assertFalse(sm.contains(m1)); assertTrue(sm.contains(m2)); assertFalse(sm.contains(m3)); assertFalse(sm.contains(m4)); assertFalse(sm.contains(m5)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(m2, k); assertFalse(i.hasNext()); Iterator j = sm.iterator(); j.next(); j.remove(); assertFalse(set.contains(m2)); assertEquals(4, set.size()); assertEquals(0, sm.size()); assertTrue(sm.isEmpty()); assertFalse(sm.remove(m3)); assertEquals(4, set.size()); } /** * headSet returns set with keys in requested range */ public void testDescendingHeadSetContents() { NavigableSet set = dset5(); SortedSet sm = set.headSet(m4); assertTrue(sm.contains(m1)); assertTrue(sm.contains(m2)); assertTrue(sm.contains(m3)); assertFalse(sm.contains(m4)); assertFalse(sm.contains(m5)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(m1, k); k = (Integer)(i.next()); assertEquals(m2, k); k = (Integer)(i.next()); assertEquals(m3, k); assertFalse(i.hasNext()); sm.clear(); assertTrue(sm.isEmpty()); assertEquals(2, set.size()); assertEquals(m4, set.first()); } /** * tailSet returns set with keys in requested range */ public void testDescendingTailSetContents() { NavigableSet set = dset5(); SortedSet sm = set.tailSet(m2); assertFalse(sm.contains(m1)); assertTrue(sm.contains(m2)); assertTrue(sm.contains(m3)); assertTrue(sm.contains(m4)); assertTrue(sm.contains(m5)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(m2, k); k = (Integer)(i.next()); assertEquals(m3, k); k = (Integer)(i.next()); assertEquals(m4, k); k = (Integer)(i.next()); assertEquals(m5, k); assertFalse(i.hasNext()); SortedSet ssm = sm.tailSet(m4); assertEquals(m4, ssm.first()); assertEquals(m5, ssm.last()); assertTrue(ssm.remove(m4)); assertEquals(1, ssm.size()); assertEquals(3, sm.size()); assertEquals(4, set.size()); } } backport-util-concurrent-3.1-src/test/tck/src/JSR166TestCase.java0000644001750700037720000004520310431777323023442 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import java.security.*; import junit.textui.*; /** * Base class for JSR166 Junit TCK tests. Defines some constants, * utility methods and classes, as well as a simple framework for * helping to make sure that assertions failing in generated threads * cause the associated test that generated them to itself fail (which * JUnit does not otherwise arrange). The rules for creating such * tests are: * *
    * *
  1. All assertions in code running in generated threads must use * the forms {@link #threadFail}, {@link #threadAssertTrue}, {@link * #threadAssertEquals}, or {@link #threadAssertNull}, (not * fail, assertTrue, etc.) It is OK (but not * particularly recommended) for other code to use these forms too. * Only the most typically used JUnit assertion methods are defined * this way, but enough to live with.
  2. * *
  3. If you override {@link #setUp} or {@link #tearDown}, make sure * to invoke super.setUp and super.tearDown within * them. These methods are used to clear and check for thread * assertion failures.
  4. * *
  5. All delays and timeouts must use one of the constants * SHORT_DELAY_MS, SMALL_DELAY_MS, MEDIUM_DELAY_MS, * LONG_DELAY_MS. The idea here is that a SHORT is always * discriminable from zero time, and always allows enough time for the * small amounts of computation (creating a thread, calling a few * methods, etc) needed to reach a timeout point. Similarly, a SMALL * is always discriminable as larger than SHORT and smaller than * MEDIUM. And so on. These constants are set to conservative values, * but even so, if there is ever any doubt, they can all be increased * in one spot to rerun tests on slower platforms.
  6. * *
  7. All threads generated must be joined inside each test case * method (or fail to do so) before returning from the * method. The joinPool method can be used to do this when * using Executors.
  8. * *
* *

Other notes *

*/ public class JSR166TestCase extends TestCase { /** * Runs all JSR166 unit tests using junit.textui.TestRunner */ public static void main (String[] args) { int iters = 1; if (args.length > 0) iters = Integer.parseInt(args[0]); Test s = suite(); for (int i = 0; i < iters; ++i) { TestRunner.run(s); System.gc(); System.runFinalization(); } System.exit(0); } // private static class Printer extends ResultPrinter { // Printer() { // super(System.out); // } // public void startTest(Test test) { // getWriter().println(test.getClass().getName()); // new Exception("Stack trace").printStackTrace(getWriter()); // } // } // /** * Collects all JSR166 unit tests as one suite */ public static Test suite ( ) { TestSuite suite = new TestSuite("JSR166 Unit Tests"); suite.addTest(new TestSuite(AbstractExecutorServiceTest.class)); // suite.addTest(new TestSuite(AbstractQueuedLongSynchronizerTest.class)); suite.addTest(new TestSuite(AbstractQueueTest.class)); // suite.addTest(new TestSuite(AbstractQueuedSynchronizerTest.class)); suite.addTest(new TestSuite(ArrayBlockingQueueTest.class)); suite.addTest(new TestSuite(ArrayDequeTest.class)); suite.addTest(new TestSuite(AtomicBooleanTest.class)); suite.addTest(new TestSuite(AtomicIntegerArrayTest.class)); // suite.addTest(new TestSuite(AtomicIntegerFieldUpdaterTest.class)); suite.addTest(new TestSuite(AtomicIntegerTest.class)); suite.addTest(new TestSuite(AtomicLongArrayTest.class)); // suite.addTest(new TestSuite(AtomicLongFieldUpdaterTest.class)); suite.addTest(new TestSuite(AtomicLongTest.class)); suite.addTest(new TestSuite(AtomicMarkableReferenceTest.class)); suite.addTest(new TestSuite(AtomicReferenceArrayTest.class)); // suite.addTest(new TestSuite(AtomicReferenceFieldUpdaterTest.class)); suite.addTest(new TestSuite(AtomicReferenceTest.class)); suite.addTest(new TestSuite(AtomicStampedReferenceTest.class)); suite.addTest(new TestSuite(ConcurrentHashMapTest.class)); suite.addTest(new TestSuite(ConcurrentLinkedQueueTest.class)); suite.addTest(new TestSuite(ConcurrentSkipListMapTest.class)); suite.addTest(new TestSuite(ConcurrentSkipListSubMapTest.class)); suite.addTest(new TestSuite(ConcurrentSkipListSetTest.class)); suite.addTest(new TestSuite(ConcurrentSkipListSubSetTest.class)); suite.addTest(new TestSuite(CopyOnWriteArrayListTest.class)); suite.addTest(new TestSuite(CopyOnWriteArraySetTest.class)); suite.addTest(new TestSuite(CountDownLatchTest.class)); suite.addTest(new TestSuite(CyclicBarrierTest.class)); suite.addTest(new TestSuite(DelayQueueTest.class)); suite.addTest(new TestSuite(EntryTest.class)); suite.addTest(new TestSuite(ExchangerTest.class)); suite.addTest(new TestSuite(ExecutorsTest.class)); suite.addTest(new TestSuite(ExecutorCompletionServiceTest.class)); suite.addTest(new TestSuite(FutureTaskTest.class)); suite.addTest(new TestSuite(LinkedBlockingDequeTest.class)); suite.addTest(new TestSuite(LinkedBlockingQueueTest.class)); suite.addTest(new TestSuite(LinkedListTest.class)); // suite.addTest(new TestSuite(LockSupportTest.class)); suite.addTest(new TestSuite(PriorityBlockingQueueTest.class)); suite.addTest(new TestSuite(PriorityQueueTest.class)); suite.addTest(new TestSuite(ReentrantLockTest.class)); suite.addTest(new TestSuite(ReentrantReadWriteLockTest.class)); suite.addTest(new TestSuite(ScheduledExecutorTest.class)); suite.addTest(new TestSuite(ScheduledExecutorSubclassTest.class)); suite.addTest(new TestSuite(SemaphoreTest.class)); suite.addTest(new TestSuite(SynchronousQueueTest.class)); suite.addTest(new TestSuite(SystemTest.class)); suite.addTest(new TestSuite(ThreadLocalTest.class)); suite.addTest(new TestSuite(ThreadPoolExecutorTest.class)); suite.addTest(new TestSuite(ThreadPoolExecutorSubclassTest.class)); // suite.addTest(new TestSuite(ThreadTest.class)); suite.addTest(new TestSuite(TimeUnitTest.class)); suite.addTest(new TestSuite(TreeMapTest.class)); suite.addTest(new TestSuite(TreeSubMapTest.class)); suite.addTest(new TestSuite(TreeSetTest.class)); suite.addTest(new TestSuite(TreeSubSetTest.class)); return suite; } public static long SHORT_DELAY_MS; public static long SMALL_DELAY_MS; public static long MEDIUM_DELAY_MS; public static long LONG_DELAY_MS; /** * Returns the shortest timed delay. */ protected long getShortDelay() { return Long.getLong("tck.shortDelay", 300).longValue(); } /** * Sets delays as multiples of SHORT_DELAY. */ protected void setDelays() { SHORT_DELAY_MS = getShortDelay(); SMALL_DELAY_MS = SHORT_DELAY_MS * 5; MEDIUM_DELAY_MS = SHORT_DELAY_MS * 10; LONG_DELAY_MS = SHORT_DELAY_MS * 50; } /** * Flag set true if any threadAssert methods fail */ volatile boolean threadFailed; /** * Initializes test to indicate that no thread assertions have failed */ public void setUp() { setDelays(); threadFailed = false; } /** * Triggers test case failure if any thread assertions have failed */ public void tearDown() { assertFalse(threadFailed); } /** * Fail, also setting status to indicate current testcase should fail */ public void threadFail(String reason) { threadFailed = true; fail(reason); } /** * If expression not true, set status to indicate current testcase * should fail */ public void threadAssertTrue(boolean b) { if (!b) { threadFailed = true; assertTrue(b); } } /** * If expression not false, set status to indicate current testcase * should fail */ public void threadAssertFalse(boolean b) { if (b) { threadFailed = true; assertFalse(b); } } /** * If argument not null, set status to indicate current testcase * should fail */ public void threadAssertNull(Object x) { if (x != null) { threadFailed = true; assertNull(x); } } /** * If arguments not equal, set status to indicate current testcase * should fail */ public void threadAssertEquals(long x, long y) { if (x != y) { threadFailed = true; assertEquals(x, y); } } /** * If arguments not equal, set status to indicate current testcase * should fail */ public void threadAssertEquals(Object x, Object y) { if (x != y && (x == null || !x.equals(y))) { threadFailed = true; assertEquals(x, y); } } /** * threadFail with message "should throw exception" */ public void threadShouldThrow() { threadFailed = true; fail("should throw exception"); } /** * threadFail with message "Unexpected exception" */ public void threadUnexpectedException() { threadFailed = true; fail("Unexpected exception"); } /** * Wait out termination of a thread pool or fail doing so */ public void joinPool(ExecutorService exec) { try { exec.shutdown(); assertTrue(exec.awaitTermination(LONG_DELAY_MS, TimeUnit.MILLISECONDS)); } catch(SecurityException ok) { // Allowed in case test doesn't have privs } catch(InterruptedException ie) { fail("Unexpected exception"); } } /** * fail with message "should throw exception" */ public void shouldThrow() { fail("Should throw exception"); } /** * fail with message "Unexpected exception" */ public void unexpectedException() { fail("Unexpected exception"); } /** * The number of elements to place in collections, arrays, etc. */ static final int SIZE = 20; // Some convenient Integer constants static final Integer zero = new Integer(0); static final Integer one = new Integer(1); static final Integer two = new Integer(2); static final Integer three = new Integer(3); static final Integer four = new Integer(4); static final Integer five = new Integer(5); static final Integer six = new Integer(6); static final Integer seven = new Integer(7); static final Integer eight = new Integer(8); static final Integer nine = new Integer(9); static final Integer m1 = new Integer(-1); static final Integer m2 = new Integer(-2); static final Integer m3 = new Integer(-3); static final Integer m4 = new Integer(-4); static final Integer m5 = new Integer(-5); static final Integer m6 = new Integer(-6); static final Integer m10 = new Integer(-10); /** * A security policy where new permissions can be dynamically added * or all cleared. */ static class AdjustablePolicy extends java.security.Policy { Permissions perms = new Permissions(); AdjustablePolicy() { } void addPermission(Permission perm) { perms.add(perm); } void clearPermissions() { perms = new Permissions(); } public PermissionCollection getPermissions(CodeSource cs) { return perms; } public PermissionCollection getPermissions(ProtectionDomain pd) { return perms; } public boolean implies(ProtectionDomain pd, Permission p) { return perms.implies(p); } public void refresh() {} } // Some convenient Runnable classes static class NoOpRunnable implements Runnable { public void run() {} } static class NoOpCallable implements Callable { public Object call() { return Boolean.TRUE; } } static final String TEST_STRING = "a test string"; static class StringTask implements Callable { public Object call() { return TEST_STRING; } } static class NPETask implements Callable { public Object call() { throw new NullPointerException(); } } static class CallableOne implements Callable { public Object call() { return one; } } class ShortRunnable implements Runnable { public void run() { try { Thread.sleep(SHORT_DELAY_MS); } catch(Exception e) { threadUnexpectedException(); } } } class ShortInterruptedRunnable implements Runnable { public void run() { try { Thread.sleep(SHORT_DELAY_MS); threadShouldThrow(); } catch(InterruptedException success) { } } } class SmallRunnable implements Runnable { public void run() { try { Thread.sleep(SMALL_DELAY_MS); } catch(Exception e) { threadUnexpectedException(); } } } class SmallPossiblyInterruptedRunnable implements Runnable { public void run() { try { Thread.sleep(SMALL_DELAY_MS); } catch(Exception e) { } } } class SmallCallable implements Callable { public Object call() { try { Thread.sleep(SMALL_DELAY_MS); } catch(Exception e) { threadUnexpectedException(); } return Boolean.TRUE; } } class SmallInterruptedRunnable implements Runnable { public void run() { try { Thread.sleep(SMALL_DELAY_MS); threadShouldThrow(); } catch(InterruptedException success) { } } } class MediumRunnable implements Runnable { public void run() { try { Thread.sleep(MEDIUM_DELAY_MS); } catch(Exception e) { threadUnexpectedException(); } } } class MediumInterruptedRunnable implements Runnable { public void run() { try { Thread.sleep(MEDIUM_DELAY_MS); threadShouldThrow(); } catch(InterruptedException success) { } } } class MediumPossiblyInterruptedRunnable implements Runnable { public void run() { try { Thread.sleep(MEDIUM_DELAY_MS); } catch(InterruptedException success) { } } } class LongPossiblyInterruptedRunnable implements Runnable { public void run() { try { Thread.sleep(LONG_DELAY_MS); } catch(InterruptedException success) { } } } /** * For use as ThreadFactory in constructors */ static class SimpleThreadFactory implements ThreadFactory{ public Thread newThread(Runnable r){ return new Thread(r); } } static class TrackedShortRunnable implements Runnable { volatile boolean done = false; public void run() { try { Thread.sleep(SMALL_DELAY_MS); done = true; } catch(Exception e){ } } } static class TrackedMediumRunnable implements Runnable { volatile boolean done = false; public void run() { try { Thread.sleep(MEDIUM_DELAY_MS); done = true; } catch(Exception e){ } } } static class TrackedLongRunnable implements Runnable { volatile boolean done = false; public void run() { try { Thread.sleep(LONG_DELAY_MS); done = true; } catch(Exception e){ } } } static class TrackedNoOpRunnable implements Runnable { volatile boolean done = false; public void run() { done = true; } } static class TrackedCallable implements Callable { volatile boolean done = false; public Object call() { try { Thread.sleep(SMALL_DELAY_MS); done = true; } catch(Exception e){ } return Boolean.TRUE; } } /** * For use as RejectedExecutionHandler in constructors */ static class NoOpREHandler implements RejectedExecutionHandler{ public void rejectedExecution(Runnable r, ThreadPoolExecutor executor){} } } backport-util-concurrent-3.1-src/test/tck/src/AtomicIntegerTest.java0000644001750700037720000001643710253674160024511 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import java.io.*; public class AtomicIntegerTest extends JSR166TestCase { public static void main (String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(AtomicIntegerTest.class); } /** * constructor initializes to given value */ public void testConstructor(){ AtomicInteger ai = new AtomicInteger(1); assertEquals(1,ai.get()); } /** * default constructed initializes to zero */ public void testConstructor2(){ AtomicInteger ai = new AtomicInteger(); assertEquals(0,ai.get()); } /** * get returns the last value set */ public void testGetSet(){ AtomicInteger ai = new AtomicInteger(1); assertEquals(1,ai.get()); ai.set(2); assertEquals(2,ai.get()); ai.set(-3); assertEquals(-3,ai.get()); } /** * get returns the last value lazySet in same thread */ public void testGetLazySet(){ AtomicInteger ai = new AtomicInteger(1); assertEquals(1,ai.get()); ai.lazySet(2); assertEquals(2,ai.get()); ai.lazySet(-3); assertEquals(-3,ai.get()); } /** * compareAndSet succeeds in changing value if equal to expected else fails */ public void testCompareAndSet(){ AtomicInteger ai = new AtomicInteger(1); assertTrue(ai.compareAndSet(1,2)); assertTrue(ai.compareAndSet(2,-4)); assertEquals(-4,ai.get()); assertFalse(ai.compareAndSet(-5,7)); assertFalse((7 == ai.get())); assertTrue(ai.compareAndSet(-4,7)); assertEquals(7,ai.get()); } /** * compareAndSet in one thread enables another waiting for value * to succeed */ public void testCompareAndSetInMultipleThreads() { final AtomicInteger ai = new AtomicInteger(1); Thread t = new Thread(new Runnable() { public void run() { while(!ai.compareAndSet(2, 3)) Thread.yield(); }}); try { t.start(); assertTrue(ai.compareAndSet(1, 2)); t.join(LONG_DELAY_MS); assertFalse(t.isAlive()); assertEquals(ai.get(), 3); } catch(Exception e) { unexpectedException(); } } /** * repeated weakCompareAndSet succeeds in changing value when equal * to expected */ public void testWeakCompareAndSet(){ AtomicInteger ai = new AtomicInteger(1); while(!ai.weakCompareAndSet(1,2)); while(!ai.weakCompareAndSet(2,-4)); assertEquals(-4,ai.get()); while(!ai.weakCompareAndSet(-4,7)); assertEquals(7,ai.get()); } /** * getAndSet returns previous value and sets to given value */ public void testGetAndSet(){ AtomicInteger ai = new AtomicInteger(1); assertEquals(1,ai.getAndSet(0)); assertEquals(0,ai.getAndSet(-10)); assertEquals(-10,ai.getAndSet(1)); } /** * getAndAdd returns previous value and adds given value */ public void testGetAndAdd(){ AtomicInteger ai = new AtomicInteger(1); assertEquals(1,ai.getAndAdd(2)); assertEquals(3,ai.get()); assertEquals(3,ai.getAndAdd(-4)); assertEquals(-1,ai.get()); } /** * getAndDecrement returns previous value and decrements */ public void testGetAndDecrement(){ AtomicInteger ai = new AtomicInteger(1); assertEquals(1,ai.getAndDecrement()); assertEquals(0,ai.getAndDecrement()); assertEquals(-1,ai.getAndDecrement()); } /** * getAndIncrement returns previous value and increments */ public void testGetAndIncrement(){ AtomicInteger ai = new AtomicInteger(1); assertEquals(1,ai.getAndIncrement()); assertEquals(2,ai.get()); ai.set(-2); assertEquals(-2,ai.getAndIncrement()); assertEquals(-1,ai.getAndIncrement()); assertEquals(0,ai.getAndIncrement()); assertEquals(1,ai.get()); } /** * addAndGet adds given value to current, and returns current value */ public void testAddAndGet(){ AtomicInteger ai = new AtomicInteger(1); assertEquals(3,ai.addAndGet(2)); assertEquals(3,ai.get()); assertEquals(-1,ai.addAndGet(-4)); assertEquals(-1,ai.get()); } /** * decrementAndGet decrements and returns current value */ public void testDecrementAndGet(){ AtomicInteger ai = new AtomicInteger(1); assertEquals(0,ai.decrementAndGet()); assertEquals(-1,ai.decrementAndGet()); assertEquals(-2,ai.decrementAndGet()); assertEquals(-2,ai.get()); } /** * incrementAndGet increments and returns current value */ public void testIncrementAndGet(){ AtomicInteger ai = new AtomicInteger(1); assertEquals(2,ai.incrementAndGet()); assertEquals(2,ai.get()); ai.set(-2); assertEquals(-1,ai.incrementAndGet()); assertEquals(0,ai.incrementAndGet()); assertEquals(1,ai.incrementAndGet()); assertEquals(1,ai.get()); } /** * a deserialized serialized atomic holds same value */ public void testSerialization() { AtomicInteger l = new AtomicInteger(); try { l.set(22); ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(l); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); AtomicInteger r = (AtomicInteger) in.readObject(); assertEquals(l.get(), r.get()); } catch(Exception e){ unexpectedException(); } } /** * toString returns current value. */ public void testToString() { AtomicInteger ai = new AtomicInteger(); for (int i = -12; i < 6; ++i) { ai.set(i); assertEquals(ai.toString(), Integer.toString(i)); } } /** * intValue returns current value. */ public void testIntValue() { AtomicInteger ai = new AtomicInteger(); for (int i = -12; i < 6; ++i) { ai.set(i); assertEquals(i, ai.intValue()); } } /** * longValue returns current value. */ public void testLongValue() { AtomicInteger ai = new AtomicInteger(); for (int i = -12; i < 6; ++i) { ai.set(i); assertEquals((long)i, ai.longValue()); } } /** * floatValue returns current value. */ public void testFloatValue() { AtomicInteger ai = new AtomicInteger(); for (int i = -12; i < 6; ++i) { ai.set(i); assertEquals((float)i, ai.floatValue(), 0.0f); } } /** * doubleValue returns current value. */ public void testDoubleValue() { AtomicInteger ai = new AtomicInteger(); for (int i = -12; i < 6; ++i) { ai.set(i); assertEquals((double)i, ai.doubleValue(), 0.0); } } } backport-util-concurrent-3.1-src/test/tck/src/AbstractQueuedSynchronizerTest.java0000644001750700037720000011764410253674160027313 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import java.io.*; public class AbstractQueuedSynchronizerTest extends JSR166TestCase { // public static void main(String[] args) { // junit.textui.TestRunner.run (suite()); // } // public static Test suite() { // return new TestSuite(AbstractQueuedSynchronizerTest.class); // } // // /** // * A simple mutex class, adapted from the // * AbstractQueuedSynchronizer javadoc. Exclusive acquire tests // * exercise this as a sample user extension. Other // * methods/features of AbstractQueuedSynchronizerTest are tested // * via other test classes, including those for ReentrantLock, // * ReentrantReadWriteLock, and Semaphore // */ // static class Mutex extends AbstractQueuedSynchronizer { // public boolean isHeldExclusively() { return getState() == 1; } // // public boolean tryAcquire(int acquires) { // assertTrue(acquires == 1); // return compareAndSetState(0, 1); // } // // public boolean tryRelease(int releases) { // if (getState() == 0) throw new IllegalMonitorStateException(); // setState(0); // return true; // } // // public AbstractQueuedSynchronizer.ConditionObject newCondition() { return new AbstractQueuedSynchronizer.ConditionObject(); } // // } // // // /** // * A simple latch class, to test shared mode. // */ // static class BooleanLatch extends AbstractQueuedSynchronizer { // public boolean isSignalled() { return getState() != 0; } // // public int tryAcquireShared(int ignore) { // return isSignalled()? 1 : -1; // } // // public boolean tryReleaseShared(int ignore) { // setState(1); // return true; // } // } // // /** // * A runnable calling acquireInterruptibly // */ // class InterruptibleSyncRunnable implements Runnable { // final Mutex sync; // InterruptibleSyncRunnable(Mutex l) { sync = l; } // public void run() { // try { // sync.acquireInterruptibly(1); // } catch(InterruptedException success){} // } // } // // // /** // * A runnable calling acquireInterruptibly that expects to be // * interrupted // */ // class InterruptedSyncRunnable implements Runnable { // final Mutex sync; // InterruptedSyncRunnable(Mutex l) { sync = l; } // public void run() { // try { // sync.acquireInterruptibly(1); // threadShouldThrow(); // } catch(InterruptedException success){} // } // } // // /** // * isHeldExclusively is false upon construction // */ // public void testIsHeldExclusively() { // Mutex rl = new Mutex(); // assertFalse(rl.isHeldExclusively()); // } // // /** // * acquiring released sync succeeds // */ // public void testAcquire() { // Mutex rl = new Mutex(); // rl.acquire(1); // assertTrue(rl.isHeldExclusively()); // rl.release(1); // assertFalse(rl.isHeldExclusively()); // } // // /** // * tryAcquire on an released sync succeeds // */ // public void testTryAcquire() { // Mutex rl = new Mutex(); // assertTrue(rl.tryAcquire(1)); // assertTrue(rl.isHeldExclusively()); // rl.release(1); // } // // /** // * hasQueuedThreads reports whether there are waiting threads // */ // public void testhasQueuedThreads() { // final Mutex sync = new Mutex(); // Thread t1 = new Thread(new InterruptedSyncRunnable(sync)); // Thread t2 = new Thread(new InterruptibleSyncRunnable(sync)); // try { // assertFalse(sync.hasQueuedThreads()); // sync.acquire(1); // t1.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.hasQueuedThreads()); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.hasQueuedThreads()); // t1.interrupt(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.hasQueuedThreads()); // sync.release(1); // Thread.sleep(SHORT_DELAY_MS); // assertFalse(sync.hasQueuedThreads()); // t1.join(); // t2.join(); // } catch(Exception e){ // unexpectedException(); // } // } // // /** // * isQueued(null) throws NPE // */ // public void testIsQueuedNPE() { // final Mutex sync = new Mutex(); // try { // sync.isQueued(null); // shouldThrow(); // } catch (NullPointerException success) { // } // } // // /** // * isQueued reports whether a thread is queued. // */ // public void testIsQueued() { // final Mutex sync = new Mutex(); // Thread t1 = new Thread(new InterruptedSyncRunnable(sync)); // Thread t2 = new Thread(new InterruptibleSyncRunnable(sync)); // try { // assertFalse(sync.isQueued(t1)); // assertFalse(sync.isQueued(t2)); // sync.acquire(1); // t1.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.isQueued(t1)); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.isQueued(t1)); // assertTrue(sync.isQueued(t2)); // t1.interrupt(); // Thread.sleep(SHORT_DELAY_MS); // assertFalse(sync.isQueued(t1)); // assertTrue(sync.isQueued(t2)); // sync.release(1); // Thread.sleep(SHORT_DELAY_MS); // assertFalse(sync.isQueued(t1)); // Thread.sleep(SHORT_DELAY_MS); // assertFalse(sync.isQueued(t2)); // t1.join(); // t2.join(); // } catch(Exception e){ // unexpectedException(); // } // } // // /** // * getFirstQueuedThread returns first waiting thread or null if none // */ // public void testGetFirstQueuedThread() { // final Mutex sync = new Mutex(); // Thread t1 = new Thread(new InterruptedSyncRunnable(sync)); // Thread t2 = new Thread(new InterruptibleSyncRunnable(sync)); // try { // assertNull(sync.getFirstQueuedThread()); // sync.acquire(1); // t1.start(); // Thread.sleep(SHORT_DELAY_MS); // assertEquals(t1, sync.getFirstQueuedThread()); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // assertEquals(t1, sync.getFirstQueuedThread()); // t1.interrupt(); // Thread.sleep(SHORT_DELAY_MS); // Thread.sleep(SHORT_DELAY_MS); // assertEquals(t2, sync.getFirstQueuedThread()); // sync.release(1); // Thread.sleep(SHORT_DELAY_MS); // assertNull(sync.getFirstQueuedThread()); // t1.join(); // t2.join(); // } catch(Exception e){ // unexpectedException(); // } // } // // // /** // * hasContended reports false if no thread has ever blocked, else true // */ // public void testHasContended() { // final Mutex sync = new Mutex(); // Thread t1 = new Thread(new InterruptedSyncRunnable(sync)); // Thread t2 = new Thread(new InterruptibleSyncRunnable(sync)); // try { // assertFalse(sync.hasContended()); // sync.acquire(1); // t1.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.hasContended()); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.hasContended()); // t1.interrupt(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.hasContended()); // sync.release(1); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.hasContended()); // t1.join(); // t2.join(); // } catch(Exception e){ // unexpectedException(); // } // } // // /** // * getQueuedThreads includes waiting threads // */ // public void testGetQueuedThreads() { // final Mutex sync = new Mutex(); // Thread t1 = new Thread(new InterruptedSyncRunnable(sync)); // Thread t2 = new Thread(new InterruptibleSyncRunnable(sync)); // try { // assertTrue(sync.getQueuedThreads().isEmpty()); // sync.acquire(1); // assertTrue(sync.getQueuedThreads().isEmpty()); // t1.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.getQueuedThreads().contains(t1)); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.getQueuedThreads().contains(t1)); // assertTrue(sync.getQueuedThreads().contains(t2)); // t1.interrupt(); // Thread.sleep(SHORT_DELAY_MS); // assertFalse(sync.getQueuedThreads().contains(t1)); // assertTrue(sync.getQueuedThreads().contains(t2)); // sync.release(1); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.getQueuedThreads().isEmpty()); // t1.join(); // t2.join(); // } catch(Exception e){ // unexpectedException(); // } // } // // /** // * getExclusiveQueuedThreads includes waiting threads // */ // public void testGetExclusiveQueuedThreads() { // final Mutex sync = new Mutex(); // Thread t1 = new Thread(new InterruptedSyncRunnable(sync)); // Thread t2 = new Thread(new InterruptibleSyncRunnable(sync)); // try { // assertTrue(sync.getExclusiveQueuedThreads().isEmpty()); // sync.acquire(1); // assertTrue(sync.getExclusiveQueuedThreads().isEmpty()); // t1.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.getExclusiveQueuedThreads().contains(t1)); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.getExclusiveQueuedThreads().contains(t1)); // assertTrue(sync.getExclusiveQueuedThreads().contains(t2)); // t1.interrupt(); // Thread.sleep(SHORT_DELAY_MS); // assertFalse(sync.getExclusiveQueuedThreads().contains(t1)); // assertTrue(sync.getExclusiveQueuedThreads().contains(t2)); // sync.release(1); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.getExclusiveQueuedThreads().isEmpty()); // t1.join(); // t2.join(); // } catch(Exception e){ // unexpectedException(); // } // } // // /** // * getSharedQueuedThreads does not include exclusively waiting threads // */ // public void testGetSharedQueuedThreads() { // final Mutex sync = new Mutex(); // Thread t1 = new Thread(new InterruptedSyncRunnable(sync)); // Thread t2 = new Thread(new InterruptibleSyncRunnable(sync)); // try { // assertTrue(sync.getSharedQueuedThreads().isEmpty()); // sync.acquire(1); // assertTrue(sync.getSharedQueuedThreads().isEmpty()); // t1.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.getSharedQueuedThreads().isEmpty()); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.getSharedQueuedThreads().isEmpty()); // t1.interrupt(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.getSharedQueuedThreads().isEmpty()); // sync.release(1); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.getSharedQueuedThreads().isEmpty()); // t1.join(); // t2.join(); // } catch(Exception e){ // unexpectedException(); // } // } // // /** // * tryAcquireNanos is interruptible. // */ // public void testInterruptedException2() { // final Mutex sync = new Mutex(); // sync.acquire(1); // Thread t = new Thread(new Runnable() { // public void run() { // try { // sync.tryAcquireNanos(1, MEDIUM_DELAY_MS * 1000 * 1000); // threadShouldThrow(); // } catch(InterruptedException success){} // } // }); // try { // t.start(); // t.interrupt(); // } catch(Exception e){ // unexpectedException(); // } // } // // // /** // * TryAcquire on exclusively held sync fails // */ // public void testTryAcquireWhenSynced() { // final Mutex sync = new Mutex(); // sync.acquire(1); // Thread t = new Thread(new Runnable() { // public void run() { // threadAssertFalse(sync.tryAcquire(1)); // } // }); // try { // t.start(); // t.join(); // sync.release(1); // } catch(Exception e){ // unexpectedException(); // } // } // // /** // * tryAcquireNanos on an exclusively held sync times out // */ // public void testAcquireNanos_Timeout() { // final Mutex sync = new Mutex(); // sync.acquire(1); // Thread t = new Thread(new Runnable() { // public void run() { // try { // threadAssertFalse(sync.tryAcquireNanos(1, 1000 * 1000)); // } catch (Exception ex) { // threadUnexpectedException(); // } // } // }); // try { // t.start(); // t.join(); // sync.release(1); // } catch(Exception e){ // unexpectedException(); // } // } // // // /** // * getState is true when acquired and false when not // */ // public void testGetState() { // final Mutex sync = new Mutex(); // sync.acquire(1); // assertTrue(sync.isHeldExclusively()); // sync.release(1); // assertFalse(sync.isHeldExclusively()); // Thread t = new Thread(new Runnable() { // public void run() { // sync.acquire(1); // try { // Thread.sleep(SMALL_DELAY_MS); // } // catch(Exception e) { // threadUnexpectedException(); // } // sync.release(1); // } // }); // try { // t.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.isHeldExclusively()); // t.join(); // assertFalse(sync.isHeldExclusively()); // } catch(Exception e){ // unexpectedException(); // } // } // // // /** // * acquireInterruptibly is interruptible. // */ // public void testAcquireInterruptibly1() { // final Mutex sync = new Mutex(); // sync.acquire(1); // Thread t = new Thread(new InterruptedSyncRunnable(sync)); // try { // t.start(); // t.interrupt(); // sync.release(1); // t.join(); // } catch(Exception e){ // unexpectedException(); // } // } // // /** // * acquireInterruptibly succeeds when released, else is interruptible // */ // public void testAcquireInterruptibly2() { // final Mutex sync = new Mutex(); // try { // sync.acquireInterruptibly(1); // } catch(Exception e) { // unexpectedException(); // } // Thread t = new Thread(new InterruptedSyncRunnable(sync)); // try { // t.start(); // t.interrupt(); // assertTrue(sync.isHeldExclusively()); // t.join(); // } catch(Exception e){ // unexpectedException(); // } // } // // /** // * owns is true for a condition created by sync else false // */ // public void testOwns() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // final Mutex sync2 = new Mutex(); // assertTrue(sync.owns(c)); // assertFalse(sync2.owns(c)); // } // // /** // * Calling await without holding sync throws IllegalMonitorStateException // */ // public void testAwait_IllegalMonitor() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // try { // c.await(); // shouldThrow(); // } // catch (IllegalMonitorStateException success) { // } // catch (Exception ex) { // unexpectedException(); // } // } // // /** // * Calling signal without holding sync throws IllegalMonitorStateException // */ // public void testSignal_IllegalMonitor() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // try { // c.signal(); // shouldThrow(); // } // catch (IllegalMonitorStateException success) { // } // catch (Exception ex) { // unexpectedException(); // } // } // // /** // * awaitNanos without a signal times out // */ // public void testAwaitNanos_Timeout() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // try { // sync.acquire(1); // long t = c.awaitNanos(100); // assertTrue(t <= 0); // sync.release(1); // } // catch (Exception ex) { // unexpectedException(); // } // } // // /** // * Timed await without a signal times out // */ // public void testAwait_Timeout() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // try { // sync.acquire(1); // assertFalse(c.await(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); // sync.release(1); // } // catch (Exception ex) { // unexpectedException(); // } // } // // /** // * awaitUntil without a signal times out // */ // public void testAwaitUntil_Timeout() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // try { // sync.acquire(1); // edu.emory.mathcs.backport.java.util.Date d = new edu.emory.mathcs.backport.java.util.Date(); // assertFalse(c.awaitUntil(new edu.emory.mathcs.backport.java.util.Date(d.getTime() + 10))); // sync.release(1); // } // catch (Exception ex) { // unexpectedException(); // } // } // // /** // * await returns when signalled // */ // public void testAwait() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // Thread t = new Thread(new Runnable() { // public void run() { // try { // sync.acquire(1); // c.await(); // sync.release(1); // } // catch(InterruptedException e) { // threadUnexpectedException(); // } // } // }); // // try { // t.start(); // Thread.sleep(SHORT_DELAY_MS); // sync.acquire(1); // c.signal(); // sync.release(1); // t.join(SHORT_DELAY_MS); // assertFalse(t.isAlive()); // } // catch (Exception ex) { // unexpectedException(); // } // } // // // // /** // * hasWaiters throws NPE if null // */ // public void testHasWaitersNPE() { // final Mutex sync = new Mutex(); // try { // sync.hasWaiters(null); // shouldThrow(); // } catch (NullPointerException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // /** // * getWaitQueueLength throws NPE if null // */ // public void testGetWaitQueueLengthNPE() { // final Mutex sync = new Mutex(); // try { // sync.getWaitQueueLength(null); // shouldThrow(); // } catch (NullPointerException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // // /** // * getWaitingThreads throws NPE if null // */ // public void testGetWaitingThreadsNPE() { // final Mutex sync = new Mutex(); // try { // sync.getWaitingThreads(null); // shouldThrow(); // } catch (NullPointerException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // // /** // * hasWaiters throws IAE if not owned // */ // public void testHasWaitersIAE() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = (sync.newCondition()); // final Mutex sync2 = new Mutex(); // try { // sync2.hasWaiters(c); // shouldThrow(); // } catch (IllegalArgumentException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // /** // * hasWaiters throws IMSE if not synced // */ // public void testHasWaitersIMSE() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = (sync.newCondition()); // try { // sync.hasWaiters(c); // shouldThrow(); // } catch (IllegalMonitorStateException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // // /** // * getWaitQueueLength throws IAE if not owned // */ // public void testGetWaitQueueLengthIAE() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = (sync.newCondition()); // final Mutex sync2 = new Mutex(); // try { // sync2.getWaitQueueLength(c); // shouldThrow(); // } catch (IllegalArgumentException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // /** // * getWaitQueueLength throws IMSE if not synced // */ // public void testGetWaitQueueLengthIMSE() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = (sync.newCondition()); // try { // sync.getWaitQueueLength(c); // shouldThrow(); // } catch (IllegalMonitorStateException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // // /** // * getWaitingThreads throws IAE if not owned // */ // public void testGetWaitingThreadsIAE() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = (sync.newCondition()); // final Mutex sync2 = new Mutex(); // try { // sync2.getWaitingThreads(c); // shouldThrow(); // } catch (IllegalArgumentException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // /** // * getWaitingThreads throws IMSE if not synced // */ // public void testGetWaitingThreadsIMSE() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = (sync.newCondition()); // try { // sync.getWaitingThreads(c); // shouldThrow(); // } catch (IllegalMonitorStateException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // // // /** // * hasWaiters returns true when a thread is waiting, else false // */ // public void testHasWaiters() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // Thread t = new Thread(new Runnable() { // public void run() { // try { // sync.acquire(1); // threadAssertFalse(sync.hasWaiters(c)); // threadAssertEquals(0, sync.getWaitQueueLength(c)); // c.await(); // sync.release(1); // } // catch(InterruptedException e) { // threadUnexpectedException(); // } // } // }); // // try { // t.start(); // Thread.sleep(SHORT_DELAY_MS); // sync.acquire(1); // assertTrue(sync.hasWaiters(c)); // assertEquals(1, sync.getWaitQueueLength(c)); // c.signal(); // sync.release(1); // Thread.sleep(SHORT_DELAY_MS); // sync.acquire(1); // assertFalse(sync.hasWaiters(c)); // assertEquals(0, sync.getWaitQueueLength(c)); // sync.release(1); // t.join(SHORT_DELAY_MS); // assertFalse(t.isAlive()); // } // catch (Exception ex) { // unexpectedException(); // } // } // // /** // * getWaitQueueLength returns number of waiting threads // */ // public void testGetWaitQueueLength() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // Thread t1 = new Thread(new Runnable() { // public void run() { // try { // sync.acquire(1); // threadAssertFalse(sync.hasWaiters(c)); // threadAssertEquals(0, sync.getWaitQueueLength(c)); // c.await(); // sync.release(1); // } // catch(InterruptedException e) { // threadUnexpectedException(); // } // } // }); // // Thread t2 = new Thread(new Runnable() { // public void run() { // try { // sync.acquire(1); // threadAssertTrue(sync.hasWaiters(c)); // threadAssertEquals(1, sync.getWaitQueueLength(c)); // c.await(); // sync.release(1); // } // catch(InterruptedException e) { // threadUnexpectedException(); // } // } // }); // // try { // t1.start(); // Thread.sleep(SHORT_DELAY_MS); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // sync.acquire(1); // assertTrue(sync.hasWaiters(c)); // assertEquals(2, sync.getWaitQueueLength(c)); // c.signalAll(); // sync.release(1); // Thread.sleep(SHORT_DELAY_MS); // sync.acquire(1); // assertFalse(sync.hasWaiters(c)); // assertEquals(0, sync.getWaitQueueLength(c)); // sync.release(1); // t1.join(SHORT_DELAY_MS); // t2.join(SHORT_DELAY_MS); // assertFalse(t1.isAlive()); // assertFalse(t2.isAlive()); // } // catch (Exception ex) { // unexpectedException(); // } // } // // /** // * getWaitingThreads returns only and all waiting threads // */ // public void testGetWaitingThreads() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // Thread t1 = new Thread(new Runnable() { // public void run() { // try { // sync.acquire(1); // threadAssertTrue(sync.getWaitingThreads(c).isEmpty()); // c.await(); // sync.release(1); // } // catch(InterruptedException e) { // threadUnexpectedException(); // } // } // }); // // Thread t2 = new Thread(new Runnable() { // public void run() { // try { // sync.acquire(1); // threadAssertFalse(sync.getWaitingThreads(c).isEmpty()); // c.await(); // sync.release(1); // } // catch(InterruptedException e) { // threadUnexpectedException(); // } // } // }); // // try { // sync.acquire(1); // assertTrue(sync.getWaitingThreads(c).isEmpty()); // sync.release(1); // t1.start(); // Thread.sleep(SHORT_DELAY_MS); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // sync.acquire(1); // assertTrue(sync.hasWaiters(c)); // assertTrue(sync.getWaitingThreads(c).contains(t1)); // assertTrue(sync.getWaitingThreads(c).contains(t2)); // c.signalAll(); // sync.release(1); // Thread.sleep(SHORT_DELAY_MS); // sync.acquire(1); // assertFalse(sync.hasWaiters(c)); // assertTrue(sync.getWaitingThreads(c).isEmpty()); // sync.release(1); // t1.join(SHORT_DELAY_MS); // t2.join(SHORT_DELAY_MS); // assertFalse(t1.isAlive()); // assertFalse(t2.isAlive()); // } // catch (Exception ex) { // unexpectedException(); // } // } // // // // /** // * awaitUninterruptibly doesn't abort on interrupt // */ // public void testAwaitUninterruptibly() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // Thread t = new Thread(new Runnable() { // public void run() { // sync.acquire(1); // c.awaitUninterruptibly(); // sync.release(1); // } // }); // // try { // t.start(); // Thread.sleep(SHORT_DELAY_MS); // t.interrupt(); // sync.acquire(1); // c.signal(); // sync.release(1); // t.join(SHORT_DELAY_MS); // assertFalse(t.isAlive()); // } // catch (Exception ex) { // unexpectedException(); // } // } // // /** // * await is interruptible // */ // public void testAwait_Interrupt() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // Thread t = new Thread(new Runnable() { // public void run() { // try { // sync.acquire(1); // c.await(); // sync.release(1); // threadShouldThrow(); // } // catch(InterruptedException success) { // } // } // }); // // try { // t.start(); // Thread.sleep(SHORT_DELAY_MS); // t.interrupt(); // t.join(SHORT_DELAY_MS); // assertFalse(t.isAlive()); // } // catch (Exception ex) { // unexpectedException(); // } // } // // /** // * awaitNanos is interruptible // */ // public void testAwaitNanos_Interrupt() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // Thread t = new Thread(new Runnable() { // public void run() { // try { // sync.acquire(1); // c.awaitNanos(1000 * 1000 * 1000); // 1 sec // sync.release(1); // threadShouldThrow(); // } // catch(InterruptedException success) { // } // } // }); // // try { // t.start(); // Thread.sleep(SHORT_DELAY_MS); // t.interrupt(); // t.join(SHORT_DELAY_MS); // assertFalse(t.isAlive()); // } // catch (Exception ex) { // unexpectedException(); // } // } // // /** // * awaitUntil is interruptible // */ // public void testAwaitUntil_Interrupt() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // Thread t = new Thread(new Runnable() { // public void run() { // try { // sync.acquire(1); // edu.emory.mathcs.backport.java.util.Date d = new edu.emory.mathcs.backport.java.util.Date(); // c.awaitUntil(new edu.emory.mathcs.backport.java.util.Date(d.getTime() + 10000)); // sync.release(1); // threadShouldThrow(); // } // catch(InterruptedException success) { // } // } // }); // // try { // t.start(); // Thread.sleep(SHORT_DELAY_MS); // t.interrupt(); // t.join(SHORT_DELAY_MS); // assertFalse(t.isAlive()); // } // catch (Exception ex) { // unexpectedException(); // } // } // // /** // * signalAll wakes up all threads // */ // public void testSignalAll() { // final Mutex sync = new Mutex(); // final AbstractQueuedSynchronizer.ConditionObject c = sync.newCondition(); // Thread t1 = new Thread(new Runnable() { // public void run() { // try { // sync.acquire(1); // c.await(); // sync.release(1); // } // catch(InterruptedException e) { // threadUnexpectedException(); // } // } // }); // // Thread t2 = new Thread(new Runnable() { // public void run() { // try { // sync.acquire(1); // c.await(); // sync.release(1); // } // catch(InterruptedException e) { // threadUnexpectedException(); // } // } // }); // // try { // t1.start(); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // sync.acquire(1); // c.signalAll(); // sync.release(1); // t1.join(SHORT_DELAY_MS); // t2.join(SHORT_DELAY_MS); // assertFalse(t1.isAlive()); // assertFalse(t2.isAlive()); // } // catch (Exception ex) { // unexpectedException(); // } // } // // // /** // * toString indicates current state // */ // public void testToString() { // Mutex sync = new Mutex(); // String us = sync.toString(); // assertTrue(us.indexOf("State = 0") >= 0); // sync.acquire(1); // String ls = sync.toString(); // assertTrue(ls.indexOf("State = 1") >= 0); // } // // /** // * A serialized AQS deserializes with current state // */ // public void testSerialization() { // Mutex l = new Mutex(); // l.acquire(1); // assertTrue(l.isHeldExclusively()); // // try { // ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); // ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); // out.writeObject(l); // out.close(); // // ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); // ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); // Mutex r = (Mutex) in.readObject(); // assertTrue(r.isHeldExclusively()); // } catch(Exception e){ // e.printStackTrace(); // unexpectedException(); // } // } // // // /** // * tryReleaseShared setting state changes getState // */ // public void testGetStateWithReleaseShared() { // final BooleanLatch l = new BooleanLatch(); // assertFalse(l.isSignalled()); // l.releaseShared(0); // assertTrue(l.isSignalled()); // } // // /** // * releaseShared has no effect when already signalled // */ // public void testReleaseShared() { // final BooleanLatch l = new BooleanLatch(); // assertFalse(l.isSignalled()); // l.releaseShared(0); // assertTrue(l.isSignalled()); // l.releaseShared(0); // assertTrue(l.isSignalled()); // } // // /** // * acquireSharedInterruptibly returns after release, but not before // */ // public void testAcquireSharedInterruptibly() { // final BooleanLatch l = new BooleanLatch(); // // Thread t = new Thread(new Runnable() { // public void run() { // try { // threadAssertFalse(l.isSignalled()); // l.acquireSharedInterruptibly(0); // threadAssertTrue(l.isSignalled()); // } catch(InterruptedException e){ // threadUnexpectedException(); // } // } // }); // try { // t.start(); // assertFalse(l.isSignalled()); // Thread.sleep(SHORT_DELAY_MS); // l.releaseShared(0); // assertTrue(l.isSignalled()); // t.join(); // } catch (InterruptedException e){ // unexpectedException(); // } // } // // // /** // * acquireSharedTimed returns after release // */ // public void testAsquireSharedTimed() { // final BooleanLatch l = new BooleanLatch(); // // Thread t = new Thread(new Runnable() { // public void run() { // try { // threadAssertFalse(l.isSignalled()); // threadAssertTrue(l.tryAcquireSharedNanos(0, MEDIUM_DELAY_MS* 1000 * 1000)); // threadAssertTrue(l.isSignalled()); // // } catch(InterruptedException e){ // threadUnexpectedException(); // } // } // }); // try { // t.start(); // assertFalse(l.isSignalled()); // Thread.sleep(SHORT_DELAY_MS); // l.releaseShared(0); // assertTrue(l.isSignalled()); // t.join(); // } catch (InterruptedException e){ // unexpectedException(); // } // } // // /** // * acquireSharedInterruptibly throws IE if interrupted before released // */ // public void testAcquireSharedInterruptibly_InterruptedException() { // final BooleanLatch l = new BooleanLatch(); // Thread t = new Thread(new Runnable() { // public void run() { // try { // threadAssertFalse(l.isSignalled()); // l.acquireSharedInterruptibly(0); // threadShouldThrow(); // } catch(InterruptedException success){} // } // }); // t.start(); // try { // assertFalse(l.isSignalled()); // t.interrupt(); // t.join(); // } catch (InterruptedException e){ // unexpectedException(); // } // } // // /** // * acquireSharedTimed throws IE if interrupted before released // */ // public void testAcquireSharedNanos_InterruptedException() { // final BooleanLatch l = new BooleanLatch(); // Thread t = new Thread(new Runnable() { // public void run() { // try { // threadAssertFalse(l.isSignalled()); // l.tryAcquireSharedNanos(0, SMALL_DELAY_MS* 1000 * 1000); // threadShouldThrow(); // } catch(InterruptedException success){} // } // }); // t.start(); // try { // Thread.sleep(SHORT_DELAY_MS); // assertFalse(l.isSignalled()); // t.interrupt(); // t.join(); // } catch (InterruptedException e){ // unexpectedException(); // } // } // // /** // * acquireSharedTimed times out if not released before timeout // */ // public void testAcquireSharedNanos_Timeout() { // final BooleanLatch l = new BooleanLatch(); // Thread t = new Thread(new Runnable() { // public void run() { // try { // threadAssertFalse(l.isSignalled()); // threadAssertFalse(l.tryAcquireSharedNanos(0, SMALL_DELAY_MS* 1000 * 1000)); // } catch(InterruptedException ie){ // threadUnexpectedException(); // } // } // }); // t.start(); // try { // Thread.sleep(SHORT_DELAY_MS); // assertFalse(l.isSignalled()); // t.join(); // } catch (InterruptedException e){ // unexpectedException(); // } // } // // } backport-util-concurrent-3.1-src/test/tck/src/ThreadPoolExecutorSubclassTest.java0000755001750700037720000015646310431260156027240 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import junit.framework.*; import java.util.List; import java.util.ArrayList; import java.util.Iterator; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; public class ThreadPoolExecutorSubclassTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ThreadPoolExecutorTest.class); } static class CustomTask implements RunnableFuture { final Callable callable; final ReentrantLock lock = new ReentrantLock(); final Condition cond = lock.newCondition(); boolean done; boolean cancelled; Object result; Thread thread; Exception exception; CustomTask(Callable c) { callable = c; } CustomTask(final Runnable r, final Object res) { callable = new Callable() { public Object call() throws Exception { r.run(); return res; }}; } public boolean isDone() { lock.lock(); try { return done; } finally { lock.unlock() ; } } public boolean isCancelled() { lock.lock(); try { return cancelled; } finally { lock.unlock() ; } } public boolean cancel(boolean mayInterrupt) { lock.lock(); try { if (!done) { cancelled = true; done = true; if (mayInterrupt && thread != null) thread.interrupt(); return true; } return false; } finally { lock.unlock() ; } } public void run() { boolean runme; lock.lock(); try { runme = !done; if (!runme) thread = Thread.currentThread(); } finally { lock.unlock() ; } if (!runme) return; Object v = null; Exception e = null; try { v = callable.call(); } catch(Exception ex) { e = ex; } lock.lock(); try { result = v; exception = e; done = true; thread = null; cond.signalAll(); } finally { lock.unlock(); } } public Object get() throws InterruptedException, ExecutionException { lock.lock(); try { while (!done) cond.await(); if (exception != null) throw new ExecutionException(exception); return result; } finally { lock.unlock(); } } public Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException{ long nanos = unit.toNanos(timeout); lock.lock(); try { long deadline = Utils.nanoTime() + nanos; for (;;) { if (done) break; if (nanos < 0) throw new TimeoutException(); cond.await(nanos, TimeUnit.NANOSECONDS); nanos = deadline - Utils.nanoTime(); } if (exception != null) throw new ExecutionException(exception); return result; } finally { lock.unlock(); } } } static class CustomTPE extends ThreadPoolExecutor { protected RunnableFuture newTaskFor(Callable c) { return new CustomTask(c); } protected RunnableFuture newTaskFor(Runnable r, Object v) { return new CustomTask(r, v); } CustomTPE(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue); } CustomTPE(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory); } CustomTPE(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, RejectedExecutionHandler handler) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, handler); } CustomTPE(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); } volatile boolean beforeCalled = false; volatile boolean afterCalled = false; volatile boolean terminatedCalled = false; public CustomTPE() { super(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new SynchronousQueue()); } protected void beforeExecute(Thread t, Runnable r) { beforeCalled = true; } protected void afterExecute(Runnable r, Throwable t) { afterCalled = true; } protected void terminated() { terminatedCalled = true; } } static class FailingThreadFactory implements ThreadFactory{ int calls = 0; public Thread newThread(Runnable r){ if (++calls > 1) return null; return new Thread(r); } } /** * execute successfully executes a runnable */ public void testExecute() { ThreadPoolExecutor p1 = new CustomTPE(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { p1.execute(new Runnable() { public void run() { try { Thread.sleep(SHORT_DELAY_MS); } catch(InterruptedException e){ threadUnexpectedException(); } } }); Thread.sleep(SMALL_DELAY_MS); } catch(InterruptedException e){ unexpectedException(); } joinPool(p1); } /** * getActiveCount increases but doesn't overestimate, when a * thread becomes active */ public void testGetActiveCount() { ThreadPoolExecutor p2 = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(0, p2.getActiveCount()); p2.execute(new MediumRunnable()); try { Thread.sleep(SHORT_DELAY_MS); } catch(Exception e){ unexpectedException(); } assertEquals(1, p2.getActiveCount()); joinPool(p2); } /** * prestartCoreThread starts a thread if under corePoolSize, else doesn't */ public void testPrestartCoreThread() { ThreadPoolExecutor p2 = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(0, p2.getPoolSize()); assertTrue(p2.prestartCoreThread()); assertEquals(1, p2.getPoolSize()); assertTrue(p2.prestartCoreThread()); assertEquals(2, p2.getPoolSize()); assertFalse(p2.prestartCoreThread()); assertEquals(2, p2.getPoolSize()); joinPool(p2); } /** * prestartAllCoreThreads starts all corePoolSize threads */ public void testPrestartAllCoreThreads() { ThreadPoolExecutor p2 = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(0, p2.getPoolSize()); p2.prestartAllCoreThreads(); assertEquals(2, p2.getPoolSize()); p2.prestartAllCoreThreads(); assertEquals(2, p2.getPoolSize()); joinPool(p2); } /** * getCompletedTaskCount increases, but doesn't overestimate, * when tasks complete */ public void testGetCompletedTaskCount() { ThreadPoolExecutor p2 = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(0, p2.getCompletedTaskCount()); p2.execute(new ShortRunnable()); try { Thread.sleep(SMALL_DELAY_MS); } catch(Exception e){ unexpectedException(); } assertEquals(1, p2.getCompletedTaskCount()); try { p2.shutdown(); } catch(SecurityException ok) { return; } joinPool(p2); } /** * getCorePoolSize returns size given in constructor if not otherwise set */ public void testGetCorePoolSize() { ThreadPoolExecutor p1 = new CustomTPE(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(1, p1.getCorePoolSize()); joinPool(p1); } /** * getKeepAliveTime returns value given in constructor if not otherwise set */ public void testGetKeepAliveTime() { ThreadPoolExecutor p2 = new CustomTPE(2, 2, 1000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(1, p2.getKeepAliveTime(TimeUnit.SECONDS)); joinPool(p2); } /** * getThreadFactory returns factory in constructor if not set */ public void testGetThreadFactory() { ThreadFactory tf = new SimpleThreadFactory(); ThreadPoolExecutor p = new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10), tf, new NoOpREHandler()); assertSame(tf, p.getThreadFactory()); joinPool(p); } /** * setThreadFactory sets the thread factory returned by getThreadFactory */ public void testSetThreadFactory() { ThreadPoolExecutor p = new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); ThreadFactory tf = new SimpleThreadFactory(); p.setThreadFactory(tf); assertSame(tf, p.getThreadFactory()); joinPool(p); } /** * setThreadFactory(null) throws NPE */ public void testSetThreadFactoryNull() { ThreadPoolExecutor p = new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { p.setThreadFactory(null); shouldThrow(); } catch (NullPointerException success) { } finally { joinPool(p); } } /** * getRejectedExecutionHandler returns handler in constructor if not set */ public void testGetRejectedExecutionHandler() { RejectedExecutionHandler h = new NoOpREHandler(); ThreadPoolExecutor p = new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10), h); assertSame(h, p.getRejectedExecutionHandler()); joinPool(p); } /** * setRejectedExecutionHandler sets the handler returned by * getRejectedExecutionHandler */ public void testSetRejectedExecutionHandler() { ThreadPoolExecutor p = new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); RejectedExecutionHandler h = new NoOpREHandler(); p.setRejectedExecutionHandler(h); assertSame(h, p.getRejectedExecutionHandler()); joinPool(p); } /** * setRejectedExecutionHandler(null) throws NPE */ public void testSetRejectedExecutionHandlerNull() { ThreadPoolExecutor p = new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { p.setRejectedExecutionHandler(null); shouldThrow(); } catch (NullPointerException success) { } finally { joinPool(p); } } /** * getLargestPoolSize increases, but doesn't overestimate, when * multiple threads active */ public void testGetLargestPoolSize() { ThreadPoolExecutor p2 = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { assertEquals(0, p2.getLargestPoolSize()); p2.execute(new MediumRunnable()); p2.execute(new MediumRunnable()); Thread.sleep(SHORT_DELAY_MS); assertEquals(2, p2.getLargestPoolSize()); } catch(Exception e){ unexpectedException(); } joinPool(p2); } /** * getMaximumPoolSize returns value given in constructor if not * otherwise set */ public void testGetMaximumPoolSize() { ThreadPoolExecutor p2 = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(2, p2.getMaximumPoolSize()); joinPool(p2); } /** * getPoolSize increases, but doesn't overestimate, when threads * become active */ public void testGetPoolSize() { ThreadPoolExecutor p1 = new CustomTPE(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(0, p1.getPoolSize()); p1.execute(new MediumRunnable()); assertEquals(1, p1.getPoolSize()); joinPool(p1); } /** * getTaskCount increases, but doesn't overestimate, when tasks submitted */ public void testGetTaskCount() { ThreadPoolExecutor p1 = new CustomTPE(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { assertEquals(0, p1.getTaskCount()); p1.execute(new MediumRunnable()); Thread.sleep(SHORT_DELAY_MS); assertEquals(1, p1.getTaskCount()); } catch(Exception e){ unexpectedException(); } joinPool(p1); } /** * isShutDown is false before shutdown, true after */ public void testIsShutdown() { ThreadPoolExecutor p1 = new CustomTPE(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertFalse(p1.isShutdown()); try { p1.shutdown(); } catch(SecurityException ok) { return; } assertTrue(p1.isShutdown()); joinPool(p1); } /** * isTerminated is false before termination, true after */ public void testIsTerminated() { ThreadPoolExecutor p1 = new CustomTPE(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertFalse(p1.isTerminated()); try { p1.execute(new MediumRunnable()); } finally { try { p1.shutdown(); } catch(SecurityException ok) { return; } } try { assertTrue(p1.awaitTermination(LONG_DELAY_MS, TimeUnit.MILLISECONDS)); assertTrue(p1.isTerminated()); } catch(Exception e){ unexpectedException(); } } /** * isTerminating is not true when running or when terminated */ public void testIsTerminating() { ThreadPoolExecutor p1 = new CustomTPE(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertFalse(p1.isTerminating()); try { p1.execute(new SmallRunnable()); assertFalse(p1.isTerminating()); } finally { try { p1.shutdown(); } catch(SecurityException ok) { return; } } try { assertTrue(p1.awaitTermination(LONG_DELAY_MS, TimeUnit.MILLISECONDS)); assertTrue(p1.isTerminated()); assertFalse(p1.isTerminating()); } catch(Exception e){ unexpectedException(); } } /** * getQueue returns the work queue, which contains queued tasks */ public void testGetQueue() { BlockingQueue q = new ArrayBlockingQueue(10); ThreadPoolExecutor p1 = new CustomTPE(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, q); FutureTask[] tasks = new FutureTask[5]; for(int i = 0; i < 5; i++){ tasks[i] = new FutureTask(new MediumPossiblyInterruptedRunnable(), Boolean.TRUE); p1.execute(tasks[i]); } try { Thread.sleep(SHORT_DELAY_MS); BlockingQueue wq = p1.getQueue(); assertSame(q, wq); assertFalse(wq.contains(tasks[0])); assertTrue(wq.contains(tasks[4])); for (int i = 1; i < 5; ++i) tasks[i].cancel(true); p1.shutdownNow(); } catch(Exception e) { unexpectedException(); } finally { joinPool(p1); } } /** * remove(task) removes queued task, and fails to remove active task */ public void testRemove() { BlockingQueue q = new ArrayBlockingQueue(10); ThreadPoolExecutor p1 = new CustomTPE(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, q); FutureTask[] tasks = new FutureTask[5]; for(int i = 0; i < 5; i++){ tasks[i] = new FutureTask(new MediumPossiblyInterruptedRunnable(), Boolean.TRUE); p1.execute(tasks[i]); } try { Thread.sleep(SHORT_DELAY_MS); assertFalse(p1.remove(tasks[0])); assertTrue(q.contains(tasks[4])); assertTrue(q.contains(tasks[3])); assertTrue(p1.remove(tasks[4])); assertFalse(p1.remove(tasks[4])); assertFalse(q.contains(tasks[4])); assertTrue(q.contains(tasks[3])); assertTrue(p1.remove(tasks[3])); assertFalse(q.contains(tasks[3])); } catch(Exception e) { unexpectedException(); } finally { joinPool(p1); } } /** * purge removes cancelled tasks from the queue */ public void testPurge() { ThreadPoolExecutor p1 = new CustomTPE(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); FutureTask[] tasks = new FutureTask[5]; for(int i = 0; i < 5; i++){ tasks[i] = new FutureTask(new MediumPossiblyInterruptedRunnable(), Boolean.TRUE); p1.execute(tasks[i]); } tasks[4].cancel(true); tasks[3].cancel(true); p1.purge(); long count = p1.getTaskCount(); assertTrue(count >= 2 && count < 5); joinPool(p1); } /** * shutDownNow returns a list containing tasks that were not run */ public void testShutDownNow() { ThreadPoolExecutor p1 = new CustomTPE(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); List l; try { for(int i = 0; i < 5; i++) p1.execute(new MediumPossiblyInterruptedRunnable()); } finally { try { l = p1.shutdownNow(); } catch (SecurityException ok) { return; } } assertTrue(p1.isShutdown()); assertTrue(l.size() <= 4); } // Exception Tests /** * Constructor throws if corePoolSize argument is less than zero */ public void testConstructor1() { try { new CustomTPE(-1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is less than zero */ public void testConstructor2() { try { new CustomTPE(1,-1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is equal to zero */ public void testConstructor3() { try { new CustomTPE(1,0,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if keepAliveTime is less than zero */ public void testConstructor4() { try { new CustomTPE(1,2,-1L,TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if corePoolSize is greater than the maximumPoolSize */ public void testConstructor5() { try { new CustomTPE(2,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if workQueue is set to null */ public void testConstructorNullPointerException() { try { new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,null); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if corePoolSize argument is less than zero */ public void testConstructor6() { try { new CustomTPE(-1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is less than zero */ public void testConstructor7() { try { new CustomTPE(1,-1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is equal to zero */ public void testConstructor8() { try { new CustomTPE(1,0,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if keepAliveTime is less than zero */ public void testConstructor9() { try { new CustomTPE(1,2,-1L,TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if corePoolSize is greater than the maximumPoolSize */ public void testConstructor10() { try { new CustomTPE(2,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if workQueue is set to null */ public void testConstructorNullPointerException2() { try { new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,null,new SimpleThreadFactory()); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if threadFactory is set to null */ public void testConstructorNullPointerException3() { try { ThreadFactory f = null; new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10),f); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if corePoolSize argument is less than zero */ public void testConstructor11() { try { new CustomTPE(-1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is less than zero */ public void testConstructor12() { try { new CustomTPE(1,-1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is equal to zero */ public void testConstructor13() { try { new CustomTPE(1,0,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if keepAliveTime is less than zero */ public void testConstructor14() { try { new CustomTPE(1,2,-1L,TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if corePoolSize is greater than the maximumPoolSize */ public void testConstructor15() { try { new CustomTPE(2,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if workQueue is set to null */ public void testConstructorNullPointerException4() { try { new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,null,new NoOpREHandler()); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if handler is set to null */ public void testConstructorNullPointerException5() { try { RejectedExecutionHandler r = null; new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10),r); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if corePoolSize argument is less than zero */ public void testConstructor16() { try { new CustomTPE(-1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory(),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is less than zero */ public void testConstructor17() { try { new CustomTPE(1,-1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory(),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is equal to zero */ public void testConstructor18() { try { new CustomTPE(1,0,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory(),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if keepAliveTime is less than zero */ public void testConstructor19() { try { new CustomTPE(1,2,-1L,TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory(),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if corePoolSize is greater than the maximumPoolSize */ public void testConstructor20() { try { new CustomTPE(2,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory(),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if workQueue is set to null */ public void testConstructorNullPointerException6() { try { new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,null,new SimpleThreadFactory(),new NoOpREHandler()); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if handler is set to null */ public void testConstructorNullPointerException7() { try { RejectedExecutionHandler r = null; new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10),new SimpleThreadFactory(),r); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if ThreadFactory is set top null */ public void testConstructorNullPointerException8() { try { ThreadFactory f = null; new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10),f,new NoOpREHandler()); shouldThrow(); } catch (NullPointerException successdn8){} } /** * execute throws RejectedExecutionException * if saturated. */ public void testSaturatedExecute() { ThreadPoolExecutor p = new CustomTPE(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1)); try { for(int i = 0; i < 5; ++i){ p.execute(new MediumRunnable()); } shouldThrow(); } catch(RejectedExecutionException success){} joinPool(p); } /** * executor using CallerRunsPolicy runs task if saturated. */ public void testSaturatedExecute2() { RejectedExecutionHandler h = new CustomTPE.CallerRunsPolicy(); ThreadPoolExecutor p = new CustomTPE(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1), h); try { TrackedNoOpRunnable[] tasks = new TrackedNoOpRunnable[5]; for(int i = 0; i < 5; ++i){ tasks[i] = new TrackedNoOpRunnable(); } TrackedLongRunnable mr = new TrackedLongRunnable(); p.execute(mr); for(int i = 0; i < 5; ++i){ p.execute(tasks[i]); } for(int i = 1; i < 5; ++i) { assertTrue(tasks[i].done); } try { p.shutdownNow(); } catch(SecurityException ok) { return; } } catch(RejectedExecutionException ex){ unexpectedException(); } finally { joinPool(p); } } /** * executor using DiscardPolicy drops task if saturated. */ public void testSaturatedExecute3() { RejectedExecutionHandler h = new CustomTPE.DiscardPolicy(); ThreadPoolExecutor p = new CustomTPE(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1), h); try { TrackedNoOpRunnable[] tasks = new TrackedNoOpRunnable[5]; for(int i = 0; i < 5; ++i){ tasks[i] = new TrackedNoOpRunnable(); } p.execute(new TrackedLongRunnable()); for(int i = 0; i < 5; ++i){ p.execute(tasks[i]); } for(int i = 0; i < 5; ++i){ assertFalse(tasks[i].done); } try { p.shutdownNow(); } catch(SecurityException ok) { return; } } catch(RejectedExecutionException ex){ unexpectedException(); } finally { joinPool(p); } } /** * executor using DiscardOldestPolicy drops oldest task if saturated. */ public void testSaturatedExecute4() { RejectedExecutionHandler h = new CustomTPE.DiscardOldestPolicy(); ThreadPoolExecutor p = new CustomTPE(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1), h); try { p.execute(new TrackedLongRunnable()); TrackedLongRunnable r2 = new TrackedLongRunnable(); p.execute(r2); assertTrue(p.getQueue().contains(r2)); TrackedNoOpRunnable r3 = new TrackedNoOpRunnable(); p.execute(r3); assertFalse(p.getQueue().contains(r2)); assertTrue(p.getQueue().contains(r3)); try { p.shutdownNow(); } catch(SecurityException ok) { return; } } catch(RejectedExecutionException ex){ unexpectedException(); } finally { joinPool(p); } } /** * execute throws RejectedExecutionException if shutdown */ public void testRejectedExecutionExceptionOnShutdown() { ThreadPoolExecutor tpe = new CustomTPE(1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(1)); try { tpe.shutdown(); } catch(SecurityException ok) { return; } try { tpe.execute(new NoOpRunnable()); shouldThrow(); } catch(RejectedExecutionException success){} joinPool(tpe); } /** * execute using CallerRunsPolicy drops task on shutdown */ public void testCallerRunsOnShutdown() { RejectedExecutionHandler h = new CustomTPE.CallerRunsPolicy(); ThreadPoolExecutor p = new CustomTPE(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1), h); try { p.shutdown(); } catch(SecurityException ok) { return; } try { TrackedNoOpRunnable r = new TrackedNoOpRunnable(); p.execute(r); assertFalse(r.done); } catch(RejectedExecutionException success){ unexpectedException(); } finally { joinPool(p); } } /** * execute using DiscardPolicy drops task on shutdown */ public void testDiscardOnShutdown() { RejectedExecutionHandler h = new CustomTPE.DiscardPolicy(); ThreadPoolExecutor p = new CustomTPE(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1), h); try { p.shutdown(); } catch(SecurityException ok) { return; } try { TrackedNoOpRunnable r = new TrackedNoOpRunnable(); p.execute(r); assertFalse(r.done); } catch(RejectedExecutionException success){ unexpectedException(); } finally { joinPool(p); } } /** * execute using DiscardOldestPolicy drops task on shutdown */ public void testDiscardOldestOnShutdown() { RejectedExecutionHandler h = new CustomTPE.DiscardOldestPolicy(); ThreadPoolExecutor p = new CustomTPE(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1), h); try { p.shutdown(); } catch(SecurityException ok) { return; } try { TrackedNoOpRunnable r = new TrackedNoOpRunnable(); p.execute(r); assertFalse(r.done); } catch(RejectedExecutionException success){ unexpectedException(); } finally { joinPool(p); } } /** * execute (null) throws NPE */ public void testExecuteNull() { ThreadPoolExecutor tpe = null; try { tpe = new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10)); tpe.execute(null); shouldThrow(); } catch(NullPointerException success){} joinPool(tpe); } /** * setCorePoolSize of negative value throws IllegalArgumentException */ public void testCorePoolSizeIllegalArgumentException() { ThreadPoolExecutor tpe = null; try { tpe = new CustomTPE(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10)); } catch(Exception e){} try { tpe.setCorePoolSize(-1); shouldThrow(); } catch(IllegalArgumentException success){ } finally { try { tpe.shutdown(); } catch(SecurityException ok) { return; } } joinPool(tpe); } /** * setMaximumPoolSize(int) throws IllegalArgumentException if * given a value less the core pool size */ public void testMaximumPoolSizeIllegalArgumentException() { ThreadPoolExecutor tpe = null; try { tpe = new CustomTPE(2,3,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10)); } catch(Exception e){} try { tpe.setMaximumPoolSize(1); shouldThrow(); } catch(IllegalArgumentException success){ } finally { try { tpe.shutdown(); } catch(SecurityException ok) { return; } } joinPool(tpe); } /** * setMaximumPoolSize throws IllegalArgumentException * if given a negative value */ public void testMaximumPoolSizeIllegalArgumentException2() { ThreadPoolExecutor tpe = null; try { tpe = new CustomTPE(2,3,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10)); } catch(Exception e){} try { tpe.setMaximumPoolSize(-1); shouldThrow(); } catch(IllegalArgumentException success){ } finally { try { tpe.shutdown(); } catch(SecurityException ok) { return; } } joinPool(tpe); } /** * setKeepAliveTime throws IllegalArgumentException * when given a negative value */ public void testKeepAliveTimeIllegalArgumentException() { ThreadPoolExecutor tpe = null; try { tpe = new CustomTPE(2,3,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10)); } catch(Exception e){} try { tpe.setKeepAliveTime(-1,TimeUnit.MILLISECONDS); shouldThrow(); } catch(IllegalArgumentException success){ } finally { try { tpe.shutdown(); } catch(SecurityException ok) { return; } } joinPool(tpe); } /** * terminated() is called on termination */ public void testTerminated() { CustomTPE tpe = new CustomTPE(); try { tpe.shutdown(); } catch(SecurityException ok) { return; } assertTrue(tpe.terminatedCalled); joinPool(tpe); } /** * beforeExecute and afterExecute are called when executing task */ public void testBeforeAfter() { CustomTPE tpe = new CustomTPE(); try { TrackedNoOpRunnable r = new TrackedNoOpRunnable(); tpe.execute(r); Thread.sleep(SHORT_DELAY_MS); assertTrue(r.done); assertTrue(tpe.beforeCalled); assertTrue(tpe.afterCalled); try { tpe.shutdown(); } catch(SecurityException ok) { return; } } catch(Exception ex) { unexpectedException(); } finally { joinPool(tpe); } } /** * completed submit of callable returns result */ public void testSubmitCallable() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { Future future = e.submit(new StringTask()); String result = (String)future.get(); assertSame(TEST_STRING, result); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { joinPool(e); } } /** * completed submit of runnable returns successfully */ public void testSubmitRunnable() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { Future future = e.submit(new NoOpRunnable()); future.get(); assertTrue(future.isDone()); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { joinPool(e); } } /** * completed submit of (runnable, result) returns result */ public void testSubmitRunnable2() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { Future future = e.submit(new NoOpRunnable(), TEST_STRING); String result = (String)future.get(); assertSame(TEST_STRING, result); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(null) throws NPE */ public void testInvokeAny1() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { e.invokeAny(null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(empty collection) throws IAE */ public void testInvokeAny2() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { e.invokeAny(new ArrayList()); } catch (IllegalArgumentException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) throws NPE if c has null elements */ public void testInvokeAny3() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAny(l); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) throws ExecutionException if no task completes */ public void testInvokeAny4() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new NPETask()); e.invokeAny(l); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) returns result of some task */ public void testInvokeAny5() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); String result = (String)e.invokeAny(l); assertSame(TEST_STRING, result); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(null) throws NPE */ public void testInvokeAll1() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { e.invokeAll(null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(empty collection) returns empty collection */ public void testInvokeAll2() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { List r = e.invokeAll(new ArrayList()); assertTrue(r.isEmpty()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(c) throws NPE if c has null elements */ public void testInvokeAll3() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAll(l); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * get of element of invokeAll(c) throws exception on failed task */ public void testInvokeAll4() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new NPETask()); List result = e.invokeAll(l); assertEquals(1, result.size()); for (Iterator it = result.iterator(); it.hasNext();) ((Future)it.next()).get(); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(c) returns results of all completed tasks */ public void testInvokeAll5() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); List result = e.invokeAll(l); assertEquals(2, result.size()); for (Iterator it = result.iterator(); it.hasNext();) assertSame(TEST_STRING, ((Future)it.next()).get()); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(null) throws NPE */ public void testTimedInvokeAny1() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { e.invokeAny(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(,,null) throws NPE */ public void testTimedInvokeAnyNullTimeUnit() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); e.invokeAny(l, MEDIUM_DELAY_MS, null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(empty collection) throws IAE */ public void testTimedInvokeAny2() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { e.invokeAny(new ArrayList(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (IllegalArgumentException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) throws NPE if c has null elements */ public void testTimedInvokeAny3() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { ex.printStackTrace(); unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) throws ExecutionException if no task completes */ public void testTimedInvokeAny4() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new NPETask()); e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) returns result of some task */ public void testTimedInvokeAny5() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); String result = (String)e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertSame(TEST_STRING, result); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(null) throws NPE */ public void testTimedInvokeAll1() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { e.invokeAll(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(,,null) throws NPE */ public void testTimedInvokeAllNullTimeUnit() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); e.invokeAll(l, MEDIUM_DELAY_MS, null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(empty collection) returns empty collection */ public void testTimedInvokeAll2() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { List r = e.invokeAll(new ArrayList(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertTrue(r.isEmpty()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) throws NPE if c has null elements */ public void testTimedInvokeAll3() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * get of element of invokeAll(c) throws exception on failed task */ public void testTimedInvokeAll4() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new NPETask()); List result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(1, result.size()); for (Iterator it = result.iterator(); it.hasNext();) ((Future)it.next()).get(); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) returns results of all completed tasks */ public void testTimedInvokeAll5() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); List result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(2, result.size()); for (Iterator it = result.iterator(); it.hasNext();) assertSame(TEST_STRING, ((Future)it.next()).get()); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) cancels tasks not completed by timeout */ public void testTimedInvokeAll6() { ExecutorService e = new CustomTPE(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(Executors.callable(new MediumPossiblyInterruptedRunnable(), TEST_STRING)); l.add(new StringTask()); List result = e.invokeAll(l, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(3, result.size()); Iterator it = result.iterator(); Future f1 = (Future)it.next(); Future f2 = (Future)it.next(); Future f3 = (Future)it.next(); assertTrue(f1.isDone()); assertTrue(f2.isDone()); assertTrue(f3.isDone()); assertFalse(f1.isCancelled()); assertTrue(f2.isCancelled()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * Execution continues if there is at least one thread even if * thread factory fails to create more */ public void testFailingThreadFactory() { ExecutorService e = new CustomTPE(100, 100, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), new FailingThreadFactory()); try { ArrayList l = new ArrayList(); for (int k = 0; k < 100; ++k) { e.execute(new NoOpRunnable()); } Thread.sleep(LONG_DELAY_MS); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * allowsCoreThreadTimeOut is by default false. */ public void testAllowsCoreThreadTimeOut() { ThreadPoolExecutor tpe = new CustomTPE(2, 2, 1000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertFalse(tpe.allowsCoreThreadTimeOut()); joinPool(tpe); } /** * allowCoreThreadTimeOut(true) causes idle threads to time out */ public void testAllowCoreThreadTimeOut_true() { ThreadPoolExecutor tpe = new CustomTPE(2, 10, 10, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); tpe.allowCoreThreadTimeOut(true); tpe.execute(new NoOpRunnable()); try { Thread.sleep(MEDIUM_DELAY_MS); assertEquals(0, tpe.getPoolSize()); } catch(InterruptedException e){ unexpectedException(); } finally { joinPool(tpe); } } /** * allowCoreThreadTimeOut(false) causes idle threads not to time out */ public void testAllowCoreThreadTimeOut_false() { ThreadPoolExecutor tpe = new CustomTPE(2, 10, 10, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); tpe.allowCoreThreadTimeOut(false); tpe.execute(new NoOpRunnable()); try { Thread.sleep(MEDIUM_DELAY_MS); assertTrue(tpe.getPoolSize() >= 1); } catch(InterruptedException e){ unexpectedException(); } finally { joinPool(tpe); } } } backport-util-concurrent-3.1-src/test/tck/src/ConcurrentSkipListSubSetTest.java0000644001750700037720000007627610431777323026724 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import edu.emory.mathcs.backport.java.util.*; import java.util.Comparator; import java.util.Iterator; import java.util.SortedSet; public class ConcurrentSkipListSubSetTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ConcurrentSkipListSubSetTest.class); } static class MyReverseComparator implements Comparator { public int compare(Object x, Object y) { int i = ((Integer)x).intValue(); int j = ((Integer)y).intValue(); if (i < j) return 1; if (i > j) return -1; return 0; } } /** * Create a set of given size containing consecutive * Integers 0 ... n. */ private NavigableSet populatedSet(int n) { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); assertTrue(q.isEmpty()); for(int i = n-1; i >= 0; i-=2) assertTrue(q.add(new Integer(i))); for(int i = (n & 1); i < n; i+=2) assertTrue(q.add(new Integer(i))); assertTrue(q.add(new Integer(-n))); assertTrue(q.add(new Integer(n))); NavigableSet s = q.subSet(new Integer(0), true, new Integer(n), false); assertFalse(s.isEmpty()); assertEquals(n, s.size()); return s; } /** * Create set of first 5 ints */ private NavigableSet set5() { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); assertTrue(q.isEmpty()); q.add(one); q.add(two); q.add(three); q.add(four); q.add(five); q.add(zero); q.add(seven); NavigableSet s = q.subSet(one, true, seven, false); assertEquals(5, s.size()); return s; } /** * Create set of first 5 negative ints */ private NavigableSet dset5() { ConcurrentSkipListSet q = new ConcurrentSkipListSet(); assertTrue(q.isEmpty()); q.add(m1); q.add(m2); q.add(m3); q.add(m4); q.add(m5); NavigableSet s = q.descendingSet(); assertEquals(5, s.size()); return s; } private static NavigableSet set0() { ConcurrentSkipListSet set = new ConcurrentSkipListSet(); assertTrue(set.isEmpty()); return set.tailSet(m1, true); } private static NavigableSet dset0() { ConcurrentSkipListSet set = new ConcurrentSkipListSet(); assertTrue(set.isEmpty()); return set; } /** * A new set has unbounded capacity */ public void testConstructor1() { assertEquals(0, set0().size()); } /** * isEmpty is true before add, false after */ public void testEmpty() { NavigableSet q = set0(); assertTrue(q.isEmpty()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.add(new Integer(2)); q.pollFirst(); q.pollFirst(); assertTrue(q.isEmpty()); } /** * size changes when elements added and removed */ public void testSize() { NavigableSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.size()); q.pollFirst(); } for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * add(null) throws NPE */ public void testAddNull() { try { NavigableSet q = set0(); q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * Add of comparable element succeeds */ public void testAdd() { NavigableSet q = set0(); assertTrue(q.add(six)); } /** * Add of duplicate element fails */ public void testAddDup() { NavigableSet q = set0(); assertTrue(q.add(six)); assertFalse(q.add(six)); } /** * Add of non-Comparable throws CCE */ public void testAddNonComparable() { try { NavigableSet q = set0(); q.add(new Object()); q.add(new Object()); q.add(new Object()); shouldThrow(); } catch(ClassCastException success) {} } /** * addAll(null) throws NPE */ public void testAddAll1() { try { NavigableSet q = set0(); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testAddAll2() { try { NavigableSet q = set0(); Integer[] ints = new Integer[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testAddAll3() { try { NavigableSet q = set0(); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i+SIZE); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Set contains all elements of successful addAll */ public void testAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(SIZE-1- i); NavigableSet q = set0(); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(new Integer(i), q.pollFirst()); } finally {} } /** * poll succeeds unless empty */ public void testPoll() { NavigableSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pollFirst()).intValue()); } assertNull(q.pollFirst()); } /** * remove(x) removes x and returns true if present */ public void testRemoveElement() { NavigableSet q = populatedSet(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { NavigableSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.pollFirst(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testClear() { NavigableSet q = populatedSet(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { NavigableSet q = populatedSet(SIZE); NavigableSet p = set0(); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testRetainAll() { NavigableSet q = populatedSet(SIZE); NavigableSet p = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.pollFirst(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { NavigableSet q = populatedSet(SIZE); NavigableSet p = populatedSet(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.pollFirst()); assertFalse(q.contains(I)); } } } /** * lower returns preceding element */ public void testLower() { NavigableSet q = set5(); Object e1 = q.lower(three); assertEquals(two, e1); Object e2 = q.lower(six); assertEquals(five, e2); Object e3 = q.lower(one); assertNull(e3); Object e4 = q.lower(zero); assertNull(e4); } /** * higher returns next element */ public void testHigher() { NavigableSet q = set5(); Object e1 = q.higher(three); assertEquals(four, e1); Object e2 = q.higher(zero); assertEquals(one, e2); Object e3 = q.higher(five); assertNull(e3); Object e4 = q.higher(six); assertNull(e4); } /** * floor returns preceding element */ public void testFloor() { NavigableSet q = set5(); Object e1 = q.floor(three); assertEquals(three, e1); Object e2 = q.floor(six); assertEquals(five, e2); Object e3 = q.floor(one); assertEquals(one, e3); Object e4 = q.floor(zero); assertNull(e4); } /** * ceiling returns next element */ public void testCeiling() { NavigableSet q = set5(); Object e1 = q.ceiling(three); assertEquals(three, e1); Object e2 = q.ceiling(zero); assertEquals(one, e2); Object e3 = q.ceiling(five); assertEquals(five, e3); Object e4 = q.ceiling(six); assertNull(e4); } /** * toArray contains all elements */ public void testToArray() { NavigableSet q = populatedSet(SIZE); Object[] o = q.toArray(); Arrays.sort(o); for(int i = 0; i < o.length; i++) assertEquals(o[i], q.pollFirst()); } /** * toArray(a) contains all elements */ public void testToArray2() { NavigableSet q = populatedSet(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); Arrays.sort(ints); for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.pollFirst()); } /** * iterator iterates through all elements */ public void testIterator() { NavigableSet q = populatedSet(SIZE); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); } /** * iterator of empty set has no elements */ public void testEmptyIterator() { NavigableSet q = set0(); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, 0); } /** * iterator.remove removes current element */ public void testIteratorRemove () { final NavigableSet q = set0(); q.add(new Integer(2)); q.add(new Integer(1)); q.add(new Integer(3)); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), new Integer(2)); assertEquals(it.next(), new Integer(3)); assertFalse(it.hasNext()); } /** * toString contains toStrings of elements */ public void testToString() { NavigableSet q = populatedSet(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * A deserialized serialized set has same elements */ public void testSerialization() { NavigableSet q = populatedSet(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); NavigableSet r = (NavigableSet)in.readObject(); assertEquals(q.size(), r.size()); while (!q.isEmpty()) assertEquals(q.pollFirst(), r.pollFirst()); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * subSet returns set with keys in requested range */ public void testSubSetContents() { NavigableSet set = set5(); SortedSet sm = set.subSet(two, four); assertEquals(two, sm.first()); assertEquals(three, sm.last()); assertEquals(2, sm.size()); assertFalse(sm.contains(one)); assertTrue(sm.contains(two)); assertTrue(sm.contains(three)); assertFalse(sm.contains(four)); assertFalse(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); Iterator j = sm.iterator(); j.next(); j.remove(); assertFalse(set.contains(two)); assertEquals(4, set.size()); assertEquals(1, sm.size()); assertEquals(three, sm.first()); assertEquals(three, sm.last()); assertTrue(sm.remove(three)); assertTrue(sm.isEmpty()); assertEquals(3, set.size()); } public void testSubSetContents2() { NavigableSet set = set5(); SortedSet sm = set.subSet(two, three); assertEquals(1, sm.size()); assertEquals(two, sm.first()); assertEquals(two, sm.last()); assertFalse(sm.contains(one)); assertTrue(sm.contains(two)); assertFalse(sm.contains(three)); assertFalse(sm.contains(four)); assertFalse(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); assertFalse(i.hasNext()); Iterator j = sm.iterator(); j.next(); j.remove(); assertFalse(set.contains(two)); assertEquals(4, set.size()); assertEquals(0, sm.size()); assertTrue(sm.isEmpty()); assertFalse(sm.remove(three)); assertEquals(4, set.size()); } /** * headSet returns set with keys in requested range */ public void testHeadSetContents() { NavigableSet set = set5(); SortedSet sm = set.headSet(four); assertTrue(sm.contains(one)); assertTrue(sm.contains(two)); assertTrue(sm.contains(three)); assertFalse(sm.contains(four)); assertFalse(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(one, k); k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); sm.clear(); assertTrue(sm.isEmpty()); assertEquals(2, set.size()); assertEquals(four, set.first()); } /** * tailSet returns set with keys in requested range */ public void testTailSetContents() { NavigableSet set = set5(); SortedSet sm = set.tailSet(two); assertFalse(sm.contains(one)); assertTrue(sm.contains(two)); assertTrue(sm.contains(three)); assertTrue(sm.contains(four)); assertTrue(sm.contains(five)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); k = (Integer)(i.next()); assertEquals(four, k); k = (Integer)(i.next()); assertEquals(five, k); assertFalse(i.hasNext()); SortedSet ssm = sm.tailSet(four); assertEquals(four, ssm.first()); assertEquals(five, ssm.last()); assertTrue(ssm.remove(four)); assertEquals(1, ssm.size()); assertEquals(3, sm.size()); assertEquals(4, set.size()); } /** * size changes when elements added and removed */ public void testDescendingSize() { NavigableSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.size()); q.pollFirst(); } for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * add(null) throws NPE */ public void testDescendingAddNull() { try { NavigableSet q = dset0(); q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * Add of comparable element succeeds */ public void testDescendingAdd() { NavigableSet q = dset0(); assertTrue(q.add(m6)); } /** * Add of duplicate element fails */ public void testDescendingAddDup() { NavigableSet q = dset0(); assertTrue(q.add(m6)); assertFalse(q.add(m6)); } /** * Add of non-Comparable throws CCE */ public void testDescendingAddNonComparable() { try { NavigableSet q = dset0(); q.add(new Object()); q.add(new Object()); q.add(new Object()); shouldThrow(); } catch(ClassCastException success) {} } /** * addAll(null) throws NPE */ public void testDescendingAddAll1() { try { NavigableSet q = dset0(); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testDescendingAddAll2() { try { NavigableSet q = dset0(); Integer[] ints = new Integer[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testDescendingAddAll3() { try { NavigableSet q = dset0(); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i+SIZE); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Set contains all elements of successful addAll */ public void testDescendingAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(SIZE-1- i); NavigableSet q = dset0(); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(new Integer(i), q.pollFirst()); } finally {} } /** * poll succeeds unless empty */ public void testDescendingPoll() { NavigableSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pollFirst()).intValue()); } assertNull(q.pollFirst()); } /** * remove(x) removes x and returns true if present */ public void testDescendingRemoveElement() { NavigableSet q = populatedSet(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testDescendingContains() { NavigableSet q = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.pollFirst(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testDescendingClear() { NavigableSet q = populatedSet(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testDescendingContainsAll() { NavigableSet q = populatedSet(SIZE); NavigableSet p = dset0(); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testDescendingRetainAll() { NavigableSet q = populatedSet(SIZE); NavigableSet p = populatedSet(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.pollFirst(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testDescendingRemoveAll() { for (int i = 1; i < SIZE; ++i) { NavigableSet q = populatedSet(SIZE); NavigableSet p = populatedSet(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.pollFirst()); assertFalse(q.contains(I)); } } } /** * lower returns preceding element */ public void testDescendingLower() { NavigableSet q = dset5(); Object e1 = q.lower(m3); assertEquals(m2, e1); Object e2 = q.lower(m6); assertEquals(m5, e2); Object e3 = q.lower(m1); assertNull(e3); Object e4 = q.lower(zero); assertNull(e4); } /** * higher returns next element */ public void testDescendingHigher() { NavigableSet q = dset5(); Object e1 = q.higher(m3); assertEquals(m4, e1); Object e2 = q.higher(zero); assertEquals(m1, e2); Object e3 = q.higher(m5); assertNull(e3); Object e4 = q.higher(m6); assertNull(e4); } /** * floor returns preceding element */ public void testDescendingFloor() { NavigableSet q = dset5(); Object e1 = q.floor(m3); assertEquals(m3, e1); Object e2 = q.floor(m6); assertEquals(m5, e2); Object e3 = q.floor(m1); assertEquals(m1, e3); Object e4 = q.floor(zero); assertNull(e4); } /** * ceiling returns next element */ public void testDescendingCeiling() { NavigableSet q = dset5(); Object e1 = q.ceiling(m3); assertEquals(m3, e1); Object e2 = q.ceiling(zero); assertEquals(m1, e2); Object e3 = q.ceiling(m5); assertEquals(m5, e3); Object e4 = q.ceiling(m6); assertNull(e4); } /** * toArray contains all elements */ public void testDescendingToArray() { NavigableSet q = populatedSet(SIZE); Object[] o = q.toArray(); Arrays.sort(o); for(int i = 0; i < o.length; i++) assertEquals(o[i], q.pollFirst()); } /** * toArray(a) contains all elements */ public void testDescendingToArray2() { NavigableSet q = populatedSet(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); Arrays.sort(ints); for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.pollFirst()); } /** * iterator iterates through all elements */ public void testDescendingIterator() { NavigableSet q = populatedSet(SIZE); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); } /** * iterator of empty set has no elements */ public void testDescendingEmptyIterator() { NavigableSet q = dset0(); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, 0); } /** * iterator.remove removes current element */ public void testDescendingIteratorRemove () { final NavigableSet q = dset0(); q.add(new Integer(2)); q.add(new Integer(1)); q.add(new Integer(3)); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), new Integer(2)); assertEquals(it.next(), new Integer(3)); assertFalse(it.hasNext()); } /** * toString contains toStrings of elements */ public void testDescendingToString() { NavigableSet q = populatedSet(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * A deserialized serialized set has same elements */ public void testDescendingSerialization() { NavigableSet q = populatedSet(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); NavigableSet r = (NavigableSet)in.readObject(); assertEquals(q.size(), r.size()); while (!q.isEmpty()) assertEquals(q.pollFirst(), r.pollFirst()); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * subSet returns set with keys in requested range */ public void testDescendingSubSetContents() { NavigableSet set = dset5(); SortedSet sm = set.subSet(m2, m4); assertEquals(m2, sm.first()); assertEquals(m3, sm.last()); assertEquals(2, sm.size()); assertFalse(sm.contains(m1)); assertTrue(sm.contains(m2)); assertTrue(sm.contains(m3)); assertFalse(sm.contains(m4)); assertFalse(sm.contains(m5)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(m2, k); k = (Integer)(i.next()); assertEquals(m3, k); assertFalse(i.hasNext()); Iterator j = sm.iterator(); j.next(); j.remove(); assertFalse(set.contains(m2)); assertEquals(4, set.size()); assertEquals(1, sm.size()); assertEquals(m3, sm.first()); assertEquals(m3, sm.last()); assertTrue(sm.remove(m3)); assertTrue(sm.isEmpty()); assertEquals(3, set.size()); } public void testDescendingSubSetContents2() { NavigableSet set = dset5(); SortedSet sm = set.subSet(m2, m3); assertEquals(1, sm.size()); assertEquals(m2, sm.first()); assertEquals(m2, sm.last()); assertFalse(sm.contains(m1)); assertTrue(sm.contains(m2)); assertFalse(sm.contains(m3)); assertFalse(sm.contains(m4)); assertFalse(sm.contains(m5)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(m2, k); assertFalse(i.hasNext()); Iterator j = sm.iterator(); j.next(); j.remove(); assertFalse(set.contains(m2)); assertEquals(4, set.size()); assertEquals(0, sm.size()); assertTrue(sm.isEmpty()); assertFalse(sm.remove(m3)); assertEquals(4, set.size()); } /** * headSet returns set with keys in requested range */ public void testDescendingHeadSetContents() { NavigableSet set = dset5(); SortedSet sm = set.headSet(m4); assertTrue(sm.contains(m1)); assertTrue(sm.contains(m2)); assertTrue(sm.contains(m3)); assertFalse(sm.contains(m4)); assertFalse(sm.contains(m5)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(m1, k); k = (Integer)(i.next()); assertEquals(m2, k); k = (Integer)(i.next()); assertEquals(m3, k); assertFalse(i.hasNext()); sm.clear(); assertTrue(sm.isEmpty()); assertEquals(2, set.size()); assertEquals(m4, set.first()); } /** * tailSet returns set with keys in requested range */ public void testDescendingTailSetContents() { NavigableSet set = dset5(); SortedSet sm = set.tailSet(m2); assertFalse(sm.contains(m1)); assertTrue(sm.contains(m2)); assertTrue(sm.contains(m3)); assertTrue(sm.contains(m4)); assertTrue(sm.contains(m5)); Iterator i = sm.iterator(); Object k; k = (Integer)(i.next()); assertEquals(m2, k); k = (Integer)(i.next()); assertEquals(m3, k); k = (Integer)(i.next()); assertEquals(m4, k); k = (Integer)(i.next()); assertEquals(m5, k); assertFalse(i.hasNext()); SortedSet ssm = sm.tailSet(m4); assertEquals(m4, ssm.first()); assertEquals(m5, ssm.last()); assertTrue(ssm.remove(m4)); assertEquals(1, ssm.size()); assertEquals(3, sm.size()); assertEquals(4, set.size()); } } backport-util-concurrent-3.1-src/test/tck/src/AtomicLongArrayTest.java0000644001750700037720000002570110253674160025004 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import java.io.*; import edu.emory.mathcs.backport.java.util.*; public class AtomicLongArrayTest extends JSR166TestCase { public static void main (String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(AtomicLongArrayTest.class); } /** * constructor creates array of given size with all elements zero */ public void testConstructor(){ AtomicLongArray ai = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) assertEquals(0,ai.get(i)); } /** * constructor with null array throws NPE */ public void testConstructor2NPE() { try { long[] a = null; AtomicLongArray ai = new AtomicLongArray(a); } catch (NullPointerException success) { } catch (Exception ex) { unexpectedException(); } } /** * constructor with array is of same size and has all elements */ public void testConstructor2() { long[] a = { 17L, 3L, -42L, 99L, -7L}; AtomicLongArray ai = new AtomicLongArray(a); assertEquals(a.length, ai.length()); for (int i = 0; i < a.length; ++i) assertEquals(a[i], ai.get(i)); } /** * get and set for out of bound indices throw IndexOutOfBoundsException */ public void testIndexing(){ AtomicLongArray ai = new AtomicLongArray(SIZE); try { ai.get(SIZE); } catch(IndexOutOfBoundsException success){ } try { ai.get(-1); } catch(IndexOutOfBoundsException success){ } try { ai.set(SIZE, 0); } catch(IndexOutOfBoundsException success){ } try { ai.set(-1, 0); } catch(IndexOutOfBoundsException success){ } } /** * get returns the last value set at index */ public void testGetSet(){ AtomicLongArray ai = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(1,ai.get(i)); ai.set(i, 2); assertEquals(2,ai.get(i)); ai.set(i, -3); assertEquals(-3,ai.get(i)); } } /** * get returns the last value lazySet at index by same thread */ public void testGetLazySet(){ AtomicLongArray ai = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.lazySet(i, 1); assertEquals(1,ai.get(i)); ai.lazySet(i, 2); assertEquals(2,ai.get(i)); ai.lazySet(i, -3); assertEquals(-3,ai.get(i)); } } /** * compareAndSet succeeds in changing value if equal to expected else fails */ public void testCompareAndSet(){ AtomicLongArray ai = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertTrue(ai.compareAndSet(i, 1,2)); assertTrue(ai.compareAndSet(i, 2,-4)); assertEquals(-4,ai.get(i)); assertFalse(ai.compareAndSet(i, -5,7)); assertFalse((7 == ai.get(i))); assertTrue(ai.compareAndSet(i, -4,7)); assertEquals(7,ai.get(i)); } } /** * compareAndSet in one thread enables another waiting for value * to succeed */ public void testCompareAndSetInMultipleThreads() { final AtomicLongArray a = new AtomicLongArray(1); a.set(0, 1); Thread t = new Thread(new Runnable() { public void run() { while(!a.compareAndSet(0, 2, 3)) Thread.yield(); }}); try { t.start(); assertTrue(a.compareAndSet(0, 1, 2)); t.join(LONG_DELAY_MS); assertFalse(t.isAlive()); assertEquals(a.get(0), 3); } catch(Exception e) { unexpectedException(); } } /** * repeated weakCompareAndSet succeeds in changing value when equal * to expected */ public void testWeakCompareAndSet(){ AtomicLongArray ai = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); while(!ai.weakCompareAndSet(i, 1,2)); while(!ai.weakCompareAndSet(i, 2,-4)); assertEquals(-4,ai.get(i)); while(!ai.weakCompareAndSet(i, -4,7)); assertEquals(7,ai.get(i)); } } /** * getAndSet returns previous value and sets to given value at given index */ public void testGetAndSet(){ AtomicLongArray ai = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(1,ai.getAndSet(i,0)); assertEquals(0,ai.getAndSet(i,-10)); assertEquals(-10,ai.getAndSet(i,1)); } } /** * getAndAdd returns previous value and adds given value */ public void testGetAndAdd(){ AtomicLongArray ai = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(1,ai.getAndAdd(i,2)); assertEquals(3,ai.get(i)); assertEquals(3,ai.getAndAdd(i,-4)); assertEquals(-1,ai.get(i)); } } /** * getAndDecrement returns previous value and decrements */ public void testGetAndDecrement(){ AtomicLongArray ai = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(1,ai.getAndDecrement(i)); assertEquals(0,ai.getAndDecrement(i)); assertEquals(-1,ai.getAndDecrement(i)); } } /** * getAndIncrement returns previous value and increments */ public void testGetAndIncrement(){ AtomicLongArray ai = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(1,ai.getAndIncrement(i)); assertEquals(2,ai.get(i)); ai.set(i,-2); assertEquals(-2,ai.getAndIncrement(i)); assertEquals(-1,ai.getAndIncrement(i)); assertEquals(0,ai.getAndIncrement(i)); assertEquals(1,ai.get(i)); } } /** * addAndGet adds given value to current, and returns current value */ public void testAddAndGet() { AtomicLongArray ai = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(3,ai.addAndGet(i,2)); assertEquals(3,ai.get(i)); assertEquals(-1,ai.addAndGet(i,-4)); assertEquals(-1,ai.get(i)); } } /** * decrementAndGet decrements and returns current value */ public void testDecrementAndGet(){ AtomicLongArray ai = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(0,ai.decrementAndGet(i)); assertEquals(-1,ai.decrementAndGet(i)); assertEquals(-2,ai.decrementAndGet(i)); assertEquals(-2,ai.get(i)); } } /** * incrementAndGet increments and returns current value */ public void testIncrementAndGet() { AtomicLongArray ai = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(2,ai.incrementAndGet(i)); assertEquals(2,ai.get(i)); ai.set(i, -2); assertEquals(-1,ai.incrementAndGet(i)); assertEquals(0,ai.incrementAndGet(i)); assertEquals(1,ai.incrementAndGet(i)); assertEquals(1,ai.get(i)); } } static final long COUNTDOWN = 100000; class Counter implements Runnable { final AtomicLongArray ai; volatile long counts; Counter(AtomicLongArray a) { ai = a; } public void run() { for (;;) { boolean done = true; for (int i = 0; i < ai.length(); ++i) { long v = ai.get(i); threadAssertTrue(v >= 0); if (v != 0) { done = false; if (ai.compareAndSet(i, v, v-1)) ++counts; } } if (done) break; } } } /** * Multiple threads using same array of counters successfully * update a number of times equal to total count */ public void testCountingInMultipleThreads() { try { final AtomicLongArray ai = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) ai.set(i, COUNTDOWN); Counter c1 = new Counter(ai); Counter c2 = new Counter(ai); Thread t1 = new Thread(c1); Thread t2 = new Thread(c2); t1.start(); t2.start(); t1.join(); t2.join(); assertEquals(c1.counts+c2.counts, SIZE * COUNTDOWN); } catch(InterruptedException ie) { unexpectedException(); } } /** * a deserialized serialized array holds same values */ public void testSerialization() { AtomicLongArray l = new AtomicLongArray(SIZE); for (int i = 0; i < SIZE; ++i) l.set(i, -i); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(l); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); AtomicLongArray r = (AtomicLongArray) in.readObject(); for (int i = 0; i < SIZE; ++i) { assertEquals(l.get(i), r.get(i)); } } catch(Exception e){ unexpectedException(); } } /** * toString returns current value. */ public void testToString() { long[] a = { 17, 3, -42, 99, -7}; AtomicLongArray ai = new AtomicLongArray(a); assertEquals(toString(a), ai.toString()); } private static String toString(long[] array) { if (array.length == 0) return "[]"; StringBuffer buf = new StringBuffer(); buf.append('['); buf.append(array[0]); for (int i = 1; i < array.length; i++) { buf.append(", "); buf.append(array[i]); } buf.append("]"); return buf.toString(); } } backport-util-concurrent-3.1-src/test/tck/src/CountDownLatchTest.java0000644001750700037720000001433610153210664024641 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; public class CountDownLatchTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(CountDownLatchTest.class); } /** * negative constructor argument throws IAE */ public void testConstructor() { try { new CountDownLatch(-1); shouldThrow(); } catch(IllegalArgumentException success){} } /** * getCount returns initial count and decreases after countDown */ public void testGetCount() { final CountDownLatch l = new CountDownLatch(2); assertEquals(2, l.getCount()); l.countDown(); assertEquals(1, l.getCount()); } /** * countDown decrements count when positive and has no effect when zero */ public void testCountDown() { final CountDownLatch l = new CountDownLatch(1); assertEquals(1, l.getCount()); l.countDown(); assertEquals(0, l.getCount()); l.countDown(); assertEquals(0, l.getCount()); } /** * await returns after countDown to zero, but not before */ public void testAwait() { final CountDownLatch l = new CountDownLatch(2); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertTrue(l.getCount() > 0); l.await(); threadAssertTrue(l.getCount() == 0); } catch(InterruptedException e){ e.printStackTrace(); threadUnexpectedException(); } } }); t.start(); try { assertEquals(l.getCount(), 2); Thread.sleep(SHORT_DELAY_MS); l.countDown(); assertEquals(l.getCount(), 1); l.countDown(); assertEquals(l.getCount(), 0); t.join(); } catch (InterruptedException e){ unexpectedException(); } } /** * timed await returns after countDown to zero */ public void testTimedAwait() { final CountDownLatch l = new CountDownLatch(2); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertTrue(l.getCount() > 0); threadAssertTrue(l.await(SMALL_DELAY_MS, TimeUnit.MILLISECONDS)); } catch(InterruptedException e){ threadUnexpectedException(); } } }); t.start(); try { assertEquals(l.getCount(), 2); Thread.sleep(SHORT_DELAY_MS); l.countDown(); assertEquals(l.getCount(), 1); l.countDown(); assertEquals(l.getCount(), 0); t.join(); } catch (InterruptedException e){ unexpectedException(); } } /** * await throws IE if interrupted before counted down */ public void testAwait_InterruptedException() { final CountDownLatch l = new CountDownLatch(1); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertTrue(l.getCount() > 0); l.await(); threadShouldThrow(); } catch(InterruptedException success){} } }); t.start(); try { assertEquals(l.getCount(), 1); t.interrupt(); t.join(); } catch (InterruptedException e){ unexpectedException(); } } /** * timed await throws IE if interrupted before counted down */ public void testTimedAwait_InterruptedException() { final CountDownLatch l = new CountDownLatch(1); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertTrue(l.getCount() > 0); l.await(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(InterruptedException success){} } }); t.start(); try { Thread.sleep(SHORT_DELAY_MS); assertEquals(l.getCount(), 1); t.interrupt(); t.join(); } catch (InterruptedException e){ unexpectedException(); } } /** * timed await times out if not counted down before timeout */ public void testAwaitTimeout() { final CountDownLatch l = new CountDownLatch(1); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertTrue(l.getCount() > 0); threadAssertFalse(l.await(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertTrue(l.getCount() > 0); } catch(InterruptedException ie){ threadUnexpectedException(); } } }); t.start(); try { assertEquals(l.getCount(), 1); t.join(); } catch (InterruptedException e){ unexpectedException(); } } /** * toString indicates current count */ public void testToString() { CountDownLatch s = new CountDownLatch(2); String us = s.toString(); assertTrue(us.indexOf("Count = 2") >= 0); s.countDown(); String s1 = s.toString(); assertTrue(s1.indexOf("Count = 1") >= 0); s.countDown(); String s2 = s.toString(); assertTrue(s2.indexOf("Count = 0") >= 0); } } backport-util-concurrent-3.1-src/test/tck/src/PriorityBlockingQueueTest.java0000644001750700037720000007000410346121124026232 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import edu.emory.mathcs.backport.java.util.PriorityQueue; import java.util.Comparator; import java.util.Arrays; import java.util.NoSuchElementException; import java.util.Iterator; import java.util.ArrayList; public class PriorityBlockingQueueTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(PriorityBlockingQueueTest.class); } private static final int NOCAP = Integer.MAX_VALUE; /** Sample Comparator */ static class MyReverseComparator implements Comparator { public int compare(Object x, Object y) { int i = ((Integer)x).intValue(); int j = ((Integer)y).intValue(); if (i < j) return 1; if (i > j) return -1; return 0; } } /** * Create a queue of given size containing consecutive * Integers 0 ... n. */ private PriorityBlockingQueue populatedQueue(int n) { PriorityBlockingQueue q = new PriorityBlockingQueue(n); assertTrue(q.isEmpty()); for(int i = n-1; i >= 0; i-=2) assertTrue(q.offer(new Integer(i))); for(int i = (n & 1); i < n; i+=2) assertTrue(q.offer(new Integer(i))); assertFalse(q.isEmpty()); assertEquals(NOCAP, q.remainingCapacity()); assertEquals(n, q.size()); return q; } /** * A new queue has unbounded capacity */ public void testConstructor1() { assertEquals(NOCAP, new PriorityBlockingQueue(SIZE).remainingCapacity()); } /** * Constructor throws IAE if capacity argument nonpositive */ public void testConstructor2() { try { PriorityBlockingQueue q = new PriorityBlockingQueue(0); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * Initializing from null Collection throws NPE */ public void testConstructor3() { try { PriorityBlockingQueue q = new PriorityBlockingQueue(null); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection of null elements throws NPE */ public void testConstructor4() { try { Integer[] ints = new Integer[SIZE]; PriorityBlockingQueue q = new PriorityBlockingQueue(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection with some null elements throws NPE */ public void testConstructor5() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); PriorityBlockingQueue q = new PriorityBlockingQueue(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements of collection used to initialize */ public void testConstructor6() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); PriorityBlockingQueue q = new PriorityBlockingQueue(Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * The comparator used in constructor is used */ public void testConstructor7() { try { MyReverseComparator cmp = new MyReverseComparator(); PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE, cmp); assertEquals(cmp, q.comparator()); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); for (int i = SIZE-1; i >= 0; --i) assertEquals(ints[i], q.poll()); } finally {} } /** * isEmpty is true before add, false after */ public void testEmpty() { PriorityBlockingQueue q = new PriorityBlockingQueue(2); assertTrue(q.isEmpty()); assertEquals(NOCAP, q.remainingCapacity()); q.add(one); assertFalse(q.isEmpty()); q.add(two); q.remove(); q.remove(); assertTrue(q.isEmpty()); } /** * remainingCapacity does not change when elements added or removed, * but size does */ public void testRemainingCapacity() { PriorityBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(NOCAP, q.remainingCapacity()); assertEquals(SIZE-i, q.size()); q.remove(); } for (int i = 0; i < SIZE; ++i) { assertEquals(NOCAP, q.remainingCapacity()); assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * offer(null) throws NPE */ public void testOfferNull() { try { PriorityBlockingQueue q = new PriorityBlockingQueue(1); q.offer(null); shouldThrow(); } catch (NullPointerException success) { } } /** * add(null) throws NPE */ public void testAddNull() { try { PriorityBlockingQueue q = new PriorityBlockingQueue(1); q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * Offer of comparable element succeeds */ public void testOffer() { PriorityBlockingQueue q = new PriorityBlockingQueue(1); assertTrue(q.offer(zero)); assertTrue(q.offer(one)); } /** * Offer of non-Comparable throws CCE */ public void testOfferNonComparable() { try { PriorityBlockingQueue q = new PriorityBlockingQueue(1); q.offer(new Object()); q.offer(new Object()); q.offer(new Object()); shouldThrow(); } catch(ClassCastException success) {} } /** * add of comparable succeeds */ public void testAdd() { PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); assertTrue(q.add(new Integer(i))); } } /** * addAll(null) throws NPE */ public void testAddAll1() { try { PriorityBlockingQueue q = new PriorityBlockingQueue(1); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll(this) throws IAE */ public void testAddAllSelf() { try { PriorityBlockingQueue q = populatedQueue(SIZE); q.addAll(q); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testAddAll2() { try { PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE); Integer[] ints = new Integer[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testAddAll3() { try { PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements of successful addAll */ public void testAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = SIZE-1; i >= 0; --i) ints[i] = new Integer(i); PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * put(null) throws NPE */ public void testPutNull() { try { PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE); q.put(null); shouldThrow(); } catch (NullPointerException success){ } } /** * all elements successfully put are contained */ public void testPut() { try { PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE); for (int i = 0; i < SIZE; ++i) { Integer I = new Integer(i); q.put(I); assertTrue(q.contains(I)); } assertEquals(SIZE, q.size()); } finally { } } /** * put doesn't block waiting for take */ public void testPutWithTake() { final PriorityBlockingQueue q = new PriorityBlockingQueue(2); Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { q.put(new Integer(0)); ++added; q.put(new Integer(0)); ++added; q.put(new Integer(0)); ++added; q.put(new Integer(0)); ++added; threadAssertTrue(added == 4); } finally { } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); q.take(); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * timed offer does not time out */ public void testTimedOffer() { final PriorityBlockingQueue q = new PriorityBlockingQueue(2); Thread t = new Thread(new Runnable() { public void run() { try { q.put(new Integer(0)); q.put(new Integer(0)); threadAssertTrue(q.offer(new Integer(0), SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertTrue(q.offer(new Integer(0), LONG_DELAY_MS, TimeUnit.MILLISECONDS)); } finally { } } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * take retrieves elements in priority order */ public void testTake() { try { PriorityBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.take()).intValue()); } } catch (InterruptedException e){ unexpectedException(); } } /** * take blocks interruptibly when empty */ public void testTakeFromEmpty() { final PriorityBlockingQueue q = new PriorityBlockingQueue(2); Thread t = new Thread(new Runnable() { public void run() { try { q.take(); threadShouldThrow(); } catch (InterruptedException success){ } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * Take removes existing elements until empty, then blocks interruptibly */ public void testBlockingTake() { Thread t = new Thread(new Runnable() { public void run() { try { PriorityBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { threadAssertEquals(i, ((Integer)q.take()).intValue()); } q.take(); threadShouldThrow(); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * poll succeeds unless empty */ public void testPoll() { PriorityBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll()).intValue()); } assertNull(q.poll()); } /** * timed pool with zero timeout succeeds when non-empty, else times out */ public void testTimedPoll0() { try { PriorityBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll(0, TimeUnit.MILLISECONDS)).intValue()); } assertNull(q.poll(0, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * timed pool with nonzero timeout succeeds when non-empty, else times out */ public void testTimedPoll() { try { PriorityBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue()); } assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * Interrupted timed poll throws InterruptedException instead of * returning timeout status */ public void testInterruptedTimedPoll() { Thread t = new Thread(new Runnable() { public void run() { try { PriorityBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { threadAssertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue()); } threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * timed poll before a delayed offer fails; after offer succeeds; * on interruption throws */ public void testTimedPollWithOffer() { final PriorityBlockingQueue q = new PriorityBlockingQueue(2); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success) { } } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); assertTrue(q.offer(new Integer(0), SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * peek returns next element, or null if empty */ public void testPeek() { PriorityBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.peek()).intValue()); q.poll(); assertTrue(q.peek() == null || i != ((Integer)q.peek()).intValue()); } assertNull(q.peek()); } /** * element returns next element, or throws NSEE if empty */ public void testElement() { PriorityBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.element()).intValue()); q.poll(); } try { q.element(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * remove removes next element, or throws NSEE if empty */ public void testRemove() { PriorityBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.remove()).intValue()); } try { q.remove(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * remove(x) removes x and returns true if present */ public void testRemoveElement() { PriorityBlockingQueue q = populatedQueue(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { PriorityBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.poll(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testClear() { PriorityBlockingQueue q = populatedQueue(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); q.add(one); assertFalse(q.isEmpty()); assertTrue(q.contains(one)); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { PriorityBlockingQueue q = populatedQueue(SIZE); PriorityBlockingQueue p = new PriorityBlockingQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testRetainAll() { PriorityBlockingQueue q = populatedQueue(SIZE); PriorityBlockingQueue p = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.remove(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { PriorityBlockingQueue q = populatedQueue(SIZE); PriorityBlockingQueue p = populatedQueue(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.remove()); assertFalse(q.contains(I)); } } } /** * toArray contains all elements */ public void testToArray() { PriorityBlockingQueue q = populatedQueue(SIZE); Object[] o = q.toArray(); Arrays.sort(o); try { for(int i = 0; i < o.length; i++) assertEquals(o[i], q.take()); } catch (InterruptedException e){ unexpectedException(); } } /** * toArray(a) contains all elements */ public void testToArray2() { PriorityBlockingQueue q = populatedQueue(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); Arrays.sort(ints); try { for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.take()); } catch (InterruptedException e){ unexpectedException(); } } /** * toArray(null) throws NPE */ public void testToArray_BadArg() { try { PriorityBlockingQueue q = populatedQueue(SIZE); Object o[] = q.toArray(null); shouldThrow(); } catch(NullPointerException success){} } /** * toArray with incompatible array type throws CCE */ public void testToArray1_BadArg() { try { PriorityBlockingQueue q = populatedQueue(SIZE); Object o[] = q.toArray(new String[10] ); shouldThrow(); } catch(ArrayStoreException success){} } /** * iterator iterates through all elements */ public void testIterator() { PriorityBlockingQueue q = populatedQueue(SIZE); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); } /** * iterator.remove removes current element */ public void testIteratorRemove () { final PriorityBlockingQueue q = new PriorityBlockingQueue(3); q.add(new Integer(2)); q.add(new Integer(1)); q.add(new Integer(3)); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), new Integer(2)); assertEquals(it.next(), new Integer(3)); assertFalse(it.hasNext()); } /** * toString contains toStrings of elements */ public void testToString() { PriorityBlockingQueue q = populatedQueue(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * offer transfers elements across Executor tasks */ public void testPollInExecutor() { final PriorityBlockingQueue q = new PriorityBlockingQueue(2); ExecutorService executor = Executors.newFixedThreadPool(2); executor.execute(new Runnable() { public void run() { threadAssertNull(q.poll()); try { threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertTrue(q.isEmpty()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); executor.execute(new Runnable() { public void run() { try { Thread.sleep(SMALL_DELAY_MS); q.put(new Integer(1)); } catch (InterruptedException e) { threadUnexpectedException(); } } }); joinPool(executor); } /** * A deserialized serialized queue has same elements */ public void testSerialization() { PriorityBlockingQueue q = populatedQueue(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); PriorityBlockingQueue r = (PriorityBlockingQueue)in.readObject(); assertEquals(q.size(), r.size()); while (!q.isEmpty()) assertEquals(q.remove(), r.remove()); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * drainTo(null) throws NPE */ public void testDrainToNull() { PriorityBlockingQueue q = populatedQueue(SIZE); try { q.drainTo(null); shouldThrow(); } catch(NullPointerException success) { } } /** * drainTo(this) throws IAE */ public void testDrainToSelf() { PriorityBlockingQueue q = populatedQueue(SIZE); try { q.drainTo(q); shouldThrow(); } catch(IllegalArgumentException success) { } } /** * drainTo(c) empties queue into another collection c */ public void testDrainTo() { PriorityBlockingQueue q = populatedQueue(SIZE); ArrayList l = new ArrayList(); q.drainTo(l); assertEquals(q.size(), 0); assertEquals(l.size(), SIZE); for (int i = 0; i < SIZE; ++i) assertEquals(l.get(i), new Integer(i)); q.add(zero); q.add(one); assertFalse(q.isEmpty()); assertTrue(q.contains(zero)); assertTrue(q.contains(one)); l.clear(); q.drainTo(l); assertEquals(q.size(), 0); assertEquals(l.size(), 2); for (int i = 0; i < 2; ++i) assertEquals(l.get(i), new Integer(i)); } /** * drainTo empties queue */ public void testDrainToWithActivePut() { final PriorityBlockingQueue q = populatedQueue(SIZE); Thread t = new Thread(new Runnable() { public void run() { q.put(new Integer(SIZE+1)); } }); try { t.start(); ArrayList l = new ArrayList(); q.drainTo(l); assertTrue(l.size() >= SIZE); for (int i = 0; i < SIZE; ++i) assertEquals(l.get(i), new Integer(i)); t.join(); assertTrue(q.size() + l.size() >= SIZE); } catch(Exception e){ unexpectedException(); } } /** * drainTo(null, n) throws NPE */ public void testDrainToNullN() { PriorityBlockingQueue q = populatedQueue(SIZE); try { q.drainTo(null, 0); shouldThrow(); } catch(NullPointerException success) { } } /** * drainTo(this, n) throws IAE */ public void testDrainToSelfN() { PriorityBlockingQueue q = populatedQueue(SIZE); try { q.drainTo(q, 0); shouldThrow(); } catch(IllegalArgumentException success) { } } /** * drainTo(c, n) empties first max {n, size} elements of queue into c */ public void testDrainToN() { PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE*2); for (int i = 0; i < SIZE + 2; ++i) { for(int j = 0; j < SIZE; j++) assertTrue(q.offer(new Integer(j))); ArrayList l = new ArrayList(); q.drainTo(l, i); int k = (i < SIZE)? i : SIZE; assertEquals(l.size(), k); assertEquals(q.size(), SIZE-k); for (int j = 0; j < k; ++j) assertEquals(l.get(j), new Integer(j)); while (q.poll() != null) ; } } } backport-util-concurrent-3.1-src/test/tck/src/EntryTest.java0000644001750700037720000001011110431260156023031 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import junit.framework.*; import java.util.Map; import edu.emory.mathcs.backport.java.util.AbstractMap; public class EntryTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(EntryTest.class); } static final String k1 = "1"; static final String v1 = "a"; static final String k2 = "2"; static final String v2 = "b"; /** * A new SimpleEntry(k, v) holds k, v. */ public void testConstructor1() { Map.Entry e = new AbstractMap.SimpleEntry(k1, v1); assertEquals(k1, e.getKey()); assertEquals(v1, e.getValue()); } /** * A new SimpleImmutableEntry(k, v) holds k, v. */ public void testConstructor2() { Map.Entry s = new AbstractMap.SimpleImmutableEntry(k1, v1); assertEquals(k1, s.getKey()); assertEquals(v1, s.getValue()); } /** * A new SimpleEntry(entry(k, v)) holds k, v. */ public void testConstructor3() { Map.Entry e2 = new AbstractMap.SimpleEntry(k1, v1); Map.Entry e = new AbstractMap.SimpleEntry(e2); assertEquals(k1, e.getKey()); assertEquals(v1, e.getValue()); } /** * A new SimpleImmutableEntry(entry(k, v)) holds k, v. */ public void testConstructor4() { Map.Entry s2 = new AbstractMap.SimpleImmutableEntry(k1, v1); Map.Entry s = new AbstractMap.SimpleImmutableEntry(s2); assertEquals(k1, s.getKey()); assertEquals(v1, s.getValue()); } /** * Entries with same key-value pairs are equal and have same * hashcodes */ public void testEquals() { Map.Entry e2 = new AbstractMap.SimpleEntry(k1, v1); Map.Entry e = new AbstractMap.SimpleEntry(e2); Map.Entry s2 = new AbstractMap.SimpleImmutableEntry(k1, v1); Map.Entry s = new AbstractMap.SimpleImmutableEntry(s2); assertEquals(e2, e); assertEquals(e2.hashCode(), e.hashCode()); assertEquals(s2, s); assertEquals(s2.hashCode(), s.hashCode()); assertEquals(e2, s2); assertEquals(e2.hashCode(), s2.hashCode()); assertEquals(e, s); assertEquals(e.hashCode(), s.hashCode()); } /** * Entries with different key-value pairs are not equal */ public void testNotEquals() { Map.Entry e2 = new AbstractMap.SimpleEntry(k1, v1); Map.Entry e = new AbstractMap.SimpleEntry(k2, v1); assertFalse(e2.equals( e)); e = new AbstractMap.SimpleEntry(k1, v2); assertFalse(e2.equals( e)); e = new AbstractMap.SimpleEntry(k2, v2); assertFalse(e2.equals( e)); Map.Entry s2 = new AbstractMap.SimpleImmutableEntry(k1, v1); Map.Entry s = new AbstractMap.SimpleImmutableEntry(k2, v1); assertFalse(s2.equals( s)); s = new AbstractMap.SimpleImmutableEntry(k1, v2); assertFalse(s2.equals( s)); s = new AbstractMap.SimpleImmutableEntry(k2, v2); assertFalse(s2.equals( s)); } /** * getValue returns last setValue for SimpleEntry */ public void testSetValue1() { Map.Entry e2 = new AbstractMap.SimpleEntry(k1, v1); Map.Entry e = new AbstractMap.SimpleEntry(e2); assertEquals(k1, e.getKey()); assertEquals(v1, e.getValue()); e.setValue(k2); assertEquals(k2, e.getValue()); assertFalse(e2.equals( e)); } /** * setValue for SimpleImmutableEntry throws UnsupportedOperationException */ public void testsetValue2() { Map.Entry s2 = new AbstractMap.SimpleImmutableEntry(k1, v1); Map.Entry s = new AbstractMap.SimpleImmutableEntry(s2); assertEquals(k1, s.getKey()); assertEquals(v1, s.getValue()); try { s.setValue(k2); fail(); } catch (UnsupportedOperationException success) {} } } backport-util-concurrent-3.1-src/test/tck/src/ArrayDequeTest.java0000644001750700037720000004346010346121124024003 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.ArrayDeque; import java.util.Collection; import java.util.Arrays; import java.util.NoSuchElementException; import java.util.Iterator; import java.util.Random; public class ArrayDequeTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ArrayDequeTest.class); } /** * Create a queue of given size containing consecutive * Integers 0 ... n. */ private ArrayDeque populatedDeque(int n) { ArrayDeque q = new ArrayDeque(); assertTrue(q.isEmpty()); for(int i = 0; i < n; ++i) assertTrue(q.offerLast(new Integer(i))); assertFalse(q.isEmpty()); assertEquals(n, q.size()); return q; } /** * new queue is empty */ public void testConstructor1() { assertEquals(0, new ArrayDeque().size()); } /** * Initializing from null Collection throws NPE */ public void testConstructor3() { try { ArrayDeque q = new ArrayDeque((Collection)null); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements of collection used to initialize */ public void testConstructor6() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); ArrayDeque q = new ArrayDeque(Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.pollFirst()); } finally {} } /** * isEmpty is true before add, false after */ public void testEmpty() { ArrayDeque q = new ArrayDeque(); assertTrue(q.isEmpty()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.add(new Integer(2)); q.removeFirst(); q.removeFirst(); assertTrue(q.isEmpty()); } /** * size changes when elements added and removed */ public void testSize() { ArrayDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.size()); q.removeFirst(); } for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * push(null) throws NPE */ public void testPushNull() { try { ArrayDeque q = new ArrayDeque(1); q.push(null); shouldThrow(); } catch (NullPointerException success) { } } /** * peekFirst returns element inserted with push */ public void testPush() { ArrayDeque q = populatedDeque(3); q.pollLast(); q.push(four); assertEquals(four,q.peekFirst()); } /** * pop removes next element, or throws NSEE if empty */ public void testPop() { ArrayDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pop()).intValue()); } try { q.pop(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * offer(null) throws NPE */ public void testOfferFirstNull() { try { ArrayDeque q = new ArrayDeque(); q.offerFirst(null); shouldThrow(); } catch (NullPointerException success) { } } /** * OfferFirst succeeds */ public void testOfferFirst() { ArrayDeque q = new ArrayDeque(); assertTrue(q.offerFirst(new Integer(0))); assertTrue(q.offerFirst(new Integer(1))); } /** * OfferLast succeeds */ public void testOfferLast() { ArrayDeque q = new ArrayDeque(); assertTrue(q.offerLast(new Integer(0))); assertTrue(q.offerLast(new Integer(1))); } /** * add succeeds */ public void testAdd() { ArrayDeque q = new ArrayDeque(); for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); assertTrue(q.add(new Integer(i))); } } /** * addAll(null) throws NPE */ public void testAddAll1() { try { ArrayDeque q = new ArrayDeque(); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements, in traversal order, of successful addAll */ public void testAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); ArrayDeque q = new ArrayDeque(); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.pollFirst()); } finally {} } /** * pollFirst succeeds unless empty */ public void testPollFirst() { ArrayDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pollFirst()).intValue()); } assertNull(q.pollFirst()); } /** * pollLast succeeds unless empty */ public void testPollLast() { ArrayDeque q = populatedDeque(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.pollLast()).intValue()); } assertNull(q.pollLast()); } /** * poll succeeds unless empty */ public void testPoll() { ArrayDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll()).intValue()); } assertNull(q.poll()); } /** * remove removes next element, or throws NSEE if empty */ public void testRemove() { ArrayDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.remove()).intValue()); } try { q.remove(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * peekFirst returns next element, or null if empty */ public void testPeekFirst() { ArrayDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.peekFirst()).intValue()); q.pollFirst(); assertTrue(q.peekFirst() == null || i != ((Integer)q.peekFirst()).intValue()); } assertNull(q.peekFirst()); } /** * peek returns next element, or null if empty */ public void testPeek() { ArrayDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.peek()).intValue()); q.poll(); assertTrue(q.peek() == null || i != ((Integer)q.peek()).intValue()); } assertNull(q.peek()); } /** * peekLast returns next element, or null if empty */ public void testPeekLast() { ArrayDeque q = populatedDeque(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.peekLast()).intValue()); q.pollLast(); assertTrue(q.peekLast() == null || i != ((Integer)q.peekLast()).intValue()); } assertNull(q.peekLast()); } /** * getFirst returns next getFirst, or throws NSEE if empty */ public void testFirstElement() { ArrayDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.getFirst()).intValue()); q.pollFirst(); } try { q.getFirst(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * getLast returns next element, or throws NSEE if empty */ public void testLastElement() { ArrayDeque q = populatedDeque(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.getLast()).intValue()); q.pollLast(); } try { q.getLast(); shouldThrow(); } catch (NoSuchElementException success) {} assertNull(q.peekLast()); } /** * removeFirst removes next element, or throws NSEE if empty */ public void testRemoveFirst() { ArrayDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.removeFirst()).intValue()); } try { q.removeFirst(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * removeFirstOccurrence(x) removes x and returns true if present */ public void testRemoveFirstOccurrence() { ArrayDeque q = populatedDeque(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.removeFirstOccurrence(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.removeFirstOccurrence(new Integer(i))); assertFalse(q.removeFirstOccurrence(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * removeLastOccurrence(x) removes x and returns true if present */ public void testRemoveLastOccurrence() { ArrayDeque q = populatedDeque(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.removeLastOccurrence(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.removeLastOccurrence(new Integer(i))); assertFalse(q.removeLastOccurrence(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { ArrayDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.pollFirst(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testClear() { ArrayDeque q = populatedDeque(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { ArrayDeque q = populatedDeque(SIZE); ArrayDeque p = new ArrayDeque(); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testRetainAll() { ArrayDeque q = populatedDeque(SIZE); ArrayDeque p = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.removeFirst(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { ArrayDeque q = populatedDeque(SIZE); ArrayDeque p = populatedDeque(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.removeFirst()); assertFalse(q.contains(I)); } } } /** * toArray contains all elements */ public void testToArray() { ArrayDeque q = populatedDeque(SIZE); Object[] o = q.toArray(); Arrays.sort(o); for(int i = 0; i < o.length; i++) assertEquals(o[i], q.pollFirst()); } /** * toArray(a) contains all elements */ public void testToArray2() { ArrayDeque q = populatedDeque(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); Arrays.sort(ints); for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.pollFirst()); } /** * toArray(null) throws NPE */ public void testToArray_BadArg() { try { ArrayDeque l = new ArrayDeque(); l.add(new Object()); Object o[] = l.toArray(null); shouldThrow(); } catch(NullPointerException success){} } /** * toArray with incompatable aray type throws CCE */ public void testToArray1_BadArg() { try { ArrayDeque l = new ArrayDeque(); l.add(new Integer(5)); Object o[] = l.toArray(new String[10] ); shouldThrow(); } catch(ArrayStoreException success){} } /** * iterator iterates through all elements */ public void testIterator() { ArrayDeque q = populatedDeque(SIZE); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); } /** * iterator ordering is FIFO */ public void testIteratorOrdering() { final ArrayDeque q = new ArrayDeque(); q.add(new Integer(1)); q.add(new Integer(2)); q.add(new Integer(3)); int k = 0; for (Iterator it = q.iterator(); it.hasNext();) { int i = ((Integer)(it.next())).intValue(); assertEquals(++k, i); } assertEquals(3, k); } /** * iterator.remove removes current element */ public void testIteratorRemove () { final ArrayDeque q = new ArrayDeque(); final Random rng = new Random(); for (int iters = 0; iters < 100; ++iters) { int max = rng.nextInt(5) + 2; int split = rng.nextInt(max-1) + 1; for (int j = 1; j <= max; ++j) q.add(new Integer(j)); Iterator it = q.iterator(); for (int j = 1; j <= split; ++j) assertEquals(it.next(), new Integer(j)); it.remove(); assertEquals(it.next(), new Integer(split+1)); for (int j = 1; j <= split; ++j) q.remove(new Integer(j)); it = q.iterator(); for (int j = split+1; j <= max; ++j) { assertEquals(it.next(), new Integer(j)); it.remove(); } assertFalse(it.hasNext()); assertTrue(q.isEmpty()); } } /** * Descending iterator iterates through all elements */ public void testDescendingIterator() { ArrayDeque q = populatedDeque(SIZE); int i = 0; Iterator it = q.descendingIterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); assertFalse(it.hasNext()); try { it.next(); } catch(NoSuchElementException success) { } } /** * Descending iterator ordering is reverse FIFO */ public void testDescendingIteratorOrdering() { final ArrayDeque q = new ArrayDeque(); for (int iters = 0; iters < 100; ++iters) { q.add(new Integer(3)); q.add(new Integer(2)); q.add(new Integer(1)); int k = 0; for (Iterator it = q.descendingIterator(); it.hasNext();) { int i = ((Integer)(it.next())).intValue(); assertEquals(++k, i); } assertEquals(3, k); q.remove(); q.remove(); q.remove(); } } /** * descendingIterator.remove removes current element */ public void testDescendingIteratorRemove () { final ArrayDeque q = new ArrayDeque(); final Random rng = new Random(); for (int iters = 0; iters < 100; ++iters) { int max = rng.nextInt(5) + 2; int split = rng.nextInt(max-1) + 1; for (int j = max; j >= 1; --j) q.add(new Integer(j)); Iterator it = q.descendingIterator(); for (int j = 1; j <= split; ++j) assertEquals(it.next(), new Integer(j)); it.remove(); assertEquals(it.next(), new Integer(split+1)); for (int j = 1; j <= split; ++j) q.remove(new Integer(j)); it = q.descendingIterator(); for (int j = split+1; j <= max; ++j) { assertEquals(it.next(), new Integer(j)); it.remove(); } assertFalse(it.hasNext()); assertTrue(q.isEmpty()); } } /** * toString contains toStrings of elements */ public void testToString() { ArrayDeque q = populatedDeque(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * peekFirst returns element inserted with addFirst */ public void testAddFirst() { ArrayDeque q = populatedDeque(3); q.addFirst(four); assertEquals(four,q.peekFirst()); } /** * peekLast returns element inserted with addLast */ public void testAddLast() { ArrayDeque q = populatedDeque(3); q.addLast(four); assertEquals(four,q.peekLast()); } } backport-util-concurrent-3.1-src/test/tck/src/LinkedListTest.java0000644001750700037720000004222310346121124023777 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.LinkedList; import java.util.Collection; import java.util.Arrays; import java.util.NoSuchElementException; import java.util.Iterator; public class LinkedListTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(LinkedListTest.class); } /** * Create a queue of given size containing consecutive * Integers 0 ... n. */ private LinkedList populatedQueue(int n) { LinkedList q = new LinkedList(); assertTrue(q.isEmpty()); for(int i = 0; i < n; ++i) assertTrue(q.offer(new Integer(i))); assertFalse(q.isEmpty()); assertEquals(n, q.size()); return q; } /** * new queue is empty */ public void testConstructor1() { assertEquals(0, new LinkedList().size()); } /** * Initializing from null Collection throws NPE */ public void testConstructor3() { try { LinkedList q = new LinkedList((Collection)null); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements of collection used to initialize */ public void testConstructor6() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); LinkedList q = new LinkedList(Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * isEmpty is true before add, false after */ public void testEmpty() { LinkedList q = new LinkedList(); assertTrue(q.isEmpty()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.add(new Integer(2)); q.remove(); q.remove(); assertTrue(q.isEmpty()); } /** * size changes when elements added and removed */ public void testSize() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.size()); q.remove(); } for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * offer(null) succeeds */ public void testOfferNull() { try { LinkedList q = new LinkedList(); q.offer(null); } catch (NullPointerException ie) { unexpectedException(); } } /** * Offer succeeds */ public void testOffer() { LinkedList q = new LinkedList(); assertTrue(q.offer(new Integer(0))); assertTrue(q.offer(new Integer(1))); } /** * add succeeds */ public void testAdd() { LinkedList q = new LinkedList(); for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); assertTrue(q.add(new Integer(i))); } } /** * addAll(null) throws NPE */ public void testAddAll1() { try { LinkedList q = new LinkedList(); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements, in traversal order, of successful addAll */ public void testAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); LinkedList q = new LinkedList(); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * addAll with too large an index throws IOOBE */ public void testAddAll2_IndexOutOfBoundsException() { try { LinkedList l = new LinkedList(); l.add(new Object()); LinkedList m = new LinkedList(); m.add(new Object()); l.addAll(4,m); shouldThrow(); } catch(IndexOutOfBoundsException success) {} } /** * addAll with negative index throws IOOBE */ public void testAddAll4_BadIndex() { try { LinkedList l = new LinkedList(); l.add(new Object()); LinkedList m = new LinkedList(); m.add(new Object()); l.addAll(-1,m); shouldThrow(); } catch(IndexOutOfBoundsException success){} } /** * poll succeeds unless empty */ public void testPoll() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll()).intValue()); } assertNull(q.poll()); } /** * peek returns next element, or null if empty */ public void testPeek() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.peek()).intValue()); q.poll(); assertTrue(q.peek() == null || i != ((Integer)q.peek()).intValue()); } assertNull(q.peek()); } /** * element returns next element, or throws NSEE if empty */ public void testElement() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.element()).intValue()); q.poll(); } try { q.element(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * remove removes next element, or throws NSEE if empty */ public void testRemove() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.remove()).intValue()); } try { q.remove(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * remove(x) removes x and returns true if present */ public void testRemoveElement() { LinkedList q = populatedQueue(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.poll(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testClear() { LinkedList q = populatedQueue(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { LinkedList q = populatedQueue(SIZE); LinkedList p = new LinkedList(); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testRetainAll() { LinkedList q = populatedQueue(SIZE); LinkedList p = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.remove(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { LinkedList q = populatedQueue(SIZE); LinkedList p = populatedQueue(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.remove()); assertFalse(q.contains(I)); } } } /** * toArray contains all elements */ public void testToArray() { LinkedList q = populatedQueue(SIZE); Object[] o = q.toArray(); Arrays.sort(o); for(int i = 0; i < o.length; i++) assertEquals(o[i], q.poll()); } /** * toArray(a) contains all elements */ public void testToArray2() { LinkedList q = populatedQueue(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); Arrays.sort(ints); for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.poll()); } /** * toArray(null) throws NPE */ public void testToArray_BadArg() { try { LinkedList l = new LinkedList(); l.add(new Object()); Object o[] = l.toArray(null); shouldThrow(); } catch(NullPointerException success){} } /** * toArray with incompatable aray type throws CCE */ public void testToArray1_BadArg() { try { LinkedList l = new LinkedList(); l.add(new Integer(5)); Object o[] = l.toArray(new String[10] ); shouldThrow(); } catch(ArrayStoreException success){} } /** * iterator iterates through all elements */ public void testIterator() { LinkedList q = populatedQueue(SIZE); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); } /** * iterator ordering is FIFO */ public void testIteratorOrdering() { final LinkedList q = new LinkedList(); q.add(new Integer(1)); q.add(new Integer(2)); q.add(new Integer(3)); int k = 0; for (Iterator it = q.iterator(); it.hasNext();) { int i = ((Integer)(it.next())).intValue(); assertEquals(++k, i); } assertEquals(3, k); } /** * iterator.remove removes current element */ public void testIteratorRemove () { final LinkedList q = new LinkedList(); q.add(new Integer(1)); q.add(new Integer(2)); q.add(new Integer(3)); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), new Integer(2)); assertEquals(it.next(), new Integer(3)); assertFalse(it.hasNext()); } /** * Descending iterator iterates through all elements */ public void testDescendingIterator() { LinkedList q = populatedQueue(SIZE); int i = 0; Iterator it = q.descendingIterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); assertFalse(it.hasNext()); try { it.next(); } catch(NoSuchElementException success) { } } /** * Descending iterator ordering is reverse FIFO */ public void testDescendingIteratorOrdering() { final LinkedList q = new LinkedList(); q.add(new Integer(3)); q.add(new Integer(2)); q.add(new Integer(1)); int k = 0; for (Iterator it = q.descendingIterator(); it.hasNext();) { int i = ((Integer)(it.next())).intValue(); assertEquals(++k, i); } assertEquals(3, k); } /** * descendingIterator.remove removes current element */ public void testDescendingIteratorRemove () { final LinkedList q = new LinkedList(); q.add(new Integer(3)); q.add(new Integer(2)); q.add(new Integer(1)); Iterator it = q.descendingIterator(); it.next(); it.remove(); it = q.descendingIterator(); assertEquals(it.next(), new Integer(2)); assertEquals(it.next(), new Integer(3)); assertFalse(it.hasNext()); } /** * toString contains toStrings of elements */ public void testToString() { LinkedList q = populatedQueue(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * peek returns element inserted with addFirst */ public void testAddFirst() { LinkedList q = populatedQueue(3); q.addFirst(four); assertEquals(four,q.peek()); } /** * peekFirst returns element inserted with push */ public void testPush() { LinkedList q = populatedQueue(3); q.pollLast(); q.push(four); assertEquals(four,q.peekFirst()); } /** * pop removes next element, or throws NSEE if empty */ public void testPop() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pop()).intValue()); } try { q.pop(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * OfferFirst succeeds */ public void testOfferFirst() { LinkedList q = new LinkedList(); assertTrue(q.offerFirst(new Integer(0))); assertTrue(q.offerFirst(new Integer(1))); } /** * OfferLast succeeds */ public void testOfferLast() { LinkedList q = new LinkedList(); assertTrue(q.offerLast(new Integer(0))); assertTrue(q.offerLast(new Integer(1))); } /** * pollLast succeeds unless empty */ public void testPollLast() { LinkedList q = populatedQueue(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.pollLast()).intValue()); } assertNull(q.pollLast()); } /** * peekFirst returns next element, or null if empty */ public void testPeekFirst() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.peekFirst()).intValue()); q.pollFirst(); assertTrue(q.peekFirst() == null || i != ((Integer)q.peekFirst()).intValue()); } assertNull(q.peekFirst()); } /** * peekLast returns next element, or null if empty */ public void testPeekLast() { LinkedList q = populatedQueue(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.peekLast()).intValue()); q.pollLast(); assertTrue(q.peekLast() == null || i != ((Integer)q.peekLast()).intValue()); } assertNull(q.peekLast()); } public void testFirstElement() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.getFirst()).intValue()); q.pollFirst(); } try { q.getFirst(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * getLast returns next element, or throws NSEE if empty */ public void testLastElement() { LinkedList q = populatedQueue(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.getLast()).intValue()); q.pollLast(); } try { q.getLast(); shouldThrow(); } catch (NoSuchElementException success) {} assertNull(q.peekLast()); } /** * removeFirstOccurrence(x) removes x and returns true if present */ public void testRemoveFirstOccurrence() { LinkedList q = populatedQueue(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.removeFirstOccurrence(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.removeFirstOccurrence(new Integer(i))); assertFalse(q.removeFirstOccurrence(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * removeLastOccurrence(x) removes x and returns true if present */ public void testRemoveLastOccurrence() { LinkedList q = populatedQueue(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.removeLastOccurrence(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.removeLastOccurrence(new Integer(i))); assertFalse(q.removeLastOccurrence(new Integer(i+1))); } assertTrue(q.isEmpty()); } } backport-util-concurrent-3.1-src/test/tck/src/DelayQueueTest.java0000644001750700037720000007125210365510635024016 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; import java.util.NoSuchElementException; import java.util.Iterator; import java.util.ArrayList; public class DelayQueueTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(DelayQueueTest.class); } private static final int NOCAP = Integer.MAX_VALUE; /** * A delayed implementation for testing. * Most tests use Pseudodelays, where delays are all elapsed * (so, no blocking solely for delays) but are still ordered */ static class PDelay implements Delayed { int pseudodelay; PDelay(int i) { pseudodelay = Integer.MIN_VALUE + i; } public int compareTo(Object y) { int i = pseudodelay; int j = ((PDelay)y).pseudodelay; if (i < j) return -1; if (i > j) return 1; return 0; } public int compareTo(Delayed y) { int i = pseudodelay; int j = ((PDelay)y).pseudodelay; if (i < j) return -1; if (i > j) return 1; return 0; } public boolean equals(Object other) { return ((PDelay)other).pseudodelay == pseudodelay; } public boolean equals(PDelay other) { return ((PDelay)other).pseudodelay == pseudodelay; } public long getDelay(TimeUnit ignore) { return pseudodelay; } public int intValue() { return pseudodelay; } public String toString() { return String.valueOf(pseudodelay); } } /** * Delayed implementation that actually delays */ static class NanoDelay implements Delayed { long trigger; NanoDelay(long i) { trigger = Utils.nanoTime() + i; } public int compareTo(Object y) { long i = trigger; long j = ((NanoDelay)y).trigger; if (i < j) return -1; if (i > j) return 1; return 0; } public int compareTo(Delayed y) { long i = trigger; long j = ((NanoDelay)y).trigger; if (i < j) return -1; if (i > j) return 1; return 0; } public boolean equals(Object other) { return ((NanoDelay)other).trigger == trigger; } public boolean equals(NanoDelay other) { return ((NanoDelay)other).trigger == trigger; } public long getDelay(TimeUnit unit) { long n = trigger - Utils.nanoTime(); return unit.convert(n, TimeUnit.NANOSECONDS); } public long getTriggerTime() { return trigger; } public String toString() { return String.valueOf(trigger); } } /** * Create a queue of given size containing consecutive * PDelays 0 ... n. */ private DelayQueue populatedQueue(int n) { DelayQueue q = new DelayQueue(); assertTrue(q.isEmpty()); for(int i = n-1; i >= 0; i-=2) assertTrue(q.offer(new PDelay(i))); for(int i = (n & 1); i < n; i+=2) assertTrue(q.offer(new PDelay(i))); assertFalse(q.isEmpty()); assertEquals(NOCAP, q.remainingCapacity()); assertEquals(n, q.size()); return q; } /** * A new queue has unbounded capacity */ public void testConstructor1() { assertEquals(NOCAP, new DelayQueue().remainingCapacity()); } /** * Initializing from null Collection throws NPE */ public void testConstructor3() { try { DelayQueue q = new DelayQueue(null); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection of null elements throws NPE */ public void testConstructor4() { try { PDelay[] ints = new PDelay[SIZE]; DelayQueue q = new DelayQueue(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection with some null elements throws NPE */ public void testConstructor5() { try { PDelay[] ints = new PDelay[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new PDelay(i); DelayQueue q = new DelayQueue(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements of collection used to initialize */ public void testConstructor6() { try { PDelay[] ints = new PDelay[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new PDelay(i); DelayQueue q = new DelayQueue(Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * isEmpty is true before add, false after */ public void testEmpty() { DelayQueue q = new DelayQueue(); assertTrue(q.isEmpty()); assertEquals(NOCAP, q.remainingCapacity()); q.add(new PDelay(1)); assertFalse(q.isEmpty()); q.add(new PDelay(2)); q.remove(); q.remove(); assertTrue(q.isEmpty()); } /** * remainingCapacity does not change when elementa added or removed, * but size does */ public void testRemainingCapacity() { DelayQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(NOCAP, q.remainingCapacity()); assertEquals(SIZE-i, q.size()); q.remove(); } for (int i = 0; i < SIZE; ++i) { assertEquals(NOCAP, q.remainingCapacity()); assertEquals(i, q.size()); q.add(new PDelay(i)); } } /** * offer(null) throws NPE */ public void testOfferNull() { try { DelayQueue q = new DelayQueue(); q.offer(null); shouldThrow(); } catch (NullPointerException success) { } } /** * add(null) throws NPE */ public void testAddNull() { try { DelayQueue q = new DelayQueue(); q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * offer non-null succeeds */ public void testOffer() { DelayQueue q = new DelayQueue(); assertTrue(q.offer(new PDelay(0))); assertTrue(q.offer(new PDelay(1))); } /** * add succeeds */ public void testAdd() { DelayQueue q = new DelayQueue(); for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); assertTrue(q.add(new PDelay(i))); } } /** * addAll(null) throws NPE */ public void testAddAll1() { try { DelayQueue q = new DelayQueue(); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll(this) throws IAE */ public void testAddAllSelf() { try { DelayQueue q = populatedQueue(SIZE); q.addAll(q); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testAddAll2() { try { DelayQueue q = new DelayQueue(); PDelay[] ints = new PDelay[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testAddAll3() { try { DelayQueue q = new DelayQueue(); PDelay[] ints = new PDelay[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new PDelay(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements of successful addAll */ public void testAddAll5() { try { PDelay[] empty = new PDelay[0]; PDelay[] ints = new PDelay[SIZE]; for (int i = SIZE-1; i >= 0; --i) ints[i] = new PDelay(i); DelayQueue q = new DelayQueue(); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * put(null) throws NPE */ public void testPutNull() { try { DelayQueue q = new DelayQueue(); q.put(null); shouldThrow(); } catch (NullPointerException success){ } } /** * all elements successfully put are contained */ public void testPut() { try { DelayQueue q = new DelayQueue(); for (int i = 0; i < SIZE; ++i) { PDelay I = new PDelay(i); q.put(I); assertTrue(q.contains(I)); } assertEquals(SIZE, q.size()); } finally { } } /** * put doesn't block waiting for take */ public void testPutWithTake() { final DelayQueue q = new DelayQueue(); Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { q.put(new PDelay(0)); ++added; q.put(new PDelay(0)); ++added; q.put(new PDelay(0)); ++added; q.put(new PDelay(0)); ++added; threadAssertTrue(added == 4); } finally { } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); q.take(); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * timed offer does not time out */ public void testTimedOffer() { final DelayQueue q = new DelayQueue(); Thread t = new Thread(new Runnable() { public void run() { try { q.put(new PDelay(0)); q.put(new PDelay(0)); threadAssertTrue(q.offer(new PDelay(0), SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertTrue(q.offer(new PDelay(0), LONG_DELAY_MS, TimeUnit.MILLISECONDS)); } finally { } } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * take retrieves elements in priority order */ public void testTake() { try { DelayQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(new PDelay(i), ((PDelay)q.take())); } } catch (InterruptedException e){ unexpectedException(); } } /** * take blocks interruptibly when empty */ public void testTakeFromEmpty() { final DelayQueue q = new DelayQueue(); Thread t = new Thread(new Runnable() { public void run() { try { q.take(); threadShouldThrow(); } catch (InterruptedException success){ } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * Take removes existing elements until empty, then blocks interruptibly */ public void testBlockingTake() { Thread t = new Thread(new Runnable() { public void run() { try { DelayQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { threadAssertEquals(new PDelay(i), ((PDelay)q.take())); } q.take(); threadShouldThrow(); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * poll succeeds unless empty */ public void testPoll() { DelayQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(new PDelay(i), ((PDelay)q.poll())); } assertNull(q.poll()); } /** * timed pool with zero timeout succeeds when non-empty, else times out */ public void testTimedPoll0() { try { DelayQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(new PDelay(i), ((PDelay)q.poll(0, TimeUnit.MILLISECONDS))); } assertNull(q.poll(0, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * timed pool with nonzero timeout succeeds when non-empty, else times out */ public void testTimedPoll() { try { DelayQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(new PDelay(i), ((PDelay)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS))); } assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * Interrupted timed poll throws InterruptedException instead of * returning timeout status */ public void testInterruptedTimedPoll() { Thread t = new Thread(new Runnable() { public void run() { try { DelayQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { threadAssertEquals(new PDelay(i), ((PDelay)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS))); } threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * timed poll before a delayed offer fails; after offer succeeds; * on interruption throws */ public void testTimedPollWithOffer() { final DelayQueue q = new DelayQueue(); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadFail("Should block"); } catch (InterruptedException success) { } } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); assertTrue(q.offer(new PDelay(0), SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * peek returns next element, or null if empty */ public void testPeek() { DelayQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(new PDelay(i), ((PDelay)q.peek())); q.poll(); if (q.isEmpty()) assertNull(q.peek()); else assertTrue(i != ((PDelay)q.peek()).intValue()); } assertNull(q.peek()); } /** * element returns next element, or throws NSEE if empty */ public void testElement() { DelayQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(new PDelay(i), ((PDelay)q.element())); q.poll(); } try { q.element(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * remove removes next element, or throws NSEE if empty */ public void testRemove() { DelayQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(new PDelay(i), ((PDelay)q.remove())); } try { q.remove(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * remove(x) removes x and returns true if present */ public void testRemoveElement() { DelayQueue q = populatedQueue(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new PDelay(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new PDelay(i))); assertFalse(q.remove(new PDelay(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { DelayQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new PDelay(i))); q.poll(); assertFalse(q.contains(new PDelay(i))); } } /** * clear removes all elements */ public void testClear() { DelayQueue q = populatedQueue(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); assertEquals(NOCAP, q.remainingCapacity()); PDelay x = new PDelay(1); q.add(x); assertFalse(q.isEmpty()); assertTrue(q.contains(x)); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { DelayQueue q = populatedQueue(SIZE); DelayQueue p = new DelayQueue(); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new PDelay(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testRetainAll() { DelayQueue q = populatedQueue(SIZE); DelayQueue p = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.remove(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { DelayQueue q = populatedQueue(SIZE); DelayQueue p = populatedQueue(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { PDelay I = (PDelay)(p.remove()); assertFalse(q.contains(I)); } } } /** * toArray contains all elements */ public void testToArray() { DelayQueue q = populatedQueue(SIZE); Object[] o = q.toArray(); Arrays.sort(o); try { for(int i = 0; i < o.length; i++) assertEquals(o[i], q.take()); } catch (InterruptedException e){ unexpectedException(); } } /** * toArray(a) contains all elements */ public void testToArray2() { DelayQueue q = populatedQueue(SIZE); PDelay[] ints = new PDelay[SIZE]; ints = (PDelay[])q.toArray(ints); Arrays.sort(ints); try { for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.take()); } catch (InterruptedException e){ unexpectedException(); } } /** * toArray(null) throws NPE */ public void testToArray_BadArg() { try { DelayQueue q = populatedQueue(SIZE); Object o[] = q.toArray(null); shouldThrow(); } catch(NullPointerException success){} } /** * toArray with incompatible array type throws CCE */ public void testToArray1_BadArg() { try { DelayQueue q = populatedQueue(SIZE); Object o[] = q.toArray(new String[10] ); shouldThrow(); } catch(ArrayStoreException success){} } /** * iterator iterates through all elements */ public void testIterator() { DelayQueue q = populatedQueue(SIZE); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); } /** * iterator.remove removes current element */ public void testIteratorRemove () { final DelayQueue q = new DelayQueue(); q.add(new PDelay(2)); q.add(new PDelay(1)); q.add(new PDelay(3)); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), new PDelay(2)); assertEquals(it.next(), new PDelay(3)); assertFalse(it.hasNext()); } /** * toString contains toStrings of elements */ public void testToString() { DelayQueue q = populatedQueue(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(Integer.MIN_VALUE+i)) >= 0); } } /** * offer transfers elements across Executor tasks */ public void testPollInExecutor() { final DelayQueue q = new DelayQueue(); ExecutorService executor = Executors.newFixedThreadPool(2); executor.execute(new Runnable() { public void run() { threadAssertNull(q.poll()); try { threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertTrue(q.isEmpty()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); executor.execute(new Runnable() { public void run() { try { Thread.sleep(SHORT_DELAY_MS); q.put(new PDelay(1)); } catch (InterruptedException e) { threadUnexpectedException(); } } }); joinPool(executor); } /** * Delayed actions do not occur until their delay elapses */ public void testDelay() { DelayQueue q = new DelayQueue(); NanoDelay[] elements = new NanoDelay[SIZE]; for (int i = 0; i < SIZE; ++i) { elements[i] = new NanoDelay(1000000000L + 1000000L * (SIZE - i)); } for (int i = 0; i < SIZE; ++i) { q.add(elements[i]); } try { long last = 0; for (int i = 0; i < SIZE; ++i) { NanoDelay e = (NanoDelay)(q.take()); long tt = e.getTriggerTime(); assertTrue(tt <= Utils.nanoTime()); if (i != 0) assertTrue(tt >= last); last = tt; } } catch(InterruptedException ie) { unexpectedException(); } } /** * peek of a non-empty queue returns non-null even if not expired */ public void testPeekDelayed() { DelayQueue q = new DelayQueue(); q.add(new NanoDelay(Long.MAX_VALUE)); assert(q.peek() != null); } /** * poll of a non-empty queue returns null if no expired elements. */ public void testPollDelayed() { DelayQueue q = new DelayQueue(); q.add(new NanoDelay(Long.MAX_VALUE)); assertNull(q.poll()); } /** * timed poll of a non-empty queue returns null if no expired elements. */ public void testTimedPollDelayed() { DelayQueue q = new DelayQueue(); q.add(new NanoDelay(LONG_DELAY_MS * 1000000L)); try { assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (Exception ex) { unexpectedException(); } } /** * drainTo(null) throws NPE */ public void testDrainToNull() { DelayQueue q = populatedQueue(SIZE); try { q.drainTo(null); shouldThrow(); } catch(NullPointerException success) { } } /** * drainTo(this) throws IAE */ public void testDrainToSelf() { DelayQueue q = populatedQueue(SIZE); try { q.drainTo(q); shouldThrow(); } catch(IllegalArgumentException success) { } } /** * drainTo(c) empties queue into another collection c */ public void testDrainTo() { DelayQueue q = new DelayQueue(); PDelay[] elems = new PDelay[SIZE]; for (int i = 0; i < SIZE; ++i) { elems[i] = new PDelay(i); q.add(elems[i]); } ArrayList l = new ArrayList(); q.drainTo(l); assertEquals(q.size(), 0); for (int i = 0; i < SIZE; ++i) assertEquals(l.get(i), elems[i]); q.add(elems[0]); q.add(elems[1]); assertFalse(q.isEmpty()); assertTrue(q.contains(elems[0])); assertTrue(q.contains(elems[1])); l.clear(); q.drainTo(l); assertEquals(q.size(), 0); assertEquals(l.size(), 2); for (int i = 0; i < 2; ++i) assertEquals(l.get(i), elems[i]); } /** * drainTo empties queue */ public void testDrainToWithActivePut() { final DelayQueue q = populatedQueue(SIZE); Thread t = new Thread(new Runnable() { public void run() { q.put(new PDelay(SIZE+1)); } }); try { t.start(); ArrayList l = new ArrayList(); q.drainTo(l); assertTrue(l.size() >= SIZE); t.join(); assertTrue(q.size() + l.size() >= SIZE); } catch(Exception e){ unexpectedException(); } } /** * drainTo(null, n) throws NPE */ public void testDrainToNullN() { DelayQueue q = populatedQueue(SIZE); try { q.drainTo(null, 0); shouldThrow(); } catch(NullPointerException success) { } } /** * drainTo(this, n) throws IAE */ public void testDrainToSelfN() { DelayQueue q = populatedQueue(SIZE); try { q.drainTo(q, 0); shouldThrow(); } catch(IllegalArgumentException success) { } } /** * drainTo(c, n) empties first max {n, size} elements of queue into c */ public void testDrainToN() { for (int i = 0; i < SIZE + 2; ++i) { DelayQueue q = populatedQueue(SIZE); ArrayList l = new ArrayList(); q.drainTo(l, i); int k = (i < SIZE)? i : SIZE; assertEquals(q.size(), SIZE-k); assertEquals(l.size(), k); } } } backport-util-concurrent-3.1-src/test/tck/src/AbstractExecutorServiceTest.java0000644001750700037720000006006210431260156026545 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.security.*; import java.util.List; import java.util.Collections; import java.util.ArrayList; import java.util.Iterator; public class AbstractExecutorServiceTest extends JSR166TestCase{ public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(AbstractExecutorServiceTest.class); } /** * A no-frills implementation of AbstractExecutorService, designed * to test the submit methods only. */ static class DirectExecutorService extends AbstractExecutorService { public void execute(Runnable r) { r.run(); } public void shutdown() { shutdown = true; } public List shutdownNow() { shutdown = true; return Collections.EMPTY_LIST; } public boolean isShutdown() { return shutdown; } public boolean isTerminated() { return isShutdown(); } public boolean awaitTermination(long timeout, TimeUnit unit) { return isShutdown(); } private volatile boolean shutdown = false; } /** * execute(runnable) runs it to completion */ public void testExecuteRunnable() { try { ExecutorService e = new DirectExecutorService(); TrackedShortRunnable task = new TrackedShortRunnable(); assertFalse(task.done); Future future = e.submit(task); future.get(); assertTrue(task.done); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } } /** * Completed submit(callable) returns result */ public void testSubmitCallable() { try { ExecutorService e = new DirectExecutorService(); Future future = e.submit(new StringTask()); String result = (String)future.get(); assertSame(TEST_STRING, result); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } } /** * Completed submit(runnable) returns successfully */ public void testSubmitRunnable() { try { ExecutorService e = new DirectExecutorService(); Future future = e.submit(new NoOpRunnable()); future.get(); assertTrue(future.isDone()); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } } /** * Completed submit(runnable, result) returns result */ public void testSubmitRunnable2() { try { ExecutorService e = new DirectExecutorService(); Future future = e.submit(new NoOpRunnable(), TEST_STRING); String result = (String)future.get(); assertSame(TEST_STRING, result); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } } /** * A submitted privileged action to completion */ public void testSubmitPrivilegedAction() { Policy savedPolicy = null; try { savedPolicy = Policy.getPolicy(); AdjustablePolicy policy = new AdjustablePolicy(); policy.addPermission(new RuntimePermission("getContextClassLoader")); policy.addPermission(new RuntimePermission("setContextClassLoader")); Policy.setPolicy(policy); } catch(AccessControlException ok) { return; } try { ExecutorService e = new DirectExecutorService(); Future future = e.submit(Executors.callable(new PrivilegedAction() { public Object run() { return TEST_STRING; }})); Object result = future.get(); assertSame(TEST_STRING, result); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { try { Policy.setPolicy(savedPolicy); } catch(AccessControlException ok) { return; } } } /** * A submitted a privileged exception action runs to completion */ public void testSubmitPrivilegedExceptionAction() { Policy savedPolicy = null; try { savedPolicy = Policy.getPolicy(); AdjustablePolicy policy = new AdjustablePolicy(); policy.addPermission(new RuntimePermission("getContextClassLoader")); policy.addPermission(new RuntimePermission("setContextClassLoader")); Policy.setPolicy(policy); } catch(AccessControlException ok) { return; } try { ExecutorService e = new DirectExecutorService(); Future future = e.submit(Executors.callable(new PrivilegedExceptionAction() { public Object run() { return TEST_STRING; }})); Object result = future.get(); assertSame(TEST_STRING, result); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { Policy.setPolicy(savedPolicy); } } /** * A submitted failed privileged exception action reports exception */ public void testSubmitFailedPrivilegedExceptionAction() { Policy savedPolicy = null; try { savedPolicy = Policy.getPolicy(); AdjustablePolicy policy = new AdjustablePolicy(); policy.addPermission(new RuntimePermission("getContextClassLoader")); policy.addPermission(new RuntimePermission("setContextClassLoader")); Policy.setPolicy(policy); } catch(AccessControlException ok) { return; } try { ExecutorService e = new DirectExecutorService(); Future future = e.submit(Executors.callable(new PrivilegedExceptionAction() { public Object run() throws Exception { throw new IndexOutOfBoundsException(); }})); Object result = future.get(); shouldThrow(); } catch (ExecutionException success) { } catch (InterruptedException ex) { unexpectedException(); } finally { Policy.setPolicy(savedPolicy); } } /** * execute(null runnable) throws NPE */ public void testExecuteNullRunnable() { try { ExecutorService e = new DirectExecutorService(); TrackedShortRunnable task = null; Future future = e.submit(task); shouldThrow(); } catch (NullPointerException success) { } catch (Exception ex) { unexpectedException(); } } /** * submit(null callable) throws NPE */ public void testSubmitNullCallable() { try { ExecutorService e = new DirectExecutorService(); StringTask t = null; Future future = e.submit(t); shouldThrow(); } catch (NullPointerException success) { } catch (Exception ex) { unexpectedException(); } } /** * submit(runnable) throws RejectedExecutionException if * executor is saturated. */ public void testExecute1() { ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, 60, TimeUnit.SECONDS, new ArrayBlockingQueue(1)); try { for(int i = 0; i < 5; ++i){ p.submit(new MediumRunnable()); } shouldThrow(); } catch(RejectedExecutionException success){} joinPool(p); } /** * submit(callable) throws RejectedExecutionException * if executor is saturated. */ public void testExecute2() { ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, 60, TimeUnit.SECONDS, new ArrayBlockingQueue(1)); try { for(int i = 0; i < 5; ++i) { p.submit(new SmallCallable()); } shouldThrow(); } catch(RejectedExecutionException e){} joinPool(p); } /** * Blocking on submit(callable) throws InterruptedException if * caller interrupted. */ public void testInterruptedSubmit() { final ThreadPoolExecutor p = new ThreadPoolExecutor(1,1,60, TimeUnit.SECONDS, new ArrayBlockingQueue(10)); Thread t = new Thread(new Runnable() { public void run() { try { p.submit(new Callable() { public Object call() { try { Thread.sleep(MEDIUM_DELAY_MS); shouldThrow(); } catch(InterruptedException e){ } return null; } }).get(); } catch(InterruptedException success){ } catch(Exception e) { unexpectedException(); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); } catch(Exception e){ unexpectedException(); } joinPool(p); } /** * get of submitted callable throws Exception if callable * interrupted */ public void testSubmitIE() { final ThreadPoolExecutor p = new ThreadPoolExecutor(1,1,60, TimeUnit.SECONDS, new ArrayBlockingQueue(10)); final Callable c = new Callable() { public Object call() { try { p.submit(new SmallCallable()).get(); shouldThrow(); } catch(InterruptedException e){} catch(RejectedExecutionException e2){} catch(ExecutionException e3){} return Boolean.TRUE; } }; Thread t = new Thread(new Runnable() { public void run() { try { c.call(); } catch(Exception e){} } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(InterruptedException e){ unexpectedException(); } joinPool(p); } /** * get of submit(callable) throws ExecutionException if callable * throws exception */ public void testSubmitEE() { ThreadPoolExecutor p = new ThreadPoolExecutor(1,1,60, TimeUnit.SECONDS, new ArrayBlockingQueue(10)); try { Callable c = new Callable() { public Object call() { int i = 5/0; return Boolean.TRUE; } }; for(int i =0; i < 5; i++){ p.submit(c).get(); } shouldThrow(); } catch(ExecutionException success){ } catch(Exception e) { unexpectedException(); } joinPool(p); } /** * invokeAny(null) throws NPE */ public void testInvokeAny1() { ExecutorService e = new DirectExecutorService(); try { e.invokeAny(null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(empty collection) throws IAE */ public void testInvokeAny2() { ExecutorService e = new DirectExecutorService(); try { e.invokeAny(new ArrayList()); } catch (IllegalArgumentException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) throws NPE if c has null elements */ public void testInvokeAny3() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAny(l); } catch (NullPointerException success) { } catch(Exception ex) { ex.printStackTrace(); unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) throws ExecutionException if no task in c completes */ public void testInvokeAny4() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new NPETask()); e.invokeAny(l); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) returns result of some task in c if at least one completes */ public void testInvokeAny5() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); String result = (String)e.invokeAny(l); assertSame(TEST_STRING, result); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(null) throws NPE */ public void testInvokeAll1() { ExecutorService e = new DirectExecutorService(); try { e.invokeAll(null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(empty collection) returns empty collection */ public void testInvokeAll2() { ExecutorService e = new DirectExecutorService(); try { List r = e.invokeAll(new ArrayList()); assertTrue(r.isEmpty()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(c) throws NPE if c has null elements */ public void testInvokeAll3() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAll(l); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * get of returned element of invokeAll(c) throws exception on failed task */ public void testInvokeAll4() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new NPETask()); List result = e.invokeAll(l); assertEquals(1, result.size()); for (Iterator it = result.iterator(); it.hasNext();) ((Future)it.next()).get(); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(c) returns results of all completed tasks in c */ public void testInvokeAll5() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); List result = e.invokeAll(l); assertEquals(2, result.size()); for (Iterator it = result.iterator(); it.hasNext();) assertSame(TEST_STRING, ((Future)it.next()).get()); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(null) throws NPE */ public void testTimedInvokeAny1() { ExecutorService e = new DirectExecutorService(); try { e.invokeAny(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(null time unit) throws NPE */ public void testTimedInvokeAnyNullTimeUnit() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new StringTask()); e.invokeAny(l, MEDIUM_DELAY_MS, null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(empty collection) throws IAE */ public void testTimedInvokeAny2() { ExecutorService e = new DirectExecutorService(); try { e.invokeAny(new ArrayList(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (IllegalArgumentException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) throws NPE if c has null elements */ public void testTimedInvokeAny3() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { ex.printStackTrace(); unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) throws ExecutionException if no task completes */ public void testTimedInvokeAny4() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new NPETask()); e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) returns result of some task in c */ public void testTimedInvokeAny5() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); String result = (String)e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertSame(TEST_STRING, result); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(null) throws NPE */ public void testTimedInvokeAll1() { ExecutorService e = new DirectExecutorService(); try { e.invokeAll(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(null time unit) throws NPE */ public void testTimedInvokeAllNullTimeUnit() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new StringTask()); e.invokeAll(l, MEDIUM_DELAY_MS, null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(empty collection) returns empty collection */ public void testTimedInvokeAll2() { ExecutorService e = new DirectExecutorService(); try { List r = e.invokeAll(new ArrayList(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertTrue(r.isEmpty()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) throws NPE if c has null elements */ public void testTimedInvokeAll3() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * get of returned element of invokeAll(c) throws exception on failed task */ public void testTimedInvokeAll4() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new NPETask()); List result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(1, result.size()); for (Iterator it = result.iterator(); it.hasNext();) ((Future)it.next()).get(); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) returns results of all completed tasks in c */ public void testTimedInvokeAll5() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); List result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(2, result.size()); for (Iterator it = result.iterator(); it.hasNext();) assertSame(TEST_STRING, ((Future)it.next()).get()); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll cancels tasks not completed by timeout */ public void testTimedInvokeAll6() { ExecutorService e = new DirectExecutorService(); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(Executors.callable(new MediumPossiblyInterruptedRunnable(), TEST_STRING)); l.add(new StringTask()); List result = e.invokeAll(l, SMALL_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(3, result.size()); Iterator it = result.iterator(); Future f1 = (Future)it.next(); Future f2 = (Future)it.next(); Future f3 = (Future)it.next(); assertTrue(f1.isDone()); assertFalse(f1.isCancelled()); assertTrue(f2.isDone()); assertTrue(f3.isDone()); assertTrue(f3.isCancelled()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } } backport-util-concurrent-3.1-src/test/tck/src/LinkedBlockingDequeTest.java0000644001750700037720000016034510346121124025606 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import java.util.NoSuchElementException; import java.util.Arrays; import java.util.Iterator; import java.util.ConcurrentModificationException; import java.util.ArrayList; public class LinkedBlockingDequeTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(LinkedBlockingDequeTest.class); } /** * Create a deque of given size containing consecutive * Integers 0 ... n. */ private LinkedBlockingDeque populatedDeque(int n) { LinkedBlockingDeque q = new LinkedBlockingDeque(n); assertTrue(q.isEmpty()); for(int i = 0; i < n; i++) assertTrue(q.offer(new Integer(i))); assertFalse(q.isEmpty()); assertEquals(0, q.remainingCapacity()); assertEquals(n, q.size()); return q; } /** * isEmpty is true before add, false after */ public void testEmpty() { LinkedBlockingDeque q = new LinkedBlockingDeque(); assertTrue(q.isEmpty()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.add(new Integer(2)); q.removeFirst(); q.removeFirst(); assertTrue(q.isEmpty()); } /** * size changes when elements added and removed */ public void testSize() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.size()); q.removeFirst(); } for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * offer(null) throws NPE */ public void testOfferFirstNull() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(); q.offerFirst(null); shouldThrow(); } catch (NullPointerException success) { } } /** * OfferFirst succeeds */ public void testOfferFirst() { LinkedBlockingDeque q = new LinkedBlockingDeque(); assertTrue(q.offerFirst(new Integer(0))); assertTrue(q.offerFirst(new Integer(1))); } /** * OfferLast succeeds */ public void testOfferLast() { LinkedBlockingDeque q = new LinkedBlockingDeque(); assertTrue(q.offerLast(new Integer(0))); assertTrue(q.offerLast(new Integer(1))); } /** * pollFirst succeeds unless empty */ public void testPollFirst() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pollFirst()).intValue()); } assertNull(q.pollFirst()); } /** * pollLast succeeds unless empty */ public void testPollLast() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.pollLast()).intValue()); } assertNull(q.pollLast()); } /** * peekFirst returns next element, or null if empty */ public void testPeekFirst() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.peekFirst()).intValue()); q.pollFirst(); assertTrue(q.peekFirst() == null || i != ((Integer)q.peekFirst()).intValue()); } assertNull(q.peekFirst()); } /** * peek returns next element, or null if empty */ public void testPeek() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.peek()).intValue()); q.pollFirst(); assertTrue(q.peek() == null || i != ((Integer)q.peek()).intValue()); } assertNull(q.peek()); } /** * peekLast returns next element, or null if empty */ public void testPeekLast() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.peekLast()).intValue()); q.pollLast(); assertTrue(q.peekLast() == null || i != ((Integer)q.peekLast()).intValue()); } assertNull(q.peekLast()); } /** * getFirst returns next getFirst, or throws NSEE if empty */ public void testFirstElement() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.getFirst()).intValue()); q.pollFirst(); } try { q.getFirst(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * getLast returns next element, or throws NSEE if empty */ public void testLastElement() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.getLast()).intValue()); q.pollLast(); } try { q.getLast(); shouldThrow(); } catch (NoSuchElementException success) {} assertNull(q.peekLast()); } /** * removeFirst removes next element, or throws NSEE if empty */ public void testRemoveFirst() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.removeFirst()).intValue()); } try { q.removeFirst(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * remove removes next element, or throws NSEE if empty */ public void testRemove() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.remove()).intValue()); } try { q.remove(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * removeFirstOccurrence(x) removes x and returns true if present */ public void testRemoveFirstOccurrence() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.removeFirstOccurrence(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.removeFirstOccurrence(new Integer(i))); assertFalse(q.removeFirstOccurrence(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * removeLastOccurrence(x) removes x and returns true if present */ public void testRemoveLastOccurrence() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.removeLastOccurrence(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.removeLastOccurrence(new Integer(i))); assertFalse(q.removeLastOccurrence(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * peekFirst returns element inserted with addFirst */ public void testAddFirst() { LinkedBlockingDeque q = populatedDeque(3); q.pollLast(); q.addFirst(four); assertEquals(four,q.peekFirst()); } /** * peekLast returns element inserted with addLast */ public void testAddLast() { LinkedBlockingDeque q = populatedDeque(3); q.pollLast(); q.addLast(four); assertEquals(four,q.peekLast()); } /** * A new deque has the indicated capacity, or Integer.MAX_VALUE if * none given */ public void testConstructor1() { assertEquals(SIZE, new LinkedBlockingDeque(SIZE).remainingCapacity()); assertEquals(Integer.MAX_VALUE, new LinkedBlockingDeque().remainingCapacity()); } /** * Constructor throws IAE if capacity argument nonpositive */ public void testConstructor2() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(0); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * Initializing from null Collection throws NPE */ public void testConstructor3() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(null); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection of null elements throws NPE */ public void testConstructor4() { try { Integer[] ints = new Integer[SIZE]; LinkedBlockingDeque q = new LinkedBlockingDeque(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection with some null elements throws NPE */ public void testConstructor5() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); LinkedBlockingDeque q = new LinkedBlockingDeque(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Deque contains all elements of collection used to initialize */ public void testConstructor6() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); LinkedBlockingDeque q = new LinkedBlockingDeque(Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * Deque transitions from empty to full when elements added */ public void testEmptyFull() { LinkedBlockingDeque q = new LinkedBlockingDeque(2); assertTrue(q.isEmpty()); assertEquals("should have room for 2", 2, q.remainingCapacity()); q.add(one); assertFalse(q.isEmpty()); q.add(two); assertFalse(q.isEmpty()); assertEquals(0, q.remainingCapacity()); assertFalse(q.offer(three)); } /** * remainingCapacity decreases on add, increases on remove */ public void testRemainingCapacity() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.remainingCapacity()); assertEquals(SIZE-i, q.size()); q.remove(); } for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.remainingCapacity()); assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * offer(null) throws NPE */ public void testOfferNull() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(1); q.offer(null); shouldThrow(); } catch (NullPointerException success) { } } /** * add(null) throws NPE */ public void testAddNull() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(1); q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * push(null) throws NPE */ public void testPushNull() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(1); q.push(null); shouldThrow(); } catch (NullPointerException success) { } } /** * push succeeds if not full; throws ISE if full */ public void testPush() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); for (int i = 0; i < SIZE; ++i) { Integer I = new Integer(i); q.push(I); assertEquals(I, q.peek()); } assertEquals(0, q.remainingCapacity()); q.push(new Integer(SIZE)); } catch (IllegalStateException success){ } } /** * peekFirst returns element inserted with push */ public void testPushWithPeek() { LinkedBlockingDeque q = populatedDeque(3); q.pollLast(); q.push(four); assertEquals(four,q.peekFirst()); } /** * pop removes next element, or throws NSEE if empty */ public void testPop() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pop()).intValue()); } try { q.pop(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * Offer succeeds if not full; fails if full */ public void testOffer() { LinkedBlockingDeque q = new LinkedBlockingDeque(1); assertTrue(q.offer(zero)); assertFalse(q.offer(one)); } /** * add succeeds if not full; throws ISE if full */ public void testAdd() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.add(new Integer(i))); } assertEquals(0, q.remainingCapacity()); q.add(new Integer(SIZE)); } catch (IllegalStateException success){ } } /** * addAll(null) throws NPE */ public void testAddAll1() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(1); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll(this) throws IAE */ public void testAddAllSelf() { try { LinkedBlockingDeque q = populatedDeque(SIZE); q.addAll(q); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testAddAll2() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); Integer[] ints = new Integer[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testAddAll3() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll throws ISE if not enough room */ public void testAddAll4() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(1); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (IllegalStateException success) {} } /** * Deque contains all elements, in traversal order, of successful addAll */ public void testAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * put(null) throws NPE */ public void testPutNull() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); q.put(null); shouldThrow(); } catch (NullPointerException success){ } catch (InterruptedException ie) { unexpectedException(); } } /** * all elements successfully put are contained */ public void testPut() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); for (int i = 0; i < SIZE; ++i) { Integer I = new Integer(i); q.put(I); assertTrue(q.contains(I)); } assertEquals(0, q.remainingCapacity()); } catch (InterruptedException ie) { unexpectedException(); } } /** * put blocks interruptibly if full */ public void testBlockingPut() { Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); for (int i = 0; i < SIZE; ++i) { q.put(new Integer(i)); ++added; } q.put(new Integer(SIZE)); threadShouldThrow(); } catch (InterruptedException ie){ threadAssertEquals(added, SIZE); } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * put blocks waiting for take when full */ public void testPutWithTake() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { q.put(new Object()); ++added; q.put(new Object()); ++added; q.put(new Object()); ++added; q.put(new Object()); ++added; threadShouldThrow(); } catch (InterruptedException e){ threadAssertTrue(added >= 2); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); q.take(); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * timed offer times out if full and elements not taken */ public void testTimedOffer() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); Thread t = new Thread(new Runnable() { public void run() { try { q.put(new Object()); q.put(new Object()); threadAssertFalse(q.offer(new Object(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.offer(new Object(), LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success){} } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * take retrieves elements in FIFO order */ public void testTake() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.take()).intValue()); } } catch (InterruptedException e){ unexpectedException(); } } /** * take blocks interruptibly when empty */ public void testTakeFromEmpty() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); Thread t = new Thread(new Runnable() { public void run() { try { q.take(); threadShouldThrow(); } catch (InterruptedException success){ } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * Take removes existing elements until empty, then blocks interruptibly */ public void testBlockingTake() { Thread t = new Thread(new Runnable() { public void run() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.take()).intValue()); } q.take(); threadShouldThrow(); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * poll succeeds unless empty */ public void testPoll() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll()).intValue()); } assertNull(q.poll()); } /** * timed poll with zero timeout succeeds when non-empty, else times out */ public void testTimedPoll0() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll(0, TimeUnit.MILLISECONDS)).intValue()); } assertNull(q.poll(0, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * timed poll with nonzero timeout succeeds when non-empty, else times out */ public void testTimedPoll() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue()); } assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * Interrupted timed poll throws InterruptedException instead of * returning timeout status */ public void testInterruptedTimedPoll() { Thread t = new Thread(new Runnable() { public void run() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { threadAssertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue()); } threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * timed poll before a delayed offer fails; after offer succeeds; * on interruption throws */ public void testTimedPollWithOffer() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success) { } } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); assertTrue(q.offer(zero, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * putFirst(null) throws NPE */ public void testPutFirstNull() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); q.putFirst(null); shouldThrow(); } catch (NullPointerException success){ } catch (InterruptedException ie) { unexpectedException(); } } /** * all elements successfully putFirst are contained */ public void testPutFirst() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); for (int i = 0; i < SIZE; ++i) { Integer I = new Integer(i); q.putFirst(I); assertTrue(q.contains(I)); } assertEquals(0, q.remainingCapacity()); } catch (InterruptedException ie) { unexpectedException(); } } /** * putFirst blocks interruptibly if full */ public void testBlockingPutFirst() { Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); for (int i = 0; i < SIZE; ++i) { q.putFirst(new Integer(i)); ++added; } q.putFirst(new Integer(SIZE)); threadShouldThrow(); } catch (InterruptedException ie){ threadAssertEquals(added, SIZE); } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * putFirst blocks waiting for take when full */ public void testPutFirstWithTake() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { q.putFirst(new Object()); ++added; q.putFirst(new Object()); ++added; q.putFirst(new Object()); ++added; q.putFirst(new Object()); ++added; threadShouldThrow(); } catch (InterruptedException e){ threadAssertTrue(added >= 2); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); q.take(); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * timed offerFirst times out if full and elements not taken */ public void testTimedOfferFirst() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); Thread t = new Thread(new Runnable() { public void run() { try { q.putFirst(new Object()); q.putFirst(new Object()); threadAssertFalse(q.offerFirst(new Object(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.offerFirst(new Object(), LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success){} } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * take retrieves elements in FIFO order */ public void testTakeFirst() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.takeFirst()).intValue()); } } catch (InterruptedException e){ unexpectedException(); } } /** * takeFirst blocks interruptibly when empty */ public void testTakeFirstFromEmpty() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); Thread t = new Thread(new Runnable() { public void run() { try { q.takeFirst(); threadShouldThrow(); } catch (InterruptedException success){ } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * TakeFirst removes existing elements until empty, then blocks interruptibly */ public void testBlockingTakeFirst() { Thread t = new Thread(new Runnable() { public void run() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.takeFirst()).intValue()); } q.takeFirst(); threadShouldThrow(); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * timed pollFirst with zero timeout succeeds when non-empty, else times out */ public void testTimedPollFirst0() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pollFirst(0, TimeUnit.MILLISECONDS)).intValue()); } assertNull(q.pollFirst(0, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * timed pollFirst with nonzero timeout succeeds when non-empty, else times out */ public void testTimedPollFirst() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pollFirst(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue()); } assertNull(q.pollFirst(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * Interrupted timed pollFirst throws InterruptedException instead of * returning timeout status */ public void testInterruptedTimedPollFirst() { Thread t = new Thread(new Runnable() { public void run() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { threadAssertEquals(i, ((Integer)q.pollFirst(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue()); } threadAssertNull(q.pollFirst(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * timed pollFirst before a delayed offerFirst fails; after offerFirst succeeds; * on interruption throws */ public void testTimedPollFirstWithOfferFirst() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertNull(q.pollFirst(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.pollFirst(LONG_DELAY_MS, TimeUnit.MILLISECONDS); q.pollFirst(LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success) { } } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); assertTrue(q.offerFirst(zero, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * putLast(null) throws NPE */ public void testPutLastNull() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); q.putLast(null); shouldThrow(); } catch (NullPointerException success){ } catch (InterruptedException ie) { unexpectedException(); } } /** * all elements successfully putLast are contained */ public void testPutLast() { try { LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); for (int i = 0; i < SIZE; ++i) { Integer I = new Integer(i); q.putLast(I); assertTrue(q.contains(I)); } assertEquals(0, q.remainingCapacity()); } catch (InterruptedException ie) { unexpectedException(); } } /** * putLast blocks interruptibly if full */ public void testBlockingPutLast() { Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE); for (int i = 0; i < SIZE; ++i) { q.putLast(new Integer(i)); ++added; } q.putLast(new Integer(SIZE)); threadShouldThrow(); } catch (InterruptedException ie){ threadAssertEquals(added, SIZE); } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * putLast blocks waiting for take when full */ public void testPutLastWithTake() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { q.putLast(new Object()); ++added; q.putLast(new Object()); ++added; q.putLast(new Object()); ++added; q.putLast(new Object()); ++added; threadShouldThrow(); } catch (InterruptedException e){ threadAssertTrue(added >= 2); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); q.take(); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * timed offerLast times out if full and elements not taken */ public void testTimedOfferLast() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); Thread t = new Thread(new Runnable() { public void run() { try { q.putLast(new Object()); q.putLast(new Object()); threadAssertFalse(q.offerLast(new Object(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.offerLast(new Object(), LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success){} } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * takeLast retrieves elements in FIFO order */ public void testTakeLast() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i-1, ((Integer)q.takeLast()).intValue()); } } catch (InterruptedException e){ unexpectedException(); } } /** * takeLast blocks interruptibly when empty */ public void testTakeLastFromEmpty() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); Thread t = new Thread(new Runnable() { public void run() { try { q.takeLast(); threadShouldThrow(); } catch (InterruptedException success){ } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * TakeLast removes existing elements until empty, then blocks interruptibly */ public void testBlockingTakeLast() { Thread t = new Thread(new Runnable() { public void run() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i-1, ((Integer)q.takeLast()).intValue()); } q.takeLast(); threadShouldThrow(); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * timed pollLast with zero timeout succeeds when non-empty, else times out */ public void testTimedPollLast0() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i-1, ((Integer)q.pollLast(0, TimeUnit.MILLISECONDS)).intValue()); } assertNull(q.pollLast(0, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * timed pollLast with nonzero timeout succeeds when non-empty, else times out */ public void testTimedPollLast() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i-1, ((Integer)q.pollLast(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue()); } assertNull(q.pollLast(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * Interrupted timed pollLast throws InterruptedException instead of * returning timeout status */ public void testInterruptedTimedPollLast() { Thread t = new Thread(new Runnable() { public void run() { try { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { threadAssertEquals(SIZE-i-1, ((Integer)q.pollLast(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue()); } threadAssertNull(q.pollLast(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException success){ } }}); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * timed poll before a delayed offerLast fails; after offerLast succeeds; * on interruption throws */ public void testTimedPollWithOfferLast() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success) { } } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); assertTrue(q.offerLast(zero, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * element returns next element, or throws NSEE if empty */ public void testElement() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.element()).intValue()); q.poll(); } try { q.element(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * remove(x) removes x and returns true if present */ public void testRemoveElement() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { LinkedBlockingDeque q = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.poll(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testClear() { LinkedBlockingDeque q = populatedDeque(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); assertEquals(SIZE, q.remainingCapacity()); q.add(one); assertFalse(q.isEmpty()); assertTrue(q.contains(one)); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { LinkedBlockingDeque q = populatedDeque(SIZE); LinkedBlockingDeque p = new LinkedBlockingDeque(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testRetainAll() { LinkedBlockingDeque q = populatedDeque(SIZE); LinkedBlockingDeque p = populatedDeque(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.remove(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { LinkedBlockingDeque q = populatedDeque(SIZE); LinkedBlockingDeque p = populatedDeque(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.remove()); assertFalse(q.contains(I)); } } } /** * toArray contains all elements */ public void testToArray() { LinkedBlockingDeque q = populatedDeque(SIZE); Object[] o = q.toArray(); try { for(int i = 0; i < o.length; i++) assertEquals(o[i], q.take()); } catch (InterruptedException e){ unexpectedException(); } } /** * toArray(a) contains all elements */ public void testToArray2() { LinkedBlockingDeque q = populatedDeque(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); try { for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.take()); } catch (InterruptedException e){ unexpectedException(); } } /** * toArray(null) throws NPE */ public void testToArray_BadArg() { try { LinkedBlockingDeque q = populatedDeque(SIZE); Object o[] = q.toArray(null); shouldThrow(); } catch(NullPointerException success){} } /** * toArray with incompatible array type throws CCE */ public void testToArray1_BadArg() { try { LinkedBlockingDeque q = populatedDeque(SIZE); Object o[] = q.toArray(new String[10] ); shouldThrow(); } catch(ArrayStoreException success){} } /** * iterator iterates through all elements */ public void testIterator() { LinkedBlockingDeque q = populatedDeque(SIZE); Iterator it = q.iterator(); try { while(it.hasNext()){ assertEquals(it.next(), q.take()); } } catch (InterruptedException e){ unexpectedException(); } } /** * iterator.remove removes current element */ public void testIteratorRemove () { final LinkedBlockingDeque q = new LinkedBlockingDeque(3); q.add(two); q.add(one); q.add(three); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), one); assertEquals(it.next(), three); assertFalse(it.hasNext()); } /** * iterator ordering is FIFO */ public void testIteratorOrdering() { final LinkedBlockingDeque q = new LinkedBlockingDeque(3); q.add(one); q.add(two); q.add(three); assertEquals(0, q.remainingCapacity()); int k = 0; for (Iterator it = q.iterator(); it.hasNext();) { int i = ((Integer)(it.next())).intValue(); assertEquals(++k, i); } assertEquals(3, k); } /** * Modifications do not cause iterators to fail */ public void testWeaklyConsistentIteration () { final LinkedBlockingDeque q = new LinkedBlockingDeque(3); q.add(one); q.add(two); q.add(three); try { for (Iterator it = q.iterator(); it.hasNext();) { q.remove(); it.next(); } } catch (ConcurrentModificationException e) { unexpectedException(); } assertEquals(0, q.size()); } /** * Descending iterator iterates through all elements */ public void testDescendingIterator() { LinkedBlockingDeque q = populatedDeque(SIZE); int i = 0; Iterator it = q.descendingIterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); assertFalse(it.hasNext()); try { it.next(); } catch(NoSuchElementException success) { } } /** * Descending iterator ordering is reverse FIFO */ public void testDescendingIteratorOrdering() { final LinkedBlockingDeque q = new LinkedBlockingDeque(); for (int iters = 0; iters < 100; ++iters) { q.add(new Integer(3)); q.add(new Integer(2)); q.add(new Integer(1)); int k = 0; for (Iterator it = q.descendingIterator(); it.hasNext();) { int i = ((Integer)(it.next())).intValue(); assertEquals(++k, i); } assertEquals(3, k); q.remove(); q.remove(); q.remove(); } } /** * descendingIterator.remove removes current element */ public void testDescendingIteratorRemove () { final LinkedBlockingDeque q = new LinkedBlockingDeque(); for (int iters = 0; iters < 100; ++iters) { q.add(new Integer(3)); q.add(new Integer(2)); q.add(new Integer(1)); Iterator it = q.descendingIterator(); assertEquals(it.next(), new Integer(1)); it.remove(); assertEquals(it.next(), new Integer(2)); it = q.descendingIterator(); assertEquals(it.next(), new Integer(2)); assertEquals(it.next(), new Integer(3)); it.remove(); assertFalse(it.hasNext()); q.remove(); } } /** * toString contains toStrings of elements */ public void testToString() { LinkedBlockingDeque q = populatedDeque(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * offer transfers elements across Executor tasks */ public void testOfferInExecutor() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); q.add(one); q.add(two); ExecutorService executor = Executors.newFixedThreadPool(2); executor.execute(new Runnable() { public void run() { threadAssertFalse(q.offer(three)); try { threadAssertTrue(q.offer(three, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertEquals(0, q.remainingCapacity()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); executor.execute(new Runnable() { public void run() { try { Thread.sleep(SMALL_DELAY_MS); threadAssertEquals(one, q.take()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); joinPool(executor); } /** * poll retrieves elements across Executor threads */ public void testPollInExecutor() { final LinkedBlockingDeque q = new LinkedBlockingDeque(2); ExecutorService executor = Executors.newFixedThreadPool(2); executor.execute(new Runnable() { public void run() { threadAssertNull(q.poll()); try { threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertTrue(q.isEmpty()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); executor.execute(new Runnable() { public void run() { try { Thread.sleep(SMALL_DELAY_MS); q.put(one); } catch (InterruptedException e) { threadUnexpectedException(); } } }); joinPool(executor); } /** * A deserialized serialized deque has same elements in same order */ public void testSerialization() { LinkedBlockingDeque q = populatedDeque(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); LinkedBlockingDeque r = (LinkedBlockingDeque)in.readObject(); assertEquals(q.size(), r.size()); while (!q.isEmpty()) assertEquals(q.remove(), r.remove()); } catch(Exception e){ unexpectedException(); } } /** * drainTo(null) throws NPE */ public void testDrainToNull() { LinkedBlockingDeque q = populatedDeque(SIZE); try { q.drainTo(null); shouldThrow(); } catch(NullPointerException success) { } } /** * drainTo(this) throws IAE */ public void testDrainToSelf() { LinkedBlockingDeque q = populatedDeque(SIZE); try { q.drainTo(q); shouldThrow(); } catch(IllegalArgumentException success) { } } /** * drainTo(c) empties deque into another collection c */ public void testDrainTo() { LinkedBlockingDeque q = populatedDeque(SIZE); ArrayList l = new ArrayList(); q.drainTo(l); assertEquals(q.size(), 0); assertEquals(l.size(), SIZE); for (int i = 0; i < SIZE; ++i) assertEquals(l.get(i), new Integer(i)); q.add(zero); q.add(one); assertFalse(q.isEmpty()); assertTrue(q.contains(zero)); assertTrue(q.contains(one)); l.clear(); q.drainTo(l); assertEquals(q.size(), 0); assertEquals(l.size(), 2); for (int i = 0; i < 2; ++i) assertEquals(l.get(i), new Integer(i)); } /** * drainTo empties full deque, unblocking a waiting put. */ public void testDrainToWithActivePut() { final LinkedBlockingDeque q = populatedDeque(SIZE); Thread t = new Thread(new Runnable() { public void run() { try { q.put(new Integer(SIZE+1)); } catch (InterruptedException ie){ threadUnexpectedException(); } } }); try { t.start(); ArrayList l = new ArrayList(); q.drainTo(l); assertTrue(l.size() >= SIZE); for (int i = 0; i < SIZE; ++i) assertEquals(l.get(i), new Integer(i)); t.join(); assertTrue(q.size() + l.size() >= SIZE); } catch(Exception e){ unexpectedException(); } } /** * drainTo(null, n) throws NPE */ public void testDrainToNullN() { LinkedBlockingDeque q = populatedDeque(SIZE); try { q.drainTo(null, 0); shouldThrow(); } catch(NullPointerException success) { } } /** * drainTo(this, n) throws IAE */ public void testDrainToSelfN() { LinkedBlockingDeque q = populatedDeque(SIZE); try { q.drainTo(q, 0); shouldThrow(); } catch(IllegalArgumentException success) { } } /** * drainTo(c, n) empties first max {n, size} elements of deque into c */ public void testDrainToN() { LinkedBlockingDeque q = new LinkedBlockingDeque(); for (int i = 0; i < SIZE + 2; ++i) { for(int j = 0; j < SIZE; j++) assertTrue(q.offer(new Integer(j))); ArrayList l = new ArrayList(); q.drainTo(l, i); int k = (i < SIZE)? i : SIZE; assertEquals(l.size(), k); assertEquals(q.size(), SIZE-k); for (int j = 0; j < k; ++j) assertEquals(l.get(j), new Integer(j)); while (q.poll() != null) ; } } } backport-util-concurrent-3.1-src/test/tck/src/ExchangerTest.java0000644001750700037720000001577410153210664023660 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; public class ExchangerTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ExchangerTest.class); } /** * exchange exchanges objects across two threads */ public void testExchange() { final Exchanger e = new Exchanger(); Thread t1 = new Thread(new Runnable(){ public void run(){ try { Object v = e.exchange(one); threadAssertEquals(v, two); Object w = e.exchange(v); threadAssertEquals(w, one); } catch(InterruptedException e){ threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable(){ public void run(){ try { Object v = e.exchange(two); threadAssertEquals(v, one); Object w = e.exchange(v); threadAssertEquals(w, two); } catch(InterruptedException e){ threadUnexpectedException(); } } }); try { t1.start(); t2.start(); t1.join(); t2.join(); } catch(InterruptedException ex) { unexpectedException(); } } /** * timed exchange exchanges objects across two threads */ public void testTimedExchange() { final Exchanger e = new Exchanger(); Thread t1 = new Thread(new Runnable(){ public void run(){ try { Object v = e.exchange(one, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); threadAssertEquals(v, two); Object w = e.exchange(v, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); threadAssertEquals(w, one); } catch(InterruptedException e){ threadUnexpectedException(); } catch(TimeoutException toe) { threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable(){ public void run(){ try { Object v = e.exchange(two, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); threadAssertEquals(v, one); Object w = e.exchange(v, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); threadAssertEquals(w, two); } catch(InterruptedException e){ threadUnexpectedException(); } catch(TimeoutException toe) { threadUnexpectedException(); } } }); try { t1.start(); t2.start(); t1.join(); t2.join(); } catch(InterruptedException ex) { unexpectedException(); } } /** * interrupt during wait for exchange throws IE */ public void testExchange_InterruptedException(){ final Exchanger e = new Exchanger(); Thread t = new Thread(new Runnable() { public void run(){ try { e.exchange(one); threadShouldThrow(); } catch(InterruptedException success){ } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(InterruptedException ex) { unexpectedException(); } } /** * interrupt during wait for timed exchange throws IE */ public void testTimedExchange_InterruptedException(){ final Exchanger e = new Exchanger(); Thread t = new Thread(new Runnable() { public void run(){ try { e.exchange(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(InterruptedException success){ } catch(Exception e2){ threadFail("should throw IE"); } } }); try { t.start(); t.interrupt(); t.join(); } catch(InterruptedException ex){ unexpectedException(); } } /** * timeout during wait for timed exchange throws TOE */ public void testExchange_TimeOutException(){ final Exchanger e = new Exchanger(); Thread t = new Thread(new Runnable() { public void run(){ try { e.exchange(null, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(TimeoutException success){ } catch(InterruptedException e2){ threadFail("should throw TOE"); } } }); try { t.start(); t.join(); } catch(InterruptedException ex){ unexpectedException(); } } /** * If one exchanging thread is interrupted, another succeeds. */ public void testReplacementAfterExchange() { final Exchanger e = new Exchanger(); Thread t1 = new Thread(new Runnable(){ public void run(){ try { Object v = e.exchange(one); threadAssertEquals(v, two); Object w = e.exchange(v); threadShouldThrow(); } catch(InterruptedException success){ } } }); Thread t2 = new Thread(new Runnable(){ public void run(){ try { Object v = e.exchange(two); threadAssertEquals(v, one); Thread.sleep(SMALL_DELAY_MS); Object w = e.exchange(v); threadAssertEquals(w, three); } catch(InterruptedException e){ threadUnexpectedException(); } } }); Thread t3 = new Thread(new Runnable(){ public void run(){ try { Thread.sleep(SMALL_DELAY_MS); Object w = e.exchange(three); threadAssertEquals(w, one); } catch(InterruptedException e){ threadUnexpectedException(); } } }); try { t1.start(); t2.start(); t3.start(); Thread.sleep(SHORT_DELAY_MS); t1.interrupt(); t1.join(); t2.join(); t3.join(); } catch(InterruptedException ex) { unexpectedException(); } } } backport-util-concurrent-3.1-src/test/tck/src/AtomicStampedReferenceTest.java0000644001750700037720000001162110153210664026310 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; public class AtomicStampedReferenceTest extends JSR166TestCase{ public static void main (String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(AtomicStampedReferenceTest.class); } /** * constructor initializes to given reference and stamp */ public void testConstructor(){ AtomicStampedReference ai = new AtomicStampedReference(one, 0); assertEquals(one,ai.getReference()); assertEquals(0, ai.getStamp()); AtomicStampedReference a2 = new AtomicStampedReference(null, 1); assertNull(a2.getReference()); assertEquals(1, a2.getStamp()); } /** * get returns the last values of reference and stamp set */ public void testGetSet(){ int[] mark = new int[1]; AtomicStampedReference ai = new AtomicStampedReference(one, 0); assertEquals(one,ai.getReference()); assertEquals(0, ai.getStamp()); assertEquals(one, ai.get(mark)); assertEquals(0, mark[0]); ai.set(two, 0); assertEquals(two,ai.getReference()); assertEquals(0, ai.getStamp()); assertEquals(two, ai.get(mark)); assertEquals(0, mark[0]); ai.set(one, 1); assertEquals(one,ai.getReference()); assertEquals(1, ai.getStamp()); assertEquals(one, ai.get(mark)); assertEquals(1,mark[0]); } /** * attemptStamp succeeds in single thread */ public void testAttemptStamp(){ int[] mark = new int[1]; AtomicStampedReference ai = new AtomicStampedReference(one, 0); assertEquals(0, ai.getStamp()); assertTrue(ai.attemptStamp(one, 1)); assertEquals(1, ai.getStamp()); assertEquals(one, ai.get(mark)); assertEquals(1, mark[0]); } /** * compareAndSet succeeds in changing values if equal to expected reference * and stamp else fails */ public void testCompareAndSet(){ int[] mark = new int[1]; AtomicStampedReference ai = new AtomicStampedReference(one, 0); assertEquals(one, ai.get(mark)); assertEquals(0, ai.getStamp()); assertEquals(0, mark[0]); assertTrue(ai.compareAndSet(one, two, 0, 0)); assertEquals(two, ai.get(mark)); assertEquals(0, mark[0]); assertTrue(ai.compareAndSet(two, m3, 0, 1)); assertEquals(m3, ai.get(mark)); assertEquals(1, mark[0]); assertFalse(ai.compareAndSet(two, m3, 1, 1)); assertEquals(m3, ai.get(mark)); assertEquals(1, mark[0]); } /** * compareAndSet in one thread enables another waiting for reference value * to succeed */ public void testCompareAndSetInMultipleThreads() { final AtomicStampedReference ai = new AtomicStampedReference(one, 0); Thread t = new Thread(new Runnable() { public void run() { while(!ai.compareAndSet(two, three, 0, 0)) Thread.yield(); }}); try { t.start(); assertTrue(ai.compareAndSet(one, two, 0, 0)); t.join(LONG_DELAY_MS); assertFalse(t.isAlive()); assertEquals(ai.getReference(), three); assertEquals(ai.getStamp(), 0); } catch(Exception e) { unexpectedException(); } } /** * compareAndSet in one thread enables another waiting for stamp value * to succeed */ public void testCompareAndSetInMultipleThreads2() { final AtomicStampedReference ai = new AtomicStampedReference(one, 0); Thread t = new Thread(new Runnable() { public void run() { while(!ai.compareAndSet(one, one, 1, 2)) Thread.yield(); }}); try { t.start(); assertTrue(ai.compareAndSet(one, one, 0, 1)); t.join(LONG_DELAY_MS); assertFalse(t.isAlive()); assertEquals(ai.getReference(), one); assertEquals(ai.getStamp(), 2); } catch(Exception e) { unexpectedException(); } } /** * repeated weakCompareAndSet succeeds in changing values when equal * to expected */ public void testWeakCompareAndSet(){ int[] mark = new int[1]; AtomicStampedReference ai = new AtomicStampedReference(one, 0); assertEquals(one, ai.get(mark)); assertEquals(0, ai.getStamp ()); assertEquals(0, mark[0]); while(!ai.weakCompareAndSet(one, two, 0, 0)); assertEquals(two, ai.get(mark)); assertEquals(0, mark[0]); while(!ai.weakCompareAndSet(two, m3, 0, 1)); assertEquals(m3, ai.get(mark)); assertEquals(1, mark[0]); } } backport-util-concurrent-3.1-src/test/tck/src/CyclicBarrierTest.java0000644001750700037720000005127110253674160024467 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; public class CyclicBarrierTest extends JSR166TestCase{ public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(CyclicBarrierTest.class); } private volatile int countAction; private class MyAction implements Runnable { public void run() { ++countAction; } } /** * Creating with negative parties throws IAE */ public void testConstructor1() { try { new CyclicBarrier(-1, (Runnable)null); shouldThrow(); } catch(IllegalArgumentException e){} } /** * Creating with negative parties and no action throws IAE */ public void testConstructor2() { try { new CyclicBarrier(-1); shouldThrow(); } catch(IllegalArgumentException e){} } /** * getParties returns the number of parties given in constructor */ public void testGetParties() { CyclicBarrier b = new CyclicBarrier(2); assertEquals(2, b.getParties()); assertEquals(0, b.getNumberWaiting()); } /** * A 1-party barrier triggers after single await */ public void testSingleParty() { try { CyclicBarrier b = new CyclicBarrier(1); assertEquals(1, b.getParties()); assertEquals(0, b.getNumberWaiting()); b.await(); b.await(); assertEquals(0, b.getNumberWaiting()); } catch(Exception e) { unexpectedException(); } } /** * The supplied barrier action is run at barrier */ public void testBarrierAction() { try { countAction = 0; CyclicBarrier b = new CyclicBarrier(1, new MyAction()); assertEquals(1, b.getParties()); assertEquals(0, b.getNumberWaiting()); b.await(); b.await(); assertEquals(0, b.getNumberWaiting()); assertEquals(countAction, 2); } catch(Exception e) { unexpectedException(); } } /** * A 2-party/thread barrier triggers after both threads invoke await */ public void testTwoParties() { final CyclicBarrier b = new CyclicBarrier(2); Thread t = new Thread(new Runnable() { public void run() { try { b.await(); b.await(); b.await(); b.await(); } catch(Exception e){ threadUnexpectedException(); }}}); try { t.start(); b.await(); b.await(); b.await(); b.await(); t.join(); } catch(Exception e){ unexpectedException(); } } /** * An interruption in one party causes others waiting in await to * throw BrokenBarrierException */ public void testAwait1_Interrupted_BrokenBarrier() { final CyclicBarrier c = new CyclicBarrier(3); Thread t1 = new Thread(new Runnable() { public void run() { try { c.await(); threadShouldThrow(); } catch(InterruptedException success){} catch(Exception b){ threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable() { public void run() { try { c.await(); threadShouldThrow(); } catch(BrokenBarrierException success){ } catch(Exception i){ threadUnexpectedException(); } } }); try { t1.start(); t2.start(); Thread.sleep(SHORT_DELAY_MS); t1.interrupt(); t1.join(); t2.join(); } catch(InterruptedException e){ unexpectedException(); } } /** * An interruption in one party causes others waiting in timed await to * throw BrokenBarrierException */ public void testAwait2_Interrupted_BrokenBarrier() { final CyclicBarrier c = new CyclicBarrier(3); Thread t1 = new Thread(new Runnable() { public void run() { try { c.await(LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(InterruptedException success){ } catch(Exception b){ threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable() { public void run() { try { c.await(LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(BrokenBarrierException success){ } catch(Exception i){ threadUnexpectedException(); } } }); try { t1.start(); t2.start(); Thread.sleep(SHORT_DELAY_MS); t1.interrupt(); t1.join(); t2.join(); } catch(InterruptedException e){ unexpectedException(); } } /** * A timeout in timed await throws TimeoutException */ public void testAwait3_TimeOutException() { final CyclicBarrier c = new CyclicBarrier(2); Thread t = new Thread(new Runnable() { public void run() { try { c.await(SHORT_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(TimeoutException success){ } catch(Exception b){ threadUnexpectedException(); } } }); try { t.start(); t.join(); } catch(InterruptedException e){ unexpectedException(); } } /** * A timeout in one party causes others waiting in timed await to * throw BrokenBarrierException */ public void testAwait4_Timeout_BrokenBarrier() { final CyclicBarrier c = new CyclicBarrier(3); Thread t1 = new Thread(new Runnable() { public void run() { try { c.await(SHORT_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(TimeoutException success){ } catch(Exception b){ threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable() { public void run() { try { c.await(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(BrokenBarrierException success){ } catch(Exception i){ threadUnexpectedException(); } } }); try { t1.start(); t2.start(); t1.join(); t2.join(); } catch(InterruptedException e){ unexpectedException(); } } /** * A timeout in one party causes others waiting in await to * throw BrokenBarrierException */ public void testAwait5_Timeout_BrokenBarrier() { final CyclicBarrier c = new CyclicBarrier(3); Thread t1 = new Thread(new Runnable() { public void run() { try { c.await(SHORT_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(TimeoutException success){ } catch(Exception b){ threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable() { public void run() { try { c.await(); threadShouldThrow(); } catch(BrokenBarrierException success){ } catch(Exception i){ threadUnexpectedException(); } } }); try { t1.start(); t2.start(); t1.join(); t2.join(); } catch(InterruptedException e){ unexpectedException(); } } /** * A reset of an active barrier causes waiting threads to throw * BrokenBarrierException */ public void testReset_BrokenBarrier() { final CyclicBarrier c = new CyclicBarrier(3); Thread t1 = new Thread(new Runnable() { public void run() { try { c.await(); threadShouldThrow(); } catch(BrokenBarrierException success){} catch(Exception b){ threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable() { public void run() { try { c.await(); threadShouldThrow(); } catch(BrokenBarrierException success){ } catch(Exception i){ threadUnexpectedException(); } } }); try { t1.start(); t2.start(); Thread.sleep(SHORT_DELAY_MS); c.reset(); t1.join(); t2.join(); } catch(InterruptedException e){ unexpectedException(); } } /** * A reset before threads enter barrier does not throw * BrokenBarrierException */ public void testReset_NoBrokenBarrier() { final CyclicBarrier c = new CyclicBarrier(3); Thread t1 = new Thread(new Runnable() { public void run() { try { c.await(); } catch(Exception b){ threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable() { public void run() { try { c.await(); } catch(Exception i){ threadUnexpectedException(); } } }); try { c.reset(); t1.start(); t2.start(); c.await(); t1.join(); t2.join(); } catch(Exception e){ unexpectedException(); } } /** * All threads block while a barrier is broken. */ public void testReset_Leakage() { try { final CyclicBarrier c = new CyclicBarrier(2); final AtomicBoolean done = new AtomicBoolean(); Thread t = new Thread() { public void run() { while (!done.get()) { try { while (c.isBroken()) c.reset(); c.await(); threadFail("await should not return"); } catch (BrokenBarrierException e) { } catch (InterruptedException ie) { } } } }; t.start(); for( int i = 0; i < 4; i++) { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); } done.set(true); t.interrupt(); } catch (Exception ex) { unexpectedException(); } } /** * Reset of a non-broken barrier does not break barrier */ public void testResetWithoutBreakage() { try { final CyclicBarrier start = new CyclicBarrier(3); final CyclicBarrier barrier = new CyclicBarrier(3); for (int i = 0; i < 3; i++) { Thread t1 = new Thread(new Runnable() { public void run() { try { start.await(); } catch (Exception ie) { threadFail("start barrier"); } try { barrier.await(); } catch (Throwable thrown) { unexpectedException(); }}}); Thread t2 = new Thread(new Runnable() { public void run() { try { start.await(); } catch (Exception ie) { threadFail("start barrier"); } try { barrier.await(); } catch (Throwable thrown) { unexpectedException(); }}}); t1.start(); t2.start(); try { start.await(); } catch (Exception ie) { threadFail("start barrier"); } barrier.await(); t1.join(); t2.join(); assertFalse(barrier.isBroken()); assertEquals(0, barrier.getNumberWaiting()); if (i == 1) barrier.reset(); assertFalse(barrier.isBroken()); assertEquals(0, barrier.getNumberWaiting()); } } catch (Exception ex) { unexpectedException(); } } /** * Reset of a barrier after interruption reinitializes it. */ public void testResetAfterInterrupt() { try { final CyclicBarrier start = new CyclicBarrier(3); final CyclicBarrier barrier = new CyclicBarrier(3); for (int i = 0; i < 2; i++) { Thread t1 = new Thread(new Runnable() { public void run() { try { start.await(); } catch (Exception ie) { threadFail("start barrier"); } try { barrier.await(); } catch(InterruptedException ok) {} catch (Throwable thrown) { unexpectedException(); }}}); Thread t2 = new Thread(new Runnable() { public void run() { try { start.await(); } catch (Exception ie) { threadFail("start barrier"); } try { barrier.await(); } catch(BrokenBarrierException ok) {} catch (Throwable thrown) { unexpectedException(); }}}); t1.start(); t2.start(); try { start.await(); } catch (Exception ie) { threadFail("start barrier"); } t1.interrupt(); t1.join(); t2.join(); assertTrue(barrier.isBroken()); assertEquals(0, barrier.getNumberWaiting()); barrier.reset(); assertFalse(barrier.isBroken()); assertEquals(0, barrier.getNumberWaiting()); } } catch (Exception ex) { unexpectedException(); } } /** * Reset of a barrier after timeout reinitializes it. */ public void testResetAfterTimeout() { try { final CyclicBarrier start = new CyclicBarrier(3); final CyclicBarrier barrier = new CyclicBarrier(3); for (int i = 0; i < 2; i++) { Thread t1 = new Thread(new Runnable() { public void run() { try { start.await(); } catch (Exception ie) { threadFail("start barrier"); } try { barrier.await(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch(TimeoutException ok) {} catch (Throwable thrown) { unexpectedException(); }}}); Thread t2 = new Thread(new Runnable() { public void run() { try { start.await(); } catch (Exception ie) { threadFail("start barrier"); } try { barrier.await(); } catch(BrokenBarrierException ok) {} catch (Throwable thrown) { unexpectedException(); }}}); t1.start(); t2.start(); try { start.await(); } catch (Exception ie) { threadFail("start barrier"); } t1.join(); t2.join(); assertTrue(barrier.isBroken()); assertEquals(0, barrier.getNumberWaiting()); barrier.reset(); assertFalse(barrier.isBroken()); assertEquals(0, barrier.getNumberWaiting()); } } catch (Exception ex) { unexpectedException(); } } /** * Reset of a barrier after a failed command reinitializes it. */ public void testResetAfterCommandException() { try { final CyclicBarrier start = new CyclicBarrier(3); final CyclicBarrier barrier = new CyclicBarrier(3, new Runnable() { public void run() { throw new NullPointerException(); }}); for (int i = 0; i < 2; i++) { Thread t1 = new Thread(new Runnable() { public void run() { try { start.await(); } catch (Exception ie) { threadFail("start barrier"); } try { barrier.await(); } catch(BrokenBarrierException ok) {} catch (Throwable thrown) { unexpectedException(); }}}); Thread t2 = new Thread(new Runnable() { public void run() { try { start.await(); } catch (Exception ie) { threadFail("start barrier"); } try { barrier.await(); } catch(BrokenBarrierException ok) {} catch (Throwable thrown) { unexpectedException(); }}}); t1.start(); t2.start(); try { start.await(); } catch (Exception ie) { threadFail("start barrier"); } while (barrier.getNumberWaiting() < 2) { Thread.yield(); } try { barrier.await(); } catch (Exception ok) { } t1.join(); t2.join(); assertTrue(barrier.isBroken()); assertEquals(0, barrier.getNumberWaiting()); barrier.reset(); assertFalse(barrier.isBroken()); assertEquals(0, barrier.getNumberWaiting()); } } catch (Exception ex) { unexpectedException(); } } } backport-util-concurrent-3.1-src/test/tck/src/CopyOnWriteArrayListTest.java0000644001750700037720000004405010256105160026014 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import java.util.Arrays; import java.util.Vector; import java.util.Iterator; import java.util.ListIterator; import java.util.List; public class CopyOnWriteArrayListTest extends JSR166TestCase{ public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(CopyOnWriteArrayListTest.class); } static CopyOnWriteArrayList populatedArray(int n){ CopyOnWriteArrayList a = new CopyOnWriteArrayList(); assertTrue(a.isEmpty()); for (int i = 0; i < n; ++i) a.add(new Integer(i)); assertFalse(a.isEmpty()); assertEquals(n, a.size()); return a; } /** * a new list is empty */ public void testConstructor() { CopyOnWriteArrayList a = new CopyOnWriteArrayList(); assertTrue(a.isEmpty()); } /** * new list contains all elements of initializing array */ public void testConstructor2() { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); CopyOnWriteArrayList a = new CopyOnWriteArrayList(ints); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], a.get(i)); } /** * new list contains all elements of initializing collection */ public void testConstructor3() { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); CopyOnWriteArrayList a = new CopyOnWriteArrayList(Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], a.get(i)); } /** * addAll adds each element from the given collection */ public void testAddAll() { CopyOnWriteArrayList full = populatedArray(3); Vector v = new Vector(); v.add(three); v.add(four); v.add(five); full.addAll(v); assertEquals(6, full.size()); } /** * addAllAbsent adds each element from the given collection that did not * already exist in the List */ public void testAddAllAbsent() { CopyOnWriteArrayList full = populatedArray(3); Vector v = new Vector(); v.add(three); v.add(four); v.add(one); // will not add this element full.addAllAbsent(v); assertEquals(5, full.size()); } /** * addIfAbsent will not add the element if it already exists in the list */ public void testAddIfAbsent() { CopyOnWriteArrayList full = populatedArray(SIZE); full.addIfAbsent(one); assertEquals(SIZE, full.size()); } /** * addIfAbsent adds the element when it does not exist in the list */ public void testAddIfAbsent2() { CopyOnWriteArrayList full = populatedArray(SIZE); full.addIfAbsent(three); assertTrue(full.contains(three)); } /** * clear removes all elements from the list */ public void testClear() { CopyOnWriteArrayList full = populatedArray(SIZE); full.clear(); assertEquals(0, full.size()); } /** * Cloned list is equal */ public void testClone() { CopyOnWriteArrayList l1 = populatedArray(SIZE); CopyOnWriteArrayList l2 = (CopyOnWriteArrayList)(l1.clone()); assertEquals(l1, l2); l1.clear(); assertFalse(l1.equals(l2)); } /** * contains is true for added elements */ public void testContains() { CopyOnWriteArrayList full = populatedArray(3); assertTrue(full.contains(one)); assertFalse(full.contains(five)); } /** * adding at an index places it in the indicated index */ public void testAddIndex() { CopyOnWriteArrayList full = populatedArray(3); full.add(0, m1); assertEquals(4, full.size()); assertEquals(m1, full.get(0)); assertEquals(zero, full.get(1)); full.add(2, m2); assertEquals(5, full.size()); assertEquals(m2, full.get(2)); assertEquals(two, full.get(4)); } /** * lists with same elements are equal and have same hashCode */ public void testEquals() { CopyOnWriteArrayList a = populatedArray(3); CopyOnWriteArrayList b = populatedArray(3); assertTrue(a.equals(b)); assertTrue(b.equals(a)); assertEquals(a.hashCode(), b.hashCode()); a.add(m1); assertFalse(a.equals(b)); assertFalse(b.equals(a)); b.add(m1); assertTrue(a.equals(b)); assertTrue(b.equals(a)); assertEquals(a.hashCode(), b.hashCode()); } /** * containsAll returns true for collection with subset of elements */ public void testContainsAll() { CopyOnWriteArrayList full = populatedArray(3); Vector v = new Vector(); v.add(one); v.add(two); assertTrue(full.containsAll(v)); v.add(six); assertFalse(full.containsAll(v)); } /** * get returns the value at the given index */ public void testGet() { CopyOnWriteArrayList full = populatedArray(3); assertEquals(0, ((Integer)full.get(0)).intValue()); } /** * indexOf gives the index for the given object */ public void testIndexOf() { CopyOnWriteArrayList full = populatedArray(3); assertEquals(1, full.indexOf(one)); assertEquals(-1, full.indexOf("puppies")); } /** * indexOf gives the index based on the given index * at which to start searching */ public void testIndexOf2() { CopyOnWriteArrayList full = populatedArray(3); assertEquals(1, full.indexOf(one, 0)); assertEquals(-1, full.indexOf(one, 2)); } /** * isEmpty returns true when empty, else false */ public void testIsEmpty() { CopyOnWriteArrayList empty = new CopyOnWriteArrayList(); CopyOnWriteArrayList full = populatedArray(SIZE); assertTrue(empty.isEmpty()); assertFalse(full.isEmpty()); } /** * iterator() returns an iterator containing the elements of the list */ public void testIterator() { CopyOnWriteArrayList full = populatedArray(SIZE); Iterator i = full.iterator(); int j; for(j = 0; i.hasNext(); j++) assertEquals(j, ((Integer)i.next()).intValue()); assertEquals(SIZE, j); } /** * iterator.remove throws UnsupportedOperationException */ public void testIteratorRemove () { CopyOnWriteArrayList full = populatedArray(SIZE); Iterator it = full.iterator(); it.next(); try { it.remove(); shouldThrow(); } catch (UnsupportedOperationException success) {} } /** * toString contains toString of elements */ public void testToString() { CopyOnWriteArrayList full = populatedArray(3); String s = full.toString(); for (int i = 0; i < 3; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * lastIndexOf returns the index for the given object */ public void testLastIndexOf1() { CopyOnWriteArrayList full = populatedArray(3); full.add(one); full.add(three); assertEquals(3, full.lastIndexOf(one)); assertEquals(-1, full.lastIndexOf(six)); } /** * lastIndexOf returns the index from the given starting point */ public void testlastIndexOf2() { CopyOnWriteArrayList full = populatedArray(3); full.add(one); full.add(three); assertEquals(3, full.lastIndexOf(one, 4)); assertEquals(-1, full.lastIndexOf(three, 3)); } /** * listIterator traverses all elements */ public void testListIterator1() { CopyOnWriteArrayList full = populatedArray(SIZE); ListIterator i = full.listIterator(); int j; for(j = 0; i.hasNext(); j++) assertEquals(j, ((Integer)i.next()).intValue()); assertEquals(SIZE, j); } /** * listIterator only returns those elements after the given index */ public void testListIterator2() { CopyOnWriteArrayList full = populatedArray(3); ListIterator i = full.listIterator(1); int j; for(j = 0; i.hasNext(); j++) assertEquals(j+1, ((Integer)i.next()).intValue()); assertEquals(2, j); } /** * remove removes and returns the object at the given index */ public void testRemove() { CopyOnWriteArrayList full = populatedArray(3); assertEquals(two, full.remove(2)); assertEquals(2, full.size()); } /** * removeAll removes all elements from the given collection */ public void testRemoveAll() { CopyOnWriteArrayList full = populatedArray(3); Vector v = new Vector(); v.add(one); v.add(two); full.removeAll(v); assertEquals(1, full.size()); } /** * set changes the element at the given index */ public void testSet() { CopyOnWriteArrayList full = populatedArray(3); assertEquals(two, full.set(2, four)); assertEquals(4, ((Integer)full.get(2)).intValue()); } /** * size returns the number of elements */ public void testSize() { CopyOnWriteArrayList empty = new CopyOnWriteArrayList(); CopyOnWriteArrayList full = populatedArray(SIZE); assertEquals(SIZE, full.size()); assertEquals(0, empty.size()); } /** * toArray returns an Object array containing all elements from the list */ public void testToArray() { CopyOnWriteArrayList full = populatedArray(3); Object[] o = full.toArray(); assertEquals(3, o.length); assertEquals(0, ((Integer)o[0]).intValue()); assertEquals(1, ((Integer)o[1]).intValue()); assertEquals(2, ((Integer)o[2]).intValue()); } /** * toArray returns an Integer array containing all elements from * the list */ public void testToArray2() { CopyOnWriteArrayList full = populatedArray(3); Integer[] i = new Integer[3]; i = (Integer[])full.toArray(i); assertEquals(3, i.length); assertEquals(0, i[0].intValue()); assertEquals(1, i[1].intValue()); assertEquals(2, i[2].intValue()); } /** * sublists contains elements at indexes offset from their base */ public void testSubList() { CopyOnWriteArrayList a = populatedArray(10); assertTrue(a.subList(1,1).isEmpty()); for(int j = 0; j < 9; ++j) { for(int i = j ; i < 10; ++i) { List b = a.subList(j,i); for(int k = j; k < i; ++k) { assertEquals(new Integer(k), b.get(k-j)); } } } List s = a.subList(2, 5); assertEquals(s.size(), 3); s.set(2, m1); assertEquals(a.get(4), m1); s.clear(); assertEquals(a.size(), 7); } // Exception tests /** * toArray throws an ArrayStoreException when the given array * can not store the objects inside the list */ public void testToArray_ArrayStoreException() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.add("zfasdfsdf"); c.add("asdadasd"); c.toArray(new Long[5]); shouldThrow(); } catch(ArrayStoreException e){} } /** * get throws an IndexOutOfBoundsException on a negative index */ public void testGet1_IndexOutOfBoundsException() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.get(-1); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * get throws an IndexOutOfBoundsException on a too high index */ public void testGet2_IndexOutOfBoundsException() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.add("asdasd"); c.add("asdad"); c.get(100); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * set throws an IndexOutOfBoundsException on a negative index */ public void testSet1_IndexOutOfBoundsException() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.set(-1,"qwerty"); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * set throws an IndexOutOfBoundsException on a too high index */ public void testSet2() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.add("asdasd"); c.add("asdad"); c.set(100, "qwerty"); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * add throws an IndexOutOfBoundsException on a negative index */ public void testAdd1_IndexOutOfBoundsException() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.add(-1,"qwerty"); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * add throws an IndexOutOfBoundsException on a too high index */ public void testAdd2_IndexOutOfBoundsException() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.add("asdasd"); c.add("asdasdasd"); c.add(100, "qwerty"); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * remove throws an IndexOutOfBoundsException on a negative index */ public void testRemove1_IndexOutOfBounds() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.remove(-1); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * remove throws an IndexOutOfBoundsException on a too high index */ public void testRemove2_IndexOutOfBounds() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.add("asdasd"); c.add("adasdasd"); c.remove(100); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * addAll throws an IndexOutOfBoundsException on a negative index */ public void testAddAll1_IndexOutOfBoundsException() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.addAll(-1,new LinkedList()); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * addAll throws an IndexOutOfBoundsException on a too high index */ public void testAddAll2_IndexOutOfBoundsException() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.add("asdasd"); c.add("asdasdasd"); c.addAll(100, new LinkedList()); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * listIterator throws an IndexOutOfBoundsException on a negative index */ public void testListIterator1_IndexOutOfBoundsException() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.listIterator(-1); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * listIterator throws an IndexOutOfBoundsException on a too high index */ public void testListIterator2_IndexOutOfBoundsException() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.add("adasd"); c.add("asdasdas"); c.listIterator(100); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * subList throws an IndexOutOfBoundsException on a negative index */ public void testSubList1_IndexOutOfBoundsException() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.subList(-1,100); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * subList throws an IndexOutOfBoundsException on a too high index */ public void testSubList2_IndexOutOfBoundsException() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.add("asdasd"); c.subList(1,100); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * subList throws IndexOutOfBoundsException when the second index * is lower then the first */ public void testSubList3_IndexOutOfBoundsException() { try { CopyOnWriteArrayList c = new CopyOnWriteArrayList(); c.subList(3,1); shouldThrow(); } catch(IndexOutOfBoundsException e){} } /** * a deserialized serialiszed list is equal */ public void testSerialization() { CopyOnWriteArrayList q = populatedArray(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); CopyOnWriteArrayList r = (CopyOnWriteArrayList)in.readObject(); assertEquals(q.size(), r.size()); assertTrue(q.equals(r)); assertTrue(r.equals(q)); } catch(Exception e){ unexpectedException(); } } } backport-util-concurrent-3.1-src/test/tck/src/ScheduledExecutorSubclassTest.java0000755001750700037720000011162010431260156027061 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import junit.framework.*; import java.util.List; import java.util.ArrayList; import java.util.Iterator; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; public class ScheduledExecutorSubclassTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ScheduledExecutorTest.class); } static class CustomTask implements RunnableScheduledFuture { RunnableScheduledFuture task; volatile boolean ran; CustomTask(RunnableScheduledFuture t) { task = t; } public boolean isPeriodic() { return task.isPeriodic(); } public void run() { ran = true; task.run(); } public long getDelay(TimeUnit unit) { return task.getDelay(unit); } public int compareTo(Object o) { return compareTo((Delayed)o); } public int compareTo(Delayed t) { return task.compareTo(((CustomTask)t).task); } public boolean cancel(boolean mayInterruptIfRunning) { return task.cancel(mayInterruptIfRunning); } public boolean isCancelled() { return task.isCancelled(); } public boolean isDone() { return task.isDone(); } public Object get() throws InterruptedException, ExecutionException { Object v = task.get(); assertTrue(ran); return v; } public Object get(long time, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { Object v = task.get(time, unit); assertTrue(ran); return v; } } public class CustomExecutor extends ScheduledThreadPoolExecutor { protected RunnableScheduledFuture decorateTask(Runnable r, RunnableScheduledFuture task) { return new CustomTask(task); } protected RunnableScheduledFuture decorateTask(Callable c, RunnableScheduledFuture task) { return new CustomTask(task); } CustomExecutor(int corePoolSize) { super(corePoolSize);} CustomExecutor(int corePoolSize, RejectedExecutionHandler handler) { super(corePoolSize, handler); } CustomExecutor(int corePoolSize, ThreadFactory threadFactory) { super(corePoolSize, threadFactory); } CustomExecutor(int corePoolSize, ThreadFactory threadFactory, RejectedExecutionHandler handler) { super(corePoolSize, threadFactory, handler); } } /** * execute successfully executes a runnable */ public void testExecute() { try { TrackedShortRunnable runnable =new TrackedShortRunnable(); CustomExecutor p1 = new CustomExecutor(1); p1.execute(runnable); assertFalse(runnable.done); Thread.sleep(SHORT_DELAY_MS); try { p1.shutdown(); } catch(SecurityException ok) { return; } try { Thread.sleep(MEDIUM_DELAY_MS); } catch(InterruptedException e){ unexpectedException(); } assertTrue(runnable.done); try { p1.shutdown(); } catch(SecurityException ok) { return; } joinPool(p1); } catch(Exception e){ unexpectedException(); } } /** * delayed schedule of callable successfully executes after delay */ public void testSchedule1() { try { TrackedCallable callable = new TrackedCallable(); CustomExecutor p1 = new CustomExecutor(1); Future f = p1.schedule(callable, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); assertFalse(callable.done); Thread.sleep(MEDIUM_DELAY_MS); assertTrue(callable.done); assertEquals(Boolean.TRUE, f.get()); try { p1.shutdown(); } catch(SecurityException ok) { return; } joinPool(p1); } catch(RejectedExecutionException e){} catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * delayed schedule of runnable successfully executes after delay */ public void testSchedule3() { try { TrackedShortRunnable runnable = new TrackedShortRunnable(); CustomExecutor p1 = new CustomExecutor(1); p1.schedule(runnable, SMALL_DELAY_MS, TimeUnit.MILLISECONDS); Thread.sleep(SHORT_DELAY_MS); assertFalse(runnable.done); Thread.sleep(MEDIUM_DELAY_MS); assertTrue(runnable.done); try { p1.shutdown(); } catch(SecurityException ok) { return; } joinPool(p1); } catch(Exception e){ unexpectedException(); } } /** * scheduleAtFixedRate executes runnable after given initial delay */ public void testSchedule4() { try { TrackedShortRunnable runnable = new TrackedShortRunnable(); CustomExecutor p1 = new CustomExecutor(1); ScheduledFuture h = p1.scheduleAtFixedRate(runnable, SHORT_DELAY_MS, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); assertFalse(runnable.done); Thread.sleep(MEDIUM_DELAY_MS); assertTrue(runnable.done); h.cancel(true); joinPool(p1); } catch(Exception e){ unexpectedException(); } } static class RunnableCounter implements Runnable { AtomicInteger count = new AtomicInteger(0); public void run() { count.getAndIncrement(); } } /** * scheduleWithFixedDelay executes runnable after given initial delay */ public void testSchedule5() { try { TrackedShortRunnable runnable = new TrackedShortRunnable(); CustomExecutor p1 = new CustomExecutor(1); ScheduledFuture h = p1.scheduleWithFixedDelay(runnable, SHORT_DELAY_MS, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); assertFalse(runnable.done); Thread.sleep(MEDIUM_DELAY_MS); assertTrue(runnable.done); h.cancel(true); joinPool(p1); } catch(Exception e){ unexpectedException(); } } /** * scheduleAtFixedRate executes series of tasks at given rate */ public void testFixedRateSequence() { try { CustomExecutor p1 = new CustomExecutor(1); RunnableCounter counter = new RunnableCounter(); ScheduledFuture h = p1.scheduleAtFixedRate(counter, 0, 1, TimeUnit.MILLISECONDS); Thread.sleep(SMALL_DELAY_MS); h.cancel(true); int c = counter.count.get(); // By time scaling conventions, we must have at least // an execution per SHORT delay, but no more than one SHORT more assertTrue(c >= SMALL_DELAY_MS / SHORT_DELAY_MS); assertTrue(c <= SMALL_DELAY_MS + SHORT_DELAY_MS); joinPool(p1); } catch(Exception e){ unexpectedException(); } } /** * scheduleWithFixedDelay executes series of tasks with given period */ public void testFixedDelaySequence() { try { CustomExecutor p1 = new CustomExecutor(1); RunnableCounter counter = new RunnableCounter(); ScheduledFuture h = p1.scheduleWithFixedDelay(counter, 0, 1, TimeUnit.MILLISECONDS); Thread.sleep(SMALL_DELAY_MS); h.cancel(true); int c = counter.count.get(); assertTrue(c >= SMALL_DELAY_MS / SHORT_DELAY_MS); assertTrue(c <= SMALL_DELAY_MS + SHORT_DELAY_MS); joinPool(p1); } catch(Exception e){ unexpectedException(); } } /** * execute (null) throws NPE */ public void testExecuteNull() { CustomExecutor se = null; try { se = new CustomExecutor(1); se.execute(null); shouldThrow(); } catch(NullPointerException success){} catch(Exception e){ unexpectedException(); } joinPool(se); } /** * schedule (null) throws NPE */ public void testScheduleNull() { CustomExecutor se = new CustomExecutor(1); try { TrackedCallable callable = null; Future f = se.schedule(callable, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); shouldThrow(); } catch(NullPointerException success){} catch(Exception e){ unexpectedException(); } joinPool(se); } /** * execute throws RejectedExecutionException if shutdown */ public void testSchedule1_RejectedExecutionException() { CustomExecutor se = new CustomExecutor(1); try { se.shutdown(); se.schedule(new NoOpRunnable(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); shouldThrow(); } catch(RejectedExecutionException success){ } catch (SecurityException ok) { } joinPool(se); } /** * schedule throws RejectedExecutionException if shutdown */ public void testSchedule2_RejectedExecutionException() { CustomExecutor se = new CustomExecutor(1); try { se.shutdown(); se.schedule(new NoOpCallable(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); shouldThrow(); } catch(RejectedExecutionException success){ } catch (SecurityException ok) { } joinPool(se); } /** * schedule callable throws RejectedExecutionException if shutdown */ public void testSchedule3_RejectedExecutionException() { CustomExecutor se = new CustomExecutor(1); try { se.shutdown(); se.schedule(new NoOpCallable(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); shouldThrow(); } catch(RejectedExecutionException success){ } catch (SecurityException ok) { } joinPool(se); } /** * scheduleAtFixedRate throws RejectedExecutionException if shutdown */ public void testScheduleAtFixedRate1_RejectedExecutionException() { CustomExecutor se = new CustomExecutor(1); try { se.shutdown(); se.scheduleAtFixedRate(new NoOpRunnable(), MEDIUM_DELAY_MS, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); shouldThrow(); } catch(RejectedExecutionException success){ } catch (SecurityException ok) { } joinPool(se); } /** * scheduleWithFixedDelay throws RejectedExecutionException if shutdown */ public void testScheduleWithFixedDelay1_RejectedExecutionException() { CustomExecutor se = new CustomExecutor(1); try { se.shutdown(); se.scheduleWithFixedDelay(new NoOpRunnable(), MEDIUM_DELAY_MS, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); shouldThrow(); } catch(RejectedExecutionException success){ } catch (SecurityException ok) { } joinPool(se); } /** * getActiveCount increases but doesn't overestimate, when a * thread becomes active */ public void testGetActiveCount() { CustomExecutor p2 = new CustomExecutor(2); assertEquals(0, p2.getActiveCount()); p2.execute(new SmallRunnable()); try { Thread.sleep(SHORT_DELAY_MS); } catch(Exception e){ unexpectedException(); } assertEquals(1, p2.getActiveCount()); joinPool(p2); } /** * getCompletedTaskCount increases, but doesn't overestimate, * when tasks complete */ public void testGetCompletedTaskCount() { CustomExecutor p2 = new CustomExecutor(2); assertEquals(0, p2.getCompletedTaskCount()); p2.execute(new SmallRunnable()); try { Thread.sleep(MEDIUM_DELAY_MS); } catch(Exception e){ unexpectedException(); } assertEquals(1, p2.getCompletedTaskCount()); joinPool(p2); } /** * getCorePoolSize returns size given in constructor if not otherwise set */ public void testGetCorePoolSize() { CustomExecutor p1 = new CustomExecutor(1); assertEquals(1, p1.getCorePoolSize()); joinPool(p1); } /** * getLargestPoolSize increases, but doesn't overestimate, when * multiple threads active */ public void testGetLargestPoolSize() { CustomExecutor p2 = new CustomExecutor(2); assertEquals(0, p2.getLargestPoolSize()); p2.execute(new SmallRunnable()); p2.execute(new SmallRunnable()); try { Thread.sleep(SHORT_DELAY_MS); } catch(Exception e){ unexpectedException(); } assertEquals(2, p2.getLargestPoolSize()); joinPool(p2); } /** * getPoolSize increases, but doesn't overestimate, when threads * become active */ public void testGetPoolSize() { CustomExecutor p1 = new CustomExecutor(1); assertEquals(0, p1.getPoolSize()); p1.execute(new SmallRunnable()); assertEquals(1, p1.getPoolSize()); joinPool(p1); } /** * getTaskCount increases, but doesn't overestimate, when tasks * submitted */ public void testGetTaskCount() { CustomExecutor p1 = new CustomExecutor(1); assertEquals(0, p1.getTaskCount()); for(int i = 0; i < 5; i++) p1.execute(new SmallRunnable()); try { Thread.sleep(SHORT_DELAY_MS); } catch(Exception e){ unexpectedException(); } assertEquals(5, p1.getTaskCount()); joinPool(p1); } /** * getThreadFactory returns factory in constructor if not set */ public void testGetThreadFactory() { ThreadFactory tf = new SimpleThreadFactory(); CustomExecutor p = new CustomExecutor(1, tf); assertSame(tf, p.getThreadFactory()); joinPool(p); } /** * setThreadFactory sets the thread factory returned by getThreadFactory */ public void testSetThreadFactory() { ThreadFactory tf = new SimpleThreadFactory(); CustomExecutor p = new CustomExecutor(1); p.setThreadFactory(tf); assertSame(tf, p.getThreadFactory()); joinPool(p); } /** * setThreadFactory(null) throws NPE */ public void testSetThreadFactoryNull() { CustomExecutor p = new CustomExecutor(1); try { p.setThreadFactory(null); shouldThrow(); } catch (NullPointerException success) { } finally { joinPool(p); } } /** * is isShutDown is false before shutdown, true after */ public void testIsShutdown() { CustomExecutor p1 = new CustomExecutor(1); try { assertFalse(p1.isShutdown()); } finally { try { p1.shutdown(); } catch(SecurityException ok) { return; } } assertTrue(p1.isShutdown()); } /** * isTerminated is false before termination, true after */ public void testIsTerminated() { CustomExecutor p1 = new CustomExecutor(1); try { p1.execute(new SmallRunnable()); } finally { try { p1.shutdown(); } catch(SecurityException ok) { return; } } try { assertTrue(p1.awaitTermination(LONG_DELAY_MS, TimeUnit.MILLISECONDS)); assertTrue(p1.isTerminated()); } catch(Exception e){ unexpectedException(); } } /** * isTerminating is not true when running or when terminated */ public void testIsTerminating() { CustomExecutor p1 = new CustomExecutor(1); assertFalse(p1.isTerminating()); try { p1.execute(new SmallRunnable()); assertFalse(p1.isTerminating()); } finally { try { p1.shutdown(); } catch(SecurityException ok) { return; } } try { assertTrue(p1.awaitTermination(LONG_DELAY_MS, TimeUnit.MILLISECONDS)); assertTrue(p1.isTerminated()); assertFalse(p1.isTerminating()); } catch(Exception e){ unexpectedException(); } } /** * getQueue returns the work queue, which contains queued tasks */ public void testGetQueue() { CustomExecutor p1 = new CustomExecutor(1); ScheduledFuture[] tasks = new ScheduledFuture[5]; for(int i = 0; i < 5; i++){ tasks[i] = p1.schedule(new SmallPossiblyInterruptedRunnable(), 1, TimeUnit.MILLISECONDS); } try { Thread.sleep(SHORT_DELAY_MS); BlockingQueue q = p1.getQueue(); assertTrue(q.contains(tasks[4])); assertFalse(q.contains(tasks[0])); } catch(Exception e) { unexpectedException(); } finally { joinPool(p1); } } /** * remove(task) removes queued task, and fails to remove active task */ public void testRemove() { CustomExecutor p1 = new CustomExecutor(1); ScheduledFuture[] tasks = new ScheduledFuture[5]; for(int i = 0; i < 5; i++){ tasks[i] = p1.schedule(new SmallPossiblyInterruptedRunnable(), 1, TimeUnit.MILLISECONDS); } try { Thread.sleep(SHORT_DELAY_MS); BlockingQueue q = p1.getQueue(); assertFalse(p1.remove((Runnable)tasks[0])); assertTrue(q.contains((Runnable)tasks[4])); assertTrue(q.contains((Runnable)tasks[3])); assertTrue(p1.remove((Runnable)tasks[4])); assertFalse(p1.remove((Runnable)tasks[4])); assertFalse(q.contains((Runnable)tasks[4])); assertTrue(q.contains((Runnable)tasks[3])); assertTrue(p1.remove((Runnable)tasks[3])); assertFalse(q.contains((Runnable)tasks[3])); } catch(Exception e) { unexpectedException(); } finally { joinPool(p1); } } /** * purge removes cancelled tasks from the queue */ public void testPurge() { CustomExecutor p1 = new CustomExecutor(1); ScheduledFuture[] tasks = new ScheduledFuture[5]; for(int i = 0; i < 5; i++){ tasks[i] = p1.schedule(new SmallPossiblyInterruptedRunnable(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS); } try { int max = 5; if (tasks[4].cancel(true)) --max; if (tasks[3].cancel(true)) --max; // There must eventually be an interference-free point at // which purge will not fail. (At worst, when queue is empty.) int k; for (k = 0; k < SMALL_DELAY_MS; ++k) { p1.purge(); long count = p1.getTaskCount(); if (count >= 0 && count <= max) break; Thread.sleep(1); } assertTrue(k < SMALL_DELAY_MS); } catch(Exception e) { unexpectedException(); } finally { joinPool(p1); } } /** * shutDownNow returns a list containing tasks that were not run */ public void testShutDownNow() { CustomExecutor p1 = new CustomExecutor(1); for(int i = 0; i < 5; i++) p1.schedule(new SmallPossiblyInterruptedRunnable(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS); List l; try { l = p1.shutdownNow(); } catch (SecurityException ok) { return; } assertTrue(p1.isShutdown()); assertTrue(l.size() > 0 && l.size() <= 5); joinPool(p1); } /** * In default setting, shutdown cancels periodic but not delayed * tasks at shutdown */ public void testShutDown1() { try { CustomExecutor p1 = new CustomExecutor(1); assertTrue(p1.getExecuteExistingDelayedTasksAfterShutdownPolicy()); assertFalse(p1.getContinueExistingPeriodicTasksAfterShutdownPolicy()); ScheduledFuture[] tasks = new ScheduledFuture[5]; for(int i = 0; i < 5; i++) tasks[i] = p1.schedule(new NoOpRunnable(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS); try { p1.shutdown(); } catch(SecurityException ok) { return; } BlockingQueue q = p1.getQueue(); for (Iterator it = q.iterator(); it.hasNext();) { ScheduledFuture t = (ScheduledFuture)it.next(); assertFalse(t.isCancelled()); } assertTrue(p1.isShutdown()); Thread.sleep(SMALL_DELAY_MS); for (int i = 0; i < 5; ++i) { assertTrue(tasks[i].isDone()); assertFalse(tasks[i].isCancelled()); } } catch(Exception ex) { unexpectedException(); } } /** * If setExecuteExistingDelayedTasksAfterShutdownPolicy is false, * delayed tasks are cancelled at shutdown */ public void testShutDown2() { try { CustomExecutor p1 = new CustomExecutor(1); p1.setExecuteExistingDelayedTasksAfterShutdownPolicy(false); ScheduledFuture[] tasks = new ScheduledFuture[5]; for(int i = 0; i < 5; i++) tasks[i] = p1.schedule(new NoOpRunnable(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS); try { p1.shutdown(); } catch(SecurityException ok) { return; } assertTrue(p1.isShutdown()); BlockingQueue q = p1.getQueue(); assertTrue(q.isEmpty()); Thread.sleep(SMALL_DELAY_MS); assertTrue(p1.isTerminated()); } catch(Exception ex) { unexpectedException(); } } /** * If setContinueExistingPeriodicTasksAfterShutdownPolicy is set false, * periodic tasks are not cancelled at shutdown */ public void testShutDown3() { try { CustomExecutor p1 = new CustomExecutor(1); p1.setContinueExistingPeriodicTasksAfterShutdownPolicy(false); ScheduledFuture task = p1.scheduleAtFixedRate(new NoOpRunnable(), 5, 5, TimeUnit.MILLISECONDS); try { p1.shutdown(); } catch(SecurityException ok) { return; } assertTrue(p1.isShutdown()); BlockingQueue q = p1.getQueue(); assertTrue(q.isEmpty()); Thread.sleep(SHORT_DELAY_MS); assertTrue(p1.isTerminated()); } catch(Exception ex) { unexpectedException(); } } /** * if setContinueExistingPeriodicTasksAfterShutdownPolicy is true, * periodic tasks are cancelled at shutdown */ public void testShutDown4() { CustomExecutor p1 = new CustomExecutor(1); try { p1.setContinueExistingPeriodicTasksAfterShutdownPolicy(true); ScheduledFuture task = p1.scheduleAtFixedRate(new NoOpRunnable(), 1, 1, TimeUnit.MILLISECONDS); assertFalse(task.isCancelled()); try { p1.shutdown(); } catch(SecurityException ok) { return; } assertFalse(task.isCancelled()); assertFalse(p1.isTerminated()); assertTrue(p1.isShutdown()); Thread.sleep(SHORT_DELAY_MS); assertFalse(task.isCancelled()); assertTrue(task.cancel(true)); assertTrue(task.isDone()); Thread.sleep(SHORT_DELAY_MS); assertTrue(p1.isTerminated()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(p1); } } /** * completed submit of callable returns result */ public void testSubmitCallable() { ExecutorService e = new CustomExecutor(2); try { Future future = e.submit(new StringTask()); String result = (String)future.get(); assertSame(TEST_STRING, result); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { joinPool(e); } } /** * completed submit of runnable returns successfully */ public void testSubmitRunnable() { ExecutorService e = new CustomExecutor(2); try { Future future = e.submit(new NoOpRunnable()); future.get(); assertTrue(future.isDone()); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { joinPool(e); } } /** * completed submit of (runnable, result) returns result */ public void testSubmitRunnable2() { ExecutorService e = new CustomExecutor(2); try { Future future = e.submit(new NoOpRunnable(), TEST_STRING); String result = (String)future.get(); assertSame(TEST_STRING, result); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(null) throws NPE */ public void testInvokeAny1() { ExecutorService e = new CustomExecutor(2); try { e.invokeAny(null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(empty collection) throws IAE */ public void testInvokeAny2() { ExecutorService e = new CustomExecutor(2); try { e.invokeAny(new ArrayList()); } catch (IllegalArgumentException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) throws NPE if c has null elements */ public void testInvokeAny3() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAny(l); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) throws ExecutionException if no task completes */ public void testInvokeAny4() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new NPETask()); e.invokeAny(l); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) returns result of some task */ public void testInvokeAny5() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); String result = (String)e.invokeAny(l); assertSame(TEST_STRING, result); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(null) throws NPE */ public void testInvokeAll1() { ExecutorService e = new CustomExecutor(2); try { e.invokeAll(null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(empty collection) returns empty collection */ public void testInvokeAll2() { ExecutorService e = new CustomExecutor(2); try { List r = e.invokeAll(new ArrayList()); assertTrue(r.isEmpty()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(c) throws NPE if c has null elements */ public void testInvokeAll3() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAll(l); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * get of invokeAll(c) throws exception on failed task */ public void testInvokeAll4() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new NPETask()); List result = e.invokeAll(l); assertEquals(1, result.size()); for (Iterator it = result.iterator(); it.hasNext();) ((Future)it.next()).get(); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(c) returns results of all completed tasks */ public void testInvokeAll5() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); List result = e.invokeAll(l); assertEquals(2, result.size()); for (Iterator it = result.iterator(); it.hasNext();) assertSame(TEST_STRING, ((Future)it.next()).get()); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(null) throws NPE */ public void testTimedInvokeAny1() { ExecutorService e = new CustomExecutor(2); try { e.invokeAny(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(,,null) throws NPE */ public void testTimedInvokeAnyNullTimeUnit() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); e.invokeAny(l, MEDIUM_DELAY_MS, null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(empty collection) throws IAE */ public void testTimedInvokeAny2() { ExecutorService e = new CustomExecutor(2); try { e.invokeAny(new ArrayList(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (IllegalArgumentException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) throws NPE if c has null elements */ public void testTimedInvokeAny3() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { ex.printStackTrace(); unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) throws ExecutionException if no task completes */ public void testTimedInvokeAny4() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new NPETask()); e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) returns result of some task */ public void testTimedInvokeAny5() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); String result = (String)e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertSame(TEST_STRING, result); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(null) throws NPE */ public void testTimedInvokeAll1() { ExecutorService e = new CustomExecutor(2); try { e.invokeAll(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(,,null) throws NPE */ public void testTimedInvokeAllNullTimeUnit() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); e.invokeAll(l, MEDIUM_DELAY_MS, null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(empty collection) returns empty collection */ public void testTimedInvokeAll2() { ExecutorService e = new CustomExecutor(2); try { List r = e.invokeAll(new ArrayList(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertTrue(r.isEmpty()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) throws NPE if c has null elements */ public void testTimedInvokeAll3() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * get of element of invokeAll(c) throws exception on failed task */ public void testTimedInvokeAll4() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new NPETask()); List result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(1, result.size()); for (Iterator it = result.iterator(); it.hasNext();) ((Future)it.next()).get(); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) returns results of all completed tasks */ public void testTimedInvokeAll5() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); List result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(2, result.size()); for (Iterator it = result.iterator(); it.hasNext();) assertSame(TEST_STRING, ((Future)it.next()).get()); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) cancels tasks not completed by timeout */ public void testTimedInvokeAll6() { ExecutorService e = new CustomExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(Executors.callable(new MediumPossiblyInterruptedRunnable(), TEST_STRING)); l.add(new StringTask()); List result = e.invokeAll(l, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(3, result.size()); Iterator it = result.iterator(); Future f1 = (Future)it.next(); Future f2 = (Future)it.next(); Future f3 = (Future)it.next(); assertTrue(f1.isDone()); assertTrue(f2.isDone()); assertTrue(f3.isDone()); assertFalse(f1.isCancelled()); assertTrue(f2.isCancelled()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } } backport-util-concurrent-3.1-src/test/tck/src/ScheduledExecutorTest.java0000644001750700037720000011011510431260156025354 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import java.util.List; import java.util.ArrayList; import java.util.Iterator; public class ScheduledExecutorTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ScheduledExecutorTest.class); } /** * execute successfully executes a runnable */ public void testExecute() { try { TrackedShortRunnable runnable =new TrackedShortRunnable(); ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); p1.execute(runnable); assertFalse(runnable.done); Thread.sleep(SHORT_DELAY_MS); try { p1.shutdown(); } catch(SecurityException ok) { return; } try { Thread.sleep(MEDIUM_DELAY_MS); } catch(InterruptedException e){ unexpectedException(); } assertTrue(runnable.done); try { p1.shutdown(); } catch(SecurityException ok) { return; } joinPool(p1); } catch(Exception e){ unexpectedException(); } } /** * delayed schedule of callable successfully executes after delay */ public void testSchedule1() { try { TrackedCallable callable = new TrackedCallable(); ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); Future f = p1.schedule(callable, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); assertFalse(callable.done); Thread.sleep(MEDIUM_DELAY_MS); assertTrue(callable.done); assertEquals(Boolean.TRUE, f.get()); try { p1.shutdown(); } catch(SecurityException ok) { return; } joinPool(p1); } catch(RejectedExecutionException e){} catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * delayed schedule of runnable successfully executes after delay */ public void testSchedule3() { try { TrackedShortRunnable runnable = new TrackedShortRunnable(); ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); p1.schedule(runnable, SMALL_DELAY_MS, TimeUnit.MILLISECONDS); Thread.sleep(SHORT_DELAY_MS); assertFalse(runnable.done); Thread.sleep(MEDIUM_DELAY_MS); assertTrue(runnable.done); try { p1.shutdown(); } catch(SecurityException ok) { return; } joinPool(p1); } catch(Exception e){ unexpectedException(); } } /** * scheduleAtFixedRate executes runnable after given initial delay */ public void testSchedule4() { try { TrackedShortRunnable runnable = new TrackedShortRunnable(); ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); ScheduledFuture h = p1.scheduleAtFixedRate(runnable, SHORT_DELAY_MS, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); assertFalse(runnable.done); Thread.sleep(MEDIUM_DELAY_MS); assertTrue(runnable.done); h.cancel(true); joinPool(p1); } catch(Exception e){ unexpectedException(); } } static class RunnableCounter implements Runnable { AtomicInteger count = new AtomicInteger(0); public void run() { count.getAndIncrement(); } } /** * scheduleWithFixedDelay executes runnable after given initial delay */ public void testSchedule5() { try { TrackedShortRunnable runnable = new TrackedShortRunnable(); ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); ScheduledFuture h = p1.scheduleWithFixedDelay(runnable, SHORT_DELAY_MS, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); assertFalse(runnable.done); Thread.sleep(MEDIUM_DELAY_MS); assertTrue(runnable.done); h.cancel(true); joinPool(p1); } catch(Exception e){ unexpectedException(); } } /** * scheduleAtFixedRate executes series of tasks at given rate */ public void testFixedRateSequence() { try { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); RunnableCounter counter = new RunnableCounter(); ScheduledFuture h = p1.scheduleAtFixedRate(counter, 0, 1, TimeUnit.MILLISECONDS); Thread.sleep(SMALL_DELAY_MS); h.cancel(true); int c = counter.count.get(); // By time scaling conventions, we must have at least // an execution per SHORT delay, but no more than one SHORT more assertTrue(c >= SMALL_DELAY_MS / SHORT_DELAY_MS); assertTrue(c <= SMALL_DELAY_MS + SHORT_DELAY_MS); joinPool(p1); } catch(Exception e){ unexpectedException(); } } /** * scheduleWithFixedDelay executes series of tasks with given period */ public void testFixedDelaySequence() { try { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); RunnableCounter counter = new RunnableCounter(); ScheduledFuture h = p1.scheduleWithFixedDelay(counter, 0, 1, TimeUnit.MILLISECONDS); Thread.sleep(SMALL_DELAY_MS); h.cancel(true); int c = counter.count.get(); assertTrue(c >= SMALL_DELAY_MS / SHORT_DELAY_MS); assertTrue(c <= SMALL_DELAY_MS + SHORT_DELAY_MS); joinPool(p1); } catch(Exception e){ unexpectedException(); } } /** * execute (null) throws NPE */ public void testExecuteNull() { ScheduledThreadPoolExecutor se = null; try { se = new ScheduledThreadPoolExecutor(1); se.execute(null); shouldThrow(); } catch(NullPointerException success){} catch(Exception e){ unexpectedException(); } joinPool(se); } /** * schedule (null) throws NPE */ public void testScheduleNull() { ScheduledThreadPoolExecutor se = new ScheduledThreadPoolExecutor(1); try { TrackedCallable callable = null; Future f = se.schedule(callable, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); shouldThrow(); } catch(NullPointerException success){} catch(Exception e){ unexpectedException(); } joinPool(se); } /** * execute throws RejectedExecutionException if shutdown */ public void testSchedule1_RejectedExecutionException() { ScheduledThreadPoolExecutor se = new ScheduledThreadPoolExecutor(1); try { se.shutdown(); se.schedule(new NoOpRunnable(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); shouldThrow(); } catch(RejectedExecutionException success){ } catch (SecurityException ok) { } joinPool(se); } /** * schedule throws RejectedExecutionException if shutdown */ public void testSchedule2_RejectedExecutionException() { ScheduledThreadPoolExecutor se = new ScheduledThreadPoolExecutor(1); try { se.shutdown(); se.schedule(new NoOpCallable(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); shouldThrow(); } catch(RejectedExecutionException success){ } catch (SecurityException ok) { } joinPool(se); } /** * schedule callable throws RejectedExecutionException if shutdown */ public void testSchedule3_RejectedExecutionException() { ScheduledThreadPoolExecutor se = new ScheduledThreadPoolExecutor(1); try { se.shutdown(); se.schedule(new NoOpCallable(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); shouldThrow(); } catch(RejectedExecutionException success){ } catch (SecurityException ok) { } joinPool(se); } /** * scheduleAtFixedRate throws RejectedExecutionException if shutdown */ public void testScheduleAtFixedRate1_RejectedExecutionException() { ScheduledThreadPoolExecutor se = new ScheduledThreadPoolExecutor(1); try { se.shutdown(); se.scheduleAtFixedRate(new NoOpRunnable(), MEDIUM_DELAY_MS, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); shouldThrow(); } catch(RejectedExecutionException success){ } catch (SecurityException ok) { } joinPool(se); } /** * scheduleWithFixedDelay throws RejectedExecutionException if shutdown */ public void testScheduleWithFixedDelay1_RejectedExecutionException() { ScheduledThreadPoolExecutor se = new ScheduledThreadPoolExecutor(1); try { se.shutdown(); se.scheduleWithFixedDelay(new NoOpRunnable(), MEDIUM_DELAY_MS, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); shouldThrow(); } catch(RejectedExecutionException success){ } catch (SecurityException ok) { } joinPool(se); } /** * getActiveCount increases but doesn't overestimate, when a * thread becomes active */ public void testGetActiveCount() { ScheduledThreadPoolExecutor p2 = new ScheduledThreadPoolExecutor(2); assertEquals(0, p2.getActiveCount()); p2.execute(new SmallRunnable()); try { Thread.sleep(SHORT_DELAY_MS); } catch(Exception e){ unexpectedException(); } assertEquals(1, p2.getActiveCount()); joinPool(p2); } /** * getCompletedTaskCount increases, but doesn't overestimate, * when tasks complete */ public void testGetCompletedTaskCount() { ScheduledThreadPoolExecutor p2 = new ScheduledThreadPoolExecutor(2); assertEquals(0, p2.getCompletedTaskCount()); p2.execute(new SmallRunnable()); try { Thread.sleep(MEDIUM_DELAY_MS); } catch(Exception e){ unexpectedException(); } assertEquals(1, p2.getCompletedTaskCount()); joinPool(p2); } /** * getCorePoolSize returns size given in constructor if not otherwise set */ public void testGetCorePoolSize() { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); assertEquals(1, p1.getCorePoolSize()); joinPool(p1); } /** * getLargestPoolSize increases, but doesn't overestimate, when * multiple threads active */ public void testGetLargestPoolSize() { ScheduledThreadPoolExecutor p2 = new ScheduledThreadPoolExecutor(2); assertEquals(0, p2.getLargestPoolSize()); p2.execute(new SmallRunnable()); p2.execute(new SmallRunnable()); try { Thread.sleep(SHORT_DELAY_MS); } catch(Exception e){ unexpectedException(); } assertEquals(2, p2.getLargestPoolSize()); joinPool(p2); } /** * getPoolSize increases, but doesn't overestimate, when threads * become active */ public void testGetPoolSize() { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); assertEquals(0, p1.getPoolSize()); p1.execute(new SmallRunnable()); assertEquals(1, p1.getPoolSize()); joinPool(p1); } /** * getTaskCount increases, but doesn't overestimate, when tasks * submitted */ public void testGetTaskCount() { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); assertEquals(0, p1.getTaskCount()); for(int i = 0; i < 5; i++) p1.execute(new SmallRunnable()); try { Thread.sleep(SHORT_DELAY_MS); } catch(Exception e){ unexpectedException(); } assertEquals(5, p1.getTaskCount()); joinPool(p1); } /** * getThreadFactory returns factory in constructor if not set */ public void testGetThreadFactory() { ThreadFactory tf = new SimpleThreadFactory(); ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1, tf); assertSame(tf, p.getThreadFactory()); joinPool(p); } /** * setThreadFactory sets the thread factory returned by getThreadFactory */ public void testSetThreadFactory() { ThreadFactory tf = new SimpleThreadFactory(); ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); p.setThreadFactory(tf); assertSame(tf, p.getThreadFactory()); joinPool(p); } /** * setThreadFactory(null) throws NPE */ public void testSetThreadFactoryNull() { ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); try { p.setThreadFactory(null); shouldThrow(); } catch (NullPointerException success) { } finally { joinPool(p); } } /** * is isShutDown is false before shutdown, true after */ public void testIsShutdown() { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); try { assertFalse(p1.isShutdown()); } finally { try { p1.shutdown(); } catch(SecurityException ok) { return; } } assertTrue(p1.isShutdown()); } /** * isTerminated is false before termination, true after */ public void testIsTerminated() { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); try { p1.execute(new SmallRunnable()); } finally { try { p1.shutdown(); } catch(SecurityException ok) { return; } } try { assertTrue(p1.awaitTermination(LONG_DELAY_MS, TimeUnit.MILLISECONDS)); assertTrue(p1.isTerminated()); } catch(Exception e){ unexpectedException(); } } /** * isTerminating is not true when running or when terminated */ public void testIsTerminating() { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); assertFalse(p1.isTerminating()); try { p1.execute(new SmallRunnable()); assertFalse(p1.isTerminating()); } finally { try { p1.shutdown(); } catch(SecurityException ok) { return; } } try { assertTrue(p1.awaitTermination(LONG_DELAY_MS, TimeUnit.MILLISECONDS)); assertTrue(p1.isTerminated()); assertFalse(p1.isTerminating()); } catch(Exception e){ unexpectedException(); } } /** * getQueue returns the work queue, which contains queued tasks */ public void testGetQueue() { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); ScheduledFuture[] tasks = new ScheduledFuture[5]; for(int i = 0; i < 5; i++){ tasks[i] = p1.schedule(new SmallPossiblyInterruptedRunnable(), 1, TimeUnit.MILLISECONDS); } try { Thread.sleep(SHORT_DELAY_MS); BlockingQueue q = p1.getQueue(); assertTrue(q.contains(tasks[4])); assertFalse(q.contains(tasks[0])); } catch(Exception e) { unexpectedException(); } finally { joinPool(p1); } } /** * remove(task) removes queued task, and fails to remove active task */ public void testRemove() { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); ScheduledFuture[] tasks = new ScheduledFuture[5]; for(int i = 0; i < 5; i++){ tasks[i] = p1.schedule(new SmallPossiblyInterruptedRunnable(), 1, TimeUnit.MILLISECONDS); } try { Thread.sleep(SHORT_DELAY_MS); BlockingQueue q = p1.getQueue(); assertFalse(p1.remove((Runnable)tasks[0])); assertTrue(q.contains((Runnable)tasks[4])); assertTrue(q.contains((Runnable)tasks[3])); assertTrue(p1.remove((Runnable)tasks[4])); assertFalse(p1.remove((Runnable)tasks[4])); assertFalse(q.contains((Runnable)tasks[4])); assertTrue(q.contains((Runnable)tasks[3])); assertTrue(p1.remove((Runnable)tasks[3])); assertFalse(q.contains((Runnable)tasks[3])); } catch(Exception e) { unexpectedException(); } finally { joinPool(p1); } } /** * purge removes cancelled tasks from the queue */ public void testPurge() { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); ScheduledFuture[] tasks = new ScheduledFuture[5]; for(int i = 0; i < 5; i++){ tasks[i] = p1.schedule(new SmallPossiblyInterruptedRunnable(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS); } try { int max = 5; if (tasks[4].cancel(true)) --max; if (tasks[3].cancel(true)) --max; // There must eventually be an interference-free point at // which purge will not fail. (At worst, when queue is empty.) int k; for (k = 0; k < SMALL_DELAY_MS; ++k) { p1.purge(); long count = p1.getTaskCount(); if (count >= 0 && count <= max) break; Thread.sleep(1); } assertTrue(k < SMALL_DELAY_MS); } catch(Exception e) { unexpectedException(); } finally { joinPool(p1); } } /** * shutDownNow returns a list containing tasks that were not run */ public void testShutDownNow() { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); for(int i = 0; i < 5; i++) p1.schedule(new SmallPossiblyInterruptedRunnable(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS); List l; try { l = p1.shutdownNow(); } catch (SecurityException ok) { return; } assertTrue(p1.isShutdown()); assertTrue(l.size() > 0 && l.size() <= 5); joinPool(p1); } /** * In default setting, shutdown cancels periodic but not delayed * tasks at shutdown */ public void testShutDown1() { try { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); assertTrue(p1.getExecuteExistingDelayedTasksAfterShutdownPolicy()); assertFalse(p1.getContinueExistingPeriodicTasksAfterShutdownPolicy()); ScheduledFuture[] tasks = new ScheduledFuture[5]; for(int i = 0; i < 5; i++) tasks[i] = p1.schedule(new NoOpRunnable(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS); try { p1.shutdown(); } catch(SecurityException ok) { return; } BlockingQueue q = p1.getQueue(); for (Iterator it = q.iterator(); it.hasNext();) { ScheduledFuture t = (ScheduledFuture)it.next(); assertFalse(t.isCancelled()); } assertTrue(p1.isShutdown()); Thread.sleep(SMALL_DELAY_MS); for (int i = 0; i < 5; ++i) { assertTrue(tasks[i].isDone()); assertFalse(tasks[i].isCancelled()); } } catch(Exception ex) { unexpectedException(); } } /** * If setExecuteExistingDelayedTasksAfterShutdownPolicy is false, * delayed tasks are cancelled at shutdown */ public void testShutDown2() { try { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); p1.setExecuteExistingDelayedTasksAfterShutdownPolicy(false); ScheduledFuture[] tasks = new ScheduledFuture[5]; for(int i = 0; i < 5; i++) tasks[i] = p1.schedule(new NoOpRunnable(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS); try { p1.shutdown(); } catch(SecurityException ok) { return; } assertTrue(p1.isShutdown()); BlockingQueue q = p1.getQueue(); assertTrue(q.isEmpty()); Thread.sleep(SMALL_DELAY_MS); assertTrue(p1.isTerminated()); } catch(Exception ex) { unexpectedException(); } } /** * If setContinueExistingPeriodicTasksAfterShutdownPolicy is set false, * periodic tasks are not cancelled at shutdown */ public void testShutDown3() { try { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); p1.setContinueExistingPeriodicTasksAfterShutdownPolicy(false); ScheduledFuture task = p1.scheduleAtFixedRate(new NoOpRunnable(), 5, 5, TimeUnit.MILLISECONDS); try { p1.shutdown(); } catch(SecurityException ok) { return; } assertTrue(p1.isShutdown()); BlockingQueue q = p1.getQueue(); assertTrue(q.isEmpty()); Thread.sleep(SHORT_DELAY_MS); assertTrue(p1.isTerminated()); } catch(Exception ex) { unexpectedException(); } } /** * if setContinueExistingPeriodicTasksAfterShutdownPolicy is true, * periodic tasks are cancelled at shutdown */ public void testShutDown4() { ScheduledThreadPoolExecutor p1 = new ScheduledThreadPoolExecutor(1); try { p1.setContinueExistingPeriodicTasksAfterShutdownPolicy(true); ScheduledFuture task = p1.scheduleAtFixedRate(new NoOpRunnable(), 1, 1, TimeUnit.MILLISECONDS); assertFalse(task.isCancelled()); try { p1.shutdown(); } catch(SecurityException ok) { return; } assertFalse(task.isCancelled()); assertFalse(p1.isTerminated()); assertTrue(p1.isShutdown()); Thread.sleep(SHORT_DELAY_MS); assertFalse(task.isCancelled()); assertTrue(task.cancel(true)); assertTrue(task.isDone()); Thread.sleep(SHORT_DELAY_MS); assertTrue(p1.isTerminated()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(p1); } } /** * completed submit of callable returns result */ public void testSubmitCallable() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { Future future = e.submit(new StringTask()); String result = (String)future.get(); assertSame(TEST_STRING, result); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { joinPool(e); } } /** * completed submit of runnable returns successfully */ public void testSubmitRunnable() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { Future future = e.submit(new NoOpRunnable()); future.get(); assertTrue(future.isDone()); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { joinPool(e); } } /** * completed submit of (runnable, result) returns result */ public void testSubmitRunnable2() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { Future future = e.submit(new NoOpRunnable(), TEST_STRING); String result = (String)future.get(); assertSame(TEST_STRING, result); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(null) throws NPE */ public void testInvokeAny1() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { e.invokeAny(null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(empty collection) throws IAE */ public void testInvokeAny2() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { e.invokeAny(new ArrayList()); } catch (IllegalArgumentException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) throws NPE if c has null elements */ public void testInvokeAny3() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAny(l); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) throws ExecutionException if no task completes */ public void testInvokeAny4() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new NPETask()); e.invokeAny(l); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) returns result of some task */ public void testInvokeAny5() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); String result = (String)e.invokeAny(l); assertSame(TEST_STRING, result); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(null) throws NPE */ public void testInvokeAll1() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { e.invokeAll(null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(empty collection) returns empty collection */ public void testInvokeAll2() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { List r = e.invokeAll(new ArrayList()); assertTrue(r.isEmpty()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(c) throws NPE if c has null elements */ public void testInvokeAll3() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAll(l); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * get of invokeAll(c) throws exception on failed task */ public void testInvokeAll4() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new NPETask()); List result = e.invokeAll(l); assertEquals(1, result.size()); for (Iterator it = result.iterator(); it.hasNext();) ((Future)it.next()).get(); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(c) returns results of all completed tasks */ public void testInvokeAll5() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); List result = e.invokeAll(l); assertEquals(2, result.size()); for (Iterator it = result.iterator(); it.hasNext();) assertSame(TEST_STRING, ((Future)it.next()).get()); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(null) throws NPE */ public void testTimedInvokeAny1() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { e.invokeAny(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(,,null) throws NPE */ public void testTimedInvokeAnyNullTimeUnit() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); e.invokeAny(l, MEDIUM_DELAY_MS, null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(empty collection) throws IAE */ public void testTimedInvokeAny2() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { e.invokeAny(new ArrayList(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (IllegalArgumentException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) throws NPE if c has null elements */ public void testTimedInvokeAny3() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { ex.printStackTrace(); unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) throws ExecutionException if no task completes */ public void testTimedInvokeAny4() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new NPETask()); e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) returns result of some task */ public void testTimedInvokeAny5() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); String result = (String)e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertSame(TEST_STRING, result); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(null) throws NPE */ public void testTimedInvokeAll1() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { e.invokeAll(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(,,null) throws NPE */ public void testTimedInvokeAllNullTimeUnit() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); e.invokeAll(l, MEDIUM_DELAY_MS, null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(empty collection) returns empty collection */ public void testTimedInvokeAll2() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { List r = e.invokeAll(new ArrayList(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertTrue(r.isEmpty()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) throws NPE if c has null elements */ public void testTimedInvokeAll3() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * get of element of invokeAll(c) throws exception on failed task */ public void testTimedInvokeAll4() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new NPETask()); List result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(1, result.size()); for (Iterator it = result.iterator(); it.hasNext();) ((Future)it.next()).get(); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) returns results of all completed tasks */ public void testTimedInvokeAll5() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); List result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(2, result.size()); for (Iterator it = result.iterator(); it.hasNext();) assertSame(TEST_STRING, (String)((Future)it.next()).get()); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) cancels tasks not completed by timeout */ public void testTimedInvokeAll6() { ExecutorService e = new ScheduledThreadPoolExecutor(2); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(Executors.callable(new MediumPossiblyInterruptedRunnable(), TEST_STRING)); l.add(new StringTask()); List result = e.invokeAll(l, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(3, result.size()); Iterator it = result.iterator(); Future f1 = (Future)it.next(); Future f2 = (Future)it.next(); Future f3 = (Future)it.next(); assertTrue(f1.isDone()); assertTrue(f2.isDone()); assertTrue(f3.isDone()); assertFalse(f1.isCancelled()); assertTrue(f2.isCancelled()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } } backport-util-concurrent-3.1-src/test/tck/src/ReentrantReadWriteLockTest.java0000644001750700037720000015437710434507235026346 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; import java.io.*; import java.util.Collection; public class ReentrantReadWriteLockTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ReentrantReadWriteLockTest.class); } /** * A runnable calling lockInterruptibly */ class InterruptibleLockRunnable implements Runnable { final ReentrantReadWriteLock lock; InterruptibleLockRunnable(ReentrantReadWriteLock l) { lock = l; } public void run() { try { lock.writeLock().lockInterruptibly(); } catch(InterruptedException success){} } } /** * A runnable calling lockInterruptibly that expects to be * interrupted */ class InterruptedLockRunnable implements Runnable { final ReentrantReadWriteLock lock; InterruptedLockRunnable(ReentrantReadWriteLock l) { lock = l; } public void run() { try { lock.writeLock().lockInterruptibly(); threadShouldThrow(); } catch(InterruptedException success){} } } /** * Subclass to expose protected methods */ static class PublicReentrantReadWriteLock extends ReentrantReadWriteLock { PublicReentrantReadWriteLock() { super(); } // public Collection getQueuedThreads() { // return super.getQueuedThreads(); // } // public Collection getWaitingThreads(Condition c) { // return super.getWaitingThreads(c); // } } /** * Constructor sets given fairness, and is in unlocked state */ public void testConstructor() { ReentrantReadWriteLock rl = new ReentrantReadWriteLock(); assertFalse(rl.isFair()); assertFalse(rl.isWriteLocked()); assertEquals(0, rl.getReadLockCount()); // ReentrantReadWriteLock r2 = new ReentrantReadWriteLock(true); // assertTrue(r2.isFair()); // assertFalse(r2.isWriteLocked()); // assertEquals(0, r2.getReadLockCount()); } /** * write-locking and read-locking an unlocked lock succeed */ public void testLock() { ReentrantReadWriteLock rl = new ReentrantReadWriteLock(); rl.writeLock().lock(); assertTrue(rl.isWriteLocked()); assertTrue(rl.isWriteLockedByCurrentThread()); assertTrue(((ReentrantReadWriteLock.WriteLock)rl.writeLock()).isHeldByCurrentThread()); assertEquals(0, rl.getReadLockCount()); rl.writeLock().unlock(); assertFalse(rl.isWriteLocked()); assertFalse(rl.isWriteLockedByCurrentThread()); assertFalse(((ReentrantReadWriteLock.WriteLock)rl.writeLock()).isHeldByCurrentThread()); assertEquals(0, rl.getReadLockCount()); rl.readLock().lock(); assertFalse(rl.isWriteLocked()); assertFalse(rl.isWriteLockedByCurrentThread()); assertFalse(((ReentrantReadWriteLock.WriteLock)rl.writeLock()).isHeldByCurrentThread()); assertEquals(1, rl.getReadLockCount()); rl.readLock().unlock(); assertFalse(rl.isWriteLocked()); assertFalse(rl.isWriteLockedByCurrentThread()); assertFalse(((ReentrantReadWriteLock.WriteLock)rl.writeLock()).isHeldByCurrentThread()); assertEquals(0, rl.getReadLockCount()); } // /** // * locking an unlocked fair lock succeeds // */ // public void testFairLock() { // ReentrantReadWriteLock rl = new ReentrantReadWriteLock(true); // rl.writeLock().lock(); // assertTrue(rl.isWriteLocked()); // assertTrue(rl.isWriteLockedByCurrentThread()); // assertTrue(rl.writeLock().isHeldByCurrentThread()); // assertEquals(0, rl.getReadLockCount()); // rl.writeLock().unlock(); // assertFalse(rl.isWriteLocked()); // assertFalse(rl.isWriteLockedByCurrentThread()); // assertFalse(rl.writeLock().isHeldByCurrentThread()); // assertEquals(0, rl.getReadLockCount()); // rl.readLock().lock(); // assertFalse(rl.isWriteLocked()); // assertFalse(rl.isWriteLockedByCurrentThread()); // assertFalse(rl.writeLock().isHeldByCurrentThread()); // assertEquals(1, rl.getReadLockCount()); // rl.readLock().unlock(); // assertFalse(rl.isWriteLocked()); // assertFalse(rl.isWriteLockedByCurrentThread()); // assertFalse(rl.writeLock().isHeldByCurrentThread()); // assertEquals(0, rl.getReadLockCount()); // } /** * getWriteHoldCount returns number of recursive holds */ public void testGetWriteHoldCount() { ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); for(int i = 1; i <= SIZE; i++) { lock.writeLock().lock(); assertEquals(i,lock.getWriteHoldCount()); } for(int i = SIZE; i > 0; i--) { lock.writeLock().unlock(); assertEquals(i-1,lock.getWriteHoldCount()); } } /** * WriteLock.getHoldCount returns number of recursive holds */ public void testGetHoldCount() { ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); for(int i = 1; i <= SIZE; i++) { lock.writeLock().lock(); assertEquals(i,((ReentrantReadWriteLock.WriteLock)lock.writeLock()).getHoldCount()); } for(int i = SIZE; i > 0; i--) { lock.writeLock().unlock(); assertEquals(i-1,((ReentrantReadWriteLock.WriteLock)lock.writeLock()).getHoldCount()); } } /** * getReadHoldCount returns number of recursive holds */ public void testGetReadHoldCount() { ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); for(int i = 1; i <= SIZE; i++) { lock.readLock().lock(); assertEquals(i,lock.getReadHoldCount()); } for(int i = SIZE; i > 0; i--) { lock.readLock().unlock(); assertEquals(i-1,lock.getReadHoldCount()); } } /** * write-unlocking an unlocked lock throws IllegalMonitorStateException */ public void testUnlock_IllegalMonitorStateException() { ReentrantReadWriteLock rl = new ReentrantReadWriteLock(); try { rl.writeLock().unlock(); shouldThrow(); } catch(IllegalMonitorStateException success){} } /** * write-lockInterruptibly is interruptible */ public void testWriteLockInterruptibly_Interrupted() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); Thread t = new Thread(new Runnable() { public void run() { try { lock.writeLock().lockInterruptibly(); lock.writeLock().unlock(); lock.writeLock().lockInterruptibly(); lock.writeLock().unlock(); } catch(InterruptedException success){} } }); try { lock.writeLock().lock(); t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); Thread.sleep(SHORT_DELAY_MS); lock.writeLock().unlock(); t.join(); } catch(Exception e){ unexpectedException(); } } /** * timed write-tryLock is interruptible */ public void testWriteTryLock_Interrupted() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); Thread t = new Thread(new Runnable() { public void run() { try { lock.writeLock().tryLock(1000,TimeUnit.MILLISECONDS); } catch(InterruptedException success){} } }); try { t.start(); t.interrupt(); lock.writeLock().unlock(); t.join(); } catch(Exception e){ unexpectedException(); } } /** * read-lockInterruptibly is interruptible */ public void testReadLockInterruptibly_Interrupted() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); Thread t = new Thread(new Runnable() { public void run() { try { lock.readLock().lockInterruptibly(); } catch(InterruptedException success){} } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); Thread.sleep(SHORT_DELAY_MS); lock.writeLock().unlock(); t.join(); } catch(Exception e){ unexpectedException(); } } /** * timed read-tryLock is interruptible */ public void testReadTryLock_Interrupted() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); Thread t = new Thread(new Runnable() { public void run() { try { lock.readLock().tryLock(1000,TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(InterruptedException success){} } }); try { t.start(); t.interrupt(); t.join(); } catch(Exception e){ unexpectedException(); } } /** * write-tryLock fails if locked */ public void testWriteTryLockWhenLocked() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); Thread t = new Thread(new Runnable() { public void run() { threadAssertFalse(lock.writeLock().tryLock()); } }); try { t.start(); t.join(); lock.writeLock().unlock(); } catch(Exception e){ unexpectedException(); } } /** * read-tryLock fails if locked */ public void testReadTryLockWhenLocked() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); Thread t = new Thread(new Runnable() { public void run() { threadAssertFalse(lock.readLock().tryLock()); } }); try { t.start(); t.join(); lock.writeLock().unlock(); } catch(Exception e){ unexpectedException(); } } /** * Multiple threads can hold a read lock when not write-locked */ public void testMultipleReadLocks() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.readLock().lock(); Thread t = new Thread(new Runnable() { public void run() { threadAssertTrue(lock.readLock().tryLock()); lock.readLock().unlock(); } }); try { t.start(); t.join(); lock.readLock().unlock(); } catch(Exception e){ unexpectedException(); } } /** * A writelock succeeds after reading threads unlock */ public void testWriteAfterMultipleReadLocks() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.readLock().lock(); Thread t1 = new Thread(new Runnable() { public void run() { lock.readLock().lock(); lock.readLock().unlock(); } }); Thread t2 = new Thread(new Runnable() { public void run() { lock.writeLock().lock(); lock.writeLock().unlock(); } }); try { t1.start(); t2.start(); Thread.sleep(SHORT_DELAY_MS); lock.readLock().unlock(); t1.join(MEDIUM_DELAY_MS); t2.join(MEDIUM_DELAY_MS); assertTrue(!t1.isAlive()); assertTrue(!t2.isAlive()); } catch(Exception e){ unexpectedException(); } } /** * Readlocks succeed after a writing thread unlocks */ public void testReadAfterWriteLock() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); Thread t1 = new Thread(new Runnable() { public void run() { lock.readLock().lock(); lock.readLock().unlock(); } }); Thread t2 = new Thread(new Runnable() { public void run() { lock.readLock().lock(); lock.readLock().unlock(); } }); try { t1.start(); t2.start(); Thread.sleep(SHORT_DELAY_MS); lock.writeLock().unlock(); t1.join(MEDIUM_DELAY_MS); t2.join(MEDIUM_DELAY_MS); assertTrue(!t1.isAlive()); assertTrue(!t2.isAlive()); } catch(Exception e){ unexpectedException(); } } /** * Read trylock succeeds if write locked by current thread */ public void testReadHoldingWriteLock() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); assertTrue(lock.readLock().tryLock()); lock.readLock().unlock(); lock.writeLock().unlock(); } /** * Read lock succeeds if write locked by current thread even if * other threads are waiting for readlock */ public void testReadHoldingWriteLock2() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); Thread t1 = new Thread(new Runnable() { public void run() { lock.readLock().lock(); lock.readLock().unlock(); } }); Thread t2 = new Thread(new Runnable() { public void run() { lock.readLock().lock(); lock.readLock().unlock(); } }); try { t1.start(); t2.start(); lock.readLock().lock(); lock.readLock().unlock(); Thread.sleep(SHORT_DELAY_MS); lock.readLock().lock(); lock.readLock().unlock(); lock.writeLock().unlock(); t1.join(MEDIUM_DELAY_MS); t2.join(MEDIUM_DELAY_MS); assertTrue(!t1.isAlive()); assertTrue(!t2.isAlive()); } catch(Exception e){ unexpectedException(); } } /** * Read lock succeeds if write locked by current thread even if * other threads are waiting for writelock */ public void testReadHoldingWriteLock3() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); Thread t1 = new Thread(new Runnable() { public void run() { lock.writeLock().lock(); lock.writeLock().unlock(); } }); Thread t2 = new Thread(new Runnable() { public void run() { lock.writeLock().lock(); lock.writeLock().unlock(); } }); try { t1.start(); t2.start(); lock.readLock().lock(); lock.readLock().unlock(); Thread.sleep(SHORT_DELAY_MS); lock.readLock().lock(); lock.readLock().unlock(); lock.writeLock().unlock(); t1.join(MEDIUM_DELAY_MS); t2.join(MEDIUM_DELAY_MS); assertTrue(!t1.isAlive()); assertTrue(!t2.isAlive()); } catch(Exception e){ unexpectedException(); } } /** * Write lock succeeds if write locked by current thread even if * other threads are waiting for writelock */ public void testWriteHoldingWriteLock4() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); Thread t1 = new Thread(new Runnable() { public void run() { lock.writeLock().lock(); lock.writeLock().unlock(); } }); Thread t2 = new Thread(new Runnable() { public void run() { lock.writeLock().lock(); lock.writeLock().unlock(); } }); try { t1.start(); t2.start(); lock.writeLock().lock(); lock.writeLock().unlock(); Thread.sleep(SHORT_DELAY_MS); lock.writeLock().lock(); lock.writeLock().unlock(); lock.writeLock().unlock(); t1.join(MEDIUM_DELAY_MS); t2.join(MEDIUM_DELAY_MS); assertTrue(!t1.isAlive()); assertTrue(!t2.isAlive()); } catch(Exception e){ unexpectedException(); } } // /** // * Fair Read trylock succeeds if write locked by current thread // */ // public void testReadHoldingWriteLockFair() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); // lock.writeLock().lock(); // assertTrue(lock.readLock().tryLock()); // lock.readLock().unlock(); // lock.writeLock().unlock(); // } // /** // * Fair Read lock succeeds if write locked by current thread even if // * other threads are waiting for readlock // */ // public void testReadHoldingWriteLockFair2() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); // lock.writeLock().lock(); // Thread t1 = new Thread(new Runnable() { // public void run() { // lock.readLock().lock(); // lock.readLock().unlock(); // } // }); // Thread t2 = new Thread(new Runnable() { // public void run() { // lock.readLock().lock(); // lock.readLock().unlock(); // } // }); // // try { // t1.start(); // t2.start(); // lock.readLock().lock(); // lock.readLock().unlock(); // Thread.sleep(SHORT_DELAY_MS); // lock.readLock().lock(); // lock.readLock().unlock(); // lock.writeLock().unlock(); // t1.join(MEDIUM_DELAY_MS); // t2.join(MEDIUM_DELAY_MS); // assertTrue(!t1.isAlive()); // assertTrue(!t2.isAlive()); // // } catch(Exception e){ // unexpectedException(); // } // } // /** // * Fair Read lock succeeds if write locked by current thread even if // * other threads are waiting for writelock // */ // public void testReadHoldingWriteLockFair3() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); // lock.writeLock().lock(); // Thread t1 = new Thread(new Runnable() { // public void run() { // lock.writeLock().lock(); // lock.writeLock().unlock(); // } // }); // Thread t2 = new Thread(new Runnable() { // public void run() { // lock.writeLock().lock(); // lock.writeLock().unlock(); // } // }); // // try { // t1.start(); // t2.start(); // lock.readLock().lock(); // lock.readLock().unlock(); // Thread.sleep(SHORT_DELAY_MS); // lock.readLock().lock(); // lock.readLock().unlock(); // lock.writeLock().unlock(); // t1.join(MEDIUM_DELAY_MS); // t2.join(MEDIUM_DELAY_MS); // assertTrue(!t1.isAlive()); // assertTrue(!t2.isAlive()); // // } catch(Exception e){ // unexpectedException(); // } // } // /** // * Fair Write lock succeeds if write locked by current thread even if // * other threads are waiting for writelock // */ // public void testWriteHoldingWriteLockFair4() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); // lock.writeLock().lock(); // Thread t1 = new Thread(new Runnable() { // public void run() { // lock.writeLock().lock(); // lock.writeLock().unlock(); // } // }); // Thread t2 = new Thread(new Runnable() { // public void run() { // lock.writeLock().lock(); // lock.writeLock().unlock(); // } // }); // // try { // t1.start(); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(lock.isWriteLockedByCurrentThread()); // assertTrue(lock.getWriteHoldCount() == 1); // lock.writeLock().lock(); // assertTrue(lock.getWriteHoldCount() == 2); // lock.writeLock().unlock(); // lock.writeLock().lock(); // lock.writeLock().unlock(); // lock.writeLock().unlock(); // t1.join(MEDIUM_DELAY_MS); // t2.join(MEDIUM_DELAY_MS); // assertTrue(!t1.isAlive()); // assertTrue(!t2.isAlive()); // // } catch(Exception e){ // unexpectedException(); // } // } /** * Read tryLock succeeds if readlocked but not writelocked */ public void testTryLockWhenReadLocked() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.readLock().lock(); Thread t = new Thread(new Runnable() { public void run() { threadAssertTrue(lock.readLock().tryLock()); lock.readLock().unlock(); } }); try { t.start(); t.join(); lock.readLock().unlock(); } catch(Exception e){ unexpectedException(); } } /** * write tryLock fails when readlocked */ public void testWriteTryLockWhenReadLocked() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.readLock().lock(); Thread t = new Thread(new Runnable() { public void run() { threadAssertFalse(lock.writeLock().tryLock()); } }); try { t.start(); t.join(); lock.readLock().unlock(); } catch(Exception e){ unexpectedException(); } } // /** // * Fair Read tryLock succeeds if readlocked but not writelocked // */ // public void testTryLockWhenReadLockedFair() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); // lock.readLock().lock(); // Thread t = new Thread(new Runnable() { // public void run() { // threadAssertTrue(lock.readLock().tryLock()); // lock.readLock().unlock(); // } // }); // try { // t.start(); // t.join(); // lock.readLock().unlock(); // } catch(Exception e){ // unexpectedException(); // } // } // /** // * Fair write tryLock fails when readlocked // */ // public void testWriteTryLockWhenReadLockedFair() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); // lock.readLock().lock(); // Thread t = new Thread(new Runnable() { // public void run() { // threadAssertFalse(lock.writeLock().tryLock()); // } // }); // try { // t.start(); // t.join(); // lock.readLock().unlock(); // } catch(Exception e){ // unexpectedException(); // } // } /** * write timed tryLock times out if locked */ public void testWriteTryLock_Timeout() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertFalse(lock.writeLock().tryLock(1, TimeUnit.MILLISECONDS)); } catch (Exception ex) { threadUnexpectedException(); } } }); try { t.start(); t.join(); lock.writeLock().unlock(); } catch(Exception e){ unexpectedException(); } } /** * read timed tryLock times out if write-locked */ public void testReadTryLock_Timeout() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertFalse(lock.readLock().tryLock(1, TimeUnit.MILLISECONDS)); } catch (Exception ex) { threadUnexpectedException(); } } }); try { t.start(); t.join(); lock.writeLock().unlock(); } catch(Exception e){ unexpectedException(); } } /** * write lockInterruptibly succeeds if lock free else is interruptible */ public void testWriteLockInterruptibly() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); try { lock.writeLock().lockInterruptibly(); } catch(Exception e) { unexpectedException(); } Thread t = new Thread(new Runnable() { public void run() { try { lock.writeLock().lockInterruptibly(); threadShouldThrow(); } catch(InterruptedException success) { } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); Thread.sleep(SHORT_DELAY_MS); t.join(); lock.writeLock().unlock(); } catch(Exception e){ unexpectedException(); } } /** * read lockInterruptibly succeeds if lock free else is interruptible */ public void testReadLockInterruptibly() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); try { lock.writeLock().lockInterruptibly(); } catch(Exception e) { unexpectedException(); } Thread t = new Thread(new Runnable() { public void run() { try { lock.readLock().lockInterruptibly(); threadShouldThrow(); } catch(InterruptedException success) { } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); lock.writeLock().unlock(); } catch(Exception e){ unexpectedException(); } } /** * Calling await without holding lock throws IllegalMonitorStateException */ public void testAwait_IllegalMonitor() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); try { c.await(); shouldThrow(); } catch (IllegalMonitorStateException success) { } catch (Exception ex) { shouldThrow(); } } /** * Calling signal without holding lock throws IllegalMonitorStateException */ public void testSignal_IllegalMonitor() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); try { c.signal(); shouldThrow(); } catch (IllegalMonitorStateException success) { } catch (Exception ex) { unexpectedException(); } } /** * awaitNanos without a signal times out */ public void testAwaitNanos_Timeout() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); try { lock.writeLock().lock(); long t = Utils.awaitNanos(c, 100); assertTrue(t <= 0); lock.writeLock().unlock(); } catch (Exception ex) { unexpectedException(); } } /** * timed await without a signal times out */ public void testAwait_Timeout() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); try { lock.writeLock().lock(); lock.writeLock().unlock(); } catch (Exception ex) { unexpectedException(); } } /** * awaitUntil without a signal times out */ public void testAwaitUntil_Timeout() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); try { lock.writeLock().lock(); java.util.Date d = new java.util.Date(); lock.writeLock().unlock(); } catch (Exception ex) { unexpectedException(); } } /** * await returns when signalled */ public void testAwait() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); Thread t = new Thread(new Runnable() { public void run() { try { lock.writeLock().lock(); c.await(); lock.writeLock().unlock(); } catch(InterruptedException e) { threadUnexpectedException(); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); lock.writeLock().lock(); c.signal(); lock.writeLock().unlock(); t.join(SHORT_DELAY_MS); assertFalse(t.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** A helper class for uninterruptible wait tests */ class UninterruptableThread extends Thread { private Lock lock; private Condition c; public volatile boolean canAwake = false; public volatile boolean interrupted = false; public volatile boolean lockStarted = false; public UninterruptableThread(Lock lock, Condition c) { this.lock = lock; this.c = c; } public synchronized void run() { lock.lock(); lockStarted = true; while (!canAwake) { c.awaitUninterruptibly(); } interrupted = isInterrupted(); lock.unlock(); } } /** * awaitUninterruptibly doesn't abort on interrupt */ public void testAwaitUninterruptibly() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); UninterruptableThread thread = new UninterruptableThread(lock.writeLock(), c); try { thread.start(); while (!thread.lockStarted) { Thread.sleep(100); } lock.writeLock().lock(); try { thread.interrupt(); thread.canAwake = true; c.signal(); } finally { lock.writeLock().unlock(); } thread.join(); assertTrue(thread.interrupted); assertFalse(thread.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * await is interruptible */ public void testAwait_Interrupt() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); Thread t = new Thread(new Runnable() { public void run() { try { lock.writeLock().lock(); c.await(); lock.writeLock().unlock(); threadShouldThrow(); } catch(InterruptedException success) { } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(SHORT_DELAY_MS); assertFalse(t.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * awaitNanos is interruptible */ public void testAwaitNanos_Interrupt() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); Thread t = new Thread(new Runnable() { public void run() { try { lock.writeLock().lock(); Utils.awaitNanos(c, SHORT_DELAY_MS * 2 * 1000000); lock.writeLock().unlock(); threadShouldThrow(); } catch(InterruptedException success) { } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(SHORT_DELAY_MS); assertFalse(t.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * awaitUntil is interruptible */ public void testAwaitUntil_Interrupt() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); Thread t = new Thread(new Runnable() { public void run() { try { lock.writeLock().lock(); java.util.Date d = new java.util.Date(); c.awaitUntil(new java.util.Date(d.getTime() + 10000)); lock.writeLock().unlock(); threadShouldThrow(); } catch(InterruptedException success) { } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(SHORT_DELAY_MS); assertFalse(t.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * signalAll wakes up all threads */ public void testSignalAll() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); Thread t1 = new Thread(new Runnable() { public void run() { try { lock.writeLock().lock(); c.await(); lock.writeLock().unlock(); } catch(InterruptedException e) { threadUnexpectedException(); } } }); Thread t2 = new Thread(new Runnable() { public void run() { try { lock.writeLock().lock(); c.await(); lock.writeLock().unlock(); } catch(InterruptedException e) { threadUnexpectedException(); } } }); try { t1.start(); t2.start(); Thread.sleep(SHORT_DELAY_MS); lock.writeLock().lock(); c.signalAll(); lock.writeLock().unlock(); t1.join(SHORT_DELAY_MS); t2.join(SHORT_DELAY_MS); assertFalse(t1.isAlive()); assertFalse(t2.isAlive()); } catch (Exception ex) { unexpectedException(); } } /** * A serialized lock deserializes as unlocked */ public void testSerialization() { ReentrantReadWriteLock l = new ReentrantReadWriteLock(); l.readLock().lock(); l.readLock().unlock(); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(l); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); ReentrantReadWriteLock r = (ReentrantReadWriteLock) in.readObject(); r.readLock().lock(); r.readLock().unlock(); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * hasQueuedThreads reports whether there are waiting threads */ public void testhasQueuedThreads() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); Thread t1 = new Thread(new InterruptedLockRunnable(lock)); Thread t2 = new Thread(new InterruptibleLockRunnable(lock)); try { assertFalse(lock.hasQueuedThreads()); lock.writeLock().lock(); t1.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.hasQueuedThreads()); t2.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.hasQueuedThreads()); t1.interrupt(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.hasQueuedThreads()); lock.writeLock().unlock(); Thread.sleep(SHORT_DELAY_MS); assertFalse(lock.hasQueuedThreads()); t1.join(); t2.join(); } catch(Exception e){ unexpectedException(); } } // /** // * hasQueuedThread(null) throws NPE // */ // public void testHasQueuedThreadNPE() { // final ReentrantReadWriteLock sync = new ReentrantReadWriteLock(); // try { // sync.hasQueuedThread(null); // shouldThrow(); // } catch (NullPointerException success) { // } // } // // /** // * hasQueuedThread reports whether a thread is queued. // */ // public void testHasQueuedThread() { // final ReentrantReadWriteLock sync = new ReentrantReadWriteLock(); // Thread t1 = new Thread(new InterruptedLockRunnable(sync)); // Thread t2 = new Thread(new InterruptibleLockRunnable(sync)); // try { // assertFalse(sync.hasQueuedThread(t1)); // assertFalse(sync.hasQueuedThread(t2)); // sync.writeLock().lock(); // t1.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.hasQueuedThread(t1)); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(sync.hasQueuedThread(t1)); // assertTrue(sync.hasQueuedThread(t2)); // t1.interrupt(); // Thread.sleep(SHORT_DELAY_MS); // assertFalse(sync.hasQueuedThread(t1)); // assertTrue(sync.hasQueuedThread(t2)); // sync.writeLock().unlock(); // Thread.sleep(SHORT_DELAY_MS); // assertFalse(sync.hasQueuedThread(t1)); // Thread.sleep(SHORT_DELAY_MS); // assertFalse(sync.hasQueuedThread(t2)); // t1.join(); // t2.join(); // } catch(Exception e){ // unexpectedException(); // } // } /** * getQueueLength reports number of waiting threads */ public void testGetQueueLength() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); Thread t1 = new Thread(new InterruptedLockRunnable(lock)); Thread t2 = new Thread(new InterruptibleLockRunnable(lock)); try { assertEquals(0, lock.getQueueLength()); lock.writeLock().lock(); t1.start(); Thread.sleep(SHORT_DELAY_MS); assertEquals(1, lock.getQueueLength()); t2.start(); Thread.sleep(SHORT_DELAY_MS); assertEquals(2, lock.getQueueLength()); t1.interrupt(); Thread.sleep(SHORT_DELAY_MS); assertEquals(1, lock.getQueueLength()); lock.writeLock().unlock(); Thread.sleep(SHORT_DELAY_MS); assertEquals(0, lock.getQueueLength()); t1.join(); t2.join(); } catch(Exception e){ unexpectedException(); } } // /** // * getQueuedThreads includes waiting threads // */ // public void testGetQueuedThreads() { // final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock(); // Thread t1 = new Thread(new InterruptedLockRunnable(lock)); // Thread t2 = new Thread(new InterruptibleLockRunnable(lock)); // try { // assertTrue(lock.getQueuedThreads().isEmpty()); // lock.writeLock().lock(); // assertTrue(lock.getQueuedThreads().isEmpty()); // t1.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(lock.getQueuedThreads().contains(t1)); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(lock.getQueuedThreads().contains(t1)); // assertTrue(lock.getQueuedThreads().contains(t2)); // t1.interrupt(); // Thread.sleep(SHORT_DELAY_MS); // assertFalse(lock.getQueuedThreads().contains(t1)); // assertTrue(lock.getQueuedThreads().contains(t2)); // lock.writeLock().unlock(); // Thread.sleep(SHORT_DELAY_MS); // assertTrue(lock.getQueuedThreads().isEmpty()); // t1.join(); // t2.join(); // } catch(Exception e){ // unexpectedException(); // } // } // // /** // * hasWaiters throws NPE if null // */ // public void testHasWaitersNPE() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); // try { // lock.hasWaiters(null); // shouldThrow(); // } catch (NullPointerException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // /** // * getWaitQueueLength throws NPE if null // */ // public void testGetWaitQueueLengthNPE() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); // try { // lock.getWaitQueueLength(null); // shouldThrow(); // } catch (NullPointerException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // // /** // * getWaitingThreads throws NPE if null // */ // public void testGetWaitingThreadsNPE() { // final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock(); // try { // lock.getWaitingThreads(null); // shouldThrow(); // } catch (NullPointerException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // /** // * hasWaiters throws IAE if not owned // */ // public void testHasWaitersIAE() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); // final Condition c = (lock.writeLock().newCondition()); // final ReentrantReadWriteLock lock2 = new ReentrantReadWriteLock(); // try { // lock2.hasWaiters(c); // shouldThrow(); // } catch (IllegalArgumentException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // /** // * hasWaiters throws IMSE if not locked // */ // public void testHasWaitersIMSE() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); // final Condition c = (lock.writeLock().newCondition()); // try { // lock.hasWaiters(c); // shouldThrow(); // } catch (IllegalMonitorStateException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // // /** // * getWaitQueueLength throws IAE if not owned // */ // public void testGetWaitQueueLengthIAE() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); // final Condition c = (lock.writeLock().newCondition()); // final ReentrantReadWriteLock lock2 = new ReentrantReadWriteLock(); // try { // lock2.getWaitQueueLength(c); // shouldThrow(); // } catch (IllegalArgumentException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // /** // * getWaitQueueLength throws IMSE if not locked // */ // public void testGetWaitQueueLengthIMSE() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); // final Condition c = (lock.writeLock().newCondition()); // try { // lock.getWaitQueueLength(c); // shouldThrow(); // } catch (IllegalMonitorStateException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // // /** // * getWaitingThreads throws IAE if not owned // */ // public void testGetWaitingThreadsIAE() { // final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock(); // final Condition c = (lock.writeLock().newCondition()); // final PublicReentrantReadWriteLock lock2 = new PublicReentrantReadWriteLock(); // try { // lock2.getWaitingThreads(c); // shouldThrow(); // } catch (IllegalArgumentException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // /** // * getWaitingThreads throws IMSE if not locked // */ // public void testGetWaitingThreadsIMSE() { // final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock(); // final Condition c = (lock.writeLock().newCondition()); // try { // lock.getWaitingThreads(c); // shouldThrow(); // } catch (IllegalMonitorStateException success) { // } catch (Exception ex) { // unexpectedException(); // } // } // // // /** // * hasWaiters returns true when a thread is waiting, else false // */ // public void testHasWaiters() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); // final Condition c = (lock.writeLock().newCondition()); // Thread t = new Thread(new Runnable() { // public void run() { // try { // lock.writeLock().lock(); // threadAssertFalse(lock.hasWaiters(c)); // threadAssertEquals(0, lock.getWaitQueueLength(c)); // c.await(); // lock.writeLock().unlock(); // } // catch(InterruptedException e) { // threadUnexpectedException(); // } // } // }); // // try { // t.start(); // Thread.sleep(SHORT_DELAY_MS); // lock.writeLock().lock(); // assertTrue(lock.hasWaiters(c)); // assertEquals(1, lock.getWaitQueueLength(c)); // c.signal(); // lock.writeLock().unlock(); // Thread.sleep(SHORT_DELAY_MS); // lock.writeLock().lock(); // assertFalse(lock.hasWaiters(c)); // assertEquals(0, lock.getWaitQueueLength(c)); // lock.writeLock().unlock(); // t.join(SHORT_DELAY_MS); // assertFalse(t.isAlive()); // } // catch (Exception ex) { // unexpectedException(); // } // } // // /** // * getWaitQueueLength returns number of waiting threads // */ // public void testGetWaitQueueLength() { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); // final Condition c = (lock.writeLock().newCondition()); // Thread t = new Thread(new Runnable() { // public void run() { // try { // lock.writeLock().lock(); // threadAssertFalse(lock.hasWaiters(c)); // threadAssertEquals(0, lock.getWaitQueueLength(c)); // c.await(); // lock.writeLock().unlock(); // } // catch(InterruptedException e) { // threadUnexpectedException(); // } // } // }); // // try { // t.start(); // Thread.sleep(SHORT_DELAY_MS); // lock.writeLock().lock(); // assertTrue(lock.hasWaiters(c)); // assertEquals(1, lock.getWaitQueueLength(c)); // c.signal(); // lock.writeLock().unlock(); // Thread.sleep(SHORT_DELAY_MS); // lock.writeLock().lock(); // assertFalse(lock.hasWaiters(c)); // assertEquals(0, lock.getWaitQueueLength(c)); // lock.writeLock().unlock(); // t.join(SHORT_DELAY_MS); // assertFalse(t.isAlive()); // } // catch (Exception ex) { // unexpectedException(); // } // } // // // /** // * getWaitingThreads returns only and all waiting threads // */ // public void testGetWaitingThreads() { // final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock(); // final Condition c = lock.writeLock().newCondition(); // Thread t1 = new Thread(new Runnable() { // public void run() { // try { // lock.writeLock().lock(); // threadAssertTrue(lock.getWaitingThreads(c).isEmpty()); // c.await(); // lock.writeLock().unlock(); // } // catch(InterruptedException e) { // threadUnexpectedException(); // } // } // }); // // Thread t2 = new Thread(new Runnable() { // public void run() { // try { // lock.writeLock().lock(); // threadAssertFalse(lock.getWaitingThreads(c).isEmpty()); // c.await(); // lock.writeLock().unlock(); // } // catch(InterruptedException e) { // threadUnexpectedException(); // } // } // }); // // try { // lock.writeLock().lock(); // assertTrue(lock.getWaitingThreads(c).isEmpty()); // lock.writeLock().unlock(); // t1.start(); // Thread.sleep(SHORT_DELAY_MS); // t2.start(); // Thread.sleep(SHORT_DELAY_MS); // lock.writeLock().lock(); // assertTrue(lock.hasWaiters(c)); // assertTrue(lock.getWaitingThreads(c).contains(t1)); // assertTrue(lock.getWaitingThreads(c).contains(t2)); // c.signalAll(); // lock.writeLock().unlock(); // Thread.sleep(SHORT_DELAY_MS); // lock.writeLock().lock(); // assertFalse(lock.hasWaiters(c)); // assertTrue(lock.getWaitingThreads(c).isEmpty()); // lock.writeLock().unlock(); // t1.join(SHORT_DELAY_MS); // t2.join(SHORT_DELAY_MS); // assertFalse(t1.isAlive()); // assertFalse(t2.isAlive()); // } // catch (Exception ex) { // unexpectedException(); // } // } /** * toString indicates current lock state */ public void testToString() { ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); String us = lock.toString(); assertTrue(us.indexOf("Write locks = 0") >= 0); assertTrue(us.indexOf("Read locks = 0") >= 0); lock.writeLock().lock(); String ws = lock.toString(); assertTrue(ws.indexOf("Write locks = 1") >= 0); assertTrue(ws.indexOf("Read locks = 0") >= 0); lock.writeLock().unlock(); lock.readLock().lock(); lock.readLock().lock(); String rs = lock.toString(); assertTrue(rs.indexOf("Write locks = 0") >= 0); assertTrue(rs.indexOf("Read locks = 2") >= 0); } /** * readLock.toString indicates current lock state */ public void testReadLockToString() { ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); String us = lock.readLock().toString(); assertTrue(us.indexOf("Read locks = 0") >= 0); lock.readLock().lock(); lock.readLock().lock(); String rs = lock.readLock().toString(); assertTrue(rs.indexOf("Read locks = 2") >= 0); } /** * writeLock.toString indicates current lock state */ public void testWriteLockToString() { ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); String us = lock.writeLock().toString(); assertTrue(us.indexOf("Unlocked") >= 0); lock.writeLock().lock(); String ls = lock.writeLock().toString(); assertTrue(ls.indexOf("Locked") >= 0); } } backport-util-concurrent-3.1-src/test/tck/src/ThreadPoolExecutorTest.java0000644001750700037720000015113110431260156025520 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import junit.framework.*; import java.util.List; import java.util.ArrayList; import java.util.Iterator; public class ThreadPoolExecutorTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ThreadPoolExecutorTest.class); } static class ExtendedTPE extends ThreadPoolExecutor { volatile boolean beforeCalled = false; volatile boolean afterCalled = false; volatile boolean terminatedCalled = false; public ExtendedTPE() { super(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new SynchronousQueue()); } protected void beforeExecute(Thread t, Runnable r) { beforeCalled = true; } protected void afterExecute(Runnable r, Throwable t) { afterCalled = true; } protected void terminated() { terminatedCalled = true; } } static class FailingThreadFactory implements ThreadFactory{ int calls = 0; public Thread newThread(Runnable r){ if (++calls > 1) return null; return new Thread(r); } } /** * execute successfully executes a runnable */ public void testExecute() { ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { p1.execute(new Runnable() { public void run() { try { Thread.sleep(SHORT_DELAY_MS); } catch(InterruptedException e){ threadUnexpectedException(); } } }); Thread.sleep(SMALL_DELAY_MS); } catch(InterruptedException e){ unexpectedException(); } joinPool(p1); } /** * getActiveCount increases but doesn't overestimate, when a * thread becomes active */ public void testGetActiveCount() { ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(0, p2.getActiveCount()); p2.execute(new MediumRunnable()); try { Thread.sleep(SHORT_DELAY_MS); } catch(Exception e){ unexpectedException(); } assertEquals(1, p2.getActiveCount()); joinPool(p2); } /** * prestartCoreThread starts a thread if under corePoolSize, else doesn't */ public void testPrestartCoreThread() { ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(0, p2.getPoolSize()); assertTrue(p2.prestartCoreThread()); assertEquals(1, p2.getPoolSize()); assertTrue(p2.prestartCoreThread()); assertEquals(2, p2.getPoolSize()); assertFalse(p2.prestartCoreThread()); assertEquals(2, p2.getPoolSize()); joinPool(p2); } /** * prestartAllCoreThreads starts all corePoolSize threads */ public void testPrestartAllCoreThreads() { ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(0, p2.getPoolSize()); p2.prestartAllCoreThreads(); assertEquals(2, p2.getPoolSize()); p2.prestartAllCoreThreads(); assertEquals(2, p2.getPoolSize()); joinPool(p2); } /** * getCompletedTaskCount increases, but doesn't overestimate, * when tasks complete */ public void testGetCompletedTaskCount() { ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(0, p2.getCompletedTaskCount()); p2.execute(new ShortRunnable()); try { Thread.sleep(SMALL_DELAY_MS); } catch(Exception e){ unexpectedException(); } assertEquals(1, p2.getCompletedTaskCount()); try { p2.shutdown(); } catch(SecurityException ok) { return; } joinPool(p2); } /** * getCorePoolSize returns size given in constructor if not otherwise set */ public void testGetCorePoolSize() { ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(1, p1.getCorePoolSize()); joinPool(p1); } /** * getKeepAliveTime returns value given in constructor if not otherwise set */ public void testGetKeepAliveTime() { ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, 1000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(1, p2.getKeepAliveTime(TimeUnit.SECONDS)); joinPool(p2); } /** * getThreadFactory returns factory in constructor if not set */ public void testGetThreadFactory() { ThreadFactory tf = new SimpleThreadFactory(); ThreadPoolExecutor p = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10), tf, new NoOpREHandler()); assertSame(tf, p.getThreadFactory()); joinPool(p); } /** * setThreadFactory sets the thread factory returned by getThreadFactory */ public void testSetThreadFactory() { ThreadPoolExecutor p = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); ThreadFactory tf = new SimpleThreadFactory(); p.setThreadFactory(tf); assertSame(tf, p.getThreadFactory()); joinPool(p); } /** * setThreadFactory(null) throws NPE */ public void testSetThreadFactoryNull() { ThreadPoolExecutor p = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { p.setThreadFactory(null); shouldThrow(); } catch (NullPointerException success) { } finally { joinPool(p); } } /** * getRejectedExecutionHandler returns handler in constructor if not set */ public void testGetRejectedExecutionHandler() { RejectedExecutionHandler h = new NoOpREHandler(); ThreadPoolExecutor p = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10), h); assertSame(h, p.getRejectedExecutionHandler()); joinPool(p); } /** * setRejectedExecutionHandler sets the handler returned by * getRejectedExecutionHandler */ public void testSetRejectedExecutionHandler() { ThreadPoolExecutor p = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); RejectedExecutionHandler h = new NoOpREHandler(); p.setRejectedExecutionHandler(h); assertSame(h, p.getRejectedExecutionHandler()); joinPool(p); } /** * setRejectedExecutionHandler(null) throws NPE */ public void testSetRejectedExecutionHandlerNull() { ThreadPoolExecutor p = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { p.setRejectedExecutionHandler(null); shouldThrow(); } catch (NullPointerException success) { } finally { joinPool(p); } } /** * getLargestPoolSize increases, but doesn't overestimate, when * multiple threads active */ public void testGetLargestPoolSize() { ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { assertEquals(0, p2.getLargestPoolSize()); p2.execute(new MediumRunnable()); p2.execute(new MediumRunnable()); Thread.sleep(SHORT_DELAY_MS); assertEquals(2, p2.getLargestPoolSize()); } catch(Exception e){ unexpectedException(); } joinPool(p2); } /** * getMaximumPoolSize returns value given in constructor if not * otherwise set */ public void testGetMaximumPoolSize() { ThreadPoolExecutor p2 = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(2, p2.getMaximumPoolSize()); joinPool(p2); } /** * getPoolSize increases, but doesn't overestimate, when threads * become active */ public void testGetPoolSize() { ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertEquals(0, p1.getPoolSize()); p1.execute(new MediumRunnable()); assertEquals(1, p1.getPoolSize()); joinPool(p1); } /** * getTaskCount increases, but doesn't overestimate, when tasks submitted */ public void testGetTaskCount() { ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { assertEquals(0, p1.getTaskCount()); p1.execute(new MediumRunnable()); Thread.sleep(SHORT_DELAY_MS); assertEquals(1, p1.getTaskCount()); } catch(Exception e){ unexpectedException(); } joinPool(p1); } /** * isShutDown is false before shutdown, true after */ public void testIsShutdown() { ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertFalse(p1.isShutdown()); try { p1.shutdown(); } catch(SecurityException ok) { return; } assertTrue(p1.isShutdown()); joinPool(p1); } /** * isTerminated is false before termination, true after */ public void testIsTerminated() { ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertFalse(p1.isTerminated()); try { p1.execute(new MediumRunnable()); } finally { try { p1.shutdown(); } catch(SecurityException ok) { return; } } try { assertTrue(p1.awaitTermination(LONG_DELAY_MS, TimeUnit.MILLISECONDS)); assertTrue(p1.isTerminated()); } catch(Exception e){ unexpectedException(); } } /** * isTerminating is not true when running or when terminated */ public void testIsTerminating() { ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertFalse(p1.isTerminating()); try { p1.execute(new SmallRunnable()); assertFalse(p1.isTerminating()); } finally { try { p1.shutdown(); } catch(SecurityException ok) { return; } } try { assertTrue(p1.awaitTermination(LONG_DELAY_MS, TimeUnit.MILLISECONDS)); assertTrue(p1.isTerminated()); assertFalse(p1.isTerminating()); } catch(Exception e){ unexpectedException(); } } /** * getQueue returns the work queue, which contains queued tasks */ public void testGetQueue() { BlockingQueue q = new ArrayBlockingQueue(10); ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, q); FutureTask[] tasks = new FutureTask[5]; for(int i = 0; i < 5; i++){ tasks[i] = new FutureTask(new MediumPossiblyInterruptedRunnable(), Boolean.TRUE); p1.execute(tasks[i]); } try { Thread.sleep(SHORT_DELAY_MS); BlockingQueue wq = p1.getQueue(); assertSame(q, wq); assertFalse(wq.contains(tasks[0])); assertTrue(wq.contains(tasks[4])); for (int i = 1; i < 5; ++i) tasks[i].cancel(true); p1.shutdownNow(); } catch(Exception e) { unexpectedException(); } finally { joinPool(p1); } } /** * remove(task) removes queued task, and fails to remove active task */ public void testRemove() { BlockingQueue q = new ArrayBlockingQueue(10); ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, q); FutureTask[] tasks = new FutureTask[5]; for(int i = 0; i < 5; i++){ tasks[i] = new FutureTask(new MediumPossiblyInterruptedRunnable(), Boolean.TRUE); p1.execute(tasks[i]); } try { Thread.sleep(SHORT_DELAY_MS); assertFalse(p1.remove(tasks[0])); assertTrue(q.contains(tasks[4])); assertTrue(q.contains(tasks[3])); assertTrue(p1.remove(tasks[4])); assertFalse(p1.remove(tasks[4])); assertFalse(q.contains(tasks[4])); assertTrue(q.contains(tasks[3])); assertTrue(p1.remove(tasks[3])); assertFalse(q.contains(tasks[3])); } catch(Exception e) { unexpectedException(); } finally { joinPool(p1); } } /** * purge removes cancelled tasks from the queue */ public void testPurge() { ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); FutureTask[] tasks = new FutureTask[5]; for(int i = 0; i < 5; i++){ tasks[i] = new FutureTask(new MediumPossiblyInterruptedRunnable(), Boolean.TRUE); p1.execute(tasks[i]); } tasks[4].cancel(true); tasks[3].cancel(true); p1.purge(); long count = p1.getTaskCount(); assertTrue(count >= 2 && count < 5); joinPool(p1); } /** * shutDownNow returns a list containing tasks that were not run */ public void testShutDownNow() { ThreadPoolExecutor p1 = new ThreadPoolExecutor(1, 1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); List l; try { for(int i = 0; i < 5; i++) p1.execute(new MediumPossiblyInterruptedRunnable()); } finally { try { l = p1.shutdownNow(); } catch (SecurityException ok) { return; } } assertTrue(p1.isShutdown()); assertTrue(l.size() <= 4); } // Exception Tests /** * Constructor throws if corePoolSize argument is less than zero */ public void testConstructor1() { try { new ThreadPoolExecutor(-1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is less than zero */ public void testConstructor2() { try { new ThreadPoolExecutor(1,-1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is equal to zero */ public void testConstructor3() { try { new ThreadPoolExecutor(1,0,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if keepAliveTime is less than zero */ public void testConstructor4() { try { new ThreadPoolExecutor(1,2,-1L,TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if corePoolSize is greater than the maximumPoolSize */ public void testConstructor5() { try { new ThreadPoolExecutor(2,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if workQueue is set to null */ public void testConstructorNullPointerException() { try { new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,null); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if corePoolSize argument is less than zero */ public void testConstructor6() { try { new ThreadPoolExecutor(-1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is less than zero */ public void testConstructor7() { try { new ThreadPoolExecutor(1,-1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is equal to zero */ public void testConstructor8() { try { new ThreadPoolExecutor(1,0,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if keepAliveTime is less than zero */ public void testConstructor9() { try { new ThreadPoolExecutor(1,2,-1L,TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if corePoolSize is greater than the maximumPoolSize */ public void testConstructor10() { try { new ThreadPoolExecutor(2,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if workQueue is set to null */ public void testConstructorNullPointerException2() { try { new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,null,new SimpleThreadFactory()); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if threadFactory is set to null */ public void testConstructorNullPointerException3() { try { ThreadFactory f = null; new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10),f); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if corePoolSize argument is less than zero */ public void testConstructor11() { try { new ThreadPoolExecutor(-1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is less than zero */ public void testConstructor12() { try { new ThreadPoolExecutor(1,-1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is equal to zero */ public void testConstructor13() { try { new ThreadPoolExecutor(1,0,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if keepAliveTime is less than zero */ public void testConstructor14() { try { new ThreadPoolExecutor(1,2,-1L,TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if corePoolSize is greater than the maximumPoolSize */ public void testConstructor15() { try { new ThreadPoolExecutor(2,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if workQueue is set to null */ public void testConstructorNullPointerException4() { try { new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,null,new NoOpREHandler()); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if handler is set to null */ public void testConstructorNullPointerException5() { try { RejectedExecutionHandler r = null; new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10),r); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if corePoolSize argument is less than zero */ public void testConstructor16() { try { new ThreadPoolExecutor(-1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory(),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is less than zero */ public void testConstructor17() { try { new ThreadPoolExecutor(1,-1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory(),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if maximumPoolSize is equal to zero */ public void testConstructor18() { try { new ThreadPoolExecutor(1,0,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory(),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if keepAliveTime is less than zero */ public void testConstructor19() { try { new ThreadPoolExecutor(1,2,-1L,TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory(),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if corePoolSize is greater than the maximumPoolSize */ public void testConstructor20() { try { new ThreadPoolExecutor(2,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10),new SimpleThreadFactory(),new NoOpREHandler()); shouldThrow(); } catch (IllegalArgumentException success){} } /** * Constructor throws if workQueue is set to null */ public void testConstructorNullPointerException6() { try { new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,null,new SimpleThreadFactory(),new NoOpREHandler()); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if handler is set to null */ public void testConstructorNullPointerException7() { try { RejectedExecutionHandler r = null; new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10),new SimpleThreadFactory(),r); shouldThrow(); } catch (NullPointerException success){} } /** * Constructor throws if ThreadFactory is set top null */ public void testConstructorNullPointerException8() { try { ThreadFactory f = null; new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10),f,new NoOpREHandler()); shouldThrow(); } catch (NullPointerException successdn8){} } /** * execute throws RejectedExecutionException * if saturated. */ public void testSaturatedExecute() { ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1)); try { for(int i = 0; i < 5; ++i){ p.execute(new MediumRunnable()); } shouldThrow(); } catch(RejectedExecutionException success){} joinPool(p); } /** * executor using CallerRunsPolicy runs task if saturated. */ public void testSaturatedExecute2() { RejectedExecutionHandler h = new ThreadPoolExecutor.CallerRunsPolicy(); ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1), h); try { TrackedNoOpRunnable[] tasks = new TrackedNoOpRunnable[5]; for(int i = 0; i < 5; ++i){ tasks[i] = new TrackedNoOpRunnable(); } TrackedLongRunnable mr = new TrackedLongRunnable(); p.execute(mr); for(int i = 0; i < 5; ++i){ p.execute(tasks[i]); } for(int i = 1; i < 5; ++i) { assertTrue(tasks[i].done); } try { p.shutdownNow(); } catch(SecurityException ok) { return; } } catch(RejectedExecutionException ex){ unexpectedException(); } finally { joinPool(p); } } /** * executor using DiscardPolicy drops task if saturated. */ public void testSaturatedExecute3() { RejectedExecutionHandler h = new ThreadPoolExecutor.DiscardPolicy(); ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1), h); try { TrackedNoOpRunnable[] tasks = new TrackedNoOpRunnable[5]; for(int i = 0; i < 5; ++i){ tasks[i] = new TrackedNoOpRunnable(); } p.execute(new TrackedLongRunnable()); for(int i = 0; i < 5; ++i){ p.execute(tasks[i]); } for(int i = 0; i < 5; ++i){ assertFalse(tasks[i].done); } try { p.shutdownNow(); } catch(SecurityException ok) { return; } } catch(RejectedExecutionException ex){ unexpectedException(); } finally { joinPool(p); } } /** * executor using DiscardOldestPolicy drops oldest task if saturated. */ public void testSaturatedExecute4() { RejectedExecutionHandler h = new ThreadPoolExecutor.DiscardOldestPolicy(); ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1), h); try { p.execute(new TrackedLongRunnable()); TrackedLongRunnable r2 = new TrackedLongRunnable(); p.execute(r2); assertTrue(p.getQueue().contains(r2)); TrackedNoOpRunnable r3 = new TrackedNoOpRunnable(); p.execute(r3); assertFalse(p.getQueue().contains(r2)); assertTrue(p.getQueue().contains(r3)); try { p.shutdownNow(); } catch(SecurityException ok) { return; } } catch(RejectedExecutionException ex){ unexpectedException(); } finally { joinPool(p); } } /** * execute throws RejectedExecutionException if shutdown */ public void testRejectedExecutionExceptionOnShutdown() { ThreadPoolExecutor tpe = new ThreadPoolExecutor(1,1,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(1)); try { tpe.shutdown(); } catch(SecurityException ok) { return; } try { tpe.execute(new NoOpRunnable()); shouldThrow(); } catch(RejectedExecutionException success){} joinPool(tpe); } /** * execute using CallerRunsPolicy drops task on shutdown */ public void testCallerRunsOnShutdown() { RejectedExecutionHandler h = new ThreadPoolExecutor.CallerRunsPolicy(); ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1), h); try { p.shutdown(); } catch(SecurityException ok) { return; } try { TrackedNoOpRunnable r = new TrackedNoOpRunnable(); p.execute(r); assertFalse(r.done); } catch(RejectedExecutionException success){ unexpectedException(); } finally { joinPool(p); } } /** * execute using DiscardPolicy drops task on shutdown */ public void testDiscardOnShutdown() { RejectedExecutionHandler h = new ThreadPoolExecutor.DiscardPolicy(); ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1), h); try { p.shutdown(); } catch(SecurityException ok) { return; } try { TrackedNoOpRunnable r = new TrackedNoOpRunnable(); p.execute(r); assertFalse(r.done); } catch(RejectedExecutionException success){ unexpectedException(); } finally { joinPool(p); } } /** * execute using DiscardOldestPolicy drops task on shutdown */ public void testDiscardOldestOnShutdown() { RejectedExecutionHandler h = new ThreadPoolExecutor.DiscardOldestPolicy(); ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1), h); try { p.shutdown(); } catch(SecurityException ok) { return; } try { TrackedNoOpRunnable r = new TrackedNoOpRunnable(); p.execute(r); assertFalse(r.done); } catch(RejectedExecutionException success){ unexpectedException(); } finally { joinPool(p); } } /** * execute (null) throws NPE */ public void testExecuteNull() { ThreadPoolExecutor tpe = null; try { tpe = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10)); tpe.execute(null); shouldThrow(); } catch(NullPointerException success){} joinPool(tpe); } /** * setCorePoolSize of negative value throws IllegalArgumentException */ public void testCorePoolSizeIllegalArgumentException() { ThreadPoolExecutor tpe = null; try { tpe = new ThreadPoolExecutor(1,2,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10)); } catch(Exception e){} try { tpe.setCorePoolSize(-1); shouldThrow(); } catch(IllegalArgumentException success){ } finally { try { tpe.shutdown(); } catch(SecurityException ok) { return; } } joinPool(tpe); } /** * setMaximumPoolSize(int) throws IllegalArgumentException if * given a value less the core pool size */ public void testMaximumPoolSizeIllegalArgumentException() { ThreadPoolExecutor tpe = null; try { tpe = new ThreadPoolExecutor(2,3,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10)); } catch(Exception e){} try { tpe.setMaximumPoolSize(1); shouldThrow(); } catch(IllegalArgumentException success){ } finally { try { tpe.shutdown(); } catch(SecurityException ok) { return; } } joinPool(tpe); } /** * setMaximumPoolSize throws IllegalArgumentException * if given a negative value */ public void testMaximumPoolSizeIllegalArgumentException2() { ThreadPoolExecutor tpe = null; try { tpe = new ThreadPoolExecutor(2,3,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10)); } catch(Exception e){} try { tpe.setMaximumPoolSize(-1); shouldThrow(); } catch(IllegalArgumentException success){ } finally { try { tpe.shutdown(); } catch(SecurityException ok) { return; } } joinPool(tpe); } /** * setKeepAliveTime throws IllegalArgumentException * when given a negative value */ public void testKeepAliveTimeIllegalArgumentException() { ThreadPoolExecutor tpe = null; try { tpe = new ThreadPoolExecutor(2,3,LONG_DELAY_MS, TimeUnit.MILLISECONDS,new ArrayBlockingQueue(10)); } catch(Exception e){} try { tpe.setKeepAliveTime(-1,TimeUnit.MILLISECONDS); shouldThrow(); } catch(IllegalArgumentException success){ } finally { try { tpe.shutdown(); } catch(SecurityException ok) { return; } } joinPool(tpe); } /** * terminated() is called on termination */ public void testTerminated() { ExtendedTPE tpe = new ExtendedTPE(); try { tpe.shutdown(); } catch(SecurityException ok) { return; } assertTrue(tpe.terminatedCalled); joinPool(tpe); } /** * beforeExecute and afterExecute are called when executing task */ public void testBeforeAfter() { ExtendedTPE tpe = new ExtendedTPE(); try { TrackedNoOpRunnable r = new TrackedNoOpRunnable(); tpe.execute(r); Thread.sleep(SHORT_DELAY_MS); assertTrue(r.done); assertTrue(tpe.beforeCalled); assertTrue(tpe.afterCalled); try { tpe.shutdown(); } catch(SecurityException ok) { return; } } catch(Exception ex) { unexpectedException(); } finally { joinPool(tpe); } } /** * completed submit of callable returns result */ public void testSubmitCallable() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { Future future = e.submit(new StringTask()); String result = (String)future.get(); assertSame(TEST_STRING, result); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { joinPool(e); } } /** * completed submit of runnable returns successfully */ public void testSubmitRunnable() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { Future future = e.submit(new NoOpRunnable()); future.get(); assertTrue(future.isDone()); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { joinPool(e); } } /** * completed submit of (runnable, result) returns result */ public void testSubmitRunnable2() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { Future future = e.submit(new NoOpRunnable(), TEST_STRING); String result = (String)future.get(); assertSame(TEST_STRING, result); } catch (ExecutionException ex) { unexpectedException(); } catch (InterruptedException ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(null) throws NPE */ public void testInvokeAny1() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { e.invokeAny(null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(empty collection) throws IAE */ public void testInvokeAny2() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { e.invokeAny(new ArrayList()); } catch (IllegalArgumentException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) throws NPE if c has null elements */ public void testInvokeAny3() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAny(l); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) throws ExecutionException if no task completes */ public void testInvokeAny4() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new NPETask()); e.invokeAny(l); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAny(c) returns result of some task */ public void testInvokeAny5() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); String result = (String)e.invokeAny(l); assertSame(TEST_STRING, result); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(null) throws NPE */ public void testInvokeAll1() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { e.invokeAll(null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(empty collection) returns empty collection */ public void testInvokeAll2() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { List r = e.invokeAll(new ArrayList()); assertTrue(r.isEmpty()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(c) throws NPE if c has null elements */ public void testInvokeAll3() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAll(l); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * get of element of invokeAll(c) throws exception on failed task */ public void testInvokeAll4() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new NPETask()); List result = e.invokeAll(l); assertEquals(1, result.size()); for (Iterator it = result.iterator(); it.hasNext();) ((Future)it.next()).get(); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * invokeAll(c) returns results of all completed tasks */ public void testInvokeAll5() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); List result = e.invokeAll(l); assertEquals(2, result.size()); for (Iterator it = result.iterator(); it.hasNext();) assertSame(TEST_STRING, ((Future)it.next()).get()); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(null) throws NPE */ public void testTimedInvokeAny1() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { e.invokeAny(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(,,null) throws NPE */ public void testTimedInvokeAnyNullTimeUnit() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); e.invokeAny(l, MEDIUM_DELAY_MS, null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(empty collection) throws IAE */ public void testTimedInvokeAny2() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { e.invokeAny(new ArrayList(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (IllegalArgumentException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) throws NPE if c has null elements */ public void testTimedInvokeAny3() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { ex.printStackTrace(); unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) throws ExecutionException if no task completes */ public void testTimedInvokeAny4() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new NPETask()); e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAny(c) returns result of some task */ public void testTimedInvokeAny5() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); String result = (String)e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertSame(TEST_STRING, result); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(null) throws NPE */ public void testTimedInvokeAll1() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { e.invokeAll(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(,,null) throws NPE */ public void testTimedInvokeAllNullTimeUnit() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); e.invokeAll(l, MEDIUM_DELAY_MS, null); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(empty collection) returns empty collection */ public void testTimedInvokeAll2() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { List r = e.invokeAll(new ArrayList(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertTrue(r.isEmpty()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) throws NPE if c has null elements */ public void testTimedInvokeAll3() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(null); e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); } catch (NullPointerException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * get of element of invokeAll(c) throws exception on failed task */ public void testTimedInvokeAll4() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new NPETask()); List result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(1, result.size()); for (Iterator it = result.iterator(); it.hasNext();) ((Future)it.next()).get(); } catch(ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) returns results of all completed tasks */ public void testTimedInvokeAll5() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(new StringTask()); List result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(2, result.size()); for (Iterator it = result.iterator(); it.hasNext();) assertSame(TEST_STRING, ((Future)it.next()).get()); } catch (ExecutionException success) { } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * timed invokeAll(c) cancels tasks not completed by timeout */ public void testTimedInvokeAll6() { ExecutorService e = new ThreadPoolExecutor(2, 2, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); try { ArrayList l = new ArrayList(); l.add(new StringTask()); l.add(Executors.callable(new MediumPossiblyInterruptedRunnable(), TEST_STRING)); l.add(new StringTask()); List result = e.invokeAll(l, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); assertEquals(3, result.size()); Iterator it = result.iterator(); Future f1 = (Future)it.next(); Future f2 = (Future)it.next(); Future f3 = (Future)it.next(); assertTrue(f1.isDone()); assertTrue(f2.isDone()); assertTrue(f3.isDone()); assertFalse(f1.isCancelled()); assertTrue(f2.isCancelled()); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * Execution continues if there is at least one thread even if * thread factory fails to create more */ public void testFailingThreadFactory() { ExecutorService e = new ThreadPoolExecutor(100, 100, LONG_DELAY_MS, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), new FailingThreadFactory()); try { ArrayList l = new ArrayList(); for (int k = 0; k < 100; ++k) { e.execute(new NoOpRunnable()); } Thread.sleep(LONG_DELAY_MS); } catch(Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * allowsCoreThreadTimeOut is by default false. */ public void testAllowsCoreThreadTimeOut() { ThreadPoolExecutor tpe = new ThreadPoolExecutor(2, 2, 1000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); assertFalse(tpe.allowsCoreThreadTimeOut()); joinPool(tpe); } /** * allowCoreThreadTimeOut(true) causes idle threads to time out */ public void testAllowCoreThreadTimeOut_true() { ThreadPoolExecutor tpe = new ThreadPoolExecutor(2, 10, 10, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); tpe.allowCoreThreadTimeOut(true); tpe.execute(new NoOpRunnable()); try { Thread.sleep(MEDIUM_DELAY_MS); assertEquals(0, tpe.getPoolSize()); } catch(InterruptedException e){ unexpectedException(); } finally { joinPool(tpe); } } /** * allowCoreThreadTimeOut(false) causes idle threads not to time out */ public void testAllowCoreThreadTimeOut_false() { ThreadPoolExecutor tpe = new ThreadPoolExecutor(2, 10, 10, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(10)); tpe.allowCoreThreadTimeOut(false); tpe.execute(new NoOpRunnable()); try { Thread.sleep(MEDIUM_DELAY_MS); assertTrue(tpe.getPoolSize() >= 1); } catch(InterruptedException e){ unexpectedException(); } finally { joinPool(tpe); } } /** * execute allows the same task to be submitted multiple times, even * if rejected */ public void testRejectedRecycledTask() { final int nTasks = 1000; final AtomicInteger nRun = new AtomicInteger(0); final Runnable recycledTask = new Runnable() { public void run() { nRun.getAndIncrement(); } }; final ThreadPoolExecutor p = new ThreadPoolExecutor(1, 30, 60, TimeUnit.SECONDS, new ArrayBlockingQueue(30)); try { for (int i = 0; i < nTasks; ++i) { for (;;) { try { p.execute(recycledTask); break; } catch (RejectedExecutionException ignore) { } } } Thread.sleep(5000); // enough time to run all tasks assertEquals(nRun.get(), nTasks); } catch(Exception ex) { ex.printStackTrace(); unexpectedException(); } finally { p.shutdown(); } } } backport-util-concurrent-3.1-src/test/tck/src/ExecutorsTest.java0000644001750700037720000005003210431777323023730 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.math.BigInteger; import java.security.*; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ExecutorsTest extends JSR166TestCase{ public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ExecutorsTest.class); } static class TimedCallable implements Callable { private final ExecutorService exec; private final Callable func; private final long msecs; TimedCallable(ExecutorService exec, Callable func, long msecs) { this.exec = exec; this.func = func; this.msecs = msecs; } public Object call() throws Exception { Future ftask = exec.submit(func); try { return ftask.get(msecs, TimeUnit.MILLISECONDS); } finally { ftask.cancel(true); } } } private static class Fib implements Callable { private final BigInteger n; Fib(long n) { if (n < 0) throw new IllegalArgumentException("need non-negative arg, but got " + n); this.n = BigInteger.valueOf(n); } public Object call() { BigInteger f1 = BigInteger.ONE; BigInteger f2 = f1; for (BigInteger i = BigInteger.ZERO; i.compareTo(n) < 0; i = i.add(BigInteger.ONE)) { BigInteger t = f1.add(f2); f1 = f2; f2 = t; } return f1; } }; /** * A newCachedThreadPool can execute runnables */ public void testNewCachedThreadPool1() { ExecutorService e = Executors.newCachedThreadPool(); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); joinPool(e); } /** * A newCachedThreadPool with given ThreadFactory can execute runnables */ public void testNewCachedThreadPool2() { ExecutorService e = Executors.newCachedThreadPool(new SimpleThreadFactory()); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); joinPool(e); } /** * A newCachedThreadPool with null ThreadFactory throws NPE */ public void testNewCachedThreadPool3() { try { ExecutorService e = Executors.newCachedThreadPool(null); shouldThrow(); } catch(NullPointerException success) { } } /** * A new SingleThreadExecutor can execute runnables */ public void testNewSingleThreadExecutor1() { ExecutorService e = Executors.newSingleThreadExecutor(); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); joinPool(e); } /** * A new SingleThreadExecutor with given ThreadFactory can execute runnables */ public void testNewSingleThreadExecutor2() { ExecutorService e = Executors.newSingleThreadExecutor(new SimpleThreadFactory()); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); joinPool(e); } /** * A new SingleThreadExecutor with null ThreadFactory throws NPE */ public void testNewSingleThreadExecutor3() { try { ExecutorService e = Executors.newSingleThreadExecutor(null); shouldThrow(); } catch(NullPointerException success) { } } /** * A new SingleThreadExecutor cannot be casted to concrete implementation */ public void testCastNewSingleThreadExecutor() { ExecutorService e = Executors.newSingleThreadExecutor(); try { ThreadPoolExecutor tpe = (ThreadPoolExecutor)e; } catch (ClassCastException success) { } finally { joinPool(e); } } /** * A new newFixedThreadPool can execute runnables */ public void testNewFixedThreadPool1() { ExecutorService e = Executors.newFixedThreadPool(2); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); joinPool(e); } /** * A new newFixedThreadPool with given ThreadFactory can execute runnables */ public void testNewFixedThreadPool2() { ExecutorService e = Executors.newFixedThreadPool(2, new SimpleThreadFactory()); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); joinPool(e); } /** * A new newFixedThreadPool with null ThreadFactory throws NPE */ public void testNewFixedThreadPool3() { try { ExecutorService e = Executors.newFixedThreadPool(2, null); shouldThrow(); } catch(NullPointerException success) { } } /** * A new newFixedThreadPool with 0 threads throws IAE */ public void testNewFixedThreadPool4() { try { ExecutorService e = Executors.newFixedThreadPool(0); shouldThrow(); } catch(IllegalArgumentException success) { } } /** * An unconfigurable newFixedThreadPool can execute runnables */ public void testunconfigurableExecutorService() { ExecutorService e = Executors.unconfigurableExecutorService(Executors.newFixedThreadPool(2)); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); e.execute(new NoOpRunnable()); joinPool(e); } /** * unconfigurableExecutorService(null) throws NPE */ public void testunconfigurableExecutorServiceNPE() { try { ExecutorService e = Executors.unconfigurableExecutorService(null); } catch (NullPointerException success) { } } /** * unconfigurableScheduledExecutorService(null) throws NPE */ public void testunconfigurableScheduledExecutorServiceNPE() { try { ExecutorService e = Executors.unconfigurableScheduledExecutorService(null); } catch (NullPointerException success) { } } /** * a newSingleThreadScheduledExecutor successfully runs delayed task */ public void testNewSingleThreadScheduledExecutor() { try { TrackedCallable callable = new TrackedCallable(); ScheduledExecutorService p1 = Executors.newSingleThreadScheduledExecutor(); Future f = p1.schedule(callable, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); assertFalse(callable.done); Thread.sleep(MEDIUM_DELAY_MS); assertTrue(callable.done); assertEquals(Boolean.TRUE, f.get()); joinPool(p1); } catch(RejectedExecutionException e){} catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * a newScheduledThreadPool successfully runs delayed task */ public void testnewScheduledThreadPool() { try { TrackedCallable callable = new TrackedCallable(); ScheduledExecutorService p1 = Executors.newScheduledThreadPool(2); Future f = p1.schedule(callable, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); assertFalse(callable.done); Thread.sleep(MEDIUM_DELAY_MS); assertTrue(callable.done); assertEquals(Boolean.TRUE, f.get()); joinPool(p1); } catch(RejectedExecutionException e){} catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * an unconfigurable newScheduledThreadPool successfully runs delayed task */ public void testunconfigurableScheduledExecutorService() { try { TrackedCallable callable = new TrackedCallable(); ScheduledExecutorService p1 = Executors.unconfigurableScheduledExecutorService(Executors.newScheduledThreadPool(2)); Future f = p1.schedule(callable, SHORT_DELAY_MS, TimeUnit.MILLISECONDS); assertFalse(callable.done); Thread.sleep(MEDIUM_DELAY_MS); assertTrue(callable.done); assertEquals(Boolean.TRUE, f.get()); joinPool(p1); } catch(RejectedExecutionException e){} catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * timeouts from execute will time out if they compute too long. */ public void testTimedCallable() { int N = 10000; ExecutorService executor = Executors.newSingleThreadExecutor(); List tasks = new ArrayList(N); try { long startTime = System.currentTimeMillis(); long i = 0; while (tasks.size() < N) { tasks.add(new TimedCallable(executor, new Fib(i), 1)); i += 10; } int iters = 0; BigInteger sum = BigInteger.ZERO; for (Iterator it = tasks.iterator(); it.hasNext();) { try { ++iters; sum = sum.add((BigInteger)((Callable)it.next()).call()); } catch (TimeoutException success) { assertTrue(iters > 0); return; } catch (Exception e) { unexpectedException(); } } // if by chance we didn't ever time out, total time must be small long elapsed = System.currentTimeMillis() - startTime; assertTrue(elapsed < N); } finally { joinPool(executor); } } /** * ThreadPoolExecutor using defaultThreadFactory has * specified group, priority, daemon status, and name */ public void testDefaultThreadFactory() { final ThreadGroup egroup = Thread.currentThread().getThreadGroup(); Runnable r = new Runnable() { public void run() { try { Thread current = Thread.currentThread(); threadAssertTrue(!current.isDaemon()); threadAssertTrue(current.getPriority() <= Thread.NORM_PRIORITY); ThreadGroup g = current.getThreadGroup(); SecurityManager s = System.getSecurityManager(); if (s != null) threadAssertTrue(g == s.getThreadGroup()); else threadAssertTrue(g == egroup); String name = current.getName(); threadAssertTrue(name.endsWith("thread-1")); } catch (SecurityException ok) { // Also pass if not allowed to change setting } } }; ExecutorService e = Executors.newSingleThreadExecutor(Executors.defaultThreadFactory()); e.execute(r); try { e.shutdown(); } catch(SecurityException ok) { } try { Thread.sleep(SHORT_DELAY_MS); } catch (Exception eX) { unexpectedException(); } finally { joinPool(e); } } /** * ThreadPoolExecutor using privilegedThreadFactory has * specified group, priority, daemon status, name, * access control context and context class loader */ public void testPrivilegedThreadFactory() { Policy savedPolicy = null; try { savedPolicy = Policy.getPolicy(); AdjustablePolicy policy = new AdjustablePolicy(); policy.addPermission(new RuntimePermission("getContextClassLoader")); policy.addPermission(new RuntimePermission("setContextClassLoader")); Policy.setPolicy(policy); } catch (AccessControlException ok) { return; } final ThreadGroup egroup = Thread.currentThread().getThreadGroup(); final ClassLoader thisccl = Thread.currentThread().getContextClassLoader(); final AccessControlContext thisacc = AccessController.getContext(); Runnable r = new Runnable() { public void run() { try { Thread current = Thread.currentThread(); threadAssertTrue(!current.isDaemon()); threadAssertTrue(current.getPriority() <= Thread.NORM_PRIORITY); ThreadGroup g = current.getThreadGroup(); SecurityManager s = System.getSecurityManager(); if (s != null) threadAssertTrue(g == s.getThreadGroup()); else threadAssertTrue(g == egroup); String name = current.getName(); threadAssertTrue(name.endsWith("thread-1")); threadAssertTrue(thisccl == current.getContextClassLoader()); threadAssertTrue(thisacc.equals(AccessController.getContext())); } catch(SecurityException ok) { // Also pass if not allowed to change settings } } }; ExecutorService e = Executors.newSingleThreadExecutor(Executors.privilegedThreadFactory()); Policy.setPolicy(savedPolicy); e.execute(r); try { e.shutdown(); } catch(SecurityException ok) { } try { Thread.sleep(SHORT_DELAY_MS); } catch (Exception ex) { unexpectedException(); } finally { joinPool(e); } } void checkCCL() { AccessController.getContext().checkPermission(new RuntimePermission("getContextClassLoader")); } class CheckCCL implements Callable { public Object call() { checkCCL(); return null; } } /** * Without class loader permissions, creating * privilegedCallableUsingCurrentClassLoader throws ACE */ public void testCreatePrivilegedCallableUsingCCLWithNoPrivs() { Policy savedPolicy = null; try { savedPolicy = Policy.getPolicy(); AdjustablePolicy policy = new AdjustablePolicy(); Policy.setPolicy(policy); } catch (AccessControlException ok) { return; } // Check if program still has too many permissions to run test try { checkCCL(); // too many privileges to test; so return Policy.setPolicy(savedPolicy); return; } catch(AccessControlException ok) { } try { Callable task = Executors.privilegedCallableUsingCurrentClassLoader(new NoOpCallable()); shouldThrow(); } catch(AccessControlException success) { } catch(Exception ex) { unexpectedException(); } finally { Policy.setPolicy(savedPolicy); } } /** * With class loader permissions, calling * privilegedCallableUsingCurrentClassLoader does not throw ACE */ public void testprivilegedCallableUsingCCLWithPrivs() { Policy savedPolicy = null; try { savedPolicy = Policy.getPolicy(); AdjustablePolicy policy = new AdjustablePolicy(); policy.addPermission(new RuntimePermission("getContextClassLoader")); policy.addPermission(new RuntimePermission("setContextClassLoader")); Policy.setPolicy(policy); } catch (AccessControlException ok) { return; } try { Callable task = Executors.privilegedCallableUsingCurrentClassLoader(new NoOpCallable()); task.call(); } catch(Exception ex) { unexpectedException(); } finally { Policy.setPolicy(savedPolicy); } } /** * Without permissions, calling privilegedCallable throws ACE */ public void testprivilegedCallableWithNoPrivs() { Callable task; Policy savedPolicy = null; AdjustablePolicy policy = null; AccessControlContext noprivAcc = null; try { savedPolicy = Policy.getPolicy(); policy = new AdjustablePolicy(); Policy.setPolicy(policy); noprivAcc = AccessController.getContext(); task = Executors.privilegedCallable(new CheckCCL()); Policy.setPolicy(savedPolicy); } catch (AccessControlException ok) { return; // program has too few permissions to set up test } // Make sure that program doesn't have too many permissions try { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { checkCCL(); return null; }}, noprivAcc); // too many permssions; skip test return; } catch(AccessControlException ok) { } try { task.call(); shouldThrow(); } catch(AccessControlException success) { } catch(Exception ex) { unexpectedException(); } } /** * With permissions, calling privilegedCallable succeeds */ public void testprivilegedCallableWithPrivs() { Policy savedPolicy = null; try { savedPolicy = Policy.getPolicy(); AdjustablePolicy policy = new AdjustablePolicy(); policy.addPermission(new RuntimePermission("getContextClassLoader")); policy.addPermission(new RuntimePermission("setContextClassLoader")); Policy.setPolicy(policy); } catch (AccessControlException ok) { return; } Callable task = Executors.privilegedCallable(new CheckCCL()); try { task.call(); } catch(Exception ex) { unexpectedException(); } finally { Policy.setPolicy(savedPolicy); } } /** * callable(Runnable) returns null when called */ public void testCallable1() { try { Callable c = Executors.callable(new NoOpRunnable()); assertNull(c.call()); } catch(Exception ex) { unexpectedException(); } } /** * callable(Runnable, result) returns result when called */ public void testCallable2() { try { Callable c = Executors.callable(new NoOpRunnable(), one); assertEquals(one, c.call()); } catch(Exception ex) { unexpectedException(); } } /** * callable(PrivilegedAction) returns its result when called */ public void testCallable3() { try { Callable c = Executors.callable(new PrivilegedAction() { public Object run() { return one; }}); assertEquals(one, c.call()); } catch(Exception ex) { unexpectedException(); } } /** * callable(PrivilegedExceptionAction) returns its result when called */ public void testCallable4() { try { Callable c = Executors.callable(new PrivilegedExceptionAction() { public Object run() { return one; }}); assertEquals(one, c.call()); } catch(Exception ex) { unexpectedException(); } } /** * callable(null Runnable) throws NPE */ public void testCallableNPE1() { try { Runnable r = null; Callable c = Executors.callable(r); } catch (NullPointerException success) { } } /** * callable(null, result) throws NPE */ public void testCallableNPE2() { try { Runnable r = null; Callable c = Executors.callable(r, one); } catch (NullPointerException success) { } } /** * callable(null PrivilegedAction) throws NPE */ public void testCallableNPE3() { try { PrivilegedAction r = null; Callable c = Executors.callable(r); } catch (NullPointerException success) { } } /** * callable(null PrivilegedExceptionAction) throws NPE */ public void testCallableNPE4() { try { PrivilegedExceptionAction r = null; Callable c = Executors.callable(r); } catch (NullPointerException success) { } } } backport-util-concurrent-3.1-src/test/tck/src/LockSupportTest.java0000644001750700037720000001011010431260156024214 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; public class LockSupportTest extends JSR166TestCase{ // public static void main(String[] args) { // junit.textui.TestRunner.run (suite()); // } // public static Test suite() { // return new TestSuite(LockSupportTest.class); // } // // /** // * park is released by unpark occurring after park // */ // public void testPark() { // Thread t = new Thread(new Runnable() { // public void run() { // try { // LockSupport.park(); // } catch(Exception e){ // threadUnexpectedException(); // } // } // }); // try { // t.start(); // Thread.sleep(SHORT_DELAY_MS); // LockSupport.unpark(t); // t.join(); // } // catch(Exception e) { // unexpectedException(); // } // } // // /** // * park is released by unpark occurring before park // */ // public void testPark2() { // Thread t = new Thread(new Runnable() { // public void run() { // try { // Thread.sleep(SHORT_DELAY_MS); // LockSupport.park(); // } catch(Exception e){ // threadUnexpectedException(); // } // } // }); // try { // t.start(); // LockSupport.unpark(t); // t.join(); // } // catch(Exception e) { // unexpectedException(); // } // } // // /** // * park is released by interrupt // */ // public void testPark3() { // Thread t = new Thread(new Runnable() { // public void run() { // try { // LockSupport.park(); // threadAssertTrue(Thread.interrupted()); // } catch(Exception e){ // threadUnexpectedException(); // } // } // }); // try { // t.start(); // Thread.sleep(SHORT_DELAY_MS); // t.interrupt(); // t.join(); // } // catch(Exception e) { // unexpectedException(); // } // } // // /** // * park returns if interrupted before park // */ // public void testPark4() { // final ReentrantLock lock = new ReentrantLock(); // lock.lock(); // Thread t = new Thread(new Runnable() { // public void run() { // try { // lock.lock(); // LockSupport.park(); // } catch(Exception e){ // threadUnexpectedException(); // } // } // }); // try { // t.start(); // t.interrupt(); // lock.unlock(); // t.join(); // } // catch(Exception e) { // unexpectedException(); // } // } // // /** // * parkNanos times out if not unparked // */ // public void testParkNanos() { // Thread t = new Thread(new Runnable() { // public void run() { // try { // LockSupport.parkNanos(1000); // } catch(Exception e){ // threadUnexpectedException(); // } // } // }); // try { // t.start(); // t.join(); // } // catch(Exception e) { // unexpectedException(); // } // } // // // /** // * parkUntil times out if not unparked // */ // public void testParkUntil() { // Thread t = new Thread(new Runnable() { // public void run() { // try { // long d = new Date().getTime() + 100; // LockSupport.parkUntil(d); // } catch(Exception e){ // threadUnexpectedException(); // } // } // }); // try { // t.start(); // t.join(); // } // catch(Exception e) { // unexpectedException(); // } // } } backport-util-concurrent-3.1-src/test/tck/src/SemaphoreTest.java0000644001750700037720000007172510431405567023704 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import java.util.Collection; public class SemaphoreTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(SemaphoreTest.class); } /** * Subclass to expose protected methods */ static class PublicSemaphore extends Semaphore { PublicSemaphore(int p, boolean f) { super(p, f); } public Collection getQueuedThreads() { return super.getQueuedThreads(); } public void reducePermits(int p) { super.reducePermits(p); } } /** * A runnable calling acquire */ class InterruptibleLockRunnable implements Runnable { final Semaphore lock; InterruptibleLockRunnable(Semaphore l) { lock = l; } public void run() { try { lock.acquire(); } catch(InterruptedException success){} } } /** * A runnable calling acquire that expects to be * interrupted */ class InterruptedLockRunnable implements Runnable { final Semaphore lock; InterruptedLockRunnable(Semaphore l) { lock = l; } public void run() { try { lock.acquire(); threadShouldThrow(); } catch(InterruptedException success){} } } /** * Zero, negative, and positive initial values are allowed in constructor */ public void testConstructor() { Semaphore s0 = new Semaphore(0, false); assertEquals(0, s0.availablePermits()); assertFalse(s0.isFair()); Semaphore s1 = new Semaphore(-1, false); assertEquals(-1, s1.availablePermits()); assertFalse(s1.isFair()); Semaphore s2 = new Semaphore(-1, false); assertEquals(-1, s2.availablePermits()); assertFalse(s2.isFair()); } /** * Constructor without fairness argument behaves as nonfair */ public void testConstructor2() { Semaphore s0 = new Semaphore(0); assertEquals(0, s0.availablePermits()); assertFalse(s0.isFair()); Semaphore s1 = new Semaphore(-1); assertEquals(-1, s1.availablePermits()); assertFalse(s1.isFair()); Semaphore s2 = new Semaphore(-1); assertEquals(-1, s2.availablePermits()); assertFalse(s2.isFair()); } /** * tryAcquire succeeds when sufficient permits, else fails */ public void testTryAcquireInSameThread() { Semaphore s = new Semaphore(2, false); assertEquals(2, s.availablePermits()); assertTrue(s.tryAcquire()); assertTrue(s.tryAcquire()); assertEquals(0, s.availablePermits()); assertFalse(s.tryAcquire()); } /** * Acquire and release of semaphore succeed if initially available */ public void testAcquireReleaseInSameThread() { Semaphore s = new Semaphore(1, false); try { s.acquire(); s.release(); s.acquire(); s.release(); s.acquire(); s.release(); s.acquire(); s.release(); s.acquire(); s.release(); assertEquals(1, s.availablePermits()); } catch( InterruptedException e){ unexpectedException(); } } /** * Uninterruptible acquire and release of semaphore succeed if * initially available */ public void testAcquireUninterruptiblyReleaseInSameThread() { Semaphore s = new Semaphore(1, false); try { s.acquireUninterruptibly(); s.release(); s.acquireUninterruptibly(); s.release(); s.acquireUninterruptibly(); s.release(); s.acquireUninterruptibly(); s.release(); s.acquireUninterruptibly(); s.release(); assertEquals(1, s.availablePermits()); } finally { } } /** * Timed Acquire and release of semaphore succeed if * initially available */ public void testTimedAcquireReleaseInSameThread() { Semaphore s = new Semaphore(1, false); try { assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(); assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(); assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(); assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(); assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(); assertEquals(1, s.availablePermits()); } catch( InterruptedException e){ unexpectedException(); } } /** * A release in one thread enables an acquire in another thread */ public void testAcquireReleaseInDifferentThreads() { final Semaphore s = new Semaphore(0, false); Thread t = new Thread(new Runnable() { public void run() { try { s.acquire(); s.release(); s.release(); s.acquire(); } catch(InterruptedException ie){ threadUnexpectedException(); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); s.release(); s.release(); s.acquire(); s.acquire(); s.release(); t.join(); } catch( InterruptedException e){ unexpectedException(); } } /** * A release in one thread enables an uninterruptible acquire in another thread */ public void testUninterruptibleAcquireReleaseInDifferentThreads() { final Semaphore s = new Semaphore(0, false); Thread t = new Thread(new Runnable() { public void run() { s.acquireUninterruptibly(); s.release(); s.release(); s.acquireUninterruptibly(); } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); s.release(); s.release(); s.acquireUninterruptibly(); s.acquireUninterruptibly(); s.release(); t.join(); } catch( InterruptedException e){ unexpectedException(); } } /** * A release in one thread enables a timed acquire in another thread */ public void testTimedAcquireReleaseInDifferentThreads() { final Semaphore s = new Semaphore(1, false); Thread t = new Thread(new Runnable() { public void run() { try { s.release(); threadAssertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(); threadAssertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch(InterruptedException ie){ threadUnexpectedException(); } } }); try { t.start(); assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(); assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(); s.release(); t.join(); } catch( InterruptedException e){ unexpectedException(); } } /** * A waiting acquire blocks interruptibly */ public void testAcquire_InterruptedException() { final Semaphore s = new Semaphore(0, false); Thread t = new Thread(new Runnable() { public void run() { try { s.acquire(); threadShouldThrow(); } catch(InterruptedException success){} } }); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(InterruptedException e){ unexpectedException(); } } /** * A waiting timed acquire blocks interruptibly */ public void testTryAcquire_InterruptedException() { final Semaphore s = new Semaphore(0, false); Thread t = new Thread(new Runnable() { public void run() { try { s.tryAcquire(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(InterruptedException success){ } } }); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(InterruptedException e){ unexpectedException(); } } /** * hasQueuedThreads reports whether there are waiting threads */ public void testHasQueuedThreads() { // final Semaphore lock = new Semaphore(1, false); final Semaphore lock = new Semaphore(1, true); Thread t1 = new Thread(new InterruptedLockRunnable(lock)); Thread t2 = new Thread(new InterruptibleLockRunnable(lock)); try { assertFalse(lock.hasQueuedThreads()); lock.acquireUninterruptibly(); t1.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.hasQueuedThreads()); t2.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.hasQueuedThreads()); t1.interrupt(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.hasQueuedThreads()); lock.release(); Thread.sleep(SHORT_DELAY_MS); assertFalse(lock.hasQueuedThreads()); t1.join(); t2.join(); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * getQueueLength reports number of waiting threads */ public void testGetQueueLength() { // final Semaphore lock = new Semaphore(1, false); final Semaphore lock = new Semaphore(1, true); Thread t1 = new Thread(new InterruptedLockRunnable(lock)); Thread t2 = new Thread(new InterruptibleLockRunnable(lock)); try { assertEquals(0, lock.getQueueLength()); lock.acquireUninterruptibly(); t1.start(); Thread.sleep(SHORT_DELAY_MS); assertEquals(1, lock.getQueueLength()); t2.start(); Thread.sleep(SHORT_DELAY_MS); assertEquals(2, lock.getQueueLength()); t1.interrupt(); Thread.sleep(SHORT_DELAY_MS); assertEquals(1, lock.getQueueLength()); lock.release(); Thread.sleep(SHORT_DELAY_MS); assertEquals(0, lock.getQueueLength()); t1.join(); t2.join(); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * getQueuedThreads includes waiting threads */ public void testGetQueuedThreads() { // final PublicSemaphore lock = new PublicSemaphore(1, false); final PublicSemaphore lock = new PublicSemaphore(1, true); Thread t1 = new Thread(new InterruptedLockRunnable(lock)); Thread t2 = new Thread(new InterruptibleLockRunnable(lock)); try { assertTrue(lock.getQueuedThreads().isEmpty()); lock.acquireUninterruptibly(); assertTrue(lock.getQueuedThreads().isEmpty()); t1.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.getQueuedThreads().contains(t1)); t2.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.getQueuedThreads().contains(t1)); assertTrue(lock.getQueuedThreads().contains(t2)); t1.interrupt(); Thread.sleep(SHORT_DELAY_MS); assertFalse(lock.getQueuedThreads().contains(t1)); assertTrue(lock.getQueuedThreads().contains(t2)); lock.release(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.getQueuedThreads().isEmpty()); t1.join(); t2.join(); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * drainPermits reports and removes given number of permits */ public void testDrainPermits() { Semaphore s = new Semaphore(0, false); assertEquals(0, s.availablePermits()); assertEquals(0, s.drainPermits()); s.release(10); assertEquals(10, s.availablePermits()); assertEquals(10, s.drainPermits()); assertEquals(0, s.availablePermits()); assertEquals(0, s.drainPermits()); } /** * reducePermits reduces number of permits */ public void testReducePermits() { PublicSemaphore s = new PublicSemaphore(10, false); assertEquals(10, s.availablePermits()); s.reducePermits(1); assertEquals(9, s.availablePermits()); s.reducePermits(10); assertEquals(-1, s.availablePermits()); } /** * a deserialized serialized semaphore has same number of permits */ public void testSerialization() { Semaphore l = new Semaphore(3, false); try { l.acquire(); l.release(); ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(l); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); Semaphore r = (Semaphore) in.readObject(); assertEquals(3, r.availablePermits()); assertFalse(r.isFair()); r.acquire(); r.release(); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * Zero, negative, and positive initial values are allowed in constructor */ public void testConstructor_fair() { Semaphore s0 = new Semaphore(0, true); assertEquals(0, s0.availablePermits()); assertTrue(s0.isFair()); Semaphore s1 = new Semaphore(-1, true); assertEquals(-1, s1.availablePermits()); Semaphore s2 = new Semaphore(-1, true); assertEquals(-1, s2.availablePermits()); } /** * tryAcquire succeeds when sufficient permits, else fails */ public void testTryAcquireInSameThread_fair() { Semaphore s = new Semaphore(2, true); assertEquals(2, s.availablePermits()); assertTrue(s.tryAcquire()); assertTrue(s.tryAcquire()); assertEquals(0, s.availablePermits()); assertFalse(s.tryAcquire()); } /** * tryAcquire(n) succeeds when sufficient permits, else fails */ public void testTryAcquireNInSameThread_fair() { Semaphore s = new Semaphore(2, true); assertEquals(2, s.availablePermits()); assertTrue(s.tryAcquire(2)); assertEquals(0, s.availablePermits()); assertFalse(s.tryAcquire()); } /** * Acquire and release of semaphore succeed if initially available */ public void testAcquireReleaseInSameThread_fair() { Semaphore s = new Semaphore(1, true); try { s.acquire(); s.release(); s.acquire(); s.release(); s.acquire(); s.release(); s.acquire(); s.release(); s.acquire(); s.release(); assertEquals(1, s.availablePermits()); } catch( InterruptedException e){ unexpectedException(); } } /** * Acquire(n) and release(n) of semaphore succeed if initially available */ public void testAcquireReleaseNInSameThread_fair() { Semaphore s = new Semaphore(1, true); try { s.release(1); s.acquire(1); s.release(2); s.acquire(2); s.release(3); s.acquire(3); s.release(4); s.acquire(4); s.release(5); s.acquire(5); assertEquals(1, s.availablePermits()); } catch( InterruptedException e){ unexpectedException(); } } /** * Acquire(n) and release(n) of semaphore succeed if initially available */ public void testAcquireUninterruptiblyReleaseNInSameThread_fair() { Semaphore s = new Semaphore(1, true); try { s.release(1); s.acquireUninterruptibly(1); s.release(2); s.acquireUninterruptibly(2); s.release(3); s.acquireUninterruptibly(3); s.release(4); s.acquireUninterruptibly(4); s.release(5); s.acquireUninterruptibly(5); assertEquals(1, s.availablePermits()); } finally { } } /** * release(n) in one thread enables timed acquire(n) in another thread */ public void testTimedAcquireReleaseNInSameThread_fair() { Semaphore s = new Semaphore(1, true); try { s.release(1); assertTrue(s.tryAcquire(1, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(2); assertTrue(s.tryAcquire(2, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(3); assertTrue(s.tryAcquire(3, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(4); assertTrue(s.tryAcquire(4, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(5); assertTrue(s.tryAcquire(5, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); assertEquals(1, s.availablePermits()); } catch( InterruptedException e){ unexpectedException(); } } /** * release in one thread enables timed acquire in another thread */ public void testTimedAcquireReleaseInSameThread_fair() { Semaphore s = new Semaphore(1, true); try { assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(); assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(); assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(); assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(); assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(); assertEquals(1, s.availablePermits()); } catch( InterruptedException e){ unexpectedException(); } } /** * A release in one thread enables an acquire in another thread */ public void testAcquireReleaseInDifferentThreads_fair() { final Semaphore s = new Semaphore(0, true); Thread t = new Thread(new Runnable() { public void run() { try { s.acquire(); s.acquire(); s.acquire(); s.acquire(); } catch(InterruptedException ie){ threadUnexpectedException(); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); s.release(); s.release(); s.release(); s.release(); s.release(); s.release(); t.join(); assertEquals(2, s.availablePermits()); } catch( InterruptedException e){ unexpectedException(); } } /** * release(n) in one thread enables acquire(n) in another thread */ public void testAcquireReleaseNInDifferentThreads_fair() { final Semaphore s = new Semaphore(0, true); Thread t = new Thread(new Runnable() { public void run() { try { s.acquire(); s.release(2); s.acquire(); } catch(InterruptedException ie){ threadUnexpectedException(); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); s.release(2); s.acquire(2); s.release(1); t.join(); } catch( InterruptedException e){ unexpectedException(); } } /** * release(n) in one thread enables acquire(n) in another thread */ public void testAcquireReleaseNInDifferentThreads_fair2() { final Semaphore s = new Semaphore(0, true); Thread t = new Thread(new Runnable() { public void run() { try { s.acquire(2); s.acquire(2); s.release(4); } catch(InterruptedException ie){ threadUnexpectedException(); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); s.release(6); s.acquire(2); s.acquire(2); s.release(2); t.join(); } catch( InterruptedException e){ unexpectedException(); } } /** * release in one thread enables timed acquire in another thread */ public void testTimedAcquireReleaseInDifferentThreads_fair() { final Semaphore s = new Semaphore(1, true); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch(InterruptedException ie){ threadUnexpectedException(); } } }); t.start(); try { s.release(); s.release(); s.release(); s.release(); s.release(); t.join(); } catch( InterruptedException e){ unexpectedException(); } } /** * release(n) in one thread enables timed acquire(n) in another thread */ public void testTimedAcquireReleaseNInDifferentThreads_fair() { final Semaphore s = new Semaphore(2, true); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertTrue(s.tryAcquire(2, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(2); threadAssertTrue(s.tryAcquire(2, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(2); } catch(InterruptedException ie){ threadUnexpectedException(); } } }); t.start(); try { assertTrue(s.tryAcquire(2, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(2); assertTrue(s.tryAcquire(2, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); s.release(2); t.join(); } catch( InterruptedException e){ unexpectedException(); } } /** * A waiting acquire blocks interruptibly */ public void testAcquire_InterruptedException_fair() { final Semaphore s = new Semaphore(0, true); Thread t = new Thread(new Runnable() { public void run() { try { s.acquire(); threadShouldThrow(); } catch(InterruptedException success){} } }); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(InterruptedException e){ unexpectedException(); } } /** * A waiting acquire(n) blocks interruptibly */ public void testAcquireN_InterruptedException_fair() { final Semaphore s = new Semaphore(2, true); Thread t = new Thread(new Runnable() { public void run() { try { s.acquire(3); threadShouldThrow(); } catch(InterruptedException success){} } }); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(InterruptedException e){ unexpectedException(); } } /** * A waiting tryAcquire blocks interruptibly */ public void testTryAcquire_InterruptedException_fair() { final Semaphore s = new Semaphore(0, true); Thread t = new Thread(new Runnable() { public void run() { try { s.tryAcquire(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(InterruptedException success){ } } }); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(InterruptedException e){ unexpectedException(); } } /** * A waiting tryAcquire(n) blocks interruptibly */ public void testTryAcquireN_InterruptedException_fair() { final Semaphore s = new Semaphore(1, true); Thread t = new Thread(new Runnable() { public void run() { try { s.tryAcquire(4, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(InterruptedException success){ } } }); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(InterruptedException e){ unexpectedException(); } } /** * getQueueLength reports number of waiting threads */ public void testGetQueueLength_fair() { final Semaphore lock = new Semaphore(1, true); Thread t1 = new Thread(new InterruptedLockRunnable(lock)); Thread t2 = new Thread(new InterruptibleLockRunnable(lock)); try { assertEquals(0, lock.getQueueLength()); lock.acquireUninterruptibly(); t1.start(); Thread.sleep(SHORT_DELAY_MS); assertEquals(1, lock.getQueueLength()); t2.start(); Thread.sleep(SHORT_DELAY_MS); assertEquals(2, lock.getQueueLength()); t1.interrupt(); Thread.sleep(SHORT_DELAY_MS); assertEquals(1, lock.getQueueLength()); lock.release(); Thread.sleep(SHORT_DELAY_MS); assertEquals(0, lock.getQueueLength()); t1.join(); t2.join(); } catch(Exception e){ unexpectedException(); } } /** * a deserialized serialized semaphore has same number of permits */ public void testSerialization_fair() { Semaphore l = new Semaphore(3, true); try { l.acquire(); l.release(); ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(l); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); Semaphore r = (Semaphore) in.readObject(); assertEquals(3, r.availablePermits()); assertTrue(r.isFair()); r.acquire(); r.release(); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * toString indicates current number of permits */ public void testToString() { Semaphore s = new Semaphore(0); String us = s.toString(); assertTrue(us.indexOf("Permits = 0") >= 0); s.release(); String s1 = s.toString(); assertTrue(s1.indexOf("Permits = 1") >= 0); s.release(); String s2 = s.toString(); assertTrue(s2.indexOf("Permits = 2") >= 0); } } backport-util-concurrent-3.1-src/test/tck/src/AtomicReferenceFieldUpdaterTest.java0000644001750700037720000001366110253674160027277 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; public class AtomicReferenceFieldUpdaterTest extends JSR166TestCase{ // volatile Integer x = null; // Object z; // Integer w; // // public static void main(String[] args){ // junit.textui.TestRunner.run(suite()); // } // public static Test suite() { // return new TestSuite(AtomicReferenceFieldUpdaterTest.class); // } // // /** // * Construction with non-existent field throws RuntimeException // */ // public void testConstructor(){ // try{ // AtomicReferenceFieldUpdater // a = AtomicReferenceFieldUpdater.newUpdater // (AtomicReferenceFieldUpdaterTest.class, Integer.class, "y"); // shouldThrow(); // } // catch (RuntimeException rt) {} // } // // // /** // * construction with field not of given type throws RuntimeException // */ // public void testConstructor2(){ // try{ // AtomicReferenceFieldUpdater // a = AtomicReferenceFieldUpdater.newUpdater // (AtomicReferenceFieldUpdaterTest.class, Integer.class, "z"); // shouldThrow(); // } // catch (RuntimeException rt) {} // } // // /** // * Constructor with non-volatile field throws exception // */ // public void testConstructor3(){ // try{ // AtomicReferenceFieldUpdater // a = AtomicReferenceFieldUpdater.newUpdater // (AtomicReferenceFieldUpdaterTest.class, Integer.class, "w"); // shouldThrow(); // } // catch (RuntimeException rt) {} // } // // /** // * get returns the last value set or assigned // */ // public void testGetSet(){ // AtomicReferenceFieldUpdater a; // try { // a = AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdaterTest.class, Integer.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = one; // assertEquals(one,a.get(this)); // a.set(this,two); // assertEquals(two,a.get(this)); // a.set(this,-3); // assertEquals(-3,a.get(this)); // } // // /** // * get returns the last value lazySet by same thread // */ // public void testGetLazySet(){ // AtomicReferenceFieldUpdatera; // try { // a = AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdaterTest.class, Integer.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = one; // assertEquals(one,a.get(this)); // a.lazySet(this,two); // assertEquals(two,a.get(this)); // a.lazySet(this,m3); // assertEquals(m3,a.get(this)); // } // // /** // * compareAndSet succeeds in changing value if equal to expected else fails // */ // public void testCompareAndSet(){ // AtomicReferenceFieldUpdater a; // try { // a = AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdaterTest.class, Integer.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = one; // assertTrue(a.compareAndSet(this,one,two)); // assertTrue(a.compareAndSet(this,two,m4)); // assertEquals(m4,a.get(this)); // assertFalse(a.compareAndSet(this,m5,seven)); // assertFalse((seven == a.get(this))); // assertTrue(a.compareAndSet(this,m4,seven)); // assertEquals(seven,a.get(this)); // } // // /** // * compareAndSet in one thread enables another waiting for value // * to succeed // */ // public void testCompareAndSetInMultipleThreads() { // x = one; // final AtomicReferenceFieldUpdater a; // try { // a = AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdaterTest.class, Integer.class, "x"); // } catch (RuntimeException ok) { // return; // } // // Thread t = new Thread(new Runnable() { // public void run() { // while(!a.compareAndSet(AtomicReferenceFieldUpdaterTest.this, two, three)) Thread.yield(); // }}); // try { // t.start(); // assertTrue(a.compareAndSet(this, one, two)); // t.join(LONG_DELAY_MS); // assertFalse(t.isAlive()); // assertEquals(a.get(this), three); // } // catch(Exception e) { // unexpectedException(); // } // } // // /** // * repeated weakCompareAndSet succeeds in changing value when equal // * to expected // */ // public void testWeakCompareAndSet(){ // AtomicReferenceFieldUpdater a; // try { // a = AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdaterTest.class, Integer.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = one; // while(!a.weakCompareAndSet(this,one,two)); // while(!a.weakCompareAndSet(this,two,m4)); // assertEquals(m4,a.get(this)); // while(!a.weakCompareAndSet(this,m4,seven)); // assertEquals(seven,a.get(this)); // } // // /** // * getAndSet returns previous value and sets to given value // */ // public void testGetAndSet(){ // AtomicReferenceFieldUpdater a; // try { // a = AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdaterTest.class, Integer.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = one; // assertEquals(one,a.getAndSet(this, zero)); // assertEquals(zero,a.getAndSet(this,m10)); // assertEquals(m10,a.getAndSet(this,1)); // } // } backport-util-concurrent-3.1-src/test/tck/src/AtomicLongFieldUpdaterTest.java0000644001750700037720000002151510253674160026275 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; public class AtomicLongFieldUpdaterTest extends JSR166TestCase { // volatile long x = 0; // int z; // long w; // // public static void main(String[] args){ // junit.textui.TestRunner.run(suite()); // } // public static Test suite() { // return new TestSuite(AtomicLongFieldUpdaterTest.class); // } // // /** // * Construction with non-existent field throws RuntimeException // */ // public void testConstructor(){ // try{ // AtomicLongFieldUpdater // a = AtomicLongFieldUpdater.newUpdater // (AtomicLongFieldUpdaterTest.class, "y"); // shouldThrow(); // } // catch (RuntimeException rt) {} // } // // /** // * construction with field not of given type throws RuntimeException // */ // public void testConstructor2(){ // try{ // AtomicLongFieldUpdater // a = AtomicLongFieldUpdater.newUpdater // (AtomicLongFieldUpdaterTest.class, "z"); // shouldThrow(); // } // catch (RuntimeException rt) {} // } // // /** // * construction with non-volatile field throws RuntimeException // */ // public void testConstructor3(){ // try{ // AtomicLongFieldUpdater // a = AtomicLongFieldUpdater.newUpdater // (AtomicLongFieldUpdaterTest.class, "w"); // shouldThrow(); // } // // catch (RuntimeException rt) {} // } // // /** // * get returns the last value set or assigned // */ // public void testGetSet(){ // AtomicLongFieldUpdater a; // try { // a = AtomicLongFieldUpdater.newUpdater(AtomicLongFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(1,a.get(this)); // a.set(this,2); // assertEquals(2,a.get(this)); // a.set(this,-3); // assertEquals(-3,a.get(this)); // } // // /** // * get returns the last value lazySet by same thread // */ // public void testGetLazySet(){ // AtomicLongFieldUpdater a; // try { // a = AtomicLongFieldUpdater.newUpdater(AtomicLongFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(1,a.get(this)); // a.lazySet(this,2); // assertEquals(2,a.get(this)); // a.lazySet(this,-3); // assertEquals(-3,a.get(this)); // } // // /** // * compareAndSet succeeds in changing value if equal to expected else fails // */ // public void testCompareAndSet(){ // AtomicLongFieldUpdater a; // try { // a = AtomicLongFieldUpdater.newUpdater(AtomicLongFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertTrue(a.compareAndSet(this,1,2)); // assertTrue(a.compareAndSet(this,2,-4)); // assertEquals(-4,a.get(this)); // assertFalse(a.compareAndSet(this,-5,7)); // assertFalse((7 == a.get(this))); // assertTrue(a.compareAndSet(this,-4,7)); // assertEquals(7,a.get(this)); // } // // // /** // * compareAndSet in one thread enables another waiting for value // * to succeed // */ // public void testCompareAndSetInMultipleThreads() { // x = 1; // final AtomicLongFieldUpdater a; // try { // a = AtomicLongFieldUpdater.newUpdater(AtomicLongFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // // Thread t = new Thread(new Runnable() { // public void run() { // while(!a.compareAndSet(AtomicLongFieldUpdaterTest.this, 2, 3)) Thread.yield(); // }}); // try { // t.start(); // assertTrue(a.compareAndSet(this, 1, 2)); // t.join(LONG_DELAY_MS); // assertFalse(t.isAlive()); // assertEquals(a.get(this), 3); // } // catch(Exception e) { // unexpectedException(); // } // } // // /** // * repeated weakCompareAndSet succeeds in changing value when equal // * to expected // */ // public void testWeakCompareAndSet(){ // AtomicLongFieldUpdater a; // try { // a = AtomicLongFieldUpdater.newUpdater(AtomicLongFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // while(!a.weakCompareAndSet(this,1,2)); // while(!a.weakCompareAndSet(this,2,-4)); // assertEquals(-4,a.get(this)); // while(!a.weakCompareAndSet(this,-4,7)); // assertEquals(7,a.get(this)); // } // // /** // * getAndSet returns previous value and sets to given value // */ // public void testGetAndSet(){ // AtomicLongFieldUpdater a; // try { // a = AtomicLongFieldUpdater.newUpdater(AtomicLongFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(1,a.getAndSet(this, 0)); // assertEquals(0,a.getAndSet(this,-10)); // assertEquals(-10,a.getAndSet(this,1)); // } // // /** // * getAndAdd returns previous value and adds given value // */ // public void testGetAndAdd(){ // AtomicLongFieldUpdater a; // try { // a = AtomicLongFieldUpdater.newUpdater(AtomicLongFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(1,a.getAndAdd(this,2)); // assertEquals(3,a.get(this)); // assertEquals(3,a.getAndAdd(this,-4)); // assertEquals(-1,a.get(this)); // } // // /** // * getAndDecrement returns previous value and decrements // */ // public void testGetAndDecrement(){ // AtomicLongFieldUpdater a; // try { // a = AtomicLongFieldUpdater.newUpdater(AtomicLongFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(1,a.getAndDecrement(this)); // assertEquals(0,a.getAndDecrement(this)); // assertEquals(-1,a.getAndDecrement(this)); // } // // /** // * getAndIncrement returns previous value and increments // */ // public void testGetAndIncrement(){ // AtomicLongFieldUpdater a; // try { // a = AtomicLongFieldUpdater.newUpdater(AtomicLongFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(1,a.getAndIncrement(this)); // assertEquals(2,a.get(this)); // a.set(this,-2); // assertEquals(-2,a.getAndIncrement(this)); // assertEquals(-1,a.getAndIncrement(this)); // assertEquals(0,a.getAndIncrement(this)); // assertEquals(1,a.get(this)); // } // // /** // * addAndGet adds given value to current, and returns current value // */ // public void testAddAndGet(){ // AtomicLongFieldUpdater a; // try { // a = AtomicLongFieldUpdater.newUpdater(AtomicLongFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(3,a.addAndGet(this,2)); // assertEquals(3,a.get(this)); // assertEquals(-1,a.addAndGet(this,-4)); // assertEquals(-1,a.get(this)); // } // // /** // * decrementAndGet decrements and returns current value // */ // public void testDecrementAndGet(){ // AtomicLongFieldUpdater a; // try { // a = AtomicLongFieldUpdater.newUpdater(AtomicLongFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(0,a.decrementAndGet(this)); // assertEquals(-1,a.decrementAndGet(this)); // assertEquals(-2,a.decrementAndGet(this)); // assertEquals(-2,a.get(this)); // } // // /** // * incrementAndGet increments and returns current value // */ // public void testIncrementAndGet(){ // AtomicLongFieldUpdater a; // try { // a = AtomicLongFieldUpdater.newUpdater(AtomicLongFieldUpdaterTest.class, "x"); // } catch (RuntimeException ok) { // return; // } // x = 1; // assertEquals(2,a.incrementAndGet(this)); // assertEquals(2,a.get(this)); // a.set(this,-2); // assertEquals(-1,a.incrementAndGet(this)); // assertEquals(0,a.incrementAndGet(this)); // assertEquals(1,a.incrementAndGet(this)); // assertEquals(1,a.get(this)); // } // } backport-util-concurrent-3.1-src/test/tck/src/PriorityQueueTest.java0000644001750700037720000003446510431260156024600 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.PriorityQueue; import java.io.*; import java.util.Comparator; import java.util.Arrays; import java.util.Collection; import java.util.NoSuchElementException; import java.util.Iterator; public class PriorityQueueTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(PriorityQueueTest.class); } static class MyReverseComparator implements Comparator { public int compare(Object x, Object y) { int i = ((Integer)x).intValue(); int j = ((Integer)y).intValue(); if (i < j) return 1; if (i > j) return -1; return 0; } } /** * Create a queue of given size containing consecutive * Integers 0 ... n. */ private PriorityQueue populatedQueue(int n) { PriorityQueue q = new PriorityQueue(n); assertTrue(q.isEmpty()); for(int i = n-1; i >= 0; i-=2) assertTrue(q.offer(new Integer(i))); for(int i = (n & 1); i < n; i+=2) assertTrue(q.offer(new Integer(i))); assertFalse(q.isEmpty()); assertEquals(n, q.size()); return q; } /** * A new queue has unbounded capacity */ public void testConstructor1() { assertEquals(0, new PriorityQueue(SIZE).size()); } /** * Constructor throws IAE if capacity argument nonpositive */ public void testConstructor2() { try { PriorityQueue q = new PriorityQueue(0); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * Initializing from null Collection throws NPE */ public void testConstructor3() { try { PriorityQueue q = new PriorityQueue((Collection)null); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection of null elements throws NPE */ public void testConstructor4() { try { Integer[] ints = new Integer[SIZE]; PriorityQueue q = new PriorityQueue(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection with some null elements throws NPE */ public void testConstructor5() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); PriorityQueue q = new PriorityQueue(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements of collection used to initialize */ public void testConstructor6() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); PriorityQueue q = new PriorityQueue(Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * The comparator used in constructor is used */ public void testConstructor7() { try { MyReverseComparator cmp = new MyReverseComparator(); PriorityQueue q = new PriorityQueue(SIZE, cmp); assertEquals(cmp, q.comparator()); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); for (int i = SIZE-1; i >= 0; --i) assertEquals(ints[i], q.poll()); } finally {} } /** * isEmpty is true before add, false after */ public void testEmpty() { PriorityQueue q = new PriorityQueue(2); assertTrue(q.isEmpty()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.add(new Integer(2)); q.remove(); q.remove(); assertTrue(q.isEmpty()); } /** * size changes when elements added and removed */ public void testSize() { PriorityQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.size()); q.remove(); } for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * offer(null) throws NPE */ public void testOfferNull() { try { PriorityQueue q = new PriorityQueue(1); q.offer(null); shouldThrow(); } catch (NullPointerException success) { } } /** * add(null) throws NPE */ public void testAddNull() { try { PriorityQueue q = new PriorityQueue(1); q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * Offer of comparable element succeeds */ public void testOffer() { PriorityQueue q = new PriorityQueue(1); assertTrue(q.offer(zero)); assertTrue(q.offer(one)); } /** * Offer of non-Comparable throws CCE */ public void testOfferNonComparable() { try { PriorityQueue q = new PriorityQueue(1); q.offer(new Object()); q.offer(new Object()); q.offer(new Object()); shouldThrow(); } catch(ClassCastException success) {} } /** * add of comparable succeeds */ public void testAdd() { PriorityQueue q = new PriorityQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); assertTrue(q.add(new Integer(i))); } } /** * addAll(null) throws NPE */ public void testAddAll1() { try { PriorityQueue q = new PriorityQueue(1); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testAddAll2() { try { PriorityQueue q = new PriorityQueue(SIZE); Integer[] ints = new Integer[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testAddAll3() { try { PriorityQueue q = new PriorityQueue(SIZE); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements of successful addAll */ public void testAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(SIZE-1-i); PriorityQueue q = new PriorityQueue(SIZE); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(new Integer(i), q.poll()); } finally {} } /** * poll succeeds unless empty */ public void testPoll() { PriorityQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll()).intValue()); } assertNull(q.poll()); } /** * peek returns next element, or null if empty */ public void testPeek() { PriorityQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.peek()).intValue()); q.poll(); assertTrue(q.peek() == null || i != ((Integer)q.peek()).intValue()); } assertNull(q.peek()); } /** * element returns next element, or throws NSEE if empty */ public void testElement() { PriorityQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.element()).intValue()); q.poll(); } try { q.element(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * remove removes next element, or throws NSEE if empty */ public void testRemove() { PriorityQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.remove()).intValue()); } try { q.remove(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * remove(x) removes x and returns true if present */ public void testRemoveElement() { PriorityQueue q = populatedQueue(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { PriorityQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.poll(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testClear() { PriorityQueue q = populatedQueue(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { PriorityQueue q = populatedQueue(SIZE); PriorityQueue p = new PriorityQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testRetainAll() { PriorityQueue q = populatedQueue(SIZE); PriorityQueue p = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.remove(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { PriorityQueue q = populatedQueue(SIZE); PriorityQueue p = populatedQueue(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.remove()); assertFalse(q.contains(I)); } } } /** * toArray contains all elements */ public void testToArray() { PriorityQueue q = populatedQueue(SIZE); Object[] o = q.toArray(); Arrays.sort(o); for(int i = 0; i < o.length; i++) assertEquals(o[i], q.poll()); } /** * toArray(a) contains all elements */ public void testToArray2() { PriorityQueue q = populatedQueue(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); Arrays.sort(ints); for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.poll()); } /** * iterator iterates through all elements */ public void testIterator() { PriorityQueue q = populatedQueue(SIZE); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); } /** * iterator.remove removes current element */ public void testIteratorRemove () { final PriorityQueue q = new PriorityQueue(3); q.add(new Integer(2)); q.add(new Integer(1)); q.add(new Integer(3)); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), new Integer(2)); assertEquals(it.next(), new Integer(3)); assertFalse(it.hasNext()); } /** * toString contains toStrings of elements */ public void testToString() { PriorityQueue q = populatedQueue(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * A deserialized serialized queue has same elements */ public void testSerialization() { PriorityQueue q = populatedQueue(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); PriorityQueue r = (PriorityQueue)in.readObject(); assertEquals(q.size(), r.size()); while (!q.isEmpty()) assertEquals(q.remove(), r.remove()); } catch(Exception e){ unexpectedException(); } } } backport-util-concurrent-3.1-src/test/tck/src/AtomicIntegerArrayTest.java0000644001750700037720000002607410431260156025500 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import java.io.*; public class AtomicIntegerArrayTest extends JSR166TestCase { public static void main (String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(AtomicIntegerArrayTest.class); } /** * constructor creates array of given size with all elements zero */ public void testConstructor() { AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) assertEquals(0,ai.get(i)); } /** * constructor with null array throws NPE */ public void testConstructor2NPE() { try { int[] a = null; AtomicIntegerArray ai = new AtomicIntegerArray(a); } catch (NullPointerException success) { } catch (Exception ex) { unexpectedException(); } } /** * constructor with array is of same size and has all elements */ public void testConstructor2() { int[] a = { 17, 3, -42, 99, -7}; AtomicIntegerArray ai = new AtomicIntegerArray(a); assertEquals(a.length, ai.length()); for (int i = 0; i < a.length; ++i) assertEquals(a[i], ai.get(i)); } /** * get and set for out of bound indices throw IndexOutOfBoundsException */ public void testIndexing(){ AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); try { ai.get(SIZE); } catch(IndexOutOfBoundsException success){ } try { ai.get(-1); } catch(IndexOutOfBoundsException success){ } try { ai.set(SIZE, 0); } catch(IndexOutOfBoundsException success){ } try { ai.set(-1, 0); } catch(IndexOutOfBoundsException success){ } } /** * get returns the last value set at index */ public void testGetSet() { AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(1,ai.get(i)); ai.set(i, 2); assertEquals(2,ai.get(i)); ai.set(i, -3); assertEquals(-3,ai.get(i)); } } /** * get returns the last value lazySet at index by same thread */ public void testGetLazySet() { AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.lazySet(i, 1); assertEquals(1,ai.get(i)); ai.lazySet(i, 2); assertEquals(2,ai.get(i)); ai.lazySet(i, -3); assertEquals(-3,ai.get(i)); } } /** * compareAndSet succeeds in changing value if equal to expected else fails */ public void testCompareAndSet() { AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertTrue(ai.compareAndSet(i, 1,2)); assertTrue(ai.compareAndSet(i, 2,-4)); assertEquals(-4,ai.get(i)); assertFalse(ai.compareAndSet(i, -5,7)); assertFalse((7 == ai.get(i))); assertTrue(ai.compareAndSet(i, -4,7)); assertEquals(7,ai.get(i)); } } /** * compareAndSet in one thread enables another waiting for value * to succeed */ public void testCompareAndSetInMultipleThreads() { final AtomicIntegerArray a = new AtomicIntegerArray(1); a.set(0, 1); Thread t = new Thread(new Runnable() { public void run() { while(!a.compareAndSet(0, 2, 3)) Thread.yield(); }}); try { t.start(); assertTrue(a.compareAndSet(0, 1, 2)); t.join(LONG_DELAY_MS); assertFalse(t.isAlive()); assertEquals(a.get(0), 3); } catch(Exception e) { unexpectedException(); } } /** * repeated weakCompareAndSet succeeds in changing value when equal * to expected */ public void testWeakCompareAndSet() { AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); while(!ai.weakCompareAndSet(i, 1,2)); while(!ai.weakCompareAndSet(i, 2,-4)); assertEquals(-4,ai.get(i)); while(!ai.weakCompareAndSet(i, -4,7)); assertEquals(7,ai.get(i)); } } /** * getAndSet returns previous value and sets to given value at given index */ public void testGetAndSet() { AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(1,ai.getAndSet(i,0)); assertEquals(0,ai.getAndSet(i,-10)); assertEquals(-10,ai.getAndSet(i,1)); } } /** * getAndAdd returns previous value and adds given value */ public void testGetAndAdd() { AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(1,ai.getAndAdd(i,2)); assertEquals(3,ai.get(i)); assertEquals(3,ai.getAndAdd(i,-4)); assertEquals(-1,ai.get(i)); } } /** * getAndDecrement returns previous value and decrements */ public void testGetAndDecrement() { AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(1,ai.getAndDecrement(i)); assertEquals(0,ai.getAndDecrement(i)); assertEquals(-1,ai.getAndDecrement(i)); } } /** * getAndIncrement returns previous value and increments */ public void testGetAndIncrement() { AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(1,ai.getAndIncrement(i)); assertEquals(2,ai.get(i)); ai.set(i,-2); assertEquals(-2,ai.getAndIncrement(i)); assertEquals(-1,ai.getAndIncrement(i)); assertEquals(0,ai.getAndIncrement(i)); assertEquals(1,ai.get(i)); } } /** * addAndGet adds given value to current, and returns current value */ public void testAddAndGet() { AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(3,ai.addAndGet(i,2)); assertEquals(3,ai.get(i)); assertEquals(-1,ai.addAndGet(i,-4)); assertEquals(-1,ai.get(i)); } } /** * decrementAndGet decrements and returns current value */ public void testDecrementAndGet() { AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(0,ai.decrementAndGet(i)); assertEquals(-1,ai.decrementAndGet(i)); assertEquals(-2,ai.decrementAndGet(i)); assertEquals(-2,ai.get(i)); } } /** * incrementAndGet increments and returns current value */ public void testIncrementAndGet() { AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, 1); assertEquals(2,ai.incrementAndGet(i)); assertEquals(2,ai.get(i)); ai.set(i, -2); assertEquals(-1,ai.incrementAndGet(i)); assertEquals(0,ai.incrementAndGet(i)); assertEquals(1,ai.incrementAndGet(i)); assertEquals(1,ai.get(i)); } } static final int COUNTDOWN = 100000; class Counter implements Runnable { final AtomicIntegerArray ai; volatile int counts; Counter(AtomicIntegerArray a) { ai = a; } public void run() { for (;;) { boolean done = true; for (int i = 0; i < ai.length(); ++i) { int v = ai.get(i); threadAssertTrue(v >= 0); if (v != 0) { done = false; if (ai.compareAndSet(i, v, v-1)) ++counts; } } if (done) break; } } } /** * Multiple threads using same array of counters successfully * update a number of times equal to total count */ public void testCountingInMultipleThreads() { try { final AtomicIntegerArray ai = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) ai.set(i, COUNTDOWN); Counter c1 = new Counter(ai); Counter c2 = new Counter(ai); Thread t1 = new Thread(c1); Thread t2 = new Thread(c2); t1.start(); t2.start(); t1.join(); t2.join(); assertEquals(c1.counts+c2.counts, SIZE * COUNTDOWN); } catch(InterruptedException ie) { unexpectedException(); } } /** * a deserialized serialized array holds same values */ public void testSerialization() { AtomicIntegerArray l = new AtomicIntegerArray(SIZE); for (int i = 0; i < SIZE; ++i) l.set(i, -i); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(l); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); AtomicIntegerArray r = (AtomicIntegerArray) in.readObject(); for (int i = 0; i < SIZE; ++i) { assertEquals(l.get(i), r.get(i)); } } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * toString returns current value. */ public void testToString() { int[] a = { 17, 3, -42, 99, -7}; AtomicIntegerArray ai = new AtomicIntegerArray(a); assertEquals(toString(a), ai.toString()); } private static String toString(int[] array) { if (array.length == 0) return "[]"; StringBuffer buf = new StringBuffer(); buf.append('['); buf.append(array[0]); for (int i = 1; i < array.length; i++) { buf.append(", "); buf.append(array[i]); } buf.append("]"); return buf.toString(); } } backport-util-concurrent-3.1-src/test/tck/src/AtomicReferenceArrayTest.java0000644001750700037720000001607010253674160026002 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import java.io.*; import edu.emory.mathcs.backport.java.util.*; public class AtomicReferenceArrayTest extends JSR166TestCase { public static void main (String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(AtomicReferenceArrayTest.class); } /** * constructor creates array of given size with all elements null */ public void testConstructor(){ AtomicReferenceArray ai = new AtomicReferenceArray(SIZE); for (int i = 0; i < SIZE; ++i) { assertNull(ai.get(i)); } } /** * constructor with null array throws NPE */ public void testConstructor2NPE() { try { Integer[] a = null; AtomicReferenceArray ai = new AtomicReferenceArray(a); } catch (NullPointerException success) { } catch (Exception ex) { unexpectedException(); } } /** * constructor with array is of same size and has all elements */ public void testConstructor2() { Integer[] a = { two, one, three, four, seven}; AtomicReferenceArray ai = new AtomicReferenceArray(a); assertEquals(a.length, ai.length()); for (int i = 0; i < a.length; ++i) assertEquals(a[i], ai.get(i)); } /** * get and set for out of bound indices throw IndexOutOfBoundsException */ public void testIndexing(){ AtomicReferenceArray ai = new AtomicReferenceArray(SIZE); try { ai.get(SIZE); } catch(IndexOutOfBoundsException success){ } try { ai.get(-1); } catch(IndexOutOfBoundsException success){ } try { ai.set(SIZE, null); } catch(IndexOutOfBoundsException success){ } try { ai.set(-1, null); } catch(IndexOutOfBoundsException success){ } } /** * get returns the last value set at index */ public void testGetSet(){ AtomicReferenceArray ai = new AtomicReferenceArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, one); assertEquals(one,ai.get(i)); ai.set(i, two); assertEquals(two,ai.get(i)); ai.set(i, m3); assertEquals(m3,ai.get(i)); } } /** * get returns the last value lazySet at index by same thread */ public void testGetLazySet(){ AtomicReferenceArray ai = new AtomicReferenceArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.lazySet(i, one); assertEquals(one,ai.get(i)); ai.lazySet(i, two); assertEquals(two,ai.get(i)); ai.lazySet(i, m3); assertEquals(m3,ai.get(i)); } } /** * compareAndSet succeeds in changing value if equal to expected else fails */ public void testCompareAndSet(){ AtomicReferenceArray ai = new AtomicReferenceArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, one); assertTrue(ai.compareAndSet(i, one,two)); assertTrue(ai.compareAndSet(i, two,m4)); assertEquals(m4,ai.get(i)); assertFalse(ai.compareAndSet(i, m5,seven)); assertFalse((seven.equals(ai.get(i)))); assertTrue(ai.compareAndSet(i, m4,seven)); assertEquals(seven,ai.get(i)); } } /** * compareAndSet in one thread enables another waiting for value * to succeed */ public void testCompareAndSetInMultipleThreads() { final AtomicReferenceArray a = new AtomicReferenceArray(1); a.set(0, one); Thread t = new Thread(new Runnable() { public void run() { while(!a.compareAndSet(0, two, three)) Thread.yield(); }}); try { t.start(); assertTrue(a.compareAndSet(0, one, two)); t.join(LONG_DELAY_MS); assertFalse(t.isAlive()); assertEquals(a.get(0), three); } catch(Exception e) { unexpectedException(); } } /** * repeated weakCompareAndSet succeeds in changing value when equal * to expected */ public void testWeakCompareAndSet(){ AtomicReferenceArray ai = new AtomicReferenceArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, one); while(!ai.weakCompareAndSet(i, one,two)); while(!ai.weakCompareAndSet(i, two,m4)); assertEquals(m4,ai.get(i)); while(!ai.weakCompareAndSet(i, m4,seven)); assertEquals(seven,ai.get(i)); } } /** * getAndSet returns previous value and sets to given value at given index */ public void testGetAndSet(){ AtomicReferenceArray ai = new AtomicReferenceArray(SIZE); for (int i = 0; i < SIZE; ++i) { ai.set(i, one); assertEquals(one,ai.getAndSet(i,zero)); assertEquals(0,((Integer)ai.getAndSet(i,m10)).intValue()); assertEquals(m10,ai.getAndSet(i,one)); } } /** * a deserialized serialized array holds same values */ public void testSerialization() { AtomicReferenceArray l = new AtomicReferenceArray(SIZE); for (int i = 0; i < SIZE; ++i) { l.set(i, new Integer(-i)); } try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(l); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); AtomicReferenceArray r = (AtomicReferenceArray) in.readObject(); assertEquals(l.length(), r.length()); for (int i = 0; i < SIZE; ++i) { assertEquals(r.get(i), l.get(i)); } } catch(Exception e){ unexpectedException(); } } /** * toString returns current value. */ public void testToString() { Integer[] a = { two, one, three, four, seven}; AtomicReferenceArray ai = new AtomicReferenceArray(a); assertEquals(toString(a), ai.toString()); } private static String toString(Integer[] array) { if (array.length == 0) return "[]"; StringBuffer buf = new StringBuffer(); buf.append('['); buf.append(array[0]); for (int i = 1; i < array.length; i++) { buf.append(", "); buf.append(array[i]); } buf.append("]"); return buf.toString(); } } backport-util-concurrent-3.1-src/test/tck/src/AtomicReferenceTest.java0000644001750700037720000001063110253674160025000 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import java.io.*; public class AtomicReferenceTest extends JSR166TestCase { public static void main (String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(AtomicReferenceTest.class); } /** * constructor initializes to given value */ public void testConstructor(){ AtomicReference ai = new AtomicReference(one); assertEquals(one,ai.get()); } /** * default constructed initializes to null */ public void testConstructor2(){ AtomicReference ai = new AtomicReference(); assertNull(ai.get()); } /** * get returns the last value set */ public void testGetSet(){ AtomicReference ai = new AtomicReference(one); assertEquals(one,ai.get()); ai.set(two); assertEquals(two,ai.get()); ai.set(m3); assertEquals(m3,ai.get()); } /** * get returns the last value lazySet in same thread */ public void testGetLazySet(){ AtomicReference ai = new AtomicReference(one); assertEquals(one,ai.get()); ai.lazySet(two); assertEquals(two,ai.get()); ai.lazySet(m3); assertEquals(m3,ai.get()); } /** * compareAndSet succeeds in changing value if equal to expected else fails */ public void testCompareAndSet(){ AtomicReference ai = new AtomicReference(one); assertTrue(ai.compareAndSet(one,two)); assertTrue(ai.compareAndSet(two,m4)); assertEquals(m4,ai.get()); assertFalse(ai.compareAndSet(m5,seven)); assertFalse((seven.equals(ai.get()))); assertTrue(ai.compareAndSet(m4,seven)); assertEquals(seven,ai.get()); } /** * compareAndSet in one thread enables another waiting for value * to succeed */ public void testCompareAndSetInMultipleThreads() { final AtomicReference ai = new AtomicReference(one); Thread t = new Thread(new Runnable() { public void run() { while(!ai.compareAndSet(two, three)) Thread.yield(); }}); try { t.start(); assertTrue(ai.compareAndSet(one, two)); t.join(LONG_DELAY_MS); assertFalse(t.isAlive()); assertEquals(ai.get(), three); } catch(Exception e) { unexpectedException(); } } /** * repeated weakCompareAndSet succeeds in changing value when equal * to expected */ public void testWeakCompareAndSet(){ AtomicReference ai = new AtomicReference(one); while(!ai.weakCompareAndSet(one,two)); while(!ai.weakCompareAndSet(two,m4)); assertEquals(m4,ai.get()); while(!ai.weakCompareAndSet(m4,seven)); assertEquals(seven,ai.get()); } /** * getAndSet returns previous value and sets to given value */ public void testGetAndSet(){ AtomicReference ai = new AtomicReference(one); assertEquals(one,ai.getAndSet(zero)); assertEquals(zero,ai.getAndSet(m10)); assertEquals(m10,ai.getAndSet(one)); } /** * a deserialized serialized atomic holds same value */ public void testSerialization() { AtomicReference l = new AtomicReference(); try { l.set(one); ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(l); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); AtomicReference r = (AtomicReference) in.readObject(); assertEquals(l.get(), r.get()); } catch(Exception e){ unexpectedException(); } } /** * toString returns current value. */ public void testToString() { AtomicReference ai = new AtomicReference(one); assertEquals(ai.toString(), one.toString()); ai.set(two); assertEquals(ai.toString(), two.toString()); } } backport-util-concurrent-3.1-src/test/tck/src/ArrayBlockingQueueTest.java0000644001750700037720000007570610365510635025517 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import java.util.ArrayList; import java.util.NoSuchElementException; import java.util.Iterator; import java.util.ConcurrentModificationException; public class ArrayBlockingQueueTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ArrayBlockingQueueTest.class); } /** * Create a queue of given size containing consecutive * Integers 0 ... n. */ private ArrayBlockingQueue populatedQueue(int n) { ArrayBlockingQueue q = new ArrayBlockingQueue(n); assertTrue(q.isEmpty()); for(int i = 0; i < n; i++) assertTrue(q.offer(new Integer(i))); assertFalse(q.isEmpty()); assertEquals(0, q.remainingCapacity()); assertEquals(n, q.size()); return q; } /** * A new queue has the indicated capacity */ public void testConstructor1() { assertEquals(SIZE, new ArrayBlockingQueue(SIZE).remainingCapacity()); } /** * Constructor throws IAE if capacity argument nonpositive */ public void testConstructor2() { try { ArrayBlockingQueue q = new ArrayBlockingQueue(0); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * Initializing from null Collection throws NPE */ public void testConstructor3() { try { ArrayBlockingQueue q = new ArrayBlockingQueue(1, true, null); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection of null elements throws NPE */ public void testConstructor4() { try { Integer[] ints = new Integer[SIZE]; ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE, false, Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from Collection with some null elements throws NPE */ public void testConstructor5() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE, false, Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * Initializing from too large collection throws IAE */ public void testConstructor6() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); ArrayBlockingQueue q = new ArrayBlockingQueue(1, false, Arrays.asList(ints)); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * Queue contains all elements of collection used to initialize */ public void testConstructor7() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE, true, Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * Queue transitions from empty to full when elements added */ public void testEmptyFull() { ArrayBlockingQueue q = new ArrayBlockingQueue(2); assertTrue(q.isEmpty()); assertEquals(2, q.remainingCapacity()); q.add(one); assertFalse(q.isEmpty()); q.add(two); assertFalse(q.isEmpty()); assertEquals(0, q.remainingCapacity()); assertFalse(q.offer(three)); } /** * remainingCapacity decreases on add, increases on remove */ public void testRemainingCapacity() { ArrayBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.remainingCapacity()); assertEquals(SIZE-i, q.size()); q.remove(); } for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.remainingCapacity()); assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * offer(null) throws NPE */ public void testOfferNull() { try { ArrayBlockingQueue q = new ArrayBlockingQueue(1); q.offer(null); shouldThrow(); } catch (NullPointerException success) { } } /** * add(null) throws NPE */ public void testAddNull() { try { ArrayBlockingQueue q = new ArrayBlockingQueue(1); q.add(null); shouldThrow(); } catch (NullPointerException success) { } } /** * Offer succeeds if not full; fails if full */ public void testOffer() { ArrayBlockingQueue q = new ArrayBlockingQueue(1); assertTrue(q.offer(zero)); assertFalse(q.offer(one)); } /** * add succeeds if not full; throws ISE if full */ public void testAdd() { try { ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.add(new Integer(i))); } assertEquals(0, q.remainingCapacity()); q.add(new Integer(SIZE)); } catch (IllegalStateException success){ } } /** * addAll(null) throws NPE */ public void testAddAll1() { try { ArrayBlockingQueue q = new ArrayBlockingQueue(1); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll(this) throws IAE */ public void testAddAllSelf() { try { ArrayBlockingQueue q = populatedQueue(SIZE); q.addAll(q); shouldThrow(); } catch (IllegalArgumentException success) {} } /** * addAll of a collection with null elements throws NPE */ public void testAddAll2() { try { ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); Integer[] ints = new Integer[SIZE]; q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll of a collection with any null elements throws NPE after * possibly adding some elements */ public void testAddAll3() { try { ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (NullPointerException success) {} } /** * addAll throws ISE if not enough room */ public void testAddAll4() { try { ArrayBlockingQueue q = new ArrayBlockingQueue(1); Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); q.addAll(Arrays.asList(ints)); shouldThrow(); } catch (IllegalStateException success) {} } /** * Queue contains all elements, in traversal order, of successful addAll */ public void testAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * put(null) throws NPE */ public void testPutNull() { try { ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); q.put(null); shouldThrow(); } catch (NullPointerException success){ } catch (InterruptedException ie) { unexpectedException(); } } /** * all elements successfully put are contained */ public void testPut() { try { ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); for (int i = 0; i < SIZE; ++i) { Integer I = new Integer(i); q.put(I); assertTrue(q.contains(I)); } assertEquals(0, q.remainingCapacity()); } catch (InterruptedException ie) { unexpectedException(); } } /** * put blocks interruptibly if full */ public void testBlockingPut() { final ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { for (int i = 0; i < SIZE; ++i) { q.put(new Integer(i)); ++added; } q.put(new Integer(SIZE)); threadShouldThrow(); } catch (InterruptedException ie){ threadAssertEquals(added, SIZE); } }}); try { t.start(); Thread.sleep(MEDIUM_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * put blocks waiting for take when full */ public void testPutWithTake() { final ArrayBlockingQueue q = new ArrayBlockingQueue(2); Thread t = new Thread(new Runnable() { public void run() { int added = 0; try { q.put(new Object()); ++added; q.put(new Object()); ++added; q.put(new Object()); ++added; q.put(new Object()); ++added; threadShouldThrow(); } catch (InterruptedException e){ threadAssertTrue(added >= 2); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); q.take(); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * timed offer times out if full and elements not taken */ public void testTimedOffer() { final ArrayBlockingQueue q = new ArrayBlockingQueue(2); Thread t = new Thread(new Runnable() { public void run() { try { q.put(new Object()); q.put(new Object()); threadAssertFalse(q.offer(new Object(), SHORT_DELAY_MS/2, TimeUnit.MILLISECONDS)); q.offer(new Object(), LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success){} } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * take retrieves elements in FIFO order */ public void testTake() { try { ArrayBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.take()).intValue()); } } catch (InterruptedException e){ unexpectedException(); } } /** * take blocks interruptibly when empty */ public void testTakeFromEmpty() { final ArrayBlockingQueue q = new ArrayBlockingQueue(2); Thread t = new Thread(new Runnable() { public void run() { try { q.take(); threadShouldThrow(); } catch (InterruptedException success){ } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * Take removes existing elements until empty, then blocks interruptibly */ public void testBlockingTake() { Thread t = new Thread(new Runnable() { public void run() { try { ArrayBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { threadAssertEquals(i, ((Integer)q.take()).intValue()); } q.take(); threadShouldThrow(); } catch (InterruptedException success){ } }}); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * poll succeeds unless empty */ public void testPoll() { ArrayBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll()).intValue()); } assertNull(q.poll()); } /** * timed pool with zero timeout succeeds when non-empty, else times out */ public void testTimedPoll0() { try { ArrayBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll(0, TimeUnit.MILLISECONDS)).intValue()); } assertNull(q.poll(0, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * timed pool with nonzero timeout succeeds when non-empty, else times out */ public void testTimedPoll() { try { ArrayBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue()); } assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException e){ unexpectedException(); } } /** * Interrupted timed poll throws InterruptedException instead of * returning timeout status */ public void testInterruptedTimedPoll() { Thread t = new Thread(new Runnable() { public void run() { try { ArrayBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { threadAssertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue()); } threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); } catch (InterruptedException success){ } }}); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch (InterruptedException ie) { unexpectedException(); } } /** * timed poll before a delayed offer fails; after offer succeeds; * on interruption throws */ public void testTimedPollWithOffer() { final ArrayBlockingQueue q = new ArrayBlockingQueue(2); Thread t = new Thread(new Runnable() { public void run() { try { threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch (InterruptedException success) { } } }); try { t.start(); Thread.sleep(SMALL_DELAY_MS); assertTrue(q.offer(zero, SHORT_DELAY_MS, TimeUnit.MILLISECONDS)); t.interrupt(); t.join(); } catch (Exception e){ unexpectedException(); } } /** * peek returns next element, or null if empty */ public void testPeek() { ArrayBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.peek()).intValue()); q.poll(); assertTrue(q.peek() == null || i != ((Integer)q.peek()).intValue()); } assertNull(q.peek()); } /** * element returns next element, or throws NSEE if empty */ public void testElement() { ArrayBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.element()).intValue()); q.poll(); } try { q.element(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * remove removes next element, or throws NSEE if empty */ public void testRemove() { ArrayBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.remove()).intValue()); } try { q.remove(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * remove(x) removes x and returns true if present */ public void testRemoveElement() { ArrayBlockingQueue q = populatedQueue(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { ArrayBlockingQueue q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.poll(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testClear() { ArrayBlockingQueue q = populatedQueue(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); assertEquals(SIZE, q.remainingCapacity()); q.add(one); assertFalse(q.isEmpty()); assertTrue(q.contains(one)); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { ArrayBlockingQueue q = populatedQueue(SIZE); ArrayBlockingQueue p = new ArrayBlockingQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testRetainAll() { ArrayBlockingQueue q = populatedQueue(SIZE); ArrayBlockingQueue p = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.remove(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { ArrayBlockingQueue q = populatedQueue(SIZE); ArrayBlockingQueue p = populatedQueue(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer I = (Integer)(p.remove()); assertFalse(q.contains(I)); } } } /** * toArray contains all elements */ public void testToArray() { ArrayBlockingQueue q = populatedQueue(SIZE); Object[] o = q.toArray(); try { for(int i = 0; i < o.length; i++) assertEquals(o[i], q.take()); } catch (InterruptedException e){ unexpectedException(); } } /** * toArray(a) contains all elements */ public void testToArray2() { ArrayBlockingQueue q = populatedQueue(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); try { for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.take()); } catch (InterruptedException e){ unexpectedException(); } } /** * toArray(null) throws NPE */ public void testToArray_BadArg() { try { ArrayBlockingQueue q = populatedQueue(SIZE); Object o[] = q.toArray(null); shouldThrow(); } catch(NullPointerException success){} } /** * toArray with incompatible array type throws CCE */ public void testToArray1_BadArg() { try { ArrayBlockingQueue q = populatedQueue(SIZE); Object o[] = q.toArray(new String[10] ); shouldThrow(); } catch(ArrayStoreException success){} } /** * iterator iterates through all elements */ public void testIterator() { ArrayBlockingQueue q = populatedQueue(SIZE); Iterator it = q.iterator(); try { while(it.hasNext()){ assertEquals(it.next(), q.take()); } } catch (InterruptedException e){ unexpectedException(); } } /** * iterator.remove removes current element */ public void testIteratorRemove () { final ArrayBlockingQueue q = new ArrayBlockingQueue(3); q.add(two); q.add(one); q.add(three); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), one); assertEquals(it.next(), three); assertFalse(it.hasNext()); } /** * iterator ordering is FIFO */ public void testIteratorOrdering() { final ArrayBlockingQueue q = new ArrayBlockingQueue(3); q.add(one); q.add(two); q.add(three); assertEquals("queue should be full", 0, q.remainingCapacity()); int k = 0; for (Iterator it = q.iterator(); it.hasNext();) { int i = ((Integer)(it.next())).intValue(); assertEquals(++k, i); } assertEquals(3, k); } /** * Modifications do not cause iterators to fail */ public void testWeaklyConsistentIteration () { final ArrayBlockingQueue q = new ArrayBlockingQueue(3); q.add(one); q.add(two); q.add(three); try { for (Iterator it = q.iterator(); it.hasNext();) { q.remove(); it.next(); } } catch (ConcurrentModificationException e) { unexpectedException(); } assertEquals(0, q.size()); } /** * toString contains toStrings of elements */ public void testToString() { ArrayBlockingQueue q = populatedQueue(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * offer transfers elements across Executor tasks */ public void testOfferInExecutor() { final ArrayBlockingQueue q = new ArrayBlockingQueue(2); q.add(one); q.add(two); ExecutorService executor = Executors.newFixedThreadPool(2); executor.execute(new Runnable() { public void run() { threadAssertFalse(q.offer(three)); try { threadAssertTrue(q.offer(three, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertEquals(0, q.remainingCapacity()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); executor.execute(new Runnable() { public void run() { try { Thread.sleep(SMALL_DELAY_MS); threadAssertEquals(one, q.take()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); joinPool(executor); } /** * poll retrieves elements across Executor threads */ public void testPollInExecutor() { final ArrayBlockingQueue q = new ArrayBlockingQueue(2); ExecutorService executor = Executors.newFixedThreadPool(2); executor.execute(new Runnable() { public void run() { threadAssertNull(q.poll()); try { threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS)); threadAssertTrue(q.isEmpty()); } catch (InterruptedException e) { threadUnexpectedException(); } } }); executor.execute(new Runnable() { public void run() { try { Thread.sleep(SMALL_DELAY_MS); q.put(one); } catch (InterruptedException e) { threadUnexpectedException(); } } }); joinPool(executor); } /** * A deserialized serialized queue has same elements in same order */ public void testSerialization() { ArrayBlockingQueue q = populatedQueue(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); ArrayBlockingQueue r = (ArrayBlockingQueue)in.readObject(); assertEquals(q.size(), r.size()); while (!q.isEmpty()) assertEquals(q.remove(), r.remove()); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * drainTo(null) throws NPE */ public void testDrainToNull() { ArrayBlockingQueue q = populatedQueue(SIZE); try { q.drainTo(null); shouldThrow(); } catch(NullPointerException success) { } } /** * drainTo(this) throws IAE */ public void testDrainToSelf() { ArrayBlockingQueue q = populatedQueue(SIZE); try { q.drainTo(q); shouldThrow(); } catch(IllegalArgumentException success) { } } /** * drainTo(c) empties queue into another collection c */ public void testDrainTo() { ArrayBlockingQueue q = populatedQueue(SIZE); ArrayList l = new ArrayList(); q.drainTo(l); assertEquals(q.size(), 0); assertEquals(l.size(), SIZE); for (int i = 0; i < SIZE; ++i) assertEquals(l.get(i), new Integer(i)); q.add(zero); q.add(one); assertFalse(q.isEmpty()); assertTrue(q.contains(zero)); assertTrue(q.contains(one)); l.clear(); q.drainTo(l); assertEquals(q.size(), 0); assertEquals(l.size(), 2); for (int i = 0; i < 2; ++i) assertEquals(l.get(i), new Integer(i)); } /** * drainTo empties full queue, unblocking a waiting put. */ public void testDrainToWithActivePut() { final ArrayBlockingQueue q = populatedQueue(SIZE); Thread t = new Thread(new Runnable() { public void run() { try { q.put(new Integer(SIZE+1)); } catch (InterruptedException ie){ threadUnexpectedException(); } } }); try { t.start(); ArrayList l = new ArrayList(); q.drainTo(l); assertTrue(l.size() >= SIZE); for (int i = 0; i < SIZE; ++i) assertEquals(l.get(i), new Integer(i)); t.join(); assertTrue(q.size() + l.size() >= SIZE); } catch(Exception e){ unexpectedException(); } } /** * drainTo(null, n) throws NPE */ public void testDrainToNullN() { ArrayBlockingQueue q = populatedQueue(SIZE); try { q.drainTo(null, 0); shouldThrow(); } catch(NullPointerException success) { } } /** * drainTo(this, n) throws IAE */ public void testDrainToSelfN() { ArrayBlockingQueue q = populatedQueue(SIZE); try { q.drainTo(q, 0); shouldThrow(); } catch(IllegalArgumentException success) { } } /** * drainTo(c, n) empties first max {n, size} elements of queue into c */ public void testDrainToN() { ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE*2); for (int i = 0; i < SIZE + 2; ++i) { for(int j = 0; j < SIZE; j++) assertTrue(q.offer(new Integer(j))); ArrayList l = new ArrayList(); q.drainTo(l, i); int k = (i < SIZE)? i : SIZE; assertEquals(l.size(), k); assertEquals(q.size(), SIZE-k); for (int j = 0; j < k; ++j) assertEquals(l.get(j), new Integer(j)); while (q.poll() != null) ; } } } backport-util-concurrent-3.1-src/test/tck/src/AtomicLongTest.java0000644001750700037720000001562510253674160024011 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import java.io.*; public class AtomicLongTest extends JSR166TestCase { public static void main (String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(AtomicLongTest.class); } /** * constructor initializes to given value */ public void testConstructor(){ AtomicLong ai = new AtomicLong(1); assertEquals(1,ai.get()); } /** * default constructed initializes to zero */ public void testConstructor2(){ AtomicLong ai = new AtomicLong(); assertEquals(0,ai.get()); } /** * get returns the last value set */ public void testGetSet(){ AtomicLong ai = new AtomicLong(1); assertEquals(1,ai.get()); ai.set(2); assertEquals(2,ai.get()); ai.set(-3); assertEquals(-3,ai.get()); } /** * get returns the last value lazySet in same thread */ public void testGetLazySet(){ AtomicLong ai = new AtomicLong(1); assertEquals(1,ai.get()); ai.lazySet(2); assertEquals(2,ai.get()); ai.lazySet(-3); assertEquals(-3,ai.get()); } /** * compareAndSet succeeds in changing value if equal to expected else fails */ public void testCompareAndSet(){ AtomicLong ai = new AtomicLong(1); assertTrue(ai.compareAndSet(1,2)); assertTrue(ai.compareAndSet(2,-4)); assertEquals(-4,ai.get()); assertFalse(ai.compareAndSet(-5,7)); assertFalse((7 == ai.get())); assertTrue(ai.compareAndSet(-4,7)); assertEquals(7,ai.get()); } /** * compareAndSet in one thread enables another waiting for value * to succeed */ public void testCompareAndSetInMultipleThreads() { final AtomicLong ai = new AtomicLong(1); Thread t = new Thread(new Runnable() { public void run() { while(!ai.compareAndSet(2, 3)) Thread.yield(); }}); try { t.start(); assertTrue(ai.compareAndSet(1, 2)); t.join(LONG_DELAY_MS); assertFalse(t.isAlive()); assertEquals(ai.get(), 3); } catch(Exception e) { unexpectedException(); } } /** * repeated weakCompareAndSet succeeds in changing value when equal * to expected */ public void testWeakCompareAndSet(){ AtomicLong ai = new AtomicLong(1); while(!ai.weakCompareAndSet(1,2)); while(!ai.weakCompareAndSet(2,-4)); assertEquals(-4,ai.get()); while(!ai.weakCompareAndSet(-4,7)); assertEquals(7,ai.get()); } /** * getAndSet returns previous value and sets to given value */ public void testGetAndSet(){ AtomicLong ai = new AtomicLong(1); assertEquals(1,ai.getAndSet(0)); assertEquals(0,ai.getAndSet(-10)); assertEquals(-10,ai.getAndSet(1)); } /** * getAndAdd returns previous value and adds given value */ public void testGetAndAdd(){ AtomicLong ai = new AtomicLong(1); assertEquals(1,ai.getAndAdd(2)); assertEquals(3,ai.get()); assertEquals(3,ai.getAndAdd(-4)); assertEquals(-1,ai.get()); } /** * getAndDecrement returns previous value and decrements */ public void testGetAndDecrement(){ AtomicLong ai = new AtomicLong(1); assertEquals(1,ai.getAndDecrement()); assertEquals(0,ai.getAndDecrement()); assertEquals(-1,ai.getAndDecrement()); } /** * getAndIncrement returns previous value and increments */ public void testGetAndIncrement(){ AtomicLong ai = new AtomicLong(1); assertEquals(1,ai.getAndIncrement()); assertEquals(2,ai.get()); ai.set(-2); assertEquals(-2,ai.getAndIncrement()); assertEquals(-1,ai.getAndIncrement()); assertEquals(0,ai.getAndIncrement()); assertEquals(1,ai.get()); } /** * addAndGet adds given value to current, and returns current value */ public void testAddAndGet(){ AtomicLong ai = new AtomicLong(1); assertEquals(3,ai.addAndGet(2)); assertEquals(3,ai.get()); assertEquals(-1,ai.addAndGet(-4)); assertEquals(-1,ai.get()); } /** * decrementAndGet decrements and returns current value */ public void testDecrementAndGet(){ AtomicLong ai = new AtomicLong(1); assertEquals(0,ai.decrementAndGet()); assertEquals(-1,ai.decrementAndGet()); assertEquals(-2,ai.decrementAndGet()); assertEquals(-2,ai.get()); } /** * incrementAndGet increments and returns current value */ public void testIncrementAndGet(){ AtomicLong ai = new AtomicLong(1); assertEquals(2,ai.incrementAndGet()); assertEquals(2,ai.get()); ai.set(-2); assertEquals(-1,ai.incrementAndGet()); assertEquals(0,ai.incrementAndGet()); assertEquals(1,ai.incrementAndGet()); assertEquals(1,ai.get()); } /** * a deserialized serialized atomic holds same value */ public void testSerialization() { AtomicLong l = new AtomicLong(); try { l.set(-22); ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(l); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); AtomicLong r = (AtomicLong) in.readObject(); assertEquals(l.get(), r.get()); } catch(Exception e){ unexpectedException(); } } /** * toString returns current value. */ public void testToString() { AtomicLong ai = new AtomicLong(); for (long i = -12; i < 6; ++i) { ai.set(i); assertEquals(ai.toString(), Long.toString(i)); } } /** * longValue returns current value. */ public void testLongValue() { AtomicLong ai = new AtomicLong(); for (int i = -12; i < 6; ++i) { ai.set(i); assertEquals((long)i, ai.longValue()); } } /** * floatValue returns current value. */ public void testFloatValue() { AtomicLong ai = new AtomicLong(); for (int i = -12; i < 6; ++i) { ai.set(i); assertEquals((float)i, ai.floatValue(), 0.0f); } } /** * doubleValue returns current value. */ public void testDoubleValue() { AtomicLong ai = new AtomicLong(); for (int i = -12; i < 6; ++i) { ai.set(i); assertEquals((double)i, ai.doubleValue(), 0.0); } } } backport-util-concurrent-3.1-src/test/tck/src/CopyOnWriteArraySetTest.java0000644001750700037720000001737710365510635025660 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import java.util.Vector; import java.util.Iterator; public class CopyOnWriteArraySetTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(CopyOnWriteArraySetTest.class); } static CopyOnWriteArraySet populatedSet(int n){ CopyOnWriteArraySet a = new CopyOnWriteArraySet(); assertTrue(a.isEmpty()); for (int i = 0; i < n; ++i) a.add(new Integer(i)); assertFalse(a.isEmpty()); assertEquals(n, a.size()); return a; } /** * Default-constructed set is empty */ public void testConstructor() { CopyOnWriteArraySet a = new CopyOnWriteArraySet(); assertTrue(a.isEmpty()); } /** * Collection-constructed set holds all of its elements */ public void testConstructor3() { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE-1; ++i) ints[i] = new Integer(i); CopyOnWriteArraySet a = new CopyOnWriteArraySet(Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertTrue(a.contains(ints[i])); } /** * addAll adds each element from the given collection */ public void testAddAll() { CopyOnWriteArraySet full = populatedSet(3); Vector v = new Vector(); v.add(three); v.add(four); v.add(five); full.addAll(v); assertEquals(6, full.size()); } /** * addAll adds each element from the given collection that did not * already exist in the set */ public void testAddAll2() { CopyOnWriteArraySet full = populatedSet(3); Vector v = new Vector(); v.add(three); v.add(four); v.add(one); // will not add this element full.addAll(v); assertEquals(5, full.size()); } /** * add will not add the element if it already exists in the set */ public void testAdd2() { CopyOnWriteArraySet full = populatedSet(3); full.add(one); assertEquals(3, full.size()); } /** * add adds the element when it does not exist * in the set */ public void testAdd3() { CopyOnWriteArraySet full = populatedSet(3); full.add(three); assertTrue(full.contains(three)); } /** * clear removes all elements from the set */ public void testClear() { CopyOnWriteArraySet full = populatedSet(3); full.clear(); assertEquals(0, full.size()); } /** * contains returns true for added elements */ public void testContains() { CopyOnWriteArraySet full = populatedSet(3); assertTrue(full.contains(one)); assertFalse(full.contains(five)); } /** * Sets with equal elements are equal */ public void testEquals() { CopyOnWriteArraySet a = populatedSet(3); CopyOnWriteArraySet b = populatedSet(3); assertTrue(a.equals(b)); assertTrue(b.equals(a)); assertEquals(a.hashCode(), b.hashCode()); a.add(m1); assertFalse(a.equals(b)); assertFalse(b.equals(a)); b.add(m1); assertTrue(a.equals(b)); assertTrue(b.equals(a)); assertEquals(a.hashCode(), b.hashCode()); } /** * containsAll returns true for collections with subset of elements */ public void testContainsAll() { CopyOnWriteArraySet full = populatedSet(3); Vector v = new Vector(); v.add(one); v.add(two); assertTrue(full.containsAll(v)); v.add(six); assertFalse(full.containsAll(v)); } /** * isEmpty is true when empty, else false */ public void testIsEmpty() { CopyOnWriteArraySet empty = new CopyOnWriteArraySet(); CopyOnWriteArraySet full = populatedSet(3); assertTrue(empty.isEmpty()); assertFalse(full.isEmpty()); } /** * iterator() returns an iterator containing the elements of the set */ public void testIterator() { CopyOnWriteArraySet full = populatedSet(3); Iterator i = full.iterator(); int j; for(j = 0; i.hasNext(); j++) assertEquals(j, ((Integer)i.next()).intValue()); assertEquals(3, j); } /** * iterator remove is unsupported */ public void testIteratorRemove () { CopyOnWriteArraySet full = populatedSet(3); Iterator it = full.iterator(); it.next(); try { it.remove(); shouldThrow(); } catch (UnsupportedOperationException success) {} } /** * toString holds toString of elements */ public void testToString() { CopyOnWriteArraySet full = populatedSet(3); String s = full.toString(); for (int i = 0; i < 3; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * removeAll removes all elements from the given collection */ public void testRemoveAll() { CopyOnWriteArraySet full = populatedSet(3); Vector v = new Vector(); v.add(one); v.add(two); full.removeAll(v); assertEquals(1, full.size()); } /** * remove removes an element */ public void testRemove() { CopyOnWriteArraySet full = populatedSet(3); full.remove(one); assertFalse(full.contains(one)); assertEquals(2, full.size()); } /** * size returns the number of elements */ public void testSize() { CopyOnWriteArraySet empty = new CopyOnWriteArraySet(); CopyOnWriteArraySet full = populatedSet(3); assertEquals(3, full.size()); assertEquals(0, empty.size()); } /** * toArray returns an Object array containing all elements from the set */ public void testToArray() { CopyOnWriteArraySet full = populatedSet(3); Object[] o = full.toArray(); assertEquals(3, o.length); assertEquals(0, ((Integer)o[0]).intValue()); assertEquals(1, ((Integer)o[1]).intValue()); assertEquals(2, ((Integer)o[2]).intValue()); } /** * toArray returns an Integer array containing all elements from * the set */ public void testToArray2() { CopyOnWriteArraySet full = populatedSet(3); Integer[] i = new Integer[3]; i = (Integer[])full.toArray(i); assertEquals(3, i.length); assertEquals(0, i[0].intValue()); assertEquals(1, i[1].intValue()); assertEquals(2, i[2].intValue()); } /** * toArray throws an ArrayStoreException when the given array can * not store the objects inside the set */ public void testToArray_ArrayStoreException() { try { CopyOnWriteArraySet c = new CopyOnWriteArraySet(); c.add("zfasdfsdf"); c.add("asdadasd"); c.toArray(new Long[5]); shouldThrow(); } catch(ArrayStoreException e){} } /** * A deserialized serialized set is equal */ public void testSerialization() { CopyOnWriteArraySet q = populatedSet(SIZE); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); CopyOnWriteArraySet r = (CopyOnWriteArraySet)in.readObject(); assertEquals(q.size(), r.size()); assertTrue(q.equals(r)); assertTrue(r.equals(q)); } catch(Exception e){ unexpectedException(); } } } backport-util-concurrent-3.1-src/test/tck/src/FutureTaskTest.java0000644001750700037720000003061610431260156024041 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.*; import java.util.NoSuchElementException; public class FutureTaskTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(FutureTaskTest.class); } /** * Subclass to expose protected methods */ static class PublicFutureTask extends FutureTask { public PublicFutureTask(Callable r) { super(r); } public boolean runAndReset() { return super.runAndReset(); } public void set(Object x) { super.set(x); } public void setException(Throwable t) { super.setException(t); } } /** * Creating a future with a null callable throws NPE */ public void testConstructor() { try { FutureTask task = new FutureTask(null); shouldThrow(); } catch(NullPointerException success) { } } /** * creating a future with null runnable fails */ public void testConstructor2() { try { FutureTask task = new FutureTask(null, Boolean.TRUE); shouldThrow(); } catch(NullPointerException success) { } } /** * isDone is true when a task completes */ public void testIsDone() { FutureTask task = new FutureTask( new NoOpCallable()); task.run(); assertTrue(task.isDone()); assertFalse(task.isCancelled()); } /** * runAndReset of a non-cancelled task succeeds */ public void testRunAndReset() { PublicFutureTask task = new PublicFutureTask(new NoOpCallable()); assertTrue(task.runAndReset()); assertFalse(task.isDone()); } /** * runAndReset after cancellation fails */ public void testResetAfterCancel() { PublicFutureTask task = new PublicFutureTask(new NoOpCallable()); assertTrue(task.cancel(false)); assertFalse(task.runAndReset()); assertTrue(task.isDone()); assertTrue(task.isCancelled()); } /** * setting value causes get to return it */ public void testSet() { PublicFutureTask task = new PublicFutureTask(new NoOpCallable()); task.set(one); try { assertEquals(task.get(), one); } catch(Exception e) { unexpectedException(); } } /** * setException causes get to throw ExecutionException */ public void testSetException() { Exception nse = new NoSuchElementException(); PublicFutureTask task = new PublicFutureTask(new NoOpCallable()); task.setException(nse); try { Object x = task.get(); shouldThrow(); } catch(ExecutionException ee) { Throwable cause = ee.getCause(); assertEquals(cause, nse); } catch(Exception e) { unexpectedException(); } } /** * Cancelling before running succeeds */ public void testCancelBeforeRun() { FutureTask task = new FutureTask( new NoOpCallable()); assertTrue(task.cancel(false)); task.run(); assertTrue(task.isDone()); assertTrue(task.isCancelled()); } /** * Cancel(true) before run succeeds */ public void testCancelBeforeRun2() { FutureTask task = new FutureTask( new NoOpCallable()); assertTrue(task.cancel(true)); task.run(); assertTrue(task.isDone()); assertTrue(task.isCancelled()); } /** * cancel of a completed task fails */ public void testCancelAfterRun() { FutureTask task = new FutureTask( new NoOpCallable()); task.run(); assertFalse(task.cancel(false)); assertTrue(task.isDone()); assertFalse(task.isCancelled()); } /** * cancel(true) interrupts a running task */ public void testCancelInterrupt() { FutureTask task = new FutureTask( new Callable() { public Object call() { try { Thread.sleep(MEDIUM_DELAY_MS); threadShouldThrow(); } catch (InterruptedException success) {} return Boolean.TRUE; } }); Thread t = new Thread(task); t.start(); try { Thread.sleep(SHORT_DELAY_MS); assertTrue(task.cancel(true)); t.join(); assertTrue(task.isDone()); assertTrue(task.isCancelled()); } catch(InterruptedException e){ unexpectedException(); } } /** * cancel(false) does not interrupt a running task */ public void testCancelNoInterrupt() { FutureTask task = new FutureTask( new Callable() { public Object call() { try { Thread.sleep(MEDIUM_DELAY_MS); } catch (InterruptedException success) { threadFail("should not interrupt"); } return Boolean.TRUE; } }); Thread t = new Thread(task); t.start(); try { Thread.sleep(SHORT_DELAY_MS); assertTrue(task.cancel(false)); t.join(); assertTrue(task.isDone()); assertTrue(task.isCancelled()); } catch(InterruptedException e){ unexpectedException(); } } /** * set in one thread causes get in another thread to retrieve value */ public void testGet1() { final FutureTask ft = new FutureTask(new Callable() { public Object call() { try { Thread.sleep(MEDIUM_DELAY_MS); } catch(InterruptedException e){ threadUnexpectedException(); } return Boolean.TRUE; } }); Thread t = new Thread(new Runnable() { public void run() { try { ft.get(); } catch(Exception e){ threadUnexpectedException(); } } }); try { assertFalse(ft.isDone()); assertFalse(ft.isCancelled()); t.start(); Thread.sleep(SHORT_DELAY_MS); ft.run(); t.join(); assertTrue(ft.isDone()); assertFalse(ft.isCancelled()); } catch(InterruptedException e){ unexpectedException(); } } /** * set in one thread causes timed get in another thread to retrieve value */ public void testTimedGet1() { final FutureTask ft = new FutureTask(new Callable() { public Object call() { try { Thread.sleep(MEDIUM_DELAY_MS); } catch(InterruptedException e){ threadUnexpectedException(); } return Boolean.TRUE; } }); Thread t = new Thread(new Runnable() { public void run() { try { ft.get(SHORT_DELAY_MS, TimeUnit.MILLISECONDS); } catch(TimeoutException success) { } catch(Exception e){ threadUnexpectedException(); } } }); try { assertFalse(ft.isDone()); assertFalse(ft.isCancelled()); t.start(); ft.run(); t.join(); assertTrue(ft.isDone()); assertFalse(ft.isCancelled()); } catch(InterruptedException e){ unexpectedException(); } } /** * Cancelling a task causes timed get in another thread to throw CancellationException */ public void testTimedGet_Cancellation() { final FutureTask ft = new FutureTask(new Callable() { public Object call() { try { Thread.sleep(SMALL_DELAY_MS); threadShouldThrow(); } catch(InterruptedException e) { } return Boolean.TRUE; } }); try { Thread t1 = new Thread(new Runnable() { public void run() { try { ft.get(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(CancellationException success) {} catch(Exception e){ e.printStackTrace(); threadUnexpectedException(); } } }); Thread t2 = new Thread(ft); t1.start(); t2.start(); Thread.sleep(SHORT_DELAY_MS); ft.cancel(true); t1.join(); t2.join(); } catch(InterruptedException ie){ unexpectedException(); } } /** * Cancelling a task causes get in another thread to throw CancellationException */ public void testGet_Cancellation() { final FutureTask ft = new FutureTask(new Callable() { public Object call() { try { Thread.sleep(MEDIUM_DELAY_MS); threadShouldThrow(); } catch(InterruptedException e){ } return Boolean.TRUE; } }); try { Thread t1 = new Thread(new Runnable() { public void run() { try { ft.get(); threadShouldThrow(); } catch(CancellationException success){ } catch(Exception e){ threadUnexpectedException(); } } }); Thread t2 = new Thread(ft); t1.start(); t2.start(); Thread.sleep(SHORT_DELAY_MS); ft.cancel(true); t1.join(); t2.join(); } catch(InterruptedException success){ unexpectedException(); } } /** * A runtime exception in task causes get to throw ExecutionException */ public void testGet_ExecutionException() { final FutureTask ft = new FutureTask(new Callable() { public Object call() { int i = 5/0; return Boolean.TRUE; } }); try { ft.run(); ft.get(); shouldThrow(); } catch(ExecutionException success){ } catch(Exception e){ unexpectedException(); } } /** * A runtime exception in task causes timed get to throw ExecutionException */ public void testTimedGet_ExecutionException2() { final FutureTask ft = new FutureTask(new Callable() { public Object call() { int i = 5/0; return Boolean.TRUE; } }); try { ft.run(); ft.get(SHORT_DELAY_MS, TimeUnit.MILLISECONDS); shouldThrow(); } catch(ExecutionException success) { } catch(TimeoutException success) { } // unlikely but OK catch(Exception e){ unexpectedException(); } } /** * Interrupting a waiting get causes it to throw InterruptedException */ public void testGet_InterruptedException() { final FutureTask ft = new FutureTask(new NoOpCallable()); Thread t = new Thread(new Runnable() { public void run() { try { ft.get(); threadShouldThrow(); } catch(InterruptedException success){ } catch(Exception e){ threadUnexpectedException(); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(Exception e){ unexpectedException(); } } /** * Interrupting a waiting timed get causes it to throw InterruptedException */ public void testTimedGet_InterruptedException2() { final FutureTask ft = new FutureTask(new NoOpCallable()); Thread t = new Thread(new Runnable() { public void run() { try { ft.get(LONG_DELAY_MS,TimeUnit.MILLISECONDS); threadShouldThrow(); } catch(InterruptedException success){} catch(Exception e){ threadUnexpectedException(); } } }); try { t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(Exception e){ unexpectedException(); } } /** * A timed out timed get throws TimeoutException */ public void testGet_TimeoutException() { try { FutureTask ft = new FutureTask(new NoOpCallable()); ft.get(1,TimeUnit.MILLISECONDS); shouldThrow(); } catch(TimeoutException success){} catch(Exception success){ unexpectedException(); } } } backport-util-concurrent-3.1-src/test/tck/src/TreeMapTest.java0000644001750700037720000007641510431777323023321 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.Random; import java.util.BitSet; import java.util.NoSuchElementException; public class TreeMapTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(TreeMapTest.class); } /** * Create a map from Integers 1-5 to Strings "A"-"E". */ private static TreeMap map5() { TreeMap map = new TreeMap(); assertTrue(map.isEmpty()); map.put(one, "A"); map.put(five, "E"); map.put(three, "C"); map.put(two, "B"); map.put(four, "D"); assertFalse(map.isEmpty()); assertEquals(5, map.size()); return map; } /** * clear removes all pairs */ public void testClear() { TreeMap map = map5(); map.clear(); assertEquals(map.size(), 0); } /** * */ public void testConstructFromSorted() { TreeMap map = map5(); TreeMap map2 = new TreeMap(map); assertEquals(map, map2); } /** * Maps with same contents are equal */ public void testEquals() { TreeMap map1 = map5(); TreeMap map2 = map5(); assertEquals(map1, map2); assertEquals(map2, map1); map1.clear(); assertFalse(map1.equals(map2)); assertFalse(map2.equals(map1)); } /** * containsKey returns true for contained key */ public void testContainsKey() { TreeMap map = map5(); assertTrue(map.containsKey(one)); assertFalse(map.containsKey(zero)); } /** * containsValue returns true for held values */ public void testContainsValue() { TreeMap map = map5(); assertTrue(map.containsValue("A")); assertFalse(map.containsValue("Z")); } /** * get returns the correct element at the given key, * or null if not present */ public void testGet() { TreeMap map = map5(); assertEquals("A", (String)map.get(one)); TreeMap empty = new TreeMap(); assertNull(empty.get(one)); } /** * isEmpty is true of empty map and false for non-empty */ public void testIsEmpty() { TreeMap empty = new TreeMap(); TreeMap map = map5(); assertTrue(empty.isEmpty()); assertFalse(map.isEmpty()); } /** * firstKey returns first key */ public void testFirstKey() { TreeMap map = map5(); assertEquals(one, map.firstKey()); } /** * lastKey returns last key */ public void testLastKey() { TreeMap map = map5(); assertEquals(five, map.lastKey()); } /** * keySet.toArray returns contains all keys */ public void testKeySetToArray() { TreeMap map = map5(); Set s = map.keySet(); Object[] ar = s.toArray(); assertTrue(s.containsAll(Arrays.asList(ar))); assertEquals(5, ar.length); ar[0] = m10; assertFalse(s.containsAll(Arrays.asList(ar))); } /** * descendingkeySet.toArray returns contains all keys */ public void testDescendingKeySetToArray() { TreeMap map = map5(); Set s = map.descendingKeySet(); Object[] ar = s.toArray(); assertEquals(5, ar.length); assertTrue(s.containsAll(Arrays.asList(ar))); ar[0] = m10; assertFalse(s.containsAll(Arrays.asList(ar))); } /** * keySet returns a Set containing all the keys */ public void testKeySet() { TreeMap map = map5(); Set s = map.keySet(); assertEquals(5, s.size()); assertTrue(s.contains(one)); assertTrue(s.contains(two)); assertTrue(s.contains(three)); assertTrue(s.contains(four)); assertTrue(s.contains(five)); } /** * keySet is ordered */ public void testKeySetOrder() { TreeMap map = map5(); Set s = map.keySet(); Iterator i = s.iterator(); Integer last = (Integer)i.next(); assertEquals(last, one); while (i.hasNext()) { Integer k = (Integer)i.next(); assertTrue(last.compareTo(k) < 0); last = k; } } /** * descendingKeySet is ordered */ public void testDescendingKeySetOrder() { TreeMap map = map5(); Set s = map.descendingKeySet(); Iterator i = s.iterator(); Integer last = (Integer)i.next(); assertEquals(last, five); while (i.hasNext()) { Integer k = (Integer)i.next(); assertTrue(last.compareTo(k) > 0); last = k; } } /** * values collection contains all values */ public void testValues() { TreeMap map = map5(); Collection s = map.values(); assertEquals(5, s.size()); assertTrue(s.contains("A")); assertTrue(s.contains("B")); assertTrue(s.contains("C")); assertTrue(s.contains("D")); assertTrue(s.contains("E")); } /** * entrySet contains all pairs */ public void testEntrySet() { TreeMap map = map5(); Set s = map.entrySet(); assertEquals(5, s.size()); Iterator it = s.iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); assertTrue( (e.getKey().equals(one) && e.getValue().equals("A")) || (e.getKey().equals(two) && e.getValue().equals("B")) || (e.getKey().equals(three) && e.getValue().equals("C")) || (e.getKey().equals(four) && e.getValue().equals("D")) || (e.getKey().equals(five) && e.getValue().equals("E"))); } } /** * descendingEntrySet contains all pairs */ public void testDescendingEntrySet() { TreeMap map = map5(); Set s = map.descendingMap().entrySet(); assertEquals(5, s.size()); Iterator it = s.iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); assertTrue( (e.getKey().equals(one) && e.getValue().equals("A")) || (e.getKey().equals(two) && e.getValue().equals("B")) || (e.getKey().equals(three) && e.getValue().equals("C")) || (e.getKey().equals(four) && e.getValue().equals("D")) || (e.getKey().equals(five) && e.getValue().equals("E"))); } } /** * entrySet.toArray contains all entries */ public void testEntrySetToArray() { TreeMap map = map5(); Set s = map.entrySet(); Object[] ar = s.toArray(); assertEquals(5, ar.length); for (int i = 0; i < 5; ++i) { assertTrue(map.containsKey(((Map.Entry)(ar[i])).getKey())); assertTrue(map.containsValue(((Map.Entry)(ar[i])).getValue())); } } /** * descendingEntrySet.toArray contains all entries */ public void testDescendingEntrySetToArray() { TreeMap map = map5(); Set s = map.descendingMap().entrySet(); Object[] ar = s.toArray(); assertEquals(5, ar.length); for (int i = 0; i < 5; ++i) { assertTrue(map.containsKey(((Map.Entry)(ar[i])).getKey())); assertTrue(map.containsValue(((Map.Entry)(ar[i])).getValue())); } } /** * putAll adds all key-value pairs from the given map */ public void testPutAll() { TreeMap empty = new TreeMap(); TreeMap map = map5(); empty.putAll(map); assertEquals(5, empty.size()); assertTrue(empty.containsKey(one)); assertTrue(empty.containsKey(two)); assertTrue(empty.containsKey(three)); assertTrue(empty.containsKey(four)); assertTrue(empty.containsKey(five)); } /** * remove removes the correct key-value pair from the map */ public void testRemove() { TreeMap map = map5(); map.remove(five); assertEquals(4, map.size()); assertFalse(map.containsKey(five)); } /** * lowerEntry returns preceding entry. */ public void testLowerEntry() { TreeMap map = map5(); Map.Entry e1 = map.lowerEntry(three); assertEquals(two, e1.getKey()); Map.Entry e2 = map.lowerEntry(six); assertEquals(five, e2.getKey()); Map.Entry e3 = map.lowerEntry(one); assertNull(e3); Map.Entry e4 = map.lowerEntry(zero); assertNull(e4); } /** * higherEntry returns next entry. */ public void testHigherEntry() { TreeMap map = map5(); Map.Entry e1 = map.higherEntry(three); assertEquals(four, e1.getKey()); Map.Entry e2 = map.higherEntry(zero); assertEquals(one, e2.getKey()); Map.Entry e3 = map.higherEntry(five); assertNull(e3); Map.Entry e4 = map.higherEntry(six); assertNull(e4); } /** * floorEntry returns preceding entry. */ public void testFloorEntry() { TreeMap map = map5(); Map.Entry e1 = map.floorEntry(three); assertEquals(three, e1.getKey()); Map.Entry e2 = map.floorEntry(six); assertEquals(five, e2.getKey()); Map.Entry e3 = map.floorEntry(one); assertEquals(one, e3.getKey()); Map.Entry e4 = map.floorEntry(zero); assertNull(e4); } /** * ceilingEntry returns next entry. */ public void testCeilingEntry() { TreeMap map = map5(); Map.Entry e1 = map.ceilingEntry(three); assertEquals(three, e1.getKey()); Map.Entry e2 = map.ceilingEntry(zero); assertEquals(one, e2.getKey()); Map.Entry e3 = map.ceilingEntry(five); assertEquals(five, e3.getKey()); Map.Entry e4 = map.ceilingEntry(six); assertNull(e4); } /** * lowerKey returns preceding element */ public void testLowerKey() { TreeMap q = map5(); Object e1 = q.lowerKey(three); assertEquals(two, e1); Object e2 = q.lowerKey(six); assertEquals(five, e2); Object e3 = q.lowerKey(one); assertNull(e3); Object e4 = q.lowerKey(zero); assertNull(e4); } /** * higherKey returns next element */ public void testHigherKey() { TreeMap q = map5(); Object e1 = q.higherKey(three); assertEquals(four, e1); Object e2 = q.higherKey(zero); assertEquals(one, e2); Object e3 = q.higherKey(five); assertNull(e3); Object e4 = q.higherKey(six); assertNull(e4); } /** * floorKey returns preceding element */ public void testFloorKey() { TreeMap q = map5(); Object e1 = q.floorKey(three); assertEquals(three, e1); Object e2 = q.floorKey(six); assertEquals(five, e2); Object e3 = q.floorKey(one); assertEquals(one, e3); Object e4 = q.floorKey(zero); assertNull(e4); } /** * ceilingKey returns next element */ public void testCeilingKey() { TreeMap q = map5(); Object e1 = q.ceilingKey(three); assertEquals(three, e1); Object e2 = q.ceilingKey(zero); assertEquals(one, e2); Object e3 = q.ceilingKey(five); assertEquals(five, e3); Object e4 = q.ceilingKey(six); assertNull(e4); } /** * pollFirstEntry returns entries in order */ public void testPollFirstEntry() { TreeMap map = map5(); Map.Entry e = map.pollFirstEntry(); assertEquals(one, e.getKey()); assertEquals("A", e.getValue()); e = map.pollFirstEntry(); assertEquals(two, e.getKey()); map.put(one, "A"); e = map.pollFirstEntry(); assertEquals(one, e.getKey()); assertEquals("A", e.getValue()); e = map.pollFirstEntry(); assertEquals(three, e.getKey()); map.remove(four); e = map.pollFirstEntry(); assertEquals(five, e.getKey()); try { e.setValue("A"); shouldThrow(); } catch (Exception ok) { } e = map.pollFirstEntry(); assertNull(e); } /** * pollLastEntry returns entries in order */ public void testPollLastEntry() { TreeMap map = map5(); Map.Entry e = map.pollLastEntry(); assertEquals(five, e.getKey()); assertEquals("E", e.getValue()); e = map.pollLastEntry(); assertEquals(four, e.getKey()); map.put(five, "E"); e = map.pollLastEntry(); assertEquals(five, e.getKey()); assertEquals("E", e.getValue()); e = map.pollLastEntry(); assertEquals(three, e.getKey()); map.remove(two); e = map.pollLastEntry(); assertEquals(one, e.getKey()); try { e.setValue("E"); shouldThrow(); } catch (Exception ok) { } e = map.pollLastEntry(); assertNull(e); } /** * size returns the correct values */ public void testSize() { TreeMap map = map5(); TreeMap empty = new TreeMap(); assertEquals(0, empty.size()); assertEquals(5, map.size()); } /** * toString contains toString of elements */ public void testToString() { TreeMap map = map5(); String s = map.toString(); for (int i = 1; i <= 5; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } // Exception tests /** * get(null) of nonempty map throws NPE */ public void testGet_NullPointerException() { try { TreeMap c = map5(); c.get(null); shouldThrow(); } catch(NullPointerException e){} } /** * containsKey(null) of nonempty map throws NPE */ public void testContainsKey_NullPointerException() { try { TreeMap c = map5(); c.containsKey(null); shouldThrow(); } catch(NullPointerException e){} } /** * remove(null) throws NPE for nonempty map */ public void testRemove1_NullPointerException() { try { TreeMap c = new TreeMap(); c.put("sadsdf", "asdads"); c.remove(null); shouldThrow(); } catch(NullPointerException e){} } /** * A deserialized map equals original */ public void testSerialization() { TreeMap q = map5(); try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); TreeMap r = (TreeMap)in.readObject(); assertEquals(q.size(), r.size()); assertTrue(q.equals(r)); assertTrue(r.equals(q)); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } /** * subMap returns map with keys in requested range */ public void testSubMapContents() { TreeMap map = map5(); NavigableMap sm = map.subMap(two, true, four, false); assertEquals(two, sm.firstKey()); assertEquals(three, sm.lastKey()); assertEquals(2, sm.size()); assertFalse(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertTrue(sm.containsKey(three)); assertFalse(sm.containsKey(four)); assertFalse(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); Iterator r = sm.descendingKeySet().iterator(); k = (Integer)(r.next()); assertEquals(three, k); k = (Integer)(r.next()); assertEquals(two, k); assertFalse(r.hasNext()); Iterator j = sm.keySet().iterator(); j.next(); j.remove(); assertFalse(map.containsKey(two)); assertEquals(4, map.size()); assertEquals(1, sm.size()); assertEquals(three, sm.firstKey()); assertEquals(three, sm.lastKey()); assertTrue(sm.remove(three) != null); assertTrue(sm.isEmpty()); assertEquals(3, map.size()); } public void testSubMapContents2() { TreeMap map = map5(); NavigableMap sm = map.subMap(two, true, three, false); assertEquals(1, sm.size()); assertEquals(two, sm.firstKey()); assertEquals(two, sm.lastKey()); assertFalse(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertFalse(sm.containsKey(three)); assertFalse(sm.containsKey(four)); assertFalse(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); assertFalse(i.hasNext()); Iterator r = sm.descendingKeySet().iterator(); k = (Integer)(r.next()); assertEquals(two, k); assertFalse(r.hasNext()); Iterator j = sm.keySet().iterator(); j.next(); j.remove(); assertFalse(map.containsKey(two)); assertEquals(4, map.size()); assertEquals(0, sm.size()); assertTrue(sm.isEmpty()); assertTrue(sm.remove(three) == null); assertEquals(4, map.size()); } /** * headMap returns map with keys in requested range */ public void testHeadMapContents() { TreeMap map = map5(); NavigableMap sm = map.headMap(four, false); assertTrue(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertTrue(sm.containsKey(three)); assertFalse(sm.containsKey(four)); assertFalse(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(one, k); k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); assertFalse(i.hasNext()); sm.clear(); assertTrue(sm.isEmpty()); assertEquals(2, map.size()); assertEquals(four, map.firstKey()); } /** * headMap returns map with keys in requested range */ public void testTailMapContents() { TreeMap map = map5(); NavigableMap sm = map.tailMap(two, true); assertFalse(sm.containsKey(one)); assertTrue(sm.containsKey(two)); assertTrue(sm.containsKey(three)); assertTrue(sm.containsKey(four)); assertTrue(sm.containsKey(five)); Iterator i = sm.keySet().iterator(); Object k; k = (Integer)(i.next()); assertEquals(two, k); k = (Integer)(i.next()); assertEquals(three, k); k = (Integer)(i.next()); assertEquals(four, k); k = (Integer)(i.next()); assertEquals(five, k); assertFalse(i.hasNext()); Iterator r = sm.descendingKeySet().iterator(); k = (Integer)(r.next()); assertEquals(five, k); k = (Integer)(r.next()); assertEquals(four, k); k = (Integer)(r.next()); assertEquals(three, k); k = (Integer)(r.next()); assertEquals(two, k); assertFalse(r.hasNext()); Iterator ei = sm.entrySet().iterator(); Map.Entry e; e = (Map.Entry)(ei.next()); assertEquals(two, e.getKey()); assertEquals("B", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(three, e.getKey()); assertEquals("C", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(four, e.getKey()); assertEquals("D", e.getValue()); e = (Map.Entry)(ei.next()); assertEquals(five, e.getKey()); assertEquals("E", e.getValue()); assertFalse(i.hasNext()); NavigableMap ssm = sm.tailMap(four, true); assertEquals(four, ssm.firstKey()); assertEquals(five, ssm.lastKey()); assertTrue(ssm.remove(four) != null); assertEquals(1, ssm.size()); assertEquals(3, sm.size()); assertEquals(4, map.size()); } Random rnd = new Random(666); BitSet bs; /** * Submaps of submaps subdivide correctly */ public void testRecursiveSubMaps() { int mapSize = 1000; Class cl = TreeMap.class; NavigableMap map = newMap(cl); bs = new BitSet(mapSize); populate(map, mapSize); check(map, 0, mapSize - 1, true); check(map.descendingMap(), 0, mapSize - 1, false); mutateMap(map, 0, mapSize - 1); check(map, 0, mapSize - 1, true); check(map.descendingMap(), 0, mapSize - 1, false); bashSubMap(map.subMap(new Integer(0), true, new Integer(mapSize), false), 0, mapSize - 1, true); } static NavigableMap newMap(Class cl) { NavigableMap result = null; try { result = (NavigableMap) cl.newInstance(); } catch(Exception e) { fail(); } assertEquals(result.size(), 0); assertFalse(result.keySet().iterator().hasNext()); return result; } void populate(NavigableMap map, int limit) { for (int i = 0, n = 2 * limit / 3; i < n; i++) { int key = rnd.nextInt(limit); put(map, key); } } void mutateMap(NavigableMap map, int min, int max) { int size = map.size(); int rangeSize = max - min + 1; // Remove a bunch of entries directly for (int i = 0, n = rangeSize / 2; i < n; i++) { remove(map, min - 5 + rnd.nextInt(rangeSize + 10)); } // Remove a bunch of entries with iterator for(Iterator it = map.keySet().iterator(); it.hasNext(); ) { if (rnd.nextBoolean()) { bs.clear(((Integer)it.next()).intValue()); it.remove(); } } // Add entries till we're back to original size while (map.size() < size) { int key = min + rnd.nextInt(rangeSize); assertTrue(key >= min && key<= max); put(map, key); } } void mutateSubMap(NavigableMap map, int min, int max) { int size = map.size(); int rangeSize = max - min + 1; // Remove a bunch of entries directly for (int i = 0, n = rangeSize / 2; i < n; i++) { remove(map, min - 5 + rnd.nextInt(rangeSize + 10)); } // Remove a bunch of entries with iterator for(Iterator it = map.keySet().iterator(); it.hasNext(); ) { if (rnd.nextBoolean()) { bs.clear(((Integer)it.next()).intValue()); it.remove(); } } // Add entries till we're back to original size while (map.size() < size) { int key = min - 5 + rnd.nextInt(rangeSize + 10); if (key >= min && key<= max) { put(map, key); } else { try { map.put(new Integer(key), new Integer(2 * key)); fail(); } catch(IllegalArgumentException e) { // expected } } } } void put(NavigableMap map, int key) { if (map.put(new Integer(key), new Integer(2 * key)) == null) bs.set(key); } void remove(NavigableMap map, int key) { if (map.remove(new Integer(key)) != null) bs.clear(key); } void bashSubMap(NavigableMap map, int min, int max, boolean ascending) { check(map, min, max, ascending); check(map.descendingMap(), min, max, !ascending); mutateSubMap(map, min, max); check(map, min, max, ascending); check(map.descendingMap(), min, max, !ascending); // Recurse if (max - min < 2) return; int midPoint = (min + max) / 2; // headMap - pick direction and endpoint inclusion randomly boolean incl = rnd.nextBoolean(); NavigableMap hm = map.headMap(new Integer(midPoint), incl); if (ascending) { if (rnd.nextBoolean()) bashSubMap(hm, min, midPoint - (incl ? 0 : 1), true); else bashSubMap(hm.descendingMap(), min, midPoint - (incl ? 0 : 1), false); } else { if (rnd.nextBoolean()) bashSubMap(hm, midPoint + (incl ? 0 : 1), max, false); else bashSubMap(hm.descendingMap(), midPoint + (incl ? 0 : 1), max, true); } // tailMap - pick direction and endpoint inclusion randomly incl = rnd.nextBoolean(); NavigableMap tm = map.tailMap(new Integer(midPoint),incl); if (ascending) { if (rnd.nextBoolean()) bashSubMap(tm, midPoint + (incl ? 0 : 1), max, true); else bashSubMap(tm.descendingMap(), midPoint + (incl ? 0 : 1), max, false); } else { if (rnd.nextBoolean()) { bashSubMap(tm, min, midPoint - (incl ? 0 : 1), false); } else { bashSubMap(tm.descendingMap(), min, midPoint - (incl ? 0 : 1), true); } } // subMap - pick direction and endpoint inclusion randomly int rangeSize = max - min + 1; int[] endpoints = new int[2]; endpoints[0] = min + rnd.nextInt(rangeSize); endpoints[1] = min + rnd.nextInt(rangeSize); Arrays.sort(endpoints); boolean lowIncl = rnd.nextBoolean(); boolean highIncl = rnd.nextBoolean(); if (ascending) { NavigableMap sm = map.subMap( new Integer(endpoints[0]), lowIncl, new Integer(endpoints[1]), highIncl); if (rnd.nextBoolean()) bashSubMap(sm, endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), true); else bashSubMap(sm.descendingMap(), endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), false); } else { NavigableMap sm = map.subMap( new Integer(endpoints[1]), highIncl, new Integer(endpoints[0]), lowIncl); if (rnd.nextBoolean()) bashSubMap(sm, endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), false); else bashSubMap(sm.descendingMap(), endpoints[0] + (lowIncl ? 0 : 1), endpoints[1] - (highIncl ? 0 : 1), true); } } /** * min and max are both inclusive. If max < min, interval is empty. */ void check(NavigableMap map, final int min, final int max, final boolean ascending) { class ReferenceSet { int lower(int key) { return ascending ? lowerAscending(key) : higherAscending(key); } int floor(int key) { return ascending ? floorAscending(key) : ceilingAscending(key); } int ceiling(int key) { return ascending ? ceilingAscending(key) : floorAscending(key); } int higher(int key) { return ascending ? higherAscending(key) : lowerAscending(key); } int first() { return ascending ? firstAscending() : lastAscending(); } int last() { return ascending ? lastAscending() : firstAscending(); } int lowerAscending(int key) { return floorAscending(key - 1); } int floorAscending(int key) { if (key < min) return -1; else if (key > max) key = max; // BitSet should support this! Test would run much faster while (key >= min) { if (bs.get(key)) return(key); key--; } return -1; } int ceilingAscending(int key) { if (key < min) key = min; else if (key > max) return -1; int result = bs.nextSetBit(key); return result > max ? -1 : result; } int higherAscending(int key) { return ceilingAscending(key + 1); } private int firstAscending() { int result = ceilingAscending(min); return result > max ? -1 : result; } private int lastAscending() { int result = floorAscending(max); return result < min ? -1 : result; } } ReferenceSet rs = new ReferenceSet(); // Test contents using containsKey int size = 0; for (int i = min; i <= max; i++) { boolean bsContainsI = bs.get(i); assertEquals(bsContainsI, map.containsKey(new Integer(i))); if (bsContainsI) size++; } assertEquals(map.size(), size); // Test contents using contains keySet iterator int size2 = 0; int previousKey = -1; for (Iterator itr = map.keySet().iterator(); itr.hasNext();) { int key = ((Integer)itr.next()).intValue(); assertTrue(bs.get(key)); size2++; assertTrue(previousKey < 0 || (ascending ? key - previousKey > 0 : key - previousKey < 0)); previousKey = key; } assertEquals(size2, size); // Test navigation ops for (int key = min - 1; key <= max + 1; key++) { assertEq((Integer)map.lowerKey(new Integer(key)), rs.lower(key)); assertEq((Integer)map.floorKey(new Integer(key)), rs.floor(key)); assertEq((Integer)map.higherKey(new Integer(key)), rs.higher(key)); assertEq((Integer)map.ceilingKey(new Integer(key)), rs.ceiling(key)); } // Test extrema if (map.size() != 0) { assertEq((Integer)map.firstKey(), rs.first()); assertEq((Integer)map.lastKey(), rs.last()); } else { assertEq(new Integer(rs.first()), -1); assertEq(new Integer(rs.last()), -1); try { map.firstKey(); fail(); } catch(NoSuchElementException e) { // expected } try { map.lastKey(); fail(); } catch(NoSuchElementException e) { // expected } } } static void assertEq(Integer i, int j) { if (i == null) assertEquals(j, -1); else assertEquals(i.intValue(), j); } static boolean eq(Integer i, int j) { return i == null ? j == -1 : i.intValue() == j; } } backport-util-concurrent-3.1-src/test/tck/src/TimeUnitTest.java0000644001750700037720000004242110173315701023477 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; public class TimeUnitTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public static Test suite() { return new TestSuite(TimeUnitTest.class); } // (loops to 88888 check increments at all time divisions.) /** * convert correctly converts sample values across the units */ public void testConvert() { for (long t = 0; t < 88888; ++t) { assertEquals(t*60*60*24, TimeUnit.SECONDS.convert(t, TimeUnit.DAYS)); assertEquals(t*60*60, TimeUnit.SECONDS.convert(t, TimeUnit.HOURS)); assertEquals(t*60, TimeUnit.SECONDS.convert(t, TimeUnit.MINUTES)); assertEquals(t, TimeUnit.SECONDS.convert(t, TimeUnit.SECONDS)); assertEquals(t, TimeUnit.SECONDS.convert(1000L*t, TimeUnit.MILLISECONDS)); assertEquals(t, TimeUnit.SECONDS.convert(1000000L*t, TimeUnit.MICROSECONDS)); assertEquals(t, TimeUnit.SECONDS.convert(1000000000L*t, TimeUnit.NANOSECONDS)); assertEquals(1000L*t*60*60*24, TimeUnit.MILLISECONDS.convert(t, TimeUnit.DAYS)); assertEquals(1000L*t*60*60, TimeUnit.MILLISECONDS.convert(t, TimeUnit.HOURS)); assertEquals(1000L*t*60, TimeUnit.MILLISECONDS.convert(t, TimeUnit.MINUTES)); assertEquals(1000L*t, TimeUnit.MILLISECONDS.convert(t, TimeUnit.SECONDS)); assertEquals(t, TimeUnit.MILLISECONDS.convert(t, TimeUnit.MILLISECONDS)); assertEquals(t, TimeUnit.MILLISECONDS.convert(1000L*t, TimeUnit.MICROSECONDS)); assertEquals(t, TimeUnit.MILLISECONDS.convert(1000000L*t, TimeUnit.NANOSECONDS)); assertEquals(1000000L*t*60*60*24, TimeUnit.MICROSECONDS.convert(t, TimeUnit.DAYS)); assertEquals(1000000L*t*60*60, TimeUnit.MICROSECONDS.convert(t, TimeUnit.HOURS)); assertEquals(1000000L*t*60, TimeUnit.MICROSECONDS.convert(t, TimeUnit.MINUTES)); assertEquals(1000000L*t, TimeUnit.MICROSECONDS.convert(t, TimeUnit.SECONDS)); assertEquals(1000L*t, TimeUnit.MICROSECONDS.convert(t, TimeUnit.MILLISECONDS)); assertEquals(t, TimeUnit.MICROSECONDS.convert(t, TimeUnit.MICROSECONDS)); assertEquals(t, TimeUnit.MICROSECONDS.convert(1000L*t, TimeUnit.NANOSECONDS)); assertEquals(1000000000L*t*60*60*24, TimeUnit.NANOSECONDS.convert(t, TimeUnit.DAYS)); assertEquals(1000000000L*t*60*60, TimeUnit.NANOSECONDS.convert(t, TimeUnit.HOURS)); assertEquals(1000000000L*t*60, TimeUnit.NANOSECONDS.convert(t, TimeUnit.MINUTES)); assertEquals(1000000000L*t, TimeUnit.NANOSECONDS.convert(t, TimeUnit.SECONDS)); assertEquals(1000000L*t, TimeUnit.NANOSECONDS.convert(t, TimeUnit.MILLISECONDS)); assertEquals(1000L*t, TimeUnit.NANOSECONDS.convert(t, TimeUnit.MICROSECONDS)); assertEquals(t, TimeUnit.NANOSECONDS.convert(t, TimeUnit.NANOSECONDS)); } } /** * toNanos correctly converts sample values in different units to * nanoseconds */ public void testToNanos() { for (long t = 0; t < 88888; ++t) { assertEquals(t*1000000000L*60*60*24, TimeUnit.DAYS.toNanos(t)); assertEquals(t*1000000000L*60*60, TimeUnit.HOURS.toNanos(t)); assertEquals(t*1000000000L*60, TimeUnit.MINUTES.toNanos(t)); assertEquals(1000000000L*t, TimeUnit.SECONDS.toNanos(t)); assertEquals(1000000L*t, TimeUnit.MILLISECONDS.toNanos(t)); assertEquals(1000L*t, TimeUnit.MICROSECONDS.toNanos(t)); assertEquals(t, TimeUnit.NANOSECONDS.toNanos(t)); } } /** * toMicros correctly converts sample values in different units to * microseconds */ public void testToMicros() { for (long t = 0; t < 88888; ++t) { assertEquals(t*1000000L*60*60*24, TimeUnit.DAYS.toMicros(t)); assertEquals(t*1000000L*60*60, TimeUnit.HOURS.toMicros(t)); assertEquals(t*1000000L*60, TimeUnit.MINUTES.toMicros(t)); assertEquals(1000000L*t, TimeUnit.SECONDS.toMicros(t)); assertEquals(1000L*t, TimeUnit.MILLISECONDS.toMicros(t)); assertEquals(t, TimeUnit.MICROSECONDS.toMicros(t)); assertEquals(t, TimeUnit.NANOSECONDS.toMicros(t*1000L)); } } /** * toMillis correctly converts sample values in different units to * milliseconds */ public void testToMillis() { for (long t = 0; t < 88888; ++t) { assertEquals(t*1000L*60*60*24, TimeUnit.DAYS.toMillis(t)); assertEquals(t*1000L*60*60, TimeUnit.HOURS.toMillis(t)); assertEquals(t*1000L*60, TimeUnit.MINUTES.toMillis(t)); assertEquals(1000L*t, TimeUnit.SECONDS.toMillis(t)); assertEquals(t, TimeUnit.MILLISECONDS.toMillis(t)); assertEquals(t, TimeUnit.MICROSECONDS.toMillis(t*1000L)); assertEquals(t, TimeUnit.NANOSECONDS.toMillis(t*1000000L)); } } /** * toSeconds correctly converts sample values in different units to * seconds */ public void testToSeconds() { for (long t = 0; t < 88888; ++t) { assertEquals(t*60*60*24, TimeUnit.DAYS.toSeconds(t)); assertEquals(t*60*60, TimeUnit.HOURS.toSeconds(t)); assertEquals(t*60, TimeUnit.MINUTES.toSeconds(t)); assertEquals(t, TimeUnit.SECONDS.toSeconds(t)); assertEquals(t, TimeUnit.MILLISECONDS.toSeconds(t*1000L)); assertEquals(t, TimeUnit.MICROSECONDS.toSeconds(t*1000000L)); assertEquals(t, TimeUnit.NANOSECONDS.toSeconds(t*1000000000L)); } } /** * toMinutes correctly converts sample values in different units to * minutes */ public void testToMinutes() { for (long t = 0; t < 88888; ++t) { assertEquals(t*60*24, TimeUnit.DAYS.toMinutes(t)); assertEquals(t*60, TimeUnit.HOURS.toMinutes(t)); assertEquals(t, TimeUnit.MINUTES.toMinutes(t)); assertEquals(t, TimeUnit.SECONDS.toMinutes(t*60)); assertEquals(t, TimeUnit.MILLISECONDS.toMinutes(t*1000L*60)); assertEquals(t, TimeUnit.MICROSECONDS.toMinutes(t*1000000L*60)); assertEquals(t, TimeUnit.NANOSECONDS.toMinutes(t*1000000000L*60)); } } /** * toHours correctly converts sample values in different units to * hours */ public void testToHours() { for (long t = 0; t < 88888; ++t) { assertEquals(t*24, TimeUnit.DAYS.toHours(t)); assertEquals(t, TimeUnit.HOURS.toHours(t)); assertEquals(t, TimeUnit.MINUTES.toHours(t*60)); assertEquals(t, TimeUnit.SECONDS.toHours(t*60*60)); assertEquals(t, TimeUnit.MILLISECONDS.toHours(t*1000L*60*60)); assertEquals(t, TimeUnit.MICROSECONDS.toHours(t*1000000L*60*60)); assertEquals(t, TimeUnit.NANOSECONDS.toHours(t*1000000000L*60*60)); } } /** * toDays correctly converts sample values in different units to * days */ public void testToDays() { for (long t = 0; t < 88888; ++t) { assertEquals(t, TimeUnit.DAYS.toDays(t)); assertEquals(t, TimeUnit.HOURS.toDays(t*24)); assertEquals(t, TimeUnit.MINUTES.toDays(t*60*24)); assertEquals(t, TimeUnit.SECONDS.toDays(t*60*60*24)); assertEquals(t, TimeUnit.MILLISECONDS.toDays(t*1000L*60*60*24)); assertEquals(t, TimeUnit.MICROSECONDS.toDays(t*1000000L*60*60*24)); assertEquals(t, TimeUnit.NANOSECONDS.toDays(t*1000000000L*60*60*24)); } } /** * convert saturates positive too-large values to Long.MAX_VALUE * and negative to LONG.MIN_VALUE */ public void testConvertSaturate() { assertEquals(Long.MAX_VALUE, TimeUnit.NANOSECONDS.convert(Long.MAX_VALUE / 2, TimeUnit.SECONDS)); assertEquals(Long.MIN_VALUE, TimeUnit.NANOSECONDS.convert(-Long.MAX_VALUE / 4, TimeUnit.SECONDS)); assertEquals(Long.MAX_VALUE, TimeUnit.NANOSECONDS.convert(Long.MAX_VALUE / 2, TimeUnit.MINUTES)); assertEquals(Long.MIN_VALUE, TimeUnit.NANOSECONDS.convert(-Long.MAX_VALUE / 4, TimeUnit.MINUTES)); assertEquals(Long.MAX_VALUE, TimeUnit.NANOSECONDS.convert(Long.MAX_VALUE / 2, TimeUnit.HOURS)); assertEquals(Long.MIN_VALUE, TimeUnit.NANOSECONDS.convert(-Long.MAX_VALUE / 4, TimeUnit.HOURS)); assertEquals(Long.MAX_VALUE, TimeUnit.NANOSECONDS.convert(Long.MAX_VALUE / 2, TimeUnit.DAYS)); assertEquals(Long.MIN_VALUE, TimeUnit.NANOSECONDS.convert(-Long.MAX_VALUE / 4, TimeUnit.DAYS)); } /** * toNanos saturates positive too-large values to Long.MAX_VALUE * and negative to LONG.MIN_VALUE */ public void testToNanosSaturate() { assertEquals(Long.MAX_VALUE, TimeUnit.MILLISECONDS.toNanos(Long.MAX_VALUE / 2)); assertEquals(Long.MIN_VALUE, TimeUnit.MILLISECONDS.toNanos(-Long.MAX_VALUE / 3)); } /** * toString returns string containing common name of unit */ public void testToString() { String s = TimeUnit.SECONDS.toString(); assertTrue(s.indexOf("ECOND") >= 0); } /** * Timed wait without holding lock throws * IllegalMonitorStateException */ public void testTimedWait_IllegalMonitorException() { //created a new thread with anonymous runnable Thread t = new Thread(new Runnable() { public void run() { Object o = new Object(); TimeUnit tu = TimeUnit.MILLISECONDS; try { tu.timedWait(o,LONG_DELAY_MS); threadShouldThrow(); } catch (InterruptedException ie) { threadUnexpectedException(); } catch(IllegalMonitorStateException success) { } } }); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(Exception e) { unexpectedException(); } } /** * timedWait throws InterruptedException when interrupted */ public void testTimedWait() { Thread t = new Thread(new Runnable() { public void run() { Object o = new Object(); TimeUnit tu = TimeUnit.MILLISECONDS; try { synchronized(o) { tu.timedWait(o,MEDIUM_DELAY_MS); } threadShouldThrow(); } catch(InterruptedException success) {} catch(IllegalMonitorStateException failure) { threadUnexpectedException(); } } }); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(Exception e) { unexpectedException(); } } /** * timedJoin throws InterruptedException when interrupted */ public void testTimedJoin() { Thread t = new Thread(new Runnable() { public void run() { TimeUnit tu = TimeUnit.MILLISECONDS; try { Thread s = new Thread(new Runnable() { public void run() { try { Thread.sleep(MEDIUM_DELAY_MS); } catch(InterruptedException success){} } }); s.start(); tu.timedJoin(s,MEDIUM_DELAY_MS); threadShouldThrow(); } catch(Exception e) {} } }); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(Exception e) { unexpectedException(); } } /** * timedSleep throws InterruptedException when interrupted */ public void testTimedSleep() { //created a new thread with anonymous runnable Thread t = new Thread(new Runnable() { public void run() { TimeUnit tu = TimeUnit.MILLISECONDS; try { tu.sleep(MEDIUM_DELAY_MS); threadShouldThrow(); } catch(InterruptedException success) {} } }); t.start(); try { Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); } catch(Exception e) { unexpectedException(); } } /** * a deserialized serialized unit is equal */ public void testSerialization() { TimeUnit q = TimeUnit.MILLISECONDS; try { ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); out.writeObject(q); out.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); TimeUnit r = (TimeUnit)in.readObject(); assertEquals(q.toString(), r.toString()); } catch(Exception e){ e.printStackTrace(); unexpectedException(); } } } backport-util-concurrent-3.1-src/test/tck/LinkedListTest.java0000644001750700037720000003721510262045450023221 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ import junit.framework.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; public class LinkedListTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(LinkedListTest.class); } /** * Create a queue of given size containing consecutive * Integers 0 ... n. */ private LinkedList populatedQueue(int n) { LinkedList q = new LinkedList(); assertTrue(q.isEmpty()); for(int i = 0; i < n; ++i) assertTrue(q.offer(new Integer(i))); assertFalse(q.isEmpty()); assertEquals(n, q.size()); return q; } /** * new queue is empty */ public void testConstructor1() { assertEquals(0, new LinkedList().size()); } /** * Initializing from null Collection throws NPE */ public void testConstructor3() { try { LinkedList q = new LinkedList((Collection)null); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements of collection used to initialize */ public void testConstructor6() { try { Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); LinkedList q = new LinkedList(Arrays.asList(ints)); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * isEmpty is true before add, false after */ public void testEmpty() { LinkedList q = new LinkedList(); assertTrue(q.isEmpty()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.add(new Integer(2)); q.remove(); q.remove(); assertTrue(q.isEmpty()); } /** * size changes when elements added and removed */ public void testSize() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(SIZE-i, q.size()); q.remove(); } for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); q.add(new Integer(i)); } } /** * offer(null) succeeds */ public void testOfferNull() { try { LinkedList q = new LinkedList(); q.offer(null); } catch (NullPointerException ie) { unexpectedException(); } } /** * Offer succeeds */ public void testOffer() { LinkedList q = new LinkedList(); assertTrue(q.offer(new Integer(0))); assertTrue(q.offer(new Integer(1))); } /** * add succeeds */ public void testAdd() { LinkedList q = new LinkedList(); for (int i = 0; i < SIZE; ++i) { assertEquals(i, q.size()); assertTrue(q.add(new Integer(i))); } } /** * addAll(null) throws NPE */ public void testAddAll1() { try { LinkedList q = new LinkedList(); q.addAll(null); shouldThrow(); } catch (NullPointerException success) {} } /** * Queue contains all elements, in traversal order, of successful addAll */ public void testAddAll5() { try { Integer[] empty = new Integer[0]; Integer[] ints = new Integer[SIZE]; for (int i = 0; i < SIZE; ++i) ints[i] = new Integer(i); LinkedList q = new LinkedList(); assertFalse(q.addAll(Arrays.asList(empty))); assertTrue(q.addAll(Arrays.asList(ints))); for (int i = 0; i < SIZE; ++i) assertEquals(ints[i], q.poll()); } finally {} } /** * addAll with too large an index throws IOOBE */ public void testAddAll2_IndexOutOfBoundsException() { try { LinkedList l = new LinkedList(); l.add(new Object()); LinkedList m = new LinkedList(); m.add(new Object()); l.addAll(4,m); shouldThrow(); } catch(IndexOutOfBoundsException success) {} } /** * addAll with negative index throws IOOBE */ public void testAddAll4_BadIndex() { try { LinkedList l = new LinkedList(); l.add(new Object()); LinkedList m = new LinkedList(); m.add(new Object()); l.addAll(-1,m); shouldThrow(); } catch(IndexOutOfBoundsException success){} } /** * poll succeeds unless empty */ public void testPoll() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.poll()).intValue()); } assertNull(q.poll()); } /** * peek returns next element, or null if empty */ public void testPeek() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.peek()).intValue()); q.poll(); assertTrue(q.peek() == null || i != ((Integer)q.peek()).intValue()); } assertNull(q.peek()); } /** * element returns next element, or throws NSEE if empty */ public void testElement() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.element()).intValue()); q.poll(); } try { q.element(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * remove removes next element, or throws NSEE if empty */ public void testRemove() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.remove()).intValue()); } try { q.remove(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * remove(x) removes x and returns true if present */ public void testRemoveElement() { LinkedList q = populatedQueue(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.remove(new Integer(i))); assertFalse(q.remove(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * contains(x) reports true when elements added but not yet removed */ public void testContains() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertTrue(q.contains(new Integer(i))); q.poll(); assertFalse(q.contains(new Integer(i))); } } /** * clear removes all elements */ public void testClear() { LinkedList q = populatedQueue(SIZE); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); q.add(new Integer(1)); assertFalse(q.isEmpty()); q.clear(); assertTrue(q.isEmpty()); } /** * containsAll(c) is true when c contains a subset of elements */ public void testContainsAll() { LinkedList q = populatedQueue(SIZE); LinkedList p = new LinkedList(); for (int i = 0; i < SIZE; ++i) { assertTrue(q.containsAll(p)); assertFalse(p.containsAll(q)); p.add(new Integer(i)); } assertTrue(p.containsAll(q)); } /** * retainAll(c) retains only those elements of c and reports true if changed */ public void testRetainAll() { LinkedList q = populatedQueue(SIZE); LinkedList p = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { boolean changed = q.retainAll(p); if (i == 0) assertFalse(changed); else assertTrue(changed); assertTrue(q.containsAll(p)); assertEquals(SIZE-i, q.size()); p.remove(); } } /** * removeAll(c) removes only those elements of c and reports true if changed */ public void testRemoveAll() { for (int i = 1; i < SIZE; ++i) { LinkedList q = populatedQueue(SIZE); LinkedList p = populatedQueue(i); assertTrue(q.removeAll(p)); assertEquals(SIZE-i, q.size()); for (int j = 0; j < i; ++j) { Integer Object = (Integer)(p.remove()); assertFalse(q.contains); } } } /** * toArray contains all elements */ public void testToArray() { LinkedList q = populatedQueue(SIZE); Object[] o = q.toArray(); Arrays.sort(o); for(int i = 0; i < o.length; i++) assertEquals(o[i], q.poll()); } /** * toArray(a) contains all elements */ public void testToArray2() { LinkedList q = populatedQueue(SIZE); Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); Arrays.sort(ints); for(int i = 0; i < ints.length; i++) assertEquals(ints[i], q.poll()); } /** * toArray(null) throws NPE */ public void testToArray_BadArg() { try { LinkedList l = new LinkedList(); l.add(new Object()); Object o[] = l.toArray(null); shouldThrow(); } catch(NullPointerException success){} } /** * toArray with incompatable aray type throws CCE */ public void testToArray1_BadArg() { try { LinkedList l = new LinkedList(); l.add(new Integer(5)); Object o[] = l.toArray(new String[10] ); shouldThrow(); } catch(ArrayStoreException success){} } /** * iterator iterates through all elements */ public void testIterator() { LinkedList q = populatedQueue(SIZE); int i = 0; Iterator it = q.iterator(); while(it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } assertEquals(i, SIZE); } /** * iterator ordering is FIFO */ public void testIteratorOrdering() { final LinkedList q = new LinkedList(); q.add(new Integer(1)); q.add(new Integer(2)); q.add(new Integer(3)); int k = 0; for (Iterator it = q.iterator(); it.hasNext();) { int i = ((Integer)(it.next())).intValue(); assertEquals(++k, i); } assertEquals(3, k); } /** * iterator.remove removes current element */ public void testIteratorRemove () { final LinkedList q = new LinkedList(); q.add(new Integer(1)); q.add(new Integer(2)); q.add(new Integer(3)); Iterator it = q.iterator(); it.next(); it.remove(); it = q.iterator(); assertEquals(it.next(), new Integer(2)); assertEquals(it.next(), new Integer(3)); assertFalse(it.hasNext()); } /** * toString contains toStrings of elements */ public void testToString() { LinkedList q = populatedQueue(SIZE); String s = q.toString(); for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } } /** * peek returns element inserted with addFirst */ public void testAddFirst() { LinkedList q = populatedQueue(3); q.addFirst(four); assertEquals(four,q.peek()); } /** * peekFirst returns element inserted with push */ public void testPush() { LinkedList q = populatedQueue(3); q.pollLast(); q.push(four); assertEquals(four,q.peekFirst()); } /** * pop removes next element, or throws NSEE if empty */ public void testPop() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.pop()).intValue()); } try { q.pop(); shouldThrow(); } catch (NoSuchElementException success){ } } /** * OfferFirst succeeds */ public void testOfferFirst() { LinkedList q = new LinkedList(); assertTrue(q.offerFirst(new Integer(0))); assertTrue(q.offerFirst(new Integer(1))); } /** * OfferLast succeeds */ public void testOfferLast() { LinkedList q = new LinkedList(); assertTrue(q.offerLast(new Integer(0))); assertTrue(q.offerLast(new Integer(1))); } /** * pollLast succeeds unless empty */ public void testPollLast() { LinkedList q = populatedQueue(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.pollLast()).intValue()); } assertNull(q.pollLast()); } /** * peekFirst returns next element, or null if empty */ public void testPeekFirst() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.peekFirst()).intValue()); q.pollFirst(); assertTrue(q.peekFirst() == null || i != ((Integer)q.peekFirst()).intValue()); } assertNull(q.peekFirst()); } /** * peekLast returns next element, or null if empty */ public void testPeekLast() { LinkedList q = populatedQueue(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.peekLast()).intValue()); q.pollLast(); assertTrue(q.peekLast() == null || i != ((Integer)q.peekLast()).intValue()); } assertNull(q.peekLast()); } public void testFirstElement() { LinkedList q = populatedQueue(SIZE); for (int i = 0; i < SIZE; ++i) { assertEquals(i, ((Integer)q.getFirst()).intValue()); q.pollFirst(); } try { q.getFirst(); shouldThrow(); } catch (NoSuchElementException success) {} } /** * getLast returns next element, or throws NSEE if empty */ public void testLastElement() { LinkedList q = populatedQueue(SIZE); for (int i = SIZE-1; i >= 0; --i) { assertEquals(i, ((Integer)q.getLast()).intValue()); q.pollLast(); } try { q.getLast(); shouldThrow(); } catch (NoSuchElementException success) {} assertNull(q.peekLast()); } /** * removeFirstOccurrence(x) removes x and returns true if present */ public void testRemoveFirstOccurrence() { LinkedList q = populatedQueue(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.removeFirstOccurrence(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.removeFirstOccurrence(new Integer(i))); assertFalse(q.removeFirstOccurrence(new Integer(i+1))); } assertTrue(q.isEmpty()); } /** * removeLastOccurrence(x) removes x and returns true if present */ public void testRemoveLastOccurrence() { LinkedList q = populatedQueue(SIZE); for (int i = 1; i < SIZE; i+=2) { assertTrue(q.removeLastOccurrence(new Integer(i))); } for (int i = 0; i < SIZE; i+=2) { assertTrue(q.removeLastOccurrence(new Integer(i))); assertFalse(q.removeLastOccurrence(new Integer(i+1))); } assertTrue(q.isEmpty()); } } backport-util-concurrent-3.1-src/test/tck/RECONCILED_ON0000644001750700037720000000001310153210664021364 0ustar dawidkdcl2004-11-30 backport-util-concurrent-3.1-src/test/loops/0000755001750700037720000000000010643402426020022 5ustar dawidkdclbackport-util-concurrent-3.1-src/test/loops/src/0000755001750700037720000000000010643402426020611 5ustar dawidkdclbackport-util-concurrent-3.1-src/test/loops/src/CancelledLockLoops.java0000644001750700037720000001055410431260156025156 0ustar dawidkdcl/* * @test * @summary tests lockInterruptibly * Checks for responsiveness of locks to interrupts. Runs under that * assumption that ITERS_VALUE computations require more than TIMEOUT * msecs to complete. */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import java.util.Arrays; import java.util.Collections; import java.util.Random; public final class CancelledLockLoops { static final Random rng = new Random(); static boolean print = false; static final int ITERS = 10000000; static final long TIMEOUT = 100; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); print = true; for (int i = 2; i <= maxThreads; i += (i+1) >>> 1) { System.out.print("Threads: " + i); try { new ReentrantLockLoop(i).test(); } catch(BrokenBarrierException bb) { // OK, ignore } } } static final class ReentrantLockLoop implements Runnable { private int v = rng.nextInt(); private int completed; private volatile int result = 17; private final ReentrantLock lock = new ReentrantLock(); private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; ReentrantLockLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { Thread[] threads = new Thread[nthreads]; for (int i = 0; i < threads.length; ++i) threads[i] = new Thread(this); for (int i = 0; i < threads.length; ++i) threads[i].start(); Thread[] cancels = (Thread[]) (threads.clone()); Collections.shuffle(Arrays.asList(cancels), rng); barrier.await(); Thread.sleep(TIMEOUT); for (int i = 0; i < cancels.length-2; ++i) { cancels[i].interrupt(); // make sure all OK even when cancellations spaced out if ( (i & 3) == 0) Thread.sleep(1 + rng.nextInt(10)); } barrier.await(); if (print) { long time = timer.getTime(); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int c; lock.lock(); try { c = completed; } finally { lock.unlock(); } if (completed != 2) throw new Error("Completed != 2"); int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { try { barrier.await(); int sum = v; int x = 0; int n = ITERS; boolean done = false; do { try { lock.lockInterruptibly(); } catch (InterruptedException ie) { break; } try { v = x = LoopHelpers.compute1(v); } finally { lock.unlock(); } sum += LoopHelpers.compute2(x); } while (n-- > 0); if (n <= 0) { lock.lock(); try { ++completed; } finally { lock.unlock(); } } barrier.await(); result += sum; } catch (Exception ex) { // ex.printStackTrace(); return; } } } } backport-util-concurrent-3.1-src/test/loops/src/StringMapLoops.java0000644001750700037720000001511310346121124024367 0ustar dawidkdcl/* * @test * @synopsis Exercise multithreaded maps, by default * ConcurrentHashMap. Each thread does a random walk though elements * of "key" array. On each iteration, it checks if table includes key. * If absent, with probablility pinsert it inserts it, and if present, * with probablility premove it removes it. (pinsert and premove are * expressed as percentages to simplify parsing from command line.) */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import java.util.Map; import java.util.Random; public class StringMapLoops { static int nkeys = 1000; static int pinsert = 60; static int premove = 2; static int maxThreads = 100; static int nops = 1000000; static int removesPerMaxRandom; static int insertsPerMaxRandom; static final ExecutorService pool = Executors.newCachedThreadPool(); public static void main(String[] args) throws Exception { Class mapClass = null; if (args.length > 0) { try { mapClass = Class.forName(args[0]); } catch(ClassNotFoundException e) { throw new RuntimeException("Class " + args[0] + " not found."); } } else mapClass = edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap.class; if (args.length > 1) maxThreads = Integer.parseInt(args[1]); if (args.length > 2) nkeys = Integer.parseInt(args[2]); if (args.length > 3) pinsert = Integer.parseInt(args[3]); if (args.length > 4) premove = Integer.parseInt(args[4]); if (args.length > 5) nops = Integer.parseInt(args[5]); // normalize probabilities wrt random number generator removesPerMaxRandom = (int)(((double)premove/100.0 * 0x7FFFFFFFL)); insertsPerMaxRandom = (int)(((double)pinsert/100.0 * 0x7FFFFFFFL)); System.out.print("Class: " + mapClass.getName()); System.out.print(" threads: " + maxThreads); System.out.print(" size: " + nkeys); System.out.print(" ins: " + pinsert); System.out.print(" rem: " + premove); System.out.print(" ops: " + nops); System.out.println(); String[] key = makeKeys(nkeys); int k = 1; int warmups = 2; for (int i = 1; i <= maxThreads;) { Thread.sleep(100); test(i, nkeys, key, mapClass); shuffleKeys(key); if (warmups > 0) --warmups; else if (i == k) { k = i << 1; i = i + (i >>> 1); } else if (i == 1 && k == 2) { i = k; warmups = 1; } else i = k; } pool.shutdown(); } static String[] makeKeys(int n) { LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); String[] key = new String[n]; for (int i = 0; i < key.length; ++i) { int k = 0; int len = 1 + (rng.next() & 0xf); char[] c = new char[len * 4]; for (int j = 0; j < len; ++j) { int r = rng.next(); c[k++] = (char)(' ' + (r & 0x7f)); r >>>= 8; c[k++] = (char)(' ' + (r & 0x7f)); r >>>= 8; c[k++] = (char)(' ' + (r & 0x7f)); r >>>= 8; c[k++] = (char)(' ' + (r & 0x7f)); } key[i] = new String(c); } return key; } static void shuffleKeys(String[] key) { Random rng = new Random(); for (int i = key.length; i > 1; --i) { int j = rng.nextInt(i); String tmp = key[j]; key[j] = key[i-1]; key[i-1] = tmp; } } static void test(int i, int nkeys, String[] key, Class mapClass) throws Exception { System.out.print("Threads: " + i + "\t:"); Map map = (Map)mapClass.newInstance(); // Uncomment to start with a non-empty table // for (int j = 0; j < nkeys; j += 4) // start 1/4 occupied // map.put(key[j], key[j]); LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier = new CyclicBarrier(i+1, timer); for (int t = 0; t < i; ++t) pool.execute(new Runner(t, map, key, barrier)); barrier.await(); barrier.await(); long time = timer.getTime(); long tpo = time / (i * (long)nops); System.out.print(LoopHelpers.rightJustify(tpo) + " ns per op"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); map.clear(); } static class Runner implements Runnable { final Map map; final String[] key; final LoopHelpers.SimpleRandom rng; final CyclicBarrier barrier; int position; int total; Runner(int id, Map map, String[] key, CyclicBarrier barrier) { this.map = map; this.key = key; this.barrier = barrier; position = key.length / 2; rng = new LoopHelpers.SimpleRandom((id + 1) * 8862213513L); rng.next(); } int step() { // random-walk around key positions, bunching accesses int r = rng.next(); position += (r & 7) - 3; while (position >= key.length) position -= key.length; while (position < 0) position += key.length; String k = key[position]; String x = (String)map.get(k); if (x != null) { if (r < removesPerMaxRandom) { if (map.remove(k) != null) { position = total % key.length; // move from position return 2; } } } else if (r < insertsPerMaxRandom) { ++position; map.put(k, k); return 2; } total += r; return 1; } public void run() { try { barrier.await(); int ops = nops; while (ops > 0) ops -= step(); barrier.await(); } catch (Exception ex) { ex.printStackTrace(); } } } } backport-util-concurrent-3.1-src/test/loops/src/ExchangeLoops.java0000644001750700037720000001133610431777323024225 0ustar dawidkdcl/* * Written by Bill Scherer and Doug Lea with assistance from members * of JCP JSR-166 Expert Group and released to the public domain. Use, * modify, and redistribute this code in any way without * acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; public class ExchangeLoops { static final int NCPUS = Runtime.getRuntime().availableProcessors(); static final int DEFAULT_THREADS = NCPUS + 2; static final long DEFAULT_TRIAL_MILLIS = 10000; public static void main(String[] args) throws Exception { int maxThreads = DEFAULT_THREADS; long trialMillis = DEFAULT_TRIAL_MILLIS; int nReps = 3; // Parse and check args int argc = 0; while (argc < args.length) { String option = args[argc++]; if (option.equals("-t")) trialMillis = Integer.parseInt(args[argc]); else if (option.equals("-r")) nReps = Integer.parseInt(args[argc]); else maxThreads = Integer.parseInt(option); argc++; } // Display runtime parameters System.out.print("ExchangeTest"); System.out.print(" -t " + trialMillis); System.out.print(" -r " + nReps); System.out.print(" max threads " + maxThreads); System.out.println(); long warmupTime = 2000; long sleepTime = 100; int nw = maxThreads >= 3? 3 : 2; System.out.println("Warmups.."); oneRun(3, warmupTime); Thread.sleep(sleepTime); for (int i = maxThreads; i >= 2; i -= 1) { oneRun(i, warmupTime++); // System.gc(); Thread.sleep(sleepTime); } /* for (int i = maxThreads; i >= 2; i -= 1) { oneRun(i, warmupTime++); } */ for (int j = 0; j < nReps; ++j) { System.out.println("Trial: " + j); for (int i = 2; i <= maxThreads; i += 2) { oneRun(i, trialMillis); // System.gc(); Thread.sleep(sleepTime); } for (int i = maxThreads; i >= 2; i -= 2) { oneRun(i, trialMillis); // System.gc(); Thread.sleep(sleepTime); } Thread.sleep(sleepTime); } } static void oneRun(int nThreads, long trialMillis) throws Exception { System.out.println(nThreads + " threads"); Exchanger x = new Exchanger(); Runner[] runners = new Runner[nThreads]; Thread[] threads = new Thread[nThreads]; for (int i = 0; i < nThreads; ++i) { runners[i] = new Runner(x); threads[i] = new Thread(runners[i]); // int h = System.identityHashCode(threads[i]); // h ^= h << 1; // h ^= h >>> 3; // h ^= h << 10; // System.out.printf("%10x\n", h); } long startTime = Utils.nanoTime(); for (int i = 0; i < nThreads; ++i) { threads[i].start(); } Thread.sleep(trialMillis); for (int i = 0; i < nThreads; ++i) threads[i].interrupt(); long elapsed = Utils.nanoTime() - startTime; for (int i = 0; i < nThreads; ++i) threads[i].join(); int iters = 1; // System.out.println(); for (int i = 0; i < nThreads; ++i) { int ipr = runners[i].iters; // System.out.println(ipr); iters += ipr; } long rate = iters * 1000L * 1000L * 1000L / elapsed; long npt = elapsed / iters; System.out.println(elapsed / (1000L * 1000L) + "ms"); System.out.println(rate + " it/s "); System.out.println(npt + " ns/it"); System.out.println(); // x.printStats(); } static final class Runner implements Runnable { final Exchanger exchanger; final Object mine = new Integer(2688); volatile int iters; Runner(Exchanger x) { this.exchanger = x; } public void run() { Exchanger x = exchanger; Object m = mine; int i = 0; try { for (;;) { Object e = x.exchange(m); if (e == null || e == m) throw new Error(); m = e; ++i; } } catch (InterruptedException ie) { iters = i; } } } } backport-util-concurrent-3.1-src/test/loops/src/NoopLockLoops.java0000644001750700037720000000617410253737131024226 0ustar dawidkdcl/* * @test * @synopsis multiple threads using a single builtin lock */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class NoopLockLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int iters = 20000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); new ReentrantLockLoop(1).test(); new ReentrantLockLoop(1).test(); print = true; int k = 1; for (int i = 1; i <= maxThreads;) { System.out.print("Threads: " + i); new ReentrantLockLoop(i).test(); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static final class ReentrantLockLoop implements Runnable { private int v = rng.next(); private volatile int result = 17; private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; private volatile int readBarrier; ReentrantLockLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); if (print) { long time = timer.getTime(); long tpi = time / ((long)iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { try { barrier.await(); int sum = v + 1; int x = sum + 1; int n = iters; while (n-- > 0) { synchronized(this) { x = LoopHelpers.compute4(x); } sum += x; if ((x += readBarrier) == 0) ++readBarrier; } barrier.await(); result += sum; } catch (Exception ie) { return; } } } } backport-util-concurrent-3.1-src/test/loops/src/FinalLongTest142.java0000644001750700037720000000412610201025631024404 0ustar dawidkdcl/* * @test %I% %E% * @bug 5041458 * @compile FinalLongTest.java * @run main FinalLongTest * @summary Detects reads of uninitialized final value field of Long class */ public class FinalLongTest142 { static int npairs = 2; static int iters = 500000000; static final int LEN = 4; static final Long[] nums = new Long[LEN]; static volatile boolean done; static volatile long total; public static void main(String[] args) { for (int i = 0; i < LEN; ++i) nums[i] = new Long(i+1); Thread[] ps = new Thread[npairs]; Thread[] as = new Reader[npairs]; for (int i = 0; i < npairs; ++i) { ps[i] = new Writer(); as[i] = new Reader(); } for (int i = 0; i < as.length; ++i) { ps[i].start(); as[i].start(); } } static long nextRandom(long seed) { return (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1); } static long initialSeed(Object x) { return (System.currentTimeMillis() + x.hashCode()) | 1; } static class Writer extends Thread { public void run() { long s = initialSeed(this); int n = iters / 2; while (!done && n-- > 0) { int k = (int)(s & (LEN-1)); int l = (k+1) & (LEN-1); nums[k] = new Long(s); nums[l] = new Long(s); s = nextRandom(s); if (s == 0) s = initialSeed(this); } done = true; total += s; } } static class Reader extends Thread { public void run() { int n = iters; long s = initialSeed(this); while (s != 0 && n > 0) { long nexts = nums[(int)(s & (LEN-1))].longValue(); if (nexts != s) --n; else if (done) break; s = nexts; } done = true; total += s; if (s == 0) throw new Error("Saw uninitialized value"); } } } backport-util-concurrent-3.1-src/test/loops/src/Mutex.java0000644001750700037720000000301510431260156022552 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import java.io.*; /** * A sample user extension of AbstractQueuedSynchronizer. */ public final class Mutex {//extends AbstractQueuedSynchronizer implements Lock, java.io.Serializable { // public boolean isHeldExclusively() { return getState() == 1; } // // public boolean tryAcquire(int acquires) { // return compareAndSetState(0, 1); // } // // public boolean tryRelease(int releases) { // setState(0); // return true; // } // public Condition newCondition() { return new ConditionObject(); } // // private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { // s.defaultReadObject(); // setState(0); // reset to unlocked state // } // // public void lock() { // acquire(1); // } // public boolean tryLock() { // return tryAcquire(1); // } // public void lockInterruptibly() throws InterruptedException { // acquireInterruptibly(1); // } // public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException { // return tryAcquireNanos(1, unit.toNanos(timeout)); // } // public void unlock() { release(1); } } backport-util-concurrent-3.1-src/test/loops/src/LockLoops.java0000644001750700037720000002654710253737131023400 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ /* * A simple test program. Feel free to play. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class LockLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static boolean doBuiltin = true; static boolean doReadWrite = true; static boolean doSemaphore = true; static boolean doFair = true; public static void main(String[] args) throws Exception { int maxThreads = 100; int iters = 1000000; int replications = 1; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); if (args.length > 1) iters = Integer.parseInt(args[1]); if (args.length > 2) replications = Integer.parseInt(args[2]); rng.setSeed(3122688L); print = false; System.out.println("Warmup..."); oneTest(3, 10000); Thread.sleep(1000); oneTest(2, 10000); Thread.sleep(100); oneTest(1, 100000); Thread.sleep(100); oneTest(1, 100000); Thread.sleep(1000); print = true; for (int i = 1; i <= maxThreads; ++i) { for (int j = 0; j < replications; ++j) { System.out.println("Threads:" + i); oneTest(i, iters / i); Thread.sleep(100); } } pool.shutdown(); } static void oneTest(int nthreads, int iters) throws Exception { int v = rng.next(); if (print) System.out.print("No shared vars "); new NoLockLoop().test(v, nthreads, iters * 10); Thread.sleep(10); if (print) System.out.print("No Lock + volatile "); new NoLockVolatileLoop().test(v, nthreads, iters); Thread.sleep(10); if (doBuiltin) { if (print) System.out.print("builtin lock "); new BuiltinLockLoop().test(v, nthreads, iters); Thread.sleep(10); } if (print) System.out.print("ReentrantLock "); new ReentrantLockLoop().test(v, nthreads, iters); Thread.sleep(10); if (doReadWrite) { if (print) System.out.print("ReentrantWriteLock "); new ReentrantWriteLockLoop().test(v, nthreads, iters); Thread.sleep(10); if (print) System.out.print("ReentrantReadWriteLock"); new ReentrantReadWriteLockLoop().test(v, nthreads, iters); Thread.sleep(10); } if (doSemaphore) { if (print) System.out.print("Semaphore "); new SemaphoreLoop().test(v, nthreads, iters); Thread.sleep(10); if (print) System.out.print("FairSemaphore "); new FairSemaphoreLoop().test(v, nthreads, iters); Thread.sleep(10); } if (doFair) { if (print) System.out.print("FairReentrantLock "); new FairReentrantLockLoop().test(v, nthreads, iters); Thread.sleep(10); if (doReadWrite) { // if (print) // System.out.print("FairRWriteLock "); // new FairReentrantWriteLockLoop().test(v, nthreads, iters); // Thread.sleep(10); // if (print) // System.out.print("FairRReadWriteLock "); // new FairReentrantReadWriteLockLoop().test(v, nthreads, iters); // Thread.sleep(10); } } } static abstract class LockLoop implements Runnable { int v; int iters; volatile int result; final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier; final void test(int initialValue, int nthreads, int iters) throws Exception { v = initialValue; this.iters = iters; barrier = new CyclicBarrier(nthreads+1, timer); for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); long time = timer.getTime(); if (print) { long tpi = time / (iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per update"); // double secs = (double)(time) / 1000000000.0; // System.out.print("\t " + secs + "s run time"); System.out.println(); } if (result == 0) // avoid overoptimization System.out.println("useless result: " + result); } abstract int loop(int n); public final void run() { try { barrier.await(); result += loop(iters); barrier.await(); } catch (Exception ie) { return; } } } private static class BuiltinLockLoop extends LockLoop { final int loop(int n) { int sum = 0; while (n-- > 0) { synchronized(this) { v = LoopHelpers.compute1(v); } sum += LoopHelpers.compute2(v); } return sum; } } private static class NoLockLoop extends LockLoop { final int loop(int n) { int sum = 0; int y = v; while (n-- > 0) { y = LoopHelpers.compute1(y); sum += LoopHelpers.compute2(y); } return sum; } } private static class NoLockVolatileLoop extends LockLoop { volatile private int vv; final int loop(int n) { int sum = 0; while (n-- > 0) { int y = LoopHelpers.compute1(vv); vv = y; sum += LoopHelpers.compute2(y); } return sum; } } private static class ReentrantLockLoop extends LockLoop { final private ReentrantLock lock = new ReentrantLock(); final int loop(int n) { int sum = 0; while (n-- > 0) { lock.lock(); try { v = LoopHelpers.compute1(v); } finally { lock.unlock(); } sum += LoopHelpers.compute2(v); } return sum; } } private static class FairReentrantLockLoop extends LockLoop { final private ReentrantLock lock = new ReentrantLock(true); final int loop(int n) { int sum = 0; while (n-- > 0) { lock.lock(); try { v = LoopHelpers.compute1(v); } finally { lock.unlock(); } sum += LoopHelpers.compute2(v); } return sum; } } private static class ReentrantWriteLockLoop extends LockLoop { final private Lock lock = new ReentrantReadWriteLock().writeLock(); final int loop(int n) { int sum = 0; while (n-- > 0) { lock.lock(); try { v = LoopHelpers.compute1(v); } finally { lock.unlock(); } sum += LoopHelpers.compute2(v); } return sum; } } private static class ReentrantReadWriteLockLoop extends LockLoop { final private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final int loop(int n) { int sum = 0; while (n-- > 0) { int x; lock.readLock().lock(); try { x = LoopHelpers.compute1(v); } finally { lock.readLock().unlock(); } lock.writeLock().lock(); try { v = x; } finally { lock.writeLock().unlock(); } sum += LoopHelpers.compute2(v); } return sum; } } // private static class FairReentrantWriteLockLoop extends LockLoop { // final Lock lock = new ReentrantReadWriteLock(true).writeLock(); // final int loop(int n) { // int sum = 0; // while (n-- > 0) { // lock.lock(); // try { // v = LoopHelpers.compute1(v); // } // finally { // lock.unlock(); // } // sum += LoopHelpers.compute2(v); // } // return sum; // } // } // private static class SemaphoreLoop extends LockLoop { final private Semaphore sem = new Semaphore(1, false); final int loop(int n) { int sum = 0; try { while (n-- > 0) { sem.acquire(); try { v = LoopHelpers.compute1(v); } finally { sem.release(); } sum += LoopHelpers.compute2(v); } } catch (InterruptedException ie) { return sum; } return sum; } } private static class FairSemaphoreLoop extends LockLoop { final private Semaphore sem = new Semaphore(1, true); final int loop(int n) { int sum = 0; try { while (n-- > 0) { sem.acquire(); try { v = LoopHelpers.compute1(v); } finally { sem.release(); } sum += LoopHelpers.compute2(v); } } catch (InterruptedException ie) { return sum; } return sum; } } // private static class FairReentrantReadWriteLockLoop extends LockLoop { // final private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); // final int loop(int n) { // int sum = 0; // while (n-- > 0) { // int x; // lock.readLock().lock(); // try { // x = LoopHelpers.compute1(v); // } // finally { // lock.readLock().unlock(); // } // lock.writeLock().lock(); // try { // v = x; // } // finally { // lock.writeLock().unlock(); // } // sum += LoopHelpers.compute2(v); // } // return sum; // } // } // } backport-util-concurrent-3.1-src/test/loops/src/SimpleReentrantLockLoops.java0000644001750700037720000000705510256105111026414 0ustar dawidkdcl/* * @test * @synopsis multiple threads using a single ReentrantLock */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class SimpleReentrantLockLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int iters = 2000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); new ReentrantLockLoop(1).test(); new ReentrantLockLoop(1).test(); print = true; int k = 1; for (int i = 1; i <= maxThreads;) { System.out.print("Threads: " + i); new ReentrantLockLoop(i).test(); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static final class ReentrantLockLoop implements Runnable { private int v = rng.next(); private volatile int result = 17; private final ReentrantLock lock = new ReentrantLock(); private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; private volatile int readBarrier; ReentrantLockLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); if (print) { long time = timer.getTime(); long tpi = time / ((long)iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { final ReentrantLock lock = this.lock; try { barrier.await(); int sum = v + 1; int x = 0; int n = iters; while (n-- > 0) { lock.lock(); int k = (sum & 3); if (k > 0) { x = v; while (k-- > 0) x = LoopHelpers.compute6(x); v = x; } else x = sum + 1; lock.unlock(); if ((x += readBarrier) == 0) ++readBarrier; for (int l = x & 7; l > 0; --l) sum += LoopHelpers.compute6(sum); } barrier.await(); result += sum; } catch (Exception ie) { return; } } } } backport-util-concurrent-3.1-src/test/loops/src/RWCollection.java0000644001750700037720000001065310346121124024016 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import java.util.Collection; import java.util.Iterator; import java.util.ArrayList; /** * This is an incomplete implementation of a wrapper class * that places read-write locks around unsynchronized Collections. * Exists as a sample input for CollectionLoops test. */ public final class RWCollection implements Collection { private final Collection c; private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); public RWCollection(Collection c) { if (c == null) throw new NullPointerException(); this.c = c; } public RWCollection() { this(new ArrayList()); } public final int size() { final ReentrantReadWriteLock.ReadLock l = (ReentrantReadWriteLock.ReadLock)rwl.readLock(); l.lock(); try {return c.size();} finally { l.unlock(); } } public final boolean isEmpty(){ final ReentrantReadWriteLock.ReadLock l = (ReentrantReadWriteLock.ReadLock)rwl.readLock(); l.lock(); try {return c.isEmpty();} finally { l.unlock(); } } public final boolean contains(Object o) { final ReentrantReadWriteLock.ReadLock l = (ReentrantReadWriteLock.ReadLock)rwl.readLock(); l.lock(); try {return c.contains(o);} finally { l.unlock(); } } public final boolean equals(Object o) { final ReentrantReadWriteLock.ReadLock l = (ReentrantReadWriteLock.ReadLock)rwl.readLock(); l.lock(); try {return c.equals(o);} finally { l.unlock(); } } public final int hashCode() { final ReentrantReadWriteLock.ReadLock l = (ReentrantReadWriteLock.ReadLock)rwl.readLock(); l.lock(); try {return c.hashCode();} finally { l.unlock(); } } public final String toString() { final ReentrantReadWriteLock.ReadLock l = (ReentrantReadWriteLock.ReadLock)rwl.readLock(); l.lock(); try {return c.toString();} finally { l.unlock(); } } public final Iterator iterator() { final ReentrantReadWriteLock.ReadLock l = (ReentrantReadWriteLock.ReadLock)rwl.readLock(); l.lock(); try {return c.iterator();} finally { l.unlock(); } } public final Object[] toArray() { final ReentrantReadWriteLock.ReadLock l = (ReentrantReadWriteLock.ReadLock)rwl.readLock(); l.lock(); try {return c.toArray();} finally { l.unlock(); } } public final Object[] toArray(Object[] a) { final ReentrantReadWriteLock.ReadLock l = (ReentrantReadWriteLock.ReadLock)rwl.readLock(); l.lock(); try {return c.toArray(a);} finally { l.unlock(); } } public final boolean add(Object e) { final ReentrantReadWriteLock.WriteLock l = (ReentrantReadWriteLock.WriteLock)rwl.writeLock(); l.lock(); try {return c.add(e);} finally { l.unlock(); } } public final boolean remove(Object o) { final ReentrantReadWriteLock.WriteLock l = (ReentrantReadWriteLock.WriteLock)rwl.writeLock(); l.lock(); try {return c.remove(o);} finally { l.unlock(); } } public final boolean containsAll(Collection coll) { final ReentrantReadWriteLock.WriteLock l = (ReentrantReadWriteLock.WriteLock)rwl.writeLock(); l.lock(); try {return c.containsAll(coll);} finally { l.unlock(); } } public final boolean addAll(Collection coll) { final ReentrantReadWriteLock.WriteLock l = (ReentrantReadWriteLock.WriteLock)rwl.writeLock(); l.lock(); try {return c.addAll(coll);} finally { l.unlock(); } } public final boolean removeAll(Collection coll) { final ReentrantReadWriteLock.WriteLock l = (ReentrantReadWriteLock.WriteLock)rwl.writeLock(); l.lock(); try {return c.removeAll(coll);} finally { l.unlock(); } } public final boolean retainAll(Collection coll) { final ReentrantReadWriteLock.WriteLock l = (ReentrantReadWriteLock.WriteLock)rwl.writeLock(); l.lock(); try {return c.retainAll(coll);} finally { l.unlock(); } } public final void clear() { final ReentrantReadWriteLock.WriteLock l = (ReentrantReadWriteLock.WriteLock)rwl.writeLock(); l.lock(); try {c.clear();} finally { l.unlock(); } } } backport-util-concurrent-3.1-src/test/loops/src/FinalLongTest.java0000644001750700037720000000626510253737131024177 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ public class FinalLongTest { static int npairs = 2; static int iters = 10000000; static int LEN = 2; static final Long[] nums = new Long[LEN]; static volatile boolean done; static volatile long total; static Long n0 = new Long(21); static Long n1 = new Long(22); static Long n2 = new Long(23); static Long n3 = new Long(23); public static void main(String[] args) { for (int i = 0; i < LEN; ++i) nums[i] = new Long(i+1); Thread[] ps = new Thread[npairs]; Thread[] as = new Reader[npairs]; for (int i = 0; i < npairs; ++i) { ps[i] = new Writer(); as[i] = new Reader(); } for (int i = 0; i < as.length; ++i) { ps[i].start(); as[i].start(); } } static long nextRandom(long seed) { return (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1); } static long initialSeed(Object x) { return (System.currentTimeMillis() + x.hashCode()) | 1; } static class Writer extends Thread { public void run() { long s = initialSeed(this); int n = iters / 2; Long[] ns = nums; while (n-- > 0) { // int k = (int)(s & (LEN-1)); // if (k < 0 || k >= LEN) k = 1; // int l = (k+1) & (LEN-1); // if (l < 0 || l >= LEN) l = 0; // int k = (s & 1) == 0? 0 : 1; // int l = (k == 0)? 1 : 0; if ((s & (LEN-1)) == 0) { n3 = n1; n0 = new Long(s); n2 = n1; n1 = new Long(s); } else { n3 = n0; n1 = new Long(s); n2 = n0; n0 = new Long(s); } s = nextRandom(s); if (s == 0) s = initialSeed(this); } done = true; total += s; } } static class Reader extends Thread { public void run() { int n = iters; long s = initialSeed(this); while (s != 0 && n > 0) { long nexts; // = nums[(int)(s & (LEN-1))].longValue(); if ((s & (LEN-1)) == 0) nexts = n0.longValue(); else nexts = n1.longValue(); if (nexts != 0) { if ((s & 4) == 0) nexts = n2.longValue(); else nexts = n3.longValue(); } if (nexts != s) --n; else if (done) break; s = nexts; } done = true; total += s; if (s == 0) throw new Error("Saw uninitialized value"); } } } backport-util-concurrent-3.1-src/test/loops/src/CollectionWordLoops.java0000644001750700037720000001310110431260156025411 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import java.io.*; import java.util.Collection; public class CollectionWordLoops { static final String[] WORDS_FILES = { "kw.txt", "class.txt", }; static final int MAX_WORDS = 500000; static final int pinsert = 80; static final int premove = 2; static final int NOPS = 100000; static final int numTests = 2; public static void main(String[] args) { Class collectionClass = null; try { collectionClass = Class.forName(args[0]); } catch(ClassNotFoundException e) { throw new RuntimeException("Class " + args[0] + " not found."); } System.out.println("Testing " + collectionClass.getName()); for (int s = 0; s < WORDS_FILES.length; ++s) tests(collectionClass, numTests, s); for (int s = WORDS_FILES.length-1; s >= 0; --s) tests(collectionClass, numTests, s); } static void tests(Class collectionClass, int numTests, int sizeIndex) { try { String[] key = readWords(sizeIndex); int size = key.length; System.out.print("n = " +LoopHelpers.rightJustify(size) +" : "); long least = Long.MAX_VALUE; for (int i = 0; i < numTests; ++i) { Collection m = newCollection(collectionClass); long t = doTest(collectionClass.getName(), m, key); if (t < least) least = t; m.clear(); m = null; } long nano = Math.round(1000000.0 * (least) / NOPS); System.out.println(LoopHelpers.rightJustify(nano) + " ns per op"); } catch (IOException ignore) { return; // skip test if can't read file } } static Collection newCollection(Class cl) { try { Collection m = (Collection)cl.newInstance(); return m; } catch(Exception e) { throw new RuntimeException("Can't instantiate " + cl + ": " + e); } } static void pause() { try { Thread.sleep(100); } catch(InterruptedException ie) { return; } } static String[] readWords(int sizeIndex) throws IOException { String[] l = new String[MAX_WORDS]; String[] array = null; try { FileReader fr = new FileReader(WORDS_FILES[sizeIndex]); BufferedReader reader = new BufferedReader(fr); int k = 0; for (;;) { String s = reader.readLine(); if (s == null) break; l[k++] = s; } array = new String[k]; for (int i = 0; i < k; ++i) { array[i] = l[i]; l[i] = null; } l = null; reader.close(); } catch (IOException ex) { System.out.println("Can't read words file:" + ex); throw ex; } return array; } static long doTest(String name, final Collection m, final String[] key) { // System.out.print(name + "\t"); Runner runner = new Runner(m, key); long startTime = System.currentTimeMillis(); runner.run(); long afterRun = System.currentTimeMillis(); long runTime = (afterRun - startTime); int np = runner.total; if (runner.total == runner.hashCode()) System.out.println("Useless Number" + runner.total); int sz = runner.maxsz; if (sz == runner.hashCode()) System.out.println("Useless Number" + sz); // System.out.print(" m = " + sz); return runTime; } static class Runner implements Runnable { final Collection collection; final String[] key; LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); final int pctrem; final int pctins; int nputs = 0; int npgets = 0; int nagets = 0; int nremoves = 0; volatile int total; int maxsz; Runner(Collection m, String[] k) { collection = m; key = k; pctrem = (int)(((long)premove * (long)(Integer.MAX_VALUE/2)) / 50); pctins = (int)(((long)pinsert * (long)(Integer.MAX_VALUE/2)) / 50); } int oneStep(int j) { int n = key.length; int r = rng.next() & 0x7FFFFFFF; int jinc = (r & 7); j += jinc - 3; if (j >= n) j -= n; if (j < 0) j += n; int l = n / 4 + j; if (l >= n) l -= n; String k = key[j]; if (!collection.contains(k)) { ++nagets; if (r < pctins) { collection.add(k); ++nputs; int csz = nputs - nremoves; if (csz > maxsz) maxsz = csz; } } else { ++npgets; if (r < pctrem) { collection.remove(k); ++nremoves; j += ((r >>> 8) & 7) + n / 2; if (j >= n) j -= n; } } return j; } public void run() { int j = key.length / 2; for (int i = 0; i < NOPS; ++i) { j = oneStep(j); } total = nputs + npgets + nagets + nremoves; } } } backport-util-concurrent-3.1-src/test/loops/src/SimpleSpinLockLoops.java0000644001750700037720000000711510256105111025360 0ustar dawidkdcl/* * @test * @synopsis multiple threads using a spinlock */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import edu.emory.mathcs.backport.java.util.*; public final class SimpleSpinLockLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int iters = 2000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); new LockLoop(1).test(); new LockLoop(1).test(); print = true; int k = 1; for (int i = 1; i <= maxThreads;) { System.out.print("Threads: " + i); new LockLoop(i).test(); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static final class LockLoop implements Runnable { private int v = rng.next(); private volatile int result = 17; private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; private volatile int readBarrier; private final AtomicInteger spinlock = new AtomicInteger(); LockLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); if (print) { long time = timer.getTime(); long tpi = time / ((long)iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { final AtomicInteger lock = this.spinlock; try { barrier.await(); int sum = v + 1; int x = 0; int n = iters; while (n-- > 0) { while (!lock.compareAndSet(0, 1)) ; int k = (sum & 3); if (k > 0) { x = v; while (k-- > 0) x = LoopHelpers.compute6(x); v = x; } else x = sum + 1; lock.set(0); if ((x += readBarrier) == 0) ++readBarrier; for (int l = x & 1; l > 0; --l) sum += LoopHelpers.compute6(sum); } barrier.await(); result += sum; } catch (Exception ie) { return; } } } } backport-util-concurrent-3.1-src/test/loops/src/UncheckedLockLoops.java0000644001750700037720000003271110253737131025200 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ /* * @test * @summary basic safety and liveness of ReentrantLocks, and other locks based on them */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class UncheckedLockLoops { static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static boolean doBuiltin = true; public static void main(String[] args) throws Exception { int maxThreads = 100; int iters = 10000000; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); rng.setSeed(3122688L); print = false; System.out.println("Warmup..."); oneTest(1, 100000); Thread.sleep(1000); oneTest(3, 10000); Thread.sleep(1000); oneTest(2, 10000); Thread.sleep(100); oneTest(1, 100000); Thread.sleep(100); oneTest(1, 100000); Thread.sleep(1000); print = true; System.out.println("Threads:" + 1); oneTest(1, iters / 1); Thread.sleep(100); for (int i = 1; i <= maxThreads; i += (i+1) >>> 1) { System.out.println("Threads:" + i); oneTest(i, iters / i); Thread.sleep(100); } } static void oneTest(int nthreads, int iters) throws Exception { int fairIters = (nthreads <= 1)? iters : iters/20; int v = rng.next(); if (print) System.out.print("NoLock (1 thread) "); new NoLockLoop().test(v, 1, iters * nthreads); Thread.sleep(10); if (print) System.out.print("ReentrantLock "); new ReentrantLockLoop().test(v, nthreads, iters); Thread.sleep(10); if (false) { if (print) System.out.print("FairReentrantLock "); new FairReentrantLockLoop().test(v, nthreads, fairIters); Thread.sleep(10); } if (doBuiltin) { if (print) System.out.print("builtin lock "); new BuiltinLockLoop().test(v, nthreads, fairIters); Thread.sleep(10); } // if (print) // System.out.print("Mutex "); // new MutexLoop().test(v, nthreads, iters); // Thread.sleep(10); // // if (print) // System.out.print("LongMutex "); // new LongMutexLoop().test(v, nthreads, iters); // Thread.sleep(10); // if (print) System.out.print("Semaphore "); new SemaphoreLoop().test(v, nthreads, iters); Thread.sleep(10); if (print) System.out.print("FairSemaphore "); new FairSemaphoreLoop().test(v, nthreads, fairIters); Thread.sleep(10); if (print) System.out.print("ReentrantWriteLock "); new ReentrantWriteLockLoop().test(v, nthreads, iters); Thread.sleep(10); // if (print) // System.out.print("FairRWriteLock "); // new FairReentrantWriteLockLoop().test(v, nthreads, fairIters); // Thread.sleep(10); // if (print) System.out.print("ReentrantReadWriteLock"); new ReentrantReadWriteLockLoop().test(v, nthreads, iters); Thread.sleep(10); // if (print) // System.out.print("FairRReadWriteLock "); // new FairReentrantReadWriteLockLoop().test(v, nthreads, fairIters); // Thread.sleep(10); // } static abstract class LockLoop implements Runnable { int value; int checkValue; int iters; volatile int result; volatile int failures; final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier; final int setValue(int v) { checkValue = v ^ 0x55555555; value = v; return v; } final int getValue() { int v = value; if (checkValue != ~(v ^ 0xAAAAAAAA)) ++failures; return v; } final void test(int initialValue, int nthreads, int iters) throws Exception { setValue(initialValue); this.iters = iters; barrier = new CyclicBarrier(nthreads+1, timer); for (int i = 0; i < nthreads; ++i) new Thread(this).start(); barrier.await(); barrier.await(); long time = timer.getTime(); if (print) { long tpi = time / (iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per update"); // double secs = (double)(time) / 1000000000.0; // System.out.print("\t " + secs + "s run time"); System.out.println(); } if (result == 0) // avoid overoptimization System.out.println("useless result: " + result); if (failures != 0) throw new Error("protection failure?"); } abstract int loop(int n); public final void run() { try { barrier.await(); result += loop(iters); barrier.await(); } catch (Exception ie) { return; } } } private static class NoLockLoop extends LockLoop { private volatile int readBarrier; final int loop(int n) { int sum = 0; int x = 0;; while (n-- > 0) { int r1 = readBarrier; x = setValue(LoopHelpers.compute1(getValue())); int r2 = readBarrier; if (r1 == r2 && (x & 255) == 0) ++readBarrier; sum += LoopHelpers.compute2(x); } return sum; } } private static class BuiltinLockLoop extends LockLoop { final int loop(int n) { int sum = 0; int x = 0;; while (n-- > 0) { synchronized(this) { x = setValue(LoopHelpers.compute1(getValue())); } sum += LoopHelpers.compute2(x); } return sum; } } private static class ReentrantLockLoop extends LockLoop { final private ReentrantLock lock = new ReentrantLock(); final int loop(int n) { final ReentrantLock lock = this.lock; int sum = 0; int x = 0; while (n-- > 0) { lock.lock(); try { x = setValue(LoopHelpers.compute1(getValue())); } finally { lock.unlock(); } sum += LoopHelpers.compute2(x); } return sum; } } // private static class MutexLoop extends LockLoop { // final private Mutex lock = new Mutex(); // final int loop(int n) { // final Mutex lock = this.lock; // int sum = 0; // int x = 0; // while (n-- > 0) { // lock.lock(); // try { // x = setValue(LoopHelpers.compute1(getValue())); // } // finally { // lock.unlock(); // } // sum += LoopHelpers.compute2(x); // } // return sum; // } // } // // private static class LongMutexLoop extends LockLoop { // final private LongMutex lock = new LongMutex(); // final int loop(int n) { // final LongMutex lock = this.lock; // int sum = 0; // int x = 0; // while (n-- > 0) { // lock.lock(); // try { // x = setValue(LoopHelpers.compute1(getValue())); // } // finally { // lock.unlock(); // } // sum += LoopHelpers.compute2(x); // } // return sum; // } // } private static class FairReentrantLockLoop extends LockLoop { final private ReentrantLock lock = new ReentrantLock(true); final int loop(int n) { final ReentrantLock lock = this.lock; int sum = 0; int x = 0; while (n-- > 0) { lock.lock(); try { x = setValue(LoopHelpers.compute1(getValue())); } finally { lock.unlock(); } sum += LoopHelpers.compute2(x); } return sum; } } private static class ReentrantWriteLockLoop extends LockLoop { final private Lock lock = new ReentrantReadWriteLock().writeLock(); final int loop(int n) { final Lock lock = this.lock; int sum = 0; int x = 0; while (n-- > 0) { lock.lock(); try { x = setValue(LoopHelpers.compute1(getValue())); } finally { lock.unlock(); } sum += LoopHelpers.compute2(x); } return sum; } } // private static class FairReentrantWriteLockLoop extends LockLoop { // final Lock lock = new ReentrantReadWriteLock(true).writeLock(); // final int loop(int n) { // final Lock lock = this.lock; // int sum = 0; // int x = 0; // while (n-- > 0) { // lock.lock(); // try { // x = setValue(LoopHelpers.compute1(getValue())); // } // finally { // lock.unlock(); // } // sum += LoopHelpers.compute2(x); // } // return sum; // } // } // private static class SemaphoreLoop extends LockLoop { final private Semaphore sem = new Semaphore(1, false); final int loop(int n) { final Semaphore sem = this.sem; int sum = 0; int x = 0; while (n-- > 0) { sem.acquireUninterruptibly(); try { x = setValue(LoopHelpers.compute1(getValue())); } finally { sem.release(); } sum += LoopHelpers.compute2(x); } return sum; } } private static class FairSemaphoreLoop extends LockLoop { final private Semaphore sem = new Semaphore(1, true); final int loop(int n) { final Semaphore sem = this.sem; int sum = 0; int x = 0; while (n-- > 0) { sem.acquireUninterruptibly(); try { x = setValue(LoopHelpers.compute1(getValue())); } finally { sem.release(); } sum += LoopHelpers.compute2(x); } return sum; } } private static class ReentrantReadWriteLockLoop extends LockLoop { final private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final int loop(int n) { final Lock rlock = lock.readLock(); final Lock wlock = lock.writeLock(); int sum = 0; int x = 0; while (n-- > 0) { if ((n & 16) != 0) { rlock.lock(); try { x = LoopHelpers.compute1(getValue()); x = LoopHelpers.compute2(x); } finally { rlock.unlock(); } } else { wlock.lock(); try { setValue(x); } finally { wlock.unlock(); } sum += LoopHelpers.compute2(x); } } return sum; } } // private static class FairReentrantReadWriteLockLoop extends LockLoop { // final private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); // final int loop(int n) { // final Lock rlock = lock.readLock(); // final Lock wlock = lock.writeLock(); // int sum = 0; // int x = 0; // while (n-- > 0) { // if ((n & 16) != 0) { // rlock.lock(); // try { // x = LoopHelpers.compute1(getValue()); // x = LoopHelpers.compute2(x); // } // finally { // rlock.unlock(); // } // } // else { // wlock.lock(); // try { // setValue(x); // } // finally { // wlock.unlock(); // } // sum += LoopHelpers.compute2(x); // } // } // return sum; // } // // } } backport-util-concurrent-3.1-src/test/loops/src/TimeoutLockLoops.java0000644001750700037720000000746710253737131024747 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ /* * @test %I% %E% * @bug 4486658 * @compile -source 1.5 TimeoutLockLoops.java * @run main TimeoutLockLoops * @summary Checks for responsiveness of locks to timeouts. * Runs under the assumption that ITERS computations require more than * TIMEOUT msecs to complete, which seems to be a safe assumption for * another decade. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class TimeoutLockLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static final int ITERS = Integer.MAX_VALUE; static final long TIMEOUT = 100; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); print = true; for (int i = 1; i <= maxThreads; i += (i+1) >>> 1) { System.out.print("Threads: " + i); new ReentrantLockLoop(i).test(); // Thread.sleep(10); } pool.shutdown(); } static final class ReentrantLockLoop implements Runnable { private int v = rng.next(); private volatile boolean completed; private volatile int result = 17; private final ReentrantLock lock = new ReentrantLock(); private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; ReentrantLockLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) { lock.lock(); pool.execute(this); lock.unlock(); } barrier.await(); Thread.sleep(TIMEOUT); while (!lock.tryLock()); // Jam lock // lock.lock(); barrier.await(); if (print) { long time = timer.getTime(); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } if (completed) throw new Error("Some thread completed instead of timing out"); int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { try { barrier.await(); int sum = v; int x = 17; int n = ITERS; final ReentrantLock lock = this.lock; for (;;) { if (x != 0) { if (n-- <= 0) break; } if (!lock.tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) break; try { v = x = LoopHelpers.compute1(v); } finally { lock.unlock(); } sum += LoopHelpers.compute2(x); } if (n <= 0) completed = true; barrier.await(); result += sum; } catch (Exception ex) { ex.printStackTrace(); return; } } } } backport-util-concurrent-3.1-src/test/loops/src/LoopHelpers.java0000644001750700037720000001230210346121124023677 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ /** * Misc utilities in JSR166 performance tests */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; class LoopHelpers { static final SimpleRandom staticRNG = new SimpleRandom(); // Some mindless computation to do between synchronizations... /** * generates 32 bit pseudo-random numbers. * Adapted from http://www.snippets.org */ public static int compute1(int x) { int lo = 16807 * (x & 0xFFFF); int hi = 16807 * (x >>> 16); lo += (hi & 0x7FFF) << 16; if ((lo & 0x80000000) != 0) { lo &= 0x7fffffff; ++lo; } lo += hi >>> 15; if (lo == 0 || (lo & 0x80000000) != 0) { lo &= 0x7fffffff; ++lo; } return lo; } /** * Computes a linear congruential random number a random number * of times. */ public static int compute2(int x) { int loops = (x >>> 4) & 7; while (loops-- > 0) { x = (x * 2147483647) % 16807; } return x; } /** * Yet another random number generator */ public static int compute3(int x) { int t = (x % 127773) * 16807 - (x / 127773) * 2836; return (t > 0)? t : t + 0x7fffffff; } /** * Yet another random number generator */ public static int compute4(int x) { return x * 134775813 + 1; } /** * Yet another random number generator */ public static int compute5(int x) { return 36969 * (x & 65535) + (x >> 16); } /** * Marsaglia xorshift (1, 3, 10) */ public static int compute6(int seed) { seed ^= seed << 1; seed ^= seed >>> 3; seed ^= (seed << 10); return seed; } /** * Marsaglia xorshift (6, 21, 7) */ public static int compute7(int y) { y ^= y << 6; y ^= y >>> 21; y ^= (y << 7); return y; } /** * Marsaglia xorshift for longs */ public static long compute8(long x) { x ^= x << 13; x ^= x >>> 7; x ^= (x << 17); return x; } public static final class XorShift32Random { static final AtomicInteger seq = new AtomicInteger(8862213); int x = -1831433054; public XorShift32Random(int seed) { x = seed; } public XorShift32Random() { this((int)Utils.nanoTime() + seq.getAndAdd(129)); } public int next() { x ^= x << 6; x ^= x >>> 21; x ^= (x << 7); return x; } } /** Multiplication-free RNG from Marsaglia "Xorshift RNGs" paper */ public static final class MarsagliaRandom { static final AtomicInteger seq = new AtomicInteger(3122688); int x; int y = 842502087; int z = -715159705; int w = 273326509; public MarsagliaRandom(int seed) { x = seed; } public MarsagliaRandom() { this((int)Utils.nanoTime() + seq.getAndAdd(129)); } public int next() { int t = x ^ (x << 11); x = y; y = z; z = w; return w = (w ^ (w >>> 19) ^ (t ^ (t >>> 8))); } } /** * Unsynchronized version of java.util.Random algorithm. */ public static final class SimpleRandom { private final static long multiplier = 0x5DEECE66DL; private final static long addend = 0xBL; private final static long mask = (1L << 48) - 1; static final AtomicLong seq = new AtomicLong( -715159705); private long seed; SimpleRandom(long s) { seed = s; } SimpleRandom() { seed = Utils.nanoTime() + seq.getAndAdd(129); } public void setSeed(long s) { seed = s; } public int next() { long nextseed = (seed * multiplier + addend) & mask; seed = nextseed; return ((int)(nextseed >>> 17)) & 0x7FFFFFFF; } } public static class BarrierTimer implements Runnable { volatile boolean started; volatile long startTime; volatile long endTime; public void run() { long t = Utils.nanoTime(); if (!started) { started = true; startTime = t; } else endTime = t; } public void clear() { started = false; } public long getTime() { return endTime - startTime; } } public static String rightJustify(long n) { // There's probably a better way to do this... String field = " "; String num = Long.toString(n); if (num.length() >= field.length()) return num; StringBuffer b = new StringBuffer(field); b.replace(b.length()-num.length(), b.length(), num); return b.toString(); } } backport-util-concurrent-3.1-src/test/loops/src/CASLoops.java0000644001750700037720000004626210643126465023117 0ustar dawidkdcl/* * Written by Doug Lea and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ /* * Estimates the difference in time for compareAndSet and CAS-like * operations versus unsynchronized, non-volatile pseudo-CAS when * updating random numbers. These estimates thus give the cost * of atomicity/barriers/exclusion over and above the time to * just compare and conditionally store (int) values, so are * not intended to measure the "raw" cost of a CAS. * * Outputs, in nanoseconds: * "Atomic CAS" AtomicInteger.compareAndSet * "Updater CAS" CAS first comparing args * "Volatile" pseudo-CAS using volatile store if comparison succeeds * "Mutex" emulated compare and set done under AQS-based mutex lock * "Synchronized" emulated compare and set done under a synchronized block. * * By default, these are printed for 1..#cpus threads, but you can * change the upper bound number of threads by providing the * first argument to this program. * * The last two kinds of runs (mutex and synchronized) are done only * if this program is called with (any) second argument */ import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicInteger; import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicLong; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; public class CASLoops { static final int TRIALS = 2; static final long BASE_SECS_PER_RUN = 4; static final int NCPUS = Runtime.getRuntime().availableProcessors(); static int maxThreads = NCPUS; static boolean includeLocks = false; public static void main(String[] args) throws Exception { if (args.length > 0) maxThreads = Integer.parseInt(args[0]); loopIters = new long[maxThreads+1]; if (args.length > 1) includeLocks = true; System.out.println("Warmup..."); for (int i = maxThreads; i > 0; --i) { runCalibration(i, 10); oneRun(i, loopIters[i] / 4, false); System.out.print("."); } for (int i = 1; i <= maxThreads; ++i) loopIters[i] = 0; for (int j = 0; j < 2; ++j) { for (int i = 1; i <= maxThreads; ++i) { runCalibration(i, 1000); oneRun(i, loopIters[i] / 8, false); System.out.print("."); } } for (int i = 1; i <= maxThreads; ++i) loopIters[i] = 0; for (int j = 0; j < TRIALS; ++j) { System.out.println("Trial " + j); for (int i = 1; i <= maxThreads; ++i) { runCalibration(i, BASE_SECS_PER_RUN * 1000L); oneRun(i, loopIters[i], true); } } } static final AtomicLong totalIters = new AtomicLong(0); static final AtomicLong successes = new AtomicLong(0); static final AtomicInteger sum = new AtomicInteger(0); static final LoopHelpers.MarsagliaRandom rng = new LoopHelpers.MarsagliaRandom(); static long[] loopIters; static final class NonAtomicInteger { volatile int readBarrier; int value; NonAtomicInteger() {} int get() { int junk = readBarrier; return value; } boolean compareAndSet(int cmp, int val) { if (value == cmp) { value = val; return true; } return false; } void set(int val) { value = val; } } // static final class UpdaterAtomicInteger { // volatile int value; // // static final AtomicIntegerFieldUpdater // valueUpdater = AtomicIntegerFieldUpdater.newUpdater // (UpdaterAtomicInteger.class, "value"); // // // UpdaterAtomicInteger() {} // int get() { // return value; // } // boolean compareAndSet(int cmp, int val) { // return valueUpdater.compareAndSet(this, cmp, val); // } // // void set(int val) { value = val; } // } // static final class VolatileInteger { volatile int value; VolatileInteger() {} int get() { return value; } boolean compareAndSet(int cmp, int val) { if (value == cmp) { value = val; return true; } return false; } void set(int val) { value = val; } } static final class SynchedInteger { int value; SynchedInteger() {} int get() { return value; } synchronized boolean compareAndSet(int cmp, int val) { if (value == cmp) { value = val; return true; } return false; } synchronized void set(int val) { value = val; } } static final class LockedInteger extends ReentrantLock { int value; LockedInteger() {} int get() { return value; } boolean compareAndSet(int cmp, int val) { lock(); try { if (value == cmp) { value = val; return true; } return false; } finally { unlock(); } } void set(int val) { lock(); try { value = val; } finally { unlock(); } } } // All these versions are copy-paste-hacked to avoid // contamination with virtual call resolution etc. // Use fixed-length unrollable inner loops to reduce safepoint checks static final int innerPerOuter = 16; static final class NonAtomicLoop implements Runnable { final long iters; final NonAtomicInteger obj; final CyclicBarrier barrier; NonAtomicLoop(long iters, NonAtomicInteger obj, CyclicBarrier b) { this.iters = iters; this.obj = obj; this.barrier = b; obj.set(rng.next()); } public void run() { try { barrier.await(); long i = iters; int y = 0; int succ = 0; while (i > 0) { for (int k = 0; k < innerPerOuter; ++k) { int x = obj.get(); int z = y + LoopHelpers.compute6(x); if (obj.compareAndSet(x, z)) ++succ; y = LoopHelpers.compute7(z); } i -= innerPerOuter; } sum.getAndAdd(obj.get()); successes.getAndAdd(succ); barrier.await(); } catch (Exception ie) { return; } } } static final class AtomicLoop implements Runnable { final long iters; final AtomicInteger obj; final CyclicBarrier barrier; AtomicLoop(long iters, AtomicInteger obj, CyclicBarrier b) { this.iters = iters; this.obj = obj; this.barrier = b; obj.set(rng.next()); } public void run() { try { barrier.await(); long i = iters; int y = 0; int succ = 0; while (i > 0) { for (int k = 0; k < innerPerOuter; ++k) { int x = obj.get(); int z = y + LoopHelpers.compute6(x); if (obj.compareAndSet(x, z)) ++succ; y = LoopHelpers.compute7(z); } i -= innerPerOuter; } sum.getAndAdd(obj.get()); successes.getAndAdd(succ); barrier.await(); } catch (Exception ie) { return; } } } // static final class UpdaterAtomicLoop implements Runnable { // final long iters; // final UpdaterAtomicInteger obj; // final CyclicBarrier barrier; // UpdaterAtomicLoop(long iters, UpdaterAtomicInteger obj, CyclicBarrier b) { // this.iters = iters; // this.obj = obj; // this.barrier = b; // obj.set(rng.next()); // } // // public void run() { // try { // barrier.await(); // long i = iters; // int y = 0; // int succ = 0; // while (i > 0) { // for (int k = 0; k < innerPerOuter; ++k) { // int x = obj.get(); // int z = y + LoopHelpers.compute6(x); // if (obj.compareAndSet(x, z)) // ++succ; // y = LoopHelpers.compute7(z); // } // i -= innerPerOuter; // } // sum.getAndAdd(obj.get()); // successes.getAndAdd(succ); // barrier.await(); // } // catch (Exception ie) { // return; // } // } // } static final class VolatileLoop implements Runnable { final long iters; final VolatileInteger obj; final CyclicBarrier barrier; VolatileLoop(long iters, VolatileInteger obj, CyclicBarrier b) { this.iters = iters; this.obj = obj; this.barrier = b; obj.set(rng.next()); } public void run() { try { barrier.await(); long i = iters; int y = 0; int succ = 0; while (i > 0) { for (int k = 0; k < innerPerOuter; ++k) { int x = obj.get(); int z = y + LoopHelpers.compute6(x); if (obj.compareAndSet(x, z)) ++succ; y = LoopHelpers.compute7(z); } i -= innerPerOuter; } sum.getAndAdd(obj.get()); successes.getAndAdd(succ); barrier.await(); } catch (Exception ie) { return; } } } static final class SynchedLoop implements Runnable { final long iters; final SynchedInteger obj; final CyclicBarrier barrier; SynchedLoop(long iters, SynchedInteger obj, CyclicBarrier b) { this.iters = iters; this.obj = obj; this.barrier = b; obj.set(rng.next()); } public void run() { try { barrier.await(); long i = iters; int y = 0; int succ = 0; while (i > 0) { for (int k = 0; k < innerPerOuter; ++k) { int x = obj.get(); int z = y + LoopHelpers.compute6(x); if (obj.compareAndSet(x, z)) ++succ; y = LoopHelpers.compute7(z); } i -= innerPerOuter; } sum.getAndAdd(obj.get()); successes.getAndAdd(succ); barrier.await(); } catch (Exception ie) { return; } } } static final class LockedLoop implements Runnable { final long iters; final LockedInteger obj; final CyclicBarrier barrier; LockedLoop(long iters, LockedInteger obj, CyclicBarrier b) { this.iters = iters; this.obj = obj; this.barrier = b; obj.set(rng.next()); } public void run() { try { barrier.await(); long i = iters; int y = 0; int succ = 0; while (i > 0) { for (int k = 0; k < innerPerOuter; ++k) { int x = obj.get(); int z = y + LoopHelpers.compute6(x); if (obj.compareAndSet(x, z)) ++succ; y = LoopHelpers.compute7(z); } i -= innerPerOuter; } sum.getAndAdd(obj.get()); successes.getAndAdd(succ); barrier.await(); } catch (Exception ie) { return; } } } static final int loopsPerTimeCheck = 2048; static final class NACalibrationLoop implements Runnable { final long endTime; final NonAtomicInteger obj; final CyclicBarrier barrier; NACalibrationLoop(long endTime, NonAtomicInteger obj, CyclicBarrier b) { this.endTime = endTime; this.obj = obj; this.barrier = b; obj.set(rng.next()); } public void run() { try { barrier.await(); long iters = 0; int y = 0; int succ = 0; do { int i = loopsPerTimeCheck; while (i > 0) { for (int k = 0; k < innerPerOuter; ++k) { int x = obj.get(); int z = y + LoopHelpers.compute6(x); if (obj.compareAndSet(x, z)) ++succ; y = LoopHelpers.compute7(z); } i -= innerPerOuter; } iters += loopsPerTimeCheck; } while (System.currentTimeMillis() < endTime); totalIters.getAndAdd(iters); sum.getAndAdd(obj.get()); successes.getAndAdd(succ); barrier.await(); } catch (Exception ie) { return; } } } static void runCalibration(int n, long nms) throws Exception { long now = System.currentTimeMillis(); long endTime = now + nms; CyclicBarrier b = new CyclicBarrier(n+1); totalIters.set(0); NonAtomicInteger a = new NonAtomicInteger(); for (int j = 0; j < n; ++j) new Thread(new NACalibrationLoop(endTime, a, b)).start(); b.await(); b.await(); long ipt = totalIters.get() / n; if (ipt > loopIters[n]) loopIters[n] = ipt; if (sum.get() == 0) System.out.print(" "); } static long runNonAtomic(int n, long iters) throws Exception { LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier b = new CyclicBarrier(n+1, timer); NonAtomicInteger a = new NonAtomicInteger(); for (int j = 0; j < n; ++j) new Thread(new NonAtomicLoop(iters, a, b)).start(); b.await(); b.await(); if (sum.get() == 0) System.out.print(" "); return timer.getTime(); } // static long runUpdaterAtomic(int n, long iters) throws Exception { // LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); // CyclicBarrier b = new CyclicBarrier(n+1, timer); // UpdaterAtomicInteger a = new UpdaterAtomicInteger(); // for (int j = 0; j < n; ++j) // new Thread(new UpdaterAtomicLoop(iters, a, b)).start(); // b.await(); // b.await(); // if (sum.get() == 0) System.out.print(" "); // return timer.getTime(); // } // static long runAtomic(int n, long iters) throws Exception { LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier b = new CyclicBarrier(n+1, timer); AtomicInteger a = new AtomicInteger(); for (int j = 0; j < n; ++j) new Thread(new AtomicLoop(iters, a, b)).start(); b.await(); b.await(); if (sum.get() == 0) System.out.print(" "); return timer.getTime(); } static long runVolatile(int n, long iters) throws Exception { LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier b = new CyclicBarrier(n+1, timer); VolatileInteger a = new VolatileInteger(); for (int j = 0; j < n; ++j) new Thread(new VolatileLoop(iters, a, b)).start(); b.await(); b.await(); if (sum.get() == 0) System.out.print(" "); return timer.getTime(); } static long runSynched(int n, long iters) throws Exception { LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier b = new CyclicBarrier(n+1, timer); SynchedInteger a = new SynchedInteger(); for (int j = 0; j < n; ++j) new Thread(new SynchedLoop(iters, a, b)).start(); b.await(); b.await(); if (sum.get() == 0) System.out.print(" "); return timer.getTime(); } static long runLocked(int n, long iters) throws Exception { LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier b = new CyclicBarrier(n+1, timer); LockedInteger a = new LockedInteger(); for (int j = 0; j < n; ++j) new Thread(new LockedLoop(iters, a, b)).start(); b.await(); b.await(); if (sum.get() == 0) System.out.print(" "); return timer.getTime(); } static void report(String tag, long runtime, long basetime, int nthreads, long iters) { System.out.print(tag); long t = (runtime - basetime) / iters; if (nthreads > NCPUS) t = t * NCPUS / nthreads; System.out.print(LoopHelpers.rightJustify(t)); double secs = (double)(runtime) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } static void oneRun(int i, long iters, boolean print) throws Exception { if (print) System.out.println("threads : " + i + " base iters per thread per run : " + LoopHelpers.rightJustify(loopIters[i])); long ntime = runNonAtomic(i, iters); if (print) report("Base : ", ntime, ntime, i, iters); Thread.sleep(100L); long atime = runAtomic(i, iters); if (print) report("Atomic CAS : ", atime, ntime, i, iters); Thread.sleep(100L); // long gtime = runUpdaterAtomic(i, iters); // if (print) // report("Updater CAS : ", gtime, ntime, i, iters); // Thread.sleep(100L); long vtime = runVolatile(i, iters); if (print) report("Volatile : ", vtime, ntime, i, iters); Thread.sleep(100L); if (!includeLocks) return; long mtime = runLocked(i, iters); if (print) report("Mutex : ", mtime, ntime, i, iters); Thread.sleep(100L); long stime = runSynched(i, iters); if (print) report("Synchronized: ", stime, ntime, i, iters); Thread.sleep(100L); } } backport-util-concurrent-3.1-src/test/loops/src/MapLoops.java0000644001750700037720000001452610346121124023207 0ustar dawidkdcl/* * @test * @synopsis Exercise multithreaded maps, by default * ConcurrentHashMap. Each thread does a random walk though elements * of "key" array. On each iteration, it checks if table includes key. * If absent, with probablility pinsert it inserts it, and if present, * with probablility premove it removes it. (pinsert and premove are * expressed as percentages to simplify parsing from command line.) */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import java.util.Map; import java.util.Random; public class MapLoops { static int nkeys = 1000; static int pinsert = 60; static int premove = 2; static int maxThreads = 100; static int nops = 1000000; static int removesPerMaxRandom; static int insertsPerMaxRandom; static final ExecutorService pool = Executors.newCachedThreadPool(); public static void main(String[] args) throws Exception { Class mapClass = null; if (args.length > 0) { try { mapClass = Class.forName(args[0]); } catch(ClassNotFoundException e) { throw new RuntimeException("Class " + args[0] + " not found."); } } else mapClass = edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap.class; if (args.length > 1) maxThreads = Integer.parseInt(args[1]); if (args.length > 2) nkeys = Integer.parseInt(args[2]); if (args.length > 3) pinsert = Integer.parseInt(args[3]); if (args.length > 4) premove = Integer.parseInt(args[4]); if (args.length > 5) nops = Integer.parseInt(args[5]); // normalize probabilities wrt random number generator removesPerMaxRandom = (int)(((double)premove/100.0 * 0x7FFFFFFFL)); insertsPerMaxRandom = (int)(((double)pinsert/100.0 * 0x7FFFFFFFL)); System.out.print("Class: " + mapClass.getName()); System.out.print(" threads: " + maxThreads); System.out.print(" size: " + nkeys); System.out.print(" ins: " + pinsert); System.out.print(" rem: " + premove); System.out.print(" ops: " + nops); System.out.println(); int k = 1; int warmups = 2; for (int i = 1; i <= maxThreads;) { Thread.sleep(100); test(i, nkeys, mapClass); if (warmups > 0) --warmups; else if (i == k) { k = i << 1; i = i + (i >>> 1); } else if (i == 1 && k == 2) { i = k; warmups = 1; } else i = k; } pool.shutdown(); } static Integer[] makeKeys(int n) { LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); Integer[] key = new Integer[n]; for (int i = 0; i < key.length; ++i) key[i] = new Integer(rng.next()); return key; } static void shuffleKeys(Integer[] key) { Random rng = new Random(); for (int i = key.length; i > 1; --i) { int j = rng.nextInt(i); Integer tmp = key[j]; key[j] = key[i-1]; key[i-1] = tmp; } } static void test(int i, int nkeys, Class mapClass) throws Exception { System.out.print("Threads: " + i + "\t:"); Map map = (Map)mapClass.newInstance(); Integer[] key = makeKeys(nkeys); // Uncomment to start with a non-empty table // for (int j = 0; j < nkeys; j += 4) // start 1/4 occupied // map.put(key[j], key[j]); shuffleKeys(key); LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier = new CyclicBarrier(i+1, timer); for (int t = 0; t < i; ++t) pool.execute(new Runner(t, map, key, barrier)); barrier.await(); barrier.await(); long time = timer.getTime(); long tpo = time / (i * (long)nops); System.out.print(LoopHelpers.rightJustify(tpo) + " ns per op"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); map.clear(); } static class Runner implements Runnable { final Map map; final Integer[] key; final LoopHelpers.SimpleRandom rng; final CyclicBarrier barrier; int position; int total; Runner(int id, Map map, Integer[] key, CyclicBarrier barrier) { this.map = map; this.key = key; this.barrier = barrier; position = key.length / 2; rng = new LoopHelpers.SimpleRandom((id + 1) * 8862213513L); rng.next(); } int step() { // random-walk around key positions, bunching accesses int r = rng.next(); position += (r & 7) - 3; while (position >= key.length) position -= key.length; while (position < 0) position += key.length; Integer k = key[position]; Integer x = (Integer)map.get(k); if (x != null) { if (x.intValue() != k.intValue()) throw new Error("bad mapping: " + x + " to " + k); if (r < removesPerMaxRandom) { if (map.remove(k) != null) { position = total % key.length; // move from position return 2; } } } else if (r < insertsPerMaxRandom) { ++position; map.put(k, k); return 2; } // Uncomment to add a little computation between accesses // total += LoopHelpers.compute1(k.intValue()); total += r; return 1; } public void run() { try { barrier.await(); int ops = nops; while (ops > 0) ops -= step(); barrier.await(); } catch (Exception ex) { ex.printStackTrace(); } } } } backport-util-concurrent-3.1-src/test/loops/src/SCollection.java0000644001750700037720000000547710346121124023700 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import java.util.Collection; import java.util.Iterator; import java.util.ArrayList; /** * This is an incomplete implementation of a wrapper class * that places read-write locks around unsynchronized Collections. * Exists as a sample input for CollectionLoops test. */ public final class SCollection implements Collection { private final Collection c; private final ReentrantLock l = new ReentrantLock(); public SCollection(Collection c) { if (c == null) throw new NullPointerException(); this.c = c; } public SCollection() { this(new ArrayList()); } public final int size() { l.lock(); try {return c.size();} finally { l.unlock(); } } public final boolean isEmpty(){ l.lock(); try {return c.isEmpty();} finally { l.unlock(); } } public final boolean contains(Object o) { l.lock(); try {return c.contains(o);} finally { l.unlock(); } } public final boolean equals(Object o) { l.lock(); try {return c.equals(o);} finally { l.unlock(); } } public final int hashCode() { l.lock(); try {return c.hashCode();} finally { l.unlock(); } } public final String toString() { l.lock(); try {return c.toString();} finally { l.unlock(); } } public final Iterator iterator() { l.lock(); try {return c.iterator();} finally { l.unlock(); } } public final Object[] toArray() { l.lock(); try {return c.toArray();} finally { l.unlock(); } } public final Object[] toArray(Object[] a) { l.lock(); try {return c.toArray(a);} finally { l.unlock(); } } public final boolean add(Object e) { l.lock(); try {return c.add(e);} finally { l.unlock(); } } public final boolean remove(Object o) { l.lock(); try {return c.remove(o);} finally { l.unlock(); } } public final boolean containsAll(Collection coll) { l.lock(); try {return c.containsAll(coll);} finally { l.unlock(); } } public final boolean addAll(Collection coll) { l.lock(); try {return c.addAll(coll);} finally { l.unlock(); } } public final boolean removeAll(Collection coll) { l.lock(); try {return c.removeAll(coll);} finally { l.unlock(); } } public final boolean retainAll(Collection coll) { l.lock(); try {return c.retainAll(coll);} finally { l.unlock(); } } public final void clear() { l.lock(); try {c.clear();} finally { l.unlock(); } } } backport-util-concurrent-3.1-src/test/loops/src/SMap.java0000644001750700037720000000417410256105111022311 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import java.util.Map; import java.util.Set; import java.util.Collection; /** * This is an incomplete implementation of a wrapper class * that places read-write locks around unsynchronized Maps. * Exists as a sample input for MapLoops test. */ public class SMap implements Map { private final Map m; public SMap(Map m) { if (m == null) throw new NullPointerException(); this.m = m; } public SMap() { this(new TreeMap()); // use TreeMap by default } public synchronized int size() { return m.size(); } public synchronized boolean isEmpty(){ return m.isEmpty(); } public synchronized Object get(Object key) { return m.get(key); } public synchronized boolean containsKey(Object key) { return m.containsKey(key); } public synchronized boolean containsValue(Object value){ return m.containsValue(value); } public synchronized Set keySet() { // Not implemented return m.keySet(); } public synchronized Set entrySet() { // Not implemented return m.entrySet(); } public synchronized Collection values() { // Not implemented return m.values(); } public synchronized boolean equals(Object o) { return m.equals(o); } public synchronized int hashCode() { return m.hashCode(); } public synchronized String toString() { return m.toString(); } public synchronized Object put(Object key, Object value) { return m.put(key, value); } public synchronized Object remove(Object key) { return m.remove(key); } public synchronized void putAll(Map map) { m.putAll(map); } public synchronized void clear() { m.clear(); } } backport-util-concurrent-3.1-src/test/loops/src/SimpleLoops.java0000644001750700037720000000636110253737131023731 0ustar dawidkdcl/* * @test * @synopsis multiple threads using a single lock */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class SimpleLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int iters = 10000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); print = true; int k = 1; for (int i = 1; i <= maxThreads;) { System.out.print("Threads: " + 1); new Loop(1).test(); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static final class Loop implements Runnable { private int v = rng.next(); private volatile int result = 17; private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; private volatile int readBarrier; Loop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); if (print) { long time = timer.getTime(); long tpi = time / ((long)iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { try { barrier.await(); int sum = v + 1; int x = 0; int n = iters; while (n-- > 0) { int k = (sum & 3); if (k > 0) { x = v; while (k-- > 0) x = LoopHelpers.compute1(x); v = x; } else x = sum + 1; if ((x += readBarrier) == 0) ++readBarrier; for (int l = x & 7; l > 0; --l) sum += LoopHelpers.compute1(sum); } barrier.await(); result += sum; } catch (Exception ie) { return; } } } } backport-util-concurrent-3.1-src/test/loops/src/RLMap.java0000644001750700037720000000445610256105111022427 0ustar dawidkdclimport edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import java.util.Map; import java.util.Set; import java.util.Collection; /** * This is an incomplete implementation of a wrapper class * that places read-write locks around unsynchronized Maps. * Exists as a sample input for MapLoops test. */ public class RLMap implements Map { private final Map m; private final ReentrantLock rl = new ReentrantLock(); public RLMap(Map m) { if (m == null) throw new NullPointerException(); this.m = m; } public RLMap() { this(new TreeMap()); // use TreeMap by default } public int size() { rl.lock(); try {return m.size();} finally { rl.unlock(); } } public boolean isEmpty(){ rl.lock(); try {return m.isEmpty();} finally { rl.unlock(); } } public Object get(Object key) { rl.lock(); try {return m.get(key);} finally { rl.unlock(); } } public boolean containsKey(Object key) { rl.lock(); try {return m.containsKey(key);} finally { rl.unlock(); } } public boolean containsValue(Object value){ rl.lock(); try {return m.containsValue(value);} finally { rl.unlock(); } } public Set keySet() { // Not implemented return m.keySet(); } public Set entrySet() { // Not implemented return m.entrySet(); } public Collection values() { // Not implemented return m.values(); } public boolean equals(Object o) { rl.lock(); try {return m.equals(o);} finally { rl.unlock(); } } public int hashCode() { rl.lock(); try {return m.hashCode();} finally { rl.unlock(); } } public String toString() { rl.lock(); try {return m.toString();} finally { rl.unlock(); } } public Object put(Object key, Object value) { rl.lock(); try {return m.put(key, value);} finally { rl.unlock(); } } public Object remove(Object key) { rl.lock(); try {return m.remove(key);} finally { rl.unlock(); } } public void putAll(Map map) { rl.lock(); try {m.putAll(map);} finally { rl.unlock(); } } public void clear() { rl.lock(); try {m.clear();} finally { rl.unlock(); } } } backport-util-concurrent-3.1-src/test/loops/src/CountedMapLoops.java0000644001750700037720000001501010431260156024522 0ustar dawidkdcl/* * @test * @synopsis Exercise multithreaded maps, byt default ConcurrentHashMap * Multithreaded hash table test. Each thread does a random walk * though elements of "key" array. On each iteration, it checks if * table includes key. If absent, with probablility pinsert it * inserts it, and if present, with probablility premove it removes * it. (pinsert and premove are expressed as percentages to simplify * parsing from command line.) */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import java.util.Map; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; public class CountedMapLoops { static int nkeys = 100000; static int pinsert = 60; static int premove = 2; static int maxThreads = 100; static int nops = 2000000; static int removesPerMaxRandom; static int insertsPerMaxRandom; static final ExecutorService pool = Executors.newCachedThreadPool(); public static void main(String[] args) throws Exception { Class mapClass = null; if (args.length > 0) { try { mapClass = Class.forName(args[0]); } catch(ClassNotFoundException e) { throw new RuntimeException("Class " + args[0] + " not found."); } } else mapClass = edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap.class; if (args.length > 1) maxThreads = Integer.parseInt(args[1]); if (args.length > 2) nkeys = Integer.parseInt(args[2]); if (args.length > 3) pinsert = Integer.parseInt(args[3]); if (args.length > 4) premove = Integer.parseInt(args[4]); if (args.length > 5) nops = Integer.parseInt(args[5]); // normalize probabilities wrt random number generator removesPerMaxRandom = (int)(((double)premove/100.0 * 0x7FFFFFFFL)); insertsPerMaxRandom = (int)(((double)pinsert/100.0 * 0x7FFFFFFFL)); System.out.print("Class: " + mapClass.getName()); System.out.print(" threads: " + maxThreads); System.out.print(" size: " + nkeys); System.out.print(" ins: " + pinsert); System.out.print(" rem: " + premove); System.out.print(" ops: " + nops); System.out.println(); final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); Integer[] key = new Integer[nkeys]; for (int i = 0; i < key.length; ++i) key[i] = new Integer(rng.next()); AtomicInteger counter; // warmup System.out.println("Warmup..."); for (int k = 0; k < 2; ++k) { Map map = (Map)mapClass.newInstance(); counter = new AtomicInteger(0); LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier = new CyclicBarrier(1, timer); new Runner(map, key, barrier, counter).run(); int size = map.size(); if (size != counter.get()) throw new Error(); map.clear(); map = null; Thread.sleep(100); } System.gc(); int k = 1; for (int i = 1; i <= maxThreads;) { System.out.print("Threads: " + i + "\t:"); Map map = (Map)mapClass.newInstance(); counter = new AtomicInteger(0); LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier = new CyclicBarrier(i+1, timer); for (int t = 0; t < i; ++t) pool.execute(new Runner(map, key, barrier, counter)); barrier.await(); barrier.await(); long time = timer.getTime(); long tpo = time / (i * (long)nops); System.out.print(LoopHelpers.rightJustify(tpo) + " ns per op"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); int size = map.size(); if (size != counter.get()) throw new Error(); map.clear(); map = null; // System.gc(); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static class Runner implements Runnable { final Map map; final Integer[] key; final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); final CyclicBarrier barrier; final AtomicInteger counter; int position; int total; Runner(Map map, Integer[] key, CyclicBarrier barrier, AtomicInteger counter) { this.map = map; this.key = key; this.barrier = barrier; this.counter = counter; position = key.length / 2; } int step() { // random-walk around key positions, bunching accesses int r = rng.next(); position += (r & 7) - 3; while (position >= key.length) position -= key.length; while (position < 0) position += key.length; Integer k = key[position]; Integer x = (Integer)map.get(k); if (x != null) { // if (x.intValue() != k.intValue()) // throw new Error("bad mapping: " + x + " to " + k); if (r < removesPerMaxRandom) { if (map.remove(k) != null) { counter.getAndDecrement(); position = total % key.length; // move from position return 2; } } } else if (r < insertsPerMaxRandom) { if (map.put(k, k) == null) counter.getAndIncrement(); return 2; } // total += LoopHelpers.compute1(k.intValue()); total += r; return 1; } public void run() { try { barrier.await(); int ops = nops; while (ops > 0) ops -= step(); barrier.await(); } catch (Exception ex) { ex.printStackTrace(); } } } } backport-util-concurrent-3.1-src/test/loops/src/ConcurrentHashSet.java0000644001750700037720000000442210431260156025055 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ // A set wrapper over CHM for testing import java.util.AbstractSet; import java.util.Collection; import java.util.Iterator; import java.util.Set; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.io.*; public class ConcurrentHashSet extends AbstractSet implements Set, Serializable { private final ConcurrentHashMap m; // The backing map private transient Set keySet; // Its keySet public ConcurrentHashSet() { m = new ConcurrentHashMap(); keySet = m.keySet(); } public ConcurrentHashSet(int initialCapacity) { m = new ConcurrentHashMap(initialCapacity); keySet = m.keySet(); } public ConcurrentHashSet(int initialCapacity, float loadFactor, int concurrencyLevel) { m = new ConcurrentHashMap(initialCapacity, loadFactor, concurrencyLevel); keySet = m.keySet(); } public int size() { return m.size(); } public boolean isEmpty() { return m.isEmpty(); } public boolean contains(Object o) { return m.containsKey(o); } public Iterator iterator() { return keySet.iterator(); } public Object[] toArray() { return keySet.toArray(); } public Object[] toArray(Object[] a) { return keySet.toArray(a); } public boolean add(Object e) { return m.put(e, Boolean.TRUE) == null; } public boolean remove(Object o) { return m.remove(o) != null; } public boolean removeAll(Collection c) { return keySet.removeAll(c); } public boolean retainAll(Collection c) { return keySet.retainAll(c); } public void clear() { m.clear(); } public boolean equals(Object o) { return keySet.equals(o); } public int hashCode() { return keySet.hashCode(); } private static final long serialVersionUID = 2454657854757543876L; private void readObject(java.io.ObjectInputStream s) throws IOException, ClassNotFoundException { s.defaultReadObject(); keySet = m.keySet(); } } backport-util-concurrent-3.1-src/test/loops/src/IteratorLoops.java0000644001750700037720000000725610431777323024302 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; import java.util.Collection; import java.util.Iterator; import java.util.ArrayList; /** * Estimates time per iteration of collection iterators. Preloads * most elements, but adds about 1/8 of them dynamically to preclude * overly clever optimizations. The array of collections has * approximately exponentially different lengths, so check both short * and long iterators. Reports include times for adds and other * checks, so overestimate times per iteration. */ public final class IteratorLoops { static final int DEFAULT_SIZE = 16384; static final int DEFAULT_TRIALS = 4; static final int NC = 16; // number of collections must be power of 2 static volatile long mismatches = 0; static int randomSeed = 3122688; public static void main(String[] args) throws Exception { Class klass = Class.forName(args[0]); int n = (args.length <= 1)? DEFAULT_SIZE : Integer.parseInt(args[1]); int t = (args.length <= 2)? DEFAULT_TRIALS : Integer.parseInt(args[2]); System.out.print("Class: " + klass.getName()); System.out.print(" ~iters: " + (long)n * (long)n); System.out.print(" trials: " + t); System.out.println(); Collection[] colls = (Collection[])new Collection[NC]; for (int k = 0; k < colls.length; ++k) colls[k] = (Collection)klass.newInstance(); for (int i = 0; i < t; ++i) new IteratorLoops(colls).oneRun(n); if (mismatches != 0) throw new Error("Bad checksum :" + mismatches); } private int elementCount; private final Collection[] cs; IteratorLoops(Collection[] colls) { cs = colls; elementCount = 0; } void oneRun(int n) { preload(n); long startTime = Utils.nanoTime(); long count = traversals(n); double elapsed = (double)(Utils.nanoTime() - startTime); double npi = elapsed / count; double secs = elapsed / 1000000000; System.out.print("" + npi + " ns/iter " + secs + "s run time\n"); } long traversals(int n) { long count = 0; long check = 0; for (int i = 0; i < n; i++) { check += elementCount; count += counts(); maybeAdd(); } if (count != check) mismatches = count; return count; } int counts() { int count = 0; for (int k = 0; k < cs.length; ++k) { for (Iterator it = cs[k].iterator(); it.hasNext();) { if (it.next() != null) ++count; } } return count; } void maybeAdd() { int r = randomSeed; r ^= r << 6; r ^= r >>> 21; r ^= r << 7; randomSeed = r; if ((r >>> 29) == 0) cs[r & (cs.length-1)].add(new Integer(elementCount++)); } void preload(int n) { for (int i = 0; i < cs.length; ++i) cs[i].clear(); int k = (n - n / 8) / 2; ArrayList al = new ArrayList(k+1); for (int i = 0; i < cs.length; ++i) { if (k > 0) { for (int j = 0; j < k; ++j) al.add(new Integer(elementCount++)); cs[i].addAll(al); al.clear(); } k >>>= 1; } // let GC settle down try { Thread.sleep(500); } catch(Exception ex) { return; } } } backport-util-concurrent-3.1-src/test/loops/src/ConcurrentQueueLoops.java0000644001750700037720000001213710346121124025615 0ustar dawidkdcl/* * @test %I% %E% * @bug 4486658 * @compile -source 1.5 ConcurrentQueueLoops.java * @run main/timeout=230 ConcurrentQueueLoops * @summary Checks that a set of threads can repeatedly get and modify items */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; import edu.emory.mathcs.backport.java.util.Queue; import java.util.ArrayList; public class ConcurrentQueueLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static boolean print = false; static final Integer zero = new Integer(0); static final Integer one = new Integer(1); static int workMask; static final long RUN_TIME_NANOS = 5 * 1000L * 1000L * 1000L; static final int BATCH_SIZE = 8; public static void main(String[] args) throws Exception { int maxStages = 100; int work = 1024; Class klass = null; if (args.length > 0) { try { klass = Class.forName(args[0]); } catch(ClassNotFoundException e) { throw new RuntimeException("Class " + args[0] + " not found."); } } if (args.length > 1) maxStages = Integer.parseInt(args[1]); if (args.length > 2) work = Integer.parseInt(args[2]); workMask = work - 1; System.out.print("Class: " + klass.getName()); System.out.print(" stages: " + maxStages); System.out.println(" work: " + work); print = false; System.out.println("Warmup..."); // oneRun(klass, 4); // Thread.sleep(100); oneRun(klass, 1); Thread.sleep(100); print = true; int k = 1; for (int i = 1; i <= maxStages;) { oneRun(klass, i); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static final class Stage implements Callable { final Queue queue; final CyclicBarrier barrier; final int nthreads; Stage (Queue q, CyclicBarrier b, int nthreads) { queue = q; barrier = b; this.nthreads = nthreads; } static int compute(int l) { if (l == 0) return (int)Utils.nanoTime(); int nn = (l >>> 7) & workMask; while (nn-- > 0) l = LoopHelpers.compute6(l); return l; } public Object call() { try { barrier.await(); long now = Utils.nanoTime(); long stopTime = now + RUN_TIME_NANOS; int l = (int)now; int takes = 0; int misses = 0; int lmask = 1; for (;;) { l = compute(l); Integer item = (Integer)queue.poll(); if (item != null) { ++takes; if (item == one) l = LoopHelpers.compute6(l); } else if ((misses++ & 255) == 0 && Utils.nanoTime() >= stopTime) { return new Integer(takes); } else { for (int i = 0; i < BATCH_SIZE; ++i) { queue.offer(((l & lmask)== 0)? zero : one); if ((lmask <<= 1) == 0) lmask = 1; if (i != 0) l = compute(l); } } } } catch (Exception ie) { ie.printStackTrace(); throw new Error("Call loop failed"); } } } static void oneRun(Class klass, int n) throws Exception { Queue q = (Queue)klass.newInstance(); LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier = new CyclicBarrier(n + 1, timer); ArrayList results = new ArrayList(n); for (int i = 0; i < n; ++i) results.add(pool.submit(new Stage(q, barrier, n))); if (print) System.out.print("Threads: " + n + "\t:"); barrier.await(); int total = 0; for (int i = 0; i < n; ++i) { Future f = (Future)results.get(i); Integer r = (Integer)f.get(); total += r.intValue(); } long endTime = Utils.nanoTime(); long time = endTime - timer.startTime; long ips = 1000000000L * total / time; if (print) System.out.print(LoopHelpers.rightJustify(ips) + " items per sec"); if (print) System.out.println(); } } backport-util-concurrent-3.1-src/test/loops/src/CachedThreadPoolLoops.java0000644001750700037720000000704210346121124025616 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; public class CachedThreadPoolLoops { static final AtomicInteger remaining = new AtomicInteger(); static final int maxIters = 1000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); System.out.print("Warmup:"); for (int j = 0; j < 2; ++j) { int k = 1; for (int i = 1; i <= maxThreads;) { System.out.print(" " + i); oneTest(i, 10000, false); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } } System.out.println(); int k = 1; for (int i = 1; i <= maxThreads;) { System.out.println("Threads:" + i); oneTest(i, maxIters, true); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } } static void oneTest(int nThreads, int iters, boolean print) throws Exception { if (print) System.out.print("SynchronousQueue "); oneRun(new SynchronousQueue(false), nThreads, iters, print); if (print) System.out.print("SynchronousQueue(fair) "); oneRun(new SynchronousQueue(true), nThreads, iters, print); } static final class Task implements Runnable { final ThreadPoolExecutor pool; final CountDownLatch done; Task(ThreadPoolExecutor p, CountDownLatch d) { pool = p; done = d; } public void run() { done.countDown(); remaining.incrementAndGet(); int n; while (!Thread.interrupted() && (n = remaining.get()) > 0 && done.getCount() > 0) { if (remaining.compareAndSet(n, n-1)) { try { pool.execute(this); } catch (RuntimeException ex) { System.out.print("*"); while (done.getCount() > 0) done.countDown(); return; } } } } } static void oneRun(BlockingQueue q, int nThreads, int iters, boolean print) throws Exception { ThreadPoolExecutor pool = new ThreadPoolExecutor(nThreads+1, Integer.MAX_VALUE, 1L, TimeUnit.SECONDS, q); CountDownLatch done = new CountDownLatch(iters); remaining.set(nThreads-1); pool.prestartAllCoreThreads(); Task t = new Task(pool, done); long start = Utils.nanoTime(); pool.execute(t); done.await(); long time = Utils.nanoTime() - start; if (print) System.out.println("\t: " + LoopHelpers.rightJustify(time / iters) + " ns per task"); q.clear(); Thread.sleep(100); pool.shutdown(); Thread.sleep(100); pool.shutdownNow(); } } backport-util-concurrent-3.1-src/test/loops/src/LastKeyOfSubMap.java0000644001750700037720000000256410256105111024423 0ustar dawidkdcl// from bug report 5018354 import edu.emory.mathcs.backport.java.util.*; import java.util.Comparator; import java.util.SortedMap; public class LastKeyOfSubMap { private static final Comparator NULL_AT_END = new Comparator() { /** * Allows for nulls. Null is greater than anything non-null. */ public int compare(Object pObj1, Object pObj2) { if (pObj1 == null && pObj2 == null) return 0; if (pObj1 == null && pObj2 != null) return 1; if (pObj1 != null && pObj2 == null) return -1; return ((Comparable) pObj1).compareTo(pObj2); } }; public static void main(String[] pArgs) { SortedMap m1 = new TreeMap(NULL_AT_END); m1.put("a", "a"); m1.put("b", "b"); m1.put("c", "c"); m1.put(null, "d"); SortedMap m2 = new TreeMap(m1); System.out.println(m1.lastKey()); System.out.println(m1.get(m1.lastKey())); Object m1lk = m1.remove(m1.lastKey()); if (m1lk == null) throw new Error("bad remove of last key"); m2 = m2.tailMap("b"); System.out.println(m2.lastKey()); System.out.println(m2.get(m2.lastKey())); Object m2lk = m2.remove(m2.lastKey()); if (m2lk == null) throw new Error("bad remove of last key"); } } backport-util-concurrent-3.1-src/test/loops/src/SetBash.java0000644001750700037720000001113310431260156023001 0ustar dawidkdcl/* * Written by Doug Lea and Josh Bloch with assistance from members of * JCP JSR-166 Expert Group and released to the public domain, as * explained at http://creativecommons.org/licenses/publicdomain */ import java.util.Set; import java.util.Iterator; import java.util.Random; import java.util.Arrays; import java.util.Collections; public class SetBash { static Random rnd = new Random(); public static void main(String[] args) { int numItr = Integer.parseInt(args[1]); int setSize = Integer.parseInt(args[2]); Class cl = null; try { cl = Class.forName(args[0]); } catch(ClassNotFoundException e) { fail("Class " + args[0] + " not found."); } boolean synch = (args.length>3); for (int i=0; i= 2; i -= 1) { oneRun(i, warmupTime, patienceNanos); Thread.sleep(sleepTime); } for (int j = 0; j < nReps; ++j) { System.out.println("Replication " + j); for (int i = 2; i <= maxThreads; i += 2) { oneRun(i, trialMillis, patienceNanos); Thread.sleep(sleepTime); } } } static void oneRun(int nThreads, long trialMillis, long patienceNanos) throws Exception { System.out.println(nThreads + " threads"); System.out.println(trialMillis + "ms"); final CountDownLatch start = new CountDownLatch(1); Exchanger x = new Exchanger(); Runner[] runners = new Runner[nThreads]; Thread[] threads = new Thread[nThreads]; for (int i = 0; i < nThreads; ++i) { runners[i] = new Runner(x, patienceNanos, start); threads[i] = new Thread(runners[i]); threads[i].start(); } long startTime = Utils.nanoTime(); start.countDown(); Thread.sleep(trialMillis); for (int i = 0; i < nThreads; ++i) threads[i].interrupt(); long elapsed = Utils.nanoTime() - startTime; for (int i = 0; i < nThreads; ++i) threads[i].join(); int iters = 0; long fails = 0; for (int i = 0; i < nThreads; ++i) { iters += runners[i].iters; fails += runners[i].failures; } if (iters <= 0) iters = 1; long rate = iters * 1000L * 1000L * 1000L / elapsed; long npt = elapsed / iters; double failRate = (fails * 100.0) / (double)iters; System.out.println(rate + " it/s "); System.out.println(npt + " ns/it"); System.out.println(failRate + " fails"); System.out.println(); // x.printStats(); } static final class Runner implements Runnable { final Exchanger exchanger; final CountDownLatch start; final long patience; volatile int iters; volatile int failures; Runner(Exchanger x, long patience, CountDownLatch start) { this.exchanger = x; this.patience = patience; this.start = start; } public void run() { int i = 0; try { Exchanger x = exchanger; Object m = new Integer(17); long p = patience; start.await(); for (;;) { try { Object e = x.exchange(m, p, TimeUnit.NANOSECONDS); if (e == null || e == m) throw new Error(); m = e; ++i; } catch (TimeoutException to) { if (Thread.interrupted()) { iters = i; return; } ++i; ++failures; } } } catch (InterruptedException ie) { iters = i; } } } } backport-util-concurrent-3.1-src/test/loops/src/ProducerConsumerLoops.java0000644001750700037720000001203210253737131025767 0ustar dawidkdcl/* * @test * @synopsis multiple producers and consumers using blocking queues */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; public class ProducerConsumerLoops { static final int CAPACITY = 100; static final ExecutorService pool = Executors.newCachedThreadPool(); static boolean print = false; static int producerSum; static int consumerSum; static synchronized void addProducerSum(int x) { producerSum += x; } static synchronized void addConsumerSum(int x) { consumerSum += x; } static synchronized void checkSum() { if (producerSum != consumerSum) throw new Error("CheckSum mismatch"); } public static void main(String[] args) throws Exception { int maxPairs = 100; int iters = 100000; if (args.length > 0) maxPairs = Integer.parseInt(args[0]); print = false; System.out.println("Warmup..."); oneTest(1, 10000); Thread.sleep(100); oneTest(2, 10000); Thread.sleep(100); oneTest(2, 10000); Thread.sleep(100); print = true; int k = 1; for (int i = 1; i <= maxPairs;) { System.out.println("Pairs:" + i); oneTest(i, iters); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static void oneTest(int pairs, int iters) throws Exception { int fairIters = iters/20; if (print) System.out.print("ArrayBlockingQueue "); oneRun(new ArrayBlockingQueue(CAPACITY), pairs, iters); if (print) System.out.print("LinkedBlockingQueue "); oneRun(new LinkedBlockingQueue(CAPACITY), pairs, iters); if (print) System.out.print("LinkedBlockingDeque "); oneRun(new LinkedBlockingDeque(CAPACITY), pairs, iters); if (print) System.out.print("SynchronousQueue "); oneRun(new SynchronousQueue(), pairs, iters); if (print) System.out.print("SynchronousQueue(fair) "); oneRun(new SynchronousQueue(true), pairs, fairIters); if (print) System.out.print("PriorityBlockingQueue "); oneRun(new PriorityBlockingQueue(), pairs, fairIters); if (print) System.out.print("ArrayBlockingQueue(fair)"); oneRun(new ArrayBlockingQueue(CAPACITY, true), pairs, fairIters); } static abstract class Stage implements Runnable { final int iters; final BlockingQueue queue; final CyclicBarrier barrier; Stage (BlockingQueue q, CyclicBarrier b, int iters) { queue = q; barrier = b; this.iters = iters; } } static class Producer extends Stage { Producer(BlockingQueue q, CyclicBarrier b, int iters) { super(q, b, iters); } public void run() { try { barrier.await(); int s = 0; int l = hashCode(); for (int i = 0; i < iters; ++i) { l = LoopHelpers.compute4(l); queue.put(new Integer(l)); s += LoopHelpers.compute4(l); } addProducerSum(s); barrier.await(); } catch (Exception ie) { ie.printStackTrace(); return; } } } static class Consumer extends Stage { Consumer(BlockingQueue q, CyclicBarrier b, int iters) { super(q, b, iters); } public void run() { try { barrier.await(); int l = 0; int s = 0; for (int i = 0; i < iters; ++i) { l = LoopHelpers.compute4(((Integer)queue.take()).intValue()); s += l; } addConsumerSum(s); barrier.await(); } catch (Exception ie) { ie.printStackTrace(); return; } } } static void oneRun(BlockingQueue q, int npairs, int iters) throws Exception { LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier = new CyclicBarrier(npairs * 2 + 1, timer); for (int i = 0; i < npairs; ++i) { pool.execute(new Producer(q, barrier, iters)); pool.execute(new Consumer(q, barrier, iters)); } barrier.await(); barrier.await(); long time = timer.getTime(); checkSum(); if (print) System.out.println("\t: " + LoopHelpers.rightJustify(time / (iters * npairs)) + " ns per transfer"); } } backport-util-concurrent-3.1-src/test/loops/src/CheckedLockLoops.java0000644001750700037720000003252110253737131024634 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ /* * @test * @summary basic safety and liveness of ReentrantLocks, and other locks based on them */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class CheckedLockLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static boolean doBuiltin = true; public static void main(String[] args) throws Exception { int maxThreads = 100; int iters = 2000000; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); rng.setSeed(3122688L); warmup(iters); runTest(maxThreads, iters); pool.shutdown(); } static void runTest(int maxThreads, int iters) throws Exception { print = true; int k = 1; for (int i = 1; i <= maxThreads;) { System.out.println("Threads:" + i); oneTest(i, iters / i); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } } static void warmup(int iters) throws Exception { print = false; System.out.println("Warmup..."); oneTest(1, iters); oneTest(2, iters / 2); } static void oneTest(int nthreads, int iters) throws Exception { int fairIters = (nthreads <= 1)? iters : iters/20; int v = rng.next(); if (print) System.out.print("NoLock (1 thread) "); new NoLockLoop().test(v, 1, iters * nthreads); Thread.sleep(10); if (print) System.out.print("ReentrantLock "); new ReentrantLockLoop().test(v, nthreads, iters); Thread.sleep(10); if (print) System.out.print("FairReentrantLock "); new FairReentrantLockLoop().test(v, nthreads, fairIters); Thread.sleep(10); if (doBuiltin) { if (print) System.out.print("builtin lock "); new BuiltinLockLoop().test(v, nthreads, fairIters); Thread.sleep(10); } // if (print) // System.out.print("Mutex "); // new MutexLoop().test(v, nthreads, iters); // Thread.sleep(10); // // if (print) // System.out.print("LongMutex "); // new LongMutexLoop().test(v, nthreads, iters); // Thread.sleep(10); // if (print) System.out.print("Semaphore "); new SemaphoreLoop().test(v, nthreads, iters); Thread.sleep(10); if (print) System.out.print("FairSemaphore "); new FairSemaphoreLoop().test(v, nthreads, fairIters); Thread.sleep(10); if (print) System.out.print("ReentrantWriteLock "); new ReentrantWriteLockLoop().test(v, nthreads, iters); Thread.sleep(10); // if (print) // System.out.print("FairRWriteLock "); // new FairReentrantWriteLockLoop().test(v, nthreads, fairIters); // Thread.sleep(10); // if (print) System.out.print("ReentrantReadWriteLock"); new ReentrantReadWriteLockLoop().test(v, nthreads, iters); Thread.sleep(10); // if (print) // System.out.print("FairRReadWriteLock "); // new FairReentrantReadWriteLockLoop().test(v, nthreads, fairIters); // Thread.sleep(10); } static abstract class LockLoop implements Runnable { int value; int checkValue; int iters; volatile int result; volatile int failures; final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier; final int setValue(int v) { checkValue = v ^ 0x55555555; value = v; return v; } final int getValue() { int v = value; if (checkValue != ~(v ^ 0xAAAAAAAA)) ++failures; return v; } final void test(int initialValue, int nthreads, int iters) throws Exception { setValue(initialValue); this.iters = iters; barrier = new CyclicBarrier(nthreads+1, timer); for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); long time = timer.getTime(); if (print) { long tpi = time / (iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per update"); System.out.println(); } if (result == 0) // avoid overoptimization System.out.println("useless result: " + result); if (failures != 0) throw new Error("lock protection failure"); } abstract int loop(int n); public final void run() { try { barrier.await(); result += loop(iters); barrier.await(); } catch (Exception ie) { return; } } } private static class NoLockLoop extends LockLoop { private volatile int readBarrier; final int loop(int n) { int sum = 0; int x = 0;; while (n-- > 0) { int r1 = readBarrier; x = setValue(LoopHelpers.compute1(getValue())); int r2 = readBarrier; if (r1 == r2 && x == r1) ++readBarrier; sum += LoopHelpers.compute2(x); } return sum; } } private static class BuiltinLockLoop extends LockLoop { final int loop(int n) { int sum = 0; int x = 0;; while (n-- > 0) { synchronized(this) { x = setValue(LoopHelpers.compute1(getValue())); } sum += LoopHelpers.compute2(x); } return sum; } } private static class ReentrantLockLoop extends LockLoop { final private ReentrantLock lock = new ReentrantLock(); final int loop(int n) { final ReentrantLock lock = this.lock; int sum = 0; int x = 0; while (n-- > 0) { lock.lock(); try { x = setValue(LoopHelpers.compute1(getValue())); } finally { lock.unlock(); } sum += LoopHelpers.compute2(x); } return sum; } } // private static class MutexLoop extends LockLoop { // final private Mutex lock = new Mutex(); // final int loop(int n) { // final Mutex lock = this.lock; // int sum = 0; // int x = 0; // while (n-- > 0) { // lock.lock(); // try { // x = setValue(LoopHelpers.compute1(getValue())); // } // finally { // lock.unlock(); // } // sum += LoopHelpers.compute2(x); // } // return sum; // } // } // // private static class LongMutexLoop extends LockLoop { // final private LongMutex lock = new LongMutex(); // final int loop(int n) { // final LongMutex lock = this.lock; // int sum = 0; // int x = 0; // while (n-- > 0) { // lock.lock(); // try { // x = setValue(LoopHelpers.compute1(getValue())); // } // finally { // lock.unlock(); // } // sum += LoopHelpers.compute2(x); // } // return sum; // } // } // private static class FairReentrantLockLoop extends LockLoop { final private ReentrantLock lock = new ReentrantLock(true); final int loop(int n) { final ReentrantLock lock = this.lock; int sum = 0; int x = 0; while (n-- > 0) { lock.lock(); try { x = setValue(LoopHelpers.compute1(getValue())); } finally { lock.unlock(); } sum += LoopHelpers.compute2(x); } return sum; } } private static class ReentrantWriteLockLoop extends LockLoop { final private Lock lock = new ReentrantReadWriteLock().writeLock(); final int loop(int n) { final Lock lock = this.lock; int sum = 0; int x = 0; while (n-- > 0) { lock.lock(); try { x = setValue(LoopHelpers.compute1(getValue())); } finally { lock.unlock(); } sum += LoopHelpers.compute2(x); } return sum; } } // private static class FairReentrantWriteLockLoop extends LockLoop { // final Lock lock = new ReentrantReadWriteLock(true).writeLock(); // final int loop(int n) { // final Lock lock = this.lock; // int sum = 0; // int x = 0; // while (n-- > 0) { // lock.lock(); // try { // x = setValue(LoopHelpers.compute1(getValue())); // } // finally { // lock.unlock(); // } // sum += LoopHelpers.compute2(x); // } // return sum; // } // } // private static class SemaphoreLoop extends LockLoop { final private Semaphore sem = new Semaphore(1, false); final int loop(int n) { final Semaphore sem = this.sem; int sum = 0; int x = 0; while (n-- > 0) { sem.acquireUninterruptibly(); try { x = setValue(LoopHelpers.compute1(getValue())); } finally { sem.release(); } sum += LoopHelpers.compute2(x); } return sum; } } private static class FairSemaphoreLoop extends LockLoop { final private Semaphore sem = new Semaphore(1, true); final int loop(int n) { final Semaphore sem = this.sem; int sum = 0; int x = 0; while (n-- > 0) { sem.acquireUninterruptibly(); try { x = setValue(LoopHelpers.compute1(getValue())); } finally { sem.release(); } sum += LoopHelpers.compute2(x); } return sum; } } private static class ReentrantReadWriteLockLoop extends LockLoop { final private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final int loop(int n) { final Lock rlock = lock.readLock(); final Lock wlock = lock.writeLock(); int sum = 0; int x = 0; while (n-- > 0) { if ((n & 16) != 0) { rlock.lock(); try { x = LoopHelpers.compute1(getValue()); x = LoopHelpers.compute2(x); } finally { rlock.unlock(); } } else { wlock.lock(); try { setValue(x); } finally { wlock.unlock(); } sum += LoopHelpers.compute2(x); } } return sum; } } // private static class FairReentrantReadWriteLockLoop extends LockLoop { // final private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); // final int loop(int n) { // final Lock rlock = lock.readLock(); // final Lock wlock = lock.writeLock(); // int sum = 0; // int x = 0; // while (n-- > 0) { // if ((n & 16) != 0) { // rlock.lock(); // try { // x = LoopHelpers.compute1(getValue()); // x = LoopHelpers.compute2(x); // } // finally { // rlock.unlock(); // } // } // else { // wlock.lock(); // try { // setValue(x); // } // finally { // wlock.unlock(); // } // sum += LoopHelpers.compute2(x); // } // } // return sum; // } // // } } backport-util-concurrent-3.1-src/test/loops/src/SimpleLockLoops.java0000644001750700037720000000671510256105111024533 0ustar dawidkdcl/* * @test * @synopsis multiple threads using a single builtin lock */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class SimpleLockLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int iters = 2000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); new ReentrantLockLoop(1).test(); new ReentrantLockLoop(1).test(); print = true; int k = 1; for (int i = 1; i <= maxThreads;) { System.out.print("Threads: " + i); new ReentrantLockLoop(i).test(); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static final class ReentrantLockLoop implements Runnable { private int v = rng.next(); private volatile int result = 17; private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; private volatile int readBarrier; ReentrantLockLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); if (print) { long time = timer.getTime(); long tpi = time / ((long)iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { try { barrier.await(); int sum = v + 1; int x = 0; int n = iters; while (n-- > 0) { synchronized(this) { int k = (sum & 3); if (k > 0) { x = v; while (k-- > 0) x = LoopHelpers.compute6(x); v = x; } else x = sum + 1; } if ((x += readBarrier) == 0) ++readBarrier; for (int l = x & 7; l > 0; --l) sum += LoopHelpers.compute6(sum); } barrier.await(); result += sum; } catch (Exception ie) { return; } } } } backport-util-concurrent-3.1-src/test/loops/src/NoopNoLockLoops.java0000644001750700037720000000617310253737131024522 0ustar dawidkdcl/* * @test * @synopsis multiple threads using a single builtin lock */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import edu.emory.mathcs.backport.java.util.*; public final class NoopNoLockLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int iters = 20000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); new ReentrantLockLoop(1).test(); new ReentrantLockLoop(1).test(); print = true; int k = 1; for (int i = 1; i <= maxThreads;) { System.out.print("Threads: " + i); new ReentrantLockLoop(i).test(); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static final class ReentrantLockLoop implements Runnable { private int v = rng.next(); private volatile int result = 17; private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; private volatile int readBarrier; ReentrantLockLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); if (print) { long time = timer.getTime(); long tpi = time / ((long)iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { try { barrier.await(); int sum = v + 1; int x = sum + 1; int n = iters; while (n-- > 0) { x = LoopHelpers.compute4(x); sum += x; if ((x += readBarrier) == 0) ++readBarrier; } barrier.await(); result += sum; } catch (Exception ie) { return; } } } } backport-util-concurrent-3.1-src/test/loops/src/MultipleProducersSingleConsumerLoops.java0000644001750700037720000001143510346121124031026 0ustar dawidkdcl/* * @test * @synopsis multiple producers and single consumer using blocking queues */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; public class MultipleProducersSingleConsumerLoops { static final int CAPACITY = 100; static final ExecutorService pool = Executors.newCachedThreadPool(); static boolean print = false; static int producerSum; static int consumerSum; static synchronized void addProducerSum(int x) { producerSum += x; } static synchronized void addConsumerSum(int x) { consumerSum += x; } static synchronized void checkSum() { if (producerSum != consumerSum) throw new Error("CheckSum mismatch"); } public static void main(String[] args) throws Exception { int maxProducers = 100; int iters = 100000; if (args.length > 0) maxProducers = Integer.parseInt(args[0]); print = false; System.out.println("Warmup..."); oneTest(1, 10000); Thread.sleep(100); oneTest(2, 10000); Thread.sleep(100); print = true; for (int i = 1; i <= maxProducers; i += (i+1) >>> 1) { System.out.println("Producers:" + i); oneTest(i, iters); Thread.sleep(100); } pool.shutdown(); } static void oneTest(int producers, int iters) throws Exception { if (print) System.out.print("ArrayBlockingQueue "); oneRun(new ArrayBlockingQueue(CAPACITY), producers, iters); if (print) System.out.print("LinkedBlockingQueue "); oneRun(new LinkedBlockingQueue(CAPACITY), producers, iters); // Don't run PBQ since can legitimately run out of memory // if (print) // System.out.print("PriorityBlockingQueue "); // oneRun(new PriorityBlockingQueue(), producers, iters); if (print) System.out.print("SynchronousQueue "); oneRun(new SynchronousQueue(), producers, iters); if (print) System.out.print("SynchronousQueue(fair) "); oneRun(new SynchronousQueue(true), producers, iters); if (print) System.out.print("ArrayBlockingQueue(fair)"); oneRun(new ArrayBlockingQueue(CAPACITY, true), producers, iters/10); } static abstract class Stage implements Runnable { final int iters; final BlockingQueue queue; final CyclicBarrier barrier; Stage (BlockingQueue q, CyclicBarrier b, int iters) { queue = q; barrier = b; this.iters = iters; } } static class Producer extends Stage { Producer(BlockingQueue q, CyclicBarrier b, int iters) { super(q, b, iters); } public void run() { try { barrier.await(); int s = 0; int l = hashCode(); for (int i = 0; i < iters; ++i) { l = LoopHelpers.compute1(l); l = LoopHelpers.compute2(l); queue.put(new Integer(l)); s += l; } addProducerSum(s); barrier.await(); } catch (Exception ie) { ie.printStackTrace(); return; } } } static class Consumer extends Stage { Consumer(BlockingQueue q, CyclicBarrier b, int iters) { super(q, b, iters); } public void run() { try { barrier.await(); int s = 0; for (int i = 0; i < iters; ++i) { s += ((Integer)queue.take()).intValue(); } addConsumerSum(s); barrier.await(); } catch (Exception ie) { ie.printStackTrace(); return; } } } static void oneRun(BlockingQueue q, int nproducers, int iters) throws Exception { LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier = new CyclicBarrier(nproducers + 2, timer); for (int i = 0; i < nproducers; ++i) { pool.execute(new Producer(q, barrier, iters)); } pool.execute(new Consumer(q, barrier, iters * nproducers)); barrier.await(); barrier.await(); long time = timer.getTime(); checkSum(); if (print) System.out.println("\t: " + LoopHelpers.rightJustify(time / (iters * nproducers)) + " ns per transfer"); } } backport-util-concurrent-3.1-src/test/loops/src/SingleProducerMultipleConsumerLoops.java0000644001750700037720000001050410201025631030633 0ustar dawidkdcl/* * @test * @synopsis check ordering for blocking queues with 1 producer and multiple consumers */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; public class SingleProducerMultipleConsumerLoops { static final int CAPACITY = 100; static final ExecutorService pool = Executors.newCachedThreadPool(); static boolean print = false; public static void main(String[] args) throws Exception { int maxConsumers = 100; int iters = 10000; if (args.length > 0) maxConsumers = Integer.parseInt(args[0]); print = false; System.out.println("Warmup..."); oneTest(1, 10000); Thread.sleep(100); oneTest(2, 10000); Thread.sleep(100); print = true; for (int i = 1; i <= maxConsumers; i += (i+1) >>> 1) { System.out.println("Consumers:" + i); oneTest(i, iters); Thread.sleep(100); } pool.shutdown(); } static void oneTest(int consumers, int iters) throws Exception { if (print) System.out.print("ArrayBlockingQueue "); oneRun(new ArrayBlockingQueue(CAPACITY), consumers, iters); if (print) System.out.print("LinkedBlockingQueue "); oneRun(new LinkedBlockingQueue(CAPACITY), consumers, iters); if (print) System.out.print("PriorityBlockingQueue "); oneRun(new PriorityBlockingQueue(), consumers, iters/10); if (print) System.out.print("SynchronousQueue "); oneRun(new SynchronousQueue(), consumers, iters); if (print) System.out.print("ArrayBlockingQueue(fair)"); oneRun(new ArrayBlockingQueue(CAPACITY, true), consumers, iters/10); } static abstract class Stage implements Runnable { final int iters; final BlockingQueue queue; final CyclicBarrier barrier; volatile int result; Stage (BlockingQueue q, CyclicBarrier b, int iters) { queue = q; barrier = b; this.iters = iters; } } static class Producer extends Stage { Producer(BlockingQueue q, CyclicBarrier b, int iters) { super(q, b, iters); } public void run() { try { barrier.await(); for (int i = 0; i < iters; ++i) { queue.put(new Integer(i)); } barrier.await(); result = 432; } catch (Exception ie) { ie.printStackTrace(); return; } } } static class Consumer extends Stage { Consumer(BlockingQueue q, CyclicBarrier b, int iters) { super(q, b, iters); } public void run() { try { barrier.await(); int l = 0; int s = 0; int last = -1; for (int i = 0; i < iters; ++i) { Integer item = (Integer)queue.take(); int v = item.intValue(); if (v < last) throw new Error("Out-of-Order transfer"); last = v; l = LoopHelpers.compute1(v); s += l; } barrier.await(); result = s; } catch (Exception ie) { ie.printStackTrace(); return; } } } static void oneRun(BlockingQueue q, int nconsumers, int iters) throws Exception { LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier = new CyclicBarrier(nconsumers + 2, timer); pool.execute(new Producer(q, barrier, iters * nconsumers)); for (int i = 0; i < nconsumers; ++i) { pool.execute(new Consumer(q, barrier, iters)); } barrier.await(); barrier.await(); long time = timer.getTime(); if (print) System.out.println("\t: " + LoopHelpers.rightJustify(time / (iters * nconsumers)) + " ns per transfer"); } } backport-util-concurrent-3.1-src/test/loops/src/TimeoutProducerConsumerLoops.java0000644001750700037720000001337110253737131027345 0ustar dawidkdcl/* * @test * @synopsis multiple producers and consumers using timeouts in blocking queues */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; public class TimeoutProducerConsumerLoops { static final int CAPACITY = 100; static final ExecutorService pool = Executors.newCachedThreadPool(); static boolean print = false; static int producerSum; static int consumerSum; static synchronized void addProducerSum(int x) { producerSum += x; } static synchronized void addConsumerSum(int x) { consumerSum += x; } static synchronized void checkSum() { if (producerSum != consumerSum) { throw new Error("CheckSum mismatch"); } } public static void main(String[] args) throws Exception { int maxPairs = 100; int iters = 100000; if (args.length > 0) maxPairs = Integer.parseInt(args[0]); print = false; System.out.println("Warmup..."); oneTest(1, 10000); Thread.sleep(100); oneTest(2, 10000); Thread.sleep(100); oneTest(2, 10000); Thread.sleep(100); print = true; int k = 1; for (int i = 1; i <= maxPairs;) { System.out.println("Pairs:" + i); oneTest(i, iters); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static void oneTest(int pairs, int iters) throws Exception { int fairIters = iters/20; if (print) System.out.print("ArrayBlockingQueue "); oneRun(new ArrayBlockingQueue(CAPACITY), pairs, iters); if (print) System.out.print("LinkedBlockingQueue "); oneRun(new LinkedBlockingQueue(CAPACITY), pairs, iters); if (print) System.out.print("LinkedBlockingDeque "); oneRun(new LinkedBlockingDeque(CAPACITY), pairs, iters); if (print) System.out.print("SynchronousQueue "); oneRun(new SynchronousQueue(), pairs, iters); if (print) System.out.print("SynchronousQueue(fair) "); oneRun(new SynchronousQueue(true), pairs, fairIters); if (print) System.out.print("PriorityBlockingQueue "); oneRun(new PriorityBlockingQueue(), pairs, fairIters); if (print) System.out.print("ArrayBlockingQueue(fair)"); oneRun(new ArrayBlockingQueue(CAPACITY, true), pairs, fairIters); } static abstract class Stage implements Runnable { final int iters; final BlockingQueue queue; final CyclicBarrier barrier; Stage (BlockingQueue q, CyclicBarrier b, int iters) { queue = q; barrier = b; this.iters = iters; } } static class Producer extends Stage { Producer(BlockingQueue q, CyclicBarrier b, int iters) { super(q, b, iters); } public void run() { try { barrier.await(); int s = 0; int l = hashCode(); int i = 0; long timeout = 1; while (i < iters) { l = LoopHelpers.compute4(l); if (queue.offer(new Integer(l), timeout, TimeUnit.NANOSECONDS)) { s += LoopHelpers.compute4(l); ++i; if (timeout > 1) timeout--; } else timeout++; } addProducerSum(s); barrier.await(); } catch (Exception ie) { ie.printStackTrace(); return; } } } static class Consumer extends Stage { Consumer(BlockingQueue q, CyclicBarrier b, int iters) { super(q, b, iters); } public void run() { try { barrier.await(); int l = 0; int s = 0; int i = 0; long timeout = 1; while (i < iters) { Integer e = (Integer)queue.poll(timeout, TimeUnit.NANOSECONDS); if (e != null) { l = LoopHelpers.compute4(e.intValue()); s += l; ++i; if (timeout > 1) --timeout; } else ++timeout; } addConsumerSum(s); barrier.await(); } catch (Exception ie) { ie.printStackTrace(); return; } } } static void oneRun(BlockingQueue q, int npairs, int iters) throws Exception { LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier = new CyclicBarrier(npairs * 2 + 1, timer); for (int i = 0; i < npairs; ++i) { pool.execute(new Producer(q, barrier, iters)); pool.execute(new Consumer(q, barrier, iters)); } barrier.await(); barrier.await(); long time = timer.getTime(); checkSum(); if (print) System.out.println("\t: " + LoopHelpers.rightJustify(time / (iters * npairs)) + " ns per transfer"); } } backport-util-concurrent-3.1-src/test/loops/src/SynchronizedLinkedListQueue.java0000644001750700037720000000376010346121124027122 0ustar dawidkdclimport edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.LinkedList; import java.util.Collection; import java.util.Iterator; import java.util.AbstractCollection; public class SynchronizedLinkedListQueue extends AbstractCollection implements Queue { private final Queue q = new LinkedList(); public synchronized Iterator iterator() { return q.iterator(); } public synchronized boolean isEmpty() { return q.isEmpty(); } public synchronized int size() { return q.size(); } public synchronized boolean offer(Object o) { return q.offer(o); } public synchronized boolean add(Object o) { return q.add(o); } public synchronized Object poll() { return q.poll(); } public synchronized Object remove() { return q.remove(); } public synchronized Object peek() { return q.peek(); } public synchronized Object element() { return q.element(); } public synchronized boolean contains(Object o) { return q.contains(o); } public synchronized Object[] toArray() { return q.toArray(); } public synchronized Object[] toArray(Object[] a) { return q.toArray(a); } public synchronized boolean remove(Object o) { return q.remove(o); } public synchronized boolean containsAll(Collection coll) { return q.containsAll(coll); } public synchronized boolean addAll(Collection coll) { return q.addAll(coll); } public synchronized boolean removeAll(Collection coll) { return q.removeAll(coll); } public synchronized boolean retainAll(Collection coll) { return q.retainAll(coll); } public synchronized void clear() { q.clear(); } public synchronized String toString() { return q.toString(); } } backport-util-concurrent-3.1-src/test/loops/src/SynchronizedCollection.java0000644001750700037720000000464010346121124026144 0ustar dawidkdcl// Stand-alone version of java.util.Collections.synchronizedCollection import edu.emory.mathcs.backport.java.util.*; import java.io.*; import java.util.Collection; import java.util.Iterator; import java.util.ArrayList; public final class SynchronizedCollection implements Collection, Serializable { // use serialVersionUID from JDK 1.2.2 for interoperability private static final long serialVersionUID = 3053995032091335093L; final Collection c; // Backing Collection final Object mutex; // Object on which to synchronize public SynchronizedCollection(Collection c) { if (c==null) throw new NullPointerException(); this.c = c; mutex = this; } public SynchronizedCollection(Collection c, Object mutex) { this.c = c; this.mutex = mutex; } public SynchronizedCollection() { this(new ArrayList()); } public final int size() { synchronized(mutex) {return c.size();} } public final boolean isEmpty() { synchronized(mutex) {return c.isEmpty();} } public final boolean contains(Object o) { synchronized(mutex) {return c.contains(o);} } public final Object[] toArray() { synchronized(mutex) {return c.toArray();} } public final Object[] toArray(Object[] a) { synchronized(mutex) {return c.toArray(a);} } public final Iterator iterator() { return c.iterator(); // Must be manually synched by user! } public final boolean add(Object e) { synchronized(mutex) {return c.add(e);} } public final boolean remove(Object o) { synchronized(mutex) {return c.remove(o);} } public final boolean containsAll(Collection coll) { synchronized(mutex) {return c.containsAll(coll);} } public final boolean addAll(Collection coll) { synchronized(mutex) {return c.addAll(coll);} } public final boolean removeAll(Collection coll) { synchronized(mutex) {return c.removeAll(coll);} } public final boolean retainAll(Collection coll) { synchronized(mutex) {return c.retainAll(coll);} } public final void clear() { synchronized(mutex) {c.clear();} } public final String toString() { synchronized(mutex) {return c.toString();} } private void writeObject(ObjectOutputStream s) throws IOException { synchronized(mutex) {s.defaultWriteObject();} } } backport-util-concurrent-3.1-src/test/loops/src/SimpleWriteLockLoops.java0000644001750700037720000000672110256105111025543 0ustar dawidkdcl/* * @test * @synopsis multiple threads using a single lock */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class SimpleWriteLockLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int iters = 10000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); print = true; int reps = 2; for (int i = 1; i <= maxThreads; i += (i+1) >>> 1) { int n = reps; if (reps > 1) --reps; while (n-- > 0) { System.out.print("Threads: " + i); new WriteLockLoop(i).test(); Thread.sleep(100); } } pool.shutdown(); } static final class WriteLockLoop implements Runnable { private int v = rng.next(); private volatile int result = 17; private volatile int readBarrier; private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; WriteLockLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); if (print) { long time = timer.getTime(); long tpi = time / ((long)iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { final Lock lock = this.lock.writeLock(); try { barrier.await(); int sum = v + 1; int x = 0; int n = iters; while (n-- > 0) { lock.lock(); int k = (sum & 3); if (k > 0) { x = v; while (k-- > 0) x = LoopHelpers.compute6(x); v = x; } else x = sum + 1; lock.unlock(); if ((x += readBarrier) == 0) ++readBarrier; for (int l = x & 7; l > 0; --l) sum += LoopHelpers.compute6(sum); } barrier.await(); result += sum; } catch (Exception ie) { return; } } } } backport-util-concurrent-3.1-src/test/loops/src/ReadHoldingWriteLock.java0000644001750700037720000001106610253737131025465 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import edu.emory.mathcs.backport.java.util.concurrent.locks.*; class ReadHoldingWriteLock { public static void main(String[] args) throws Exception { ReadHoldingWriteLock t = new ReadHoldingWriteLock(); t.testReadAfterWriteLock(); t.testReadHoldingWriteLock(); t.testReadHoldingWriteLock2(); // t.testReadHoldingWriteLockFair(); // t.testReadHoldingWriteLockFair2(); } static final long SHORT_DELAY_MS = 50; static final long MEDIUM_DELAY_MS = 200; void assertTrue(boolean b) { if (!b) throw new Error(); } /** * Readlocks succeed after a writing thread unlocks */ public void testReadAfterWriteLock() throws Exception { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); Thread t1 = new Thread(new Runnable() { public void run() { lock.readLock().lock(); lock.readLock().unlock(); } }); Thread t2 = new Thread(new Runnable() { public void run() { lock.readLock().lock(); lock.readLock().unlock(); } }); t1.start(); t2.start(); Thread.sleep(SHORT_DELAY_MS); lock.writeLock().unlock(); t1.join(MEDIUM_DELAY_MS); t2.join(MEDIUM_DELAY_MS); assertTrue(!t1.isAlive()); assertTrue(!t2.isAlive()); } /** * Read trylock succeeds if write locked by current thread */ public void testReadHoldingWriteLock()throws Exception { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); assertTrue(lock.readLock().tryLock()); lock.readLock().unlock(); lock.writeLock().unlock(); } /** * Read lock succeeds if write locked by current thread even if * other threads are waiting */ public void testReadHoldingWriteLock2() throws Exception{ final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); Thread t1 = new Thread(new Runnable() { public void run() { lock.readLock().lock(); lock.readLock().unlock(); } }); Thread t2 = new Thread(new Runnable() { public void run() { lock.readLock().lock(); lock.readLock().unlock(); } }); t1.start(); t2.start(); lock.readLock().lock(); lock.readLock().unlock(); Thread.sleep(SHORT_DELAY_MS); lock.readLock().lock(); lock.readLock().unlock(); lock.writeLock().unlock(); t1.join(MEDIUM_DELAY_MS); t2.join(MEDIUM_DELAY_MS); assertTrue(!t1.isAlive()); assertTrue(!t2.isAlive()); } // /** // * Fair Read trylock succeeds if write locked by current thread // */ // public void testReadHoldingWriteLockFair() throws Exception{ // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); // lock.writeLock().lock(); // assertTrue(lock.readLock().tryLock()); // lock.readLock().unlock(); // lock.writeLock().unlock(); // } // // /** // * Fair Read lock succeeds if write locked by current thread even if // * other threads are waiting // */ // public void testReadHoldingWriteLockFair2() throws Exception { // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); // lock.writeLock().lock(); // Thread t1 = new Thread(new Runnable() { // public void run() { // lock.readLock().lock(); // lock.readLock().unlock(); // } // }); // Thread t2 = new Thread(new Runnable() { // public void run() { // lock.readLock().lock(); // lock.readLock().unlock(); // } // }); // // t1.start(); // t2.start(); // lock.readLock().lock(); // lock.readLock().unlock(); // Thread.sleep(SHORT_DELAY_MS); // lock.readLock().lock(); // lock.readLock().unlock(); // lock.writeLock().unlock(); // t1.join(MEDIUM_DELAY_MS); // t2.join(MEDIUM_DELAY_MS); // assertTrue(!t1.isAlive()); // assertTrue(!t2.isAlive()); // // // } } backport-util-concurrent-3.1-src/test/loops/src/PriorityQueueSort.java0000644001750700037720000000462310346121124025150 0ustar dawidkdcl/* * Written by Josh Bloch and Doug Lea with assistance from members of * JCP JSR-166 Expert Group and released to the public domain, as * explained at http://creativecommons.org/licenses/publicdomain */ /* * @test * @synopsis Checks that a priority queue returns elements in sorted order across various operations */ import edu.emory.mathcs.backport.java.util.PriorityQueue; import java.util.Comparator; import java.util.ArrayList; import java.util.List; import java.util.Iterator; import edu.emory.mathcs.backport.java.util.Collections; import edu.emory.mathcs.backport.java.util.Queue; public class PriorityQueueSort { static class MyComparator implements Comparator { public int compare(Object x, Object y) { int i = ((Integer)x).intValue(); int j = ((Integer)y).intValue(); if (i < j) return -1; if (i > j) return 1; return 0; } } public static void main(String[] args) { int n = 100000; if (args.length > 0) n = Integer.parseInt(args[0]); List sorted = new ArrayList(n); for (int i = 0; i < n; i++) sorted.add(new Integer(i)); List shuffled = new ArrayList(sorted); Collections.shuffle(shuffled); Queue pq = new PriorityQueue(n, new MyComparator()); for (Iterator i = shuffled.iterator(); i.hasNext(); ) pq.add(i.next()); List recons = new ArrayList(); while (!pq.isEmpty()) recons.add(pq.remove()); if (!recons.equals(sorted)) throw new RuntimeException("Sort test failed"); recons.clear(); pq = new PriorityQueue(shuffled); while (!pq.isEmpty()) recons.add(pq.remove()); if (!recons.equals(sorted)) throw new RuntimeException("Sort test failed"); // Remove all odd elements from queue pq = new PriorityQueue(shuffled); for (Iterator i = pq.iterator(); i.hasNext(); ) if ((((Integer)i.next()).intValue() & 1) == 1) i.remove(); recons.clear(); while (!pq.isEmpty()) recons.add(pq.remove()); for (Iterator i = sorted.iterator(); i.hasNext(); ) if ((((Integer)i.next()).intValue() & 1) == 1) i.remove(); if (!recons.equals(sorted)) throw new RuntimeException("Iterator remove test failed."); } } backport-util-concurrent-3.1-src/test/loops/src/CollectionLoops.java0000644001750700037720000001450310346121124024560 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.util.Collection; import java.util.Random; public class CollectionLoops { static int pinsert = 100; static int premove = 1; static int maxThreads = 48; static int removesPerMaxRandom; static int insertsPerMaxRandom; static volatile int checkSum = 0; static boolean print = false; static final ExecutorService pool = Executors.newCachedThreadPool(); public static void main(String[] args) throws Exception { int nkeys = 10000; int nops = 100000; Class collectionClass = null; if (args.length > 0) { try { collectionClass = Class.forName(args[0]); } catch(ClassNotFoundException e) { throw new RuntimeException("Class " + args[0] + " not found."); } } if (args.length > 1) maxThreads = Integer.parseInt(args[1]); if (args.length > 2) nkeys = Integer.parseInt(args[2]); if (args.length > 3) pinsert = Integer.parseInt(args[3]); if (args.length > 4) premove = Integer.parseInt(args[4]); if (args.length > 5) nops = Integer.parseInt(args[5]); // normalize probabilities wrt random number generator removesPerMaxRandom = (int)(((double)premove/100.0 * 0x7FFFFFFFL)); insertsPerMaxRandom = (int)(((double)pinsert/100.0 * 0x7FFFFFFFL)); System.out.print("Class: " + collectionClass.getName()); System.out.print(" threads: " + maxThreads); System.out.print(" size: " + nkeys); System.out.print(" ins: " + pinsert); System.out.print(" rem: " + premove); System.out.print(" ops: " + nops); System.out.println(); // warmup test(1, 100, 100, collectionClass); test(2, 100, 100, collectionClass); test(4, 100, 100, collectionClass); print = true; int k = 1; int warmups = 2; for (int i = 1; i <= maxThreads;) { Thread.sleep(100); test(i, nkeys, nops, collectionClass); if (warmups > 0) --warmups; else if (i == k) { k = i << 1; i = i + (i >>> 1); } else if (i == 1 && k == 2) { i = k; warmups = 1; } else i = k; } pool.shutdown(); } static Integer[] makeKeys(int n) { LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); Integer[] key = new Integer[n]; for (int i = 0; i < key.length; ++i) key[i] = new Integer(rng.next()); return key; } static void shuffleKeys(Integer[] key) { Random rng = new Random(); for (int i = key.length; i > 1; --i) { int j = rng.nextInt(i); Integer tmp = key[j]; key[j] = key[i-1]; key[i-1] = tmp; } } static void test(int i, int nk, int nops, Class collectionClass) throws Exception { if (print) System.out.print("Threads: " + i + "\t:"); Collection collection = (Collection)collectionClass.newInstance(); Integer[] key = makeKeys(nk); // Uncomment to start with a non-empty table for (int j = 0; j < nk; j += 2) collection.add(key[j]); shuffleKeys(key); LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier = new CyclicBarrier(i+1, timer); for (int t = 0; t < i; ++t) pool.execute(new Runner(t, collection, key, barrier, nops)); barrier.await(); barrier.await(); long time = timer.getTime(); long tpo = time / (i * (long)nops); if (print) System.out.print(LoopHelpers.rightJustify(tpo) + " ns per op"); double secs = (double)(time) / 1000000000.0; if (print) System.out.print("\t " + secs + "s run time"); if (checkSum == 0) System.out.print(" "); if (print) System.out.println(); collection.clear(); } static class Runner implements Runnable { final Collection collection; final Integer[] key; final LoopHelpers.SimpleRandom rng; final CyclicBarrier barrier; int position; int total; int nops; Runner(int id, Collection collection, Integer[] key, CyclicBarrier barrier, int nops) { this.collection = collection; this.key = key; this.barrier = barrier; this.nops = nops; position = key.length / (id + 1); rng = new LoopHelpers.SimpleRandom((id + 1) * 8862213513L); rng.next(); } public void run() { try { barrier.await(); int p = position; int ops = nops; Collection c = collection; while (ops > 0) { int r = rng.next(); p += (r & 7) - 3; while (p >= key.length) p -= key.length; while (p < 0) p += key.length; Integer k = key[p]; if (c.contains(k)) { if (r < removesPerMaxRandom) { if (c.remove(k)) { p = Math.abs(total % key.length); ops -= 2; continue; } } } else if (r < insertsPerMaxRandom) { ++p; ops -= 2; c.add(k); continue; } total += LoopHelpers.compute6(k.intValue()); --ops; } checkSum += total; barrier.await(); } catch (Exception ex) { throw new RuntimeException(ex); } } } } backport-util-concurrent-3.1-src/test/loops/src/UnboundedQueueFillEmptyLoops.java0000644001750700037720000000443710346121124027250 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import java.util.Random; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; public class UnboundedQueueFillEmptyLoops { static int maxSize = 10000; static Random rng = new Random(3153122688L); static volatile int total; static Integer[] numbers; public static void main(String[] args) throws Exception { Class klass = null; if (args.length > 0) { try { klass = Class.forName(args[0]); } catch(ClassNotFoundException e) { throw new RuntimeException("Class " + args[0] + " not found."); } } if (args.length > 2) maxSize = Integer.parseInt(args[2]); System.out.print("Class: " + klass.getName()); System.out.println(" size: " + maxSize); numbers = new Integer[maxSize]; for (int i = 0; i < maxSize; ++i) numbers[i] = new Integer(rng.nextInt(128)); oneRun(klass, maxSize); Thread.sleep(100); oneRun(klass, maxSize); Thread.sleep(100); oneRun(klass, maxSize); if (total == 0) System.out.print(" "); } static void oneRun(Class klass, int n) throws Exception { Queue q = (Queue)klass.newInstance(); int sum = total; int m = rng.nextInt(numbers.length); long startTime = Utils.nanoTime(); for (int k = 0; k < n; ++k) { for (int i = 0; i < k; ++i) { if (m >= numbers.length) m = 0; q.offer(numbers[m++]); } Integer p; while ((p = (Integer)q.poll()) != null) sum += p.intValue(); } total += sum; long endTime = Utils.nanoTime(); long time = endTime - startTime; double secs = (double)(time) / 1000000000.0; System.out.println("Time: " + secs); } } backport-util-concurrent-3.1-src/test/loops/src/LockOncePerThreadLoops.java0000644001750700037720000000637110253737131025775 0ustar dawidkdcl/* * @test * @summary Checks for missed signals by locking and unlocking each of an array of locks once per thread */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class LockOncePerThreadLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int nlocks = 500000; static int nthreads = 100; static int replications = 20; public static void main(String[] args) throws Exception { if (args.length > 0) replications = Integer.parseInt(args[0]); if (args.length > 1) nlocks = Integer.parseInt(args[1]); print = true; for (int i = 0; i < replications; ++i) { System.out.print("Iteration: " + i); new ReentrantLockLoop().test(); Thread.sleep(100); } pool.shutdown(); } static final class ReentrantLockLoop implements Runnable { private int v = rng.next(); private volatile int result = 17; final ReentrantLock[]locks = new ReentrantLock[nlocks]; private final ReentrantLock lock = new ReentrantLock(); private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; ReentrantLockLoop() { barrier = new CyclicBarrier(nthreads+1, timer); for (int i = 0; i < nlocks; ++i) locks[i] = new ReentrantLock(); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); if (print) { long time = timer.getTime(); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { try { barrier.await(); int sum = v; int x = 0; for (int i = 0; i < locks.length; ++i) { locks[i].lock(); try { v = x += ~(v - i); } finally { locks[i].unlock(); } // Once in a while, do something more expensive if ((~i & 255) == 0) { sum += LoopHelpers.compute1(LoopHelpers.compute2(x)); } else sum += sum ^ x; } barrier.await(); result += sum; } catch (Exception ie) { return; } } } } backport-util-concurrent-3.1-src/test/loops/src/ContextSwitchTest.java0000644001750700037720000000376510346121124025126 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; public final class ContextSwitchTest { // final static int iters = 1000000; // static AtomicReference turn = new AtomicReference(); // public static void main(String[] args) throws Exception { // test(); // test(); // test(); // } // // static void test() throws Exception { // MyThread a = new MyThread(); // MyThread b = new MyThread(); // a.other = b; // b.other = a; // turn.set(a); // long startTime = Utils.nanoTime(); // a.start(); // b.start(); // a.join(); // b.join(); // long endTime = Utils.nanoTime(); // int np = a.nparks + b.nparks; // System.out.println("Average time: " + // ((endTime - startTime) / np) + // "ns"); // } // // static final class MyThread extends Thread { // volatile Thread other; // volatile int nparks; // // public void run() { // final AtomicReference t = turn; // final Thread other = this.other; // if (turn == null || other == null) // throw new NullPointerException(); // int p = 0; // for (int i = 0; i < iters; ++i) { // while (!t.compareAndSet(other, this)) { // LockSupport.park(); // ++p; // } // LockSupport.unpark(other); // } // LockSupport.unpark(other); // nparks = p; // System.out.println("parks: " + p); // // } // } } backport-util-concurrent-3.1-src/test/loops/src/IntMapCheck.java0000644001750700037720000004235010431260156023603 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ /** * @test * @synopsis Times and checks basic map operations */ import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; import java.io.*; import java.util.Map; import java.util.Hashtable; import java.util.Set; import java.util.Iterator; import java.util.Random; import java.util.IdentityHashMap; import java.util.Enumeration; public class IntMapCheck { static int absentSize; static int absentMask; static Integer[] absent; static final Integer MISSING = new Integer(Integer.MIN_VALUE); static TestTimer timer = new TestTimer(); static void reallyAssert(boolean b) { if (!b) throw new Error("Failed Assertion"); } public static void main(String[] args) throws Exception { Class mapClass = edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap.class; int numTests = 50; int size = 50000; if (args.length > 0) { try { mapClass = Class.forName(args[0]); } catch(ClassNotFoundException e) { throw new RuntimeException("Class " + args[0] + " not found."); } } if (args.length > 1) numTests = Integer.parseInt(args[1]); if (args.length > 2) size = Integer.parseInt(args[2]); boolean doSerializeTest = args.length > 3; System.out.println("Testing " + mapClass.getName() + " trials: " + numTests + " size: " + size); absentSize = 4; while (absentSize <= size) absentSize <<= 1; absentMask = absentSize-1; absent = new Integer[absentSize]; for (int i = 0; i < absentSize; ++i) absent[i] = new Integer(2 * (i - 1) + 1); Integer[] key = new Integer[size]; for (int i = 0; i < size; ++i) key[i] = new Integer(2 * i); for (int rep = 0; rep < numTests; ++rep) { shuffle(absent); runTest(newMap(mapClass), key); } TestTimer.printStats(); if (doSerializeTest) stest(newMap(mapClass), size); } static Map newMap(Class cl) { try { Map m = (Map)cl.newInstance(); return m; } catch(Exception e) { throw new RuntimeException("Can't instantiate " + cl + ": " + e); } } static void runTest(Map s, Integer[] key) { shuffle(key); int size = key.length; long startTime = Utils.nanoTime(); test(s, key); long time = Utils.nanoTime() - startTime; } static void t1(String nm, int n, Map s, Integer[] key, int expect) { int sum = 0; int iters = 4; timer.start(nm, n * iters); for (int j = 0; j < iters; ++j) { for (int i = 0; i < n; i++) { if (s.get(key[i]) != null) ++sum; } } timer.finish(); reallyAssert (sum == expect * iters); } static void t2(String nm, int n, Map s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.remove(key[i]) != null) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t3(String nm, int n, Map s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { Integer k = key[i]; Integer v = absent[i & absentMask]; if (s.put(k, v) == null) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t4(String nm, int n, Map s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.containsKey(key[i])) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t5(String nm, int n, Map s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n/2); for (int i = n-2; i >= 0; i-=2) { if (s.remove(key[i]) != null) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t6(String nm, int n, Map s, Integer[] k1, Integer[] k2) { int sum = 0; timer.start(nm, n * 2); for (int i = 0; i < n; i++) { if (s.get(k1[i]) != null) ++sum; if (s.get(k2[i & absentMask]) != null) ++sum; } timer.finish(); reallyAssert (sum == n); } static void t7(String nm, int n, Map s, Integer[] k1, Integer[] k2) { int sum = 0; timer.start(nm, n * 2); for (int i = 0; i < n; i++) { if (s.containsKey(k1[i])) ++sum; if (s.containsKey(k2[i & absentMask])) ++sum; } timer.finish(); reallyAssert (sum == n); } static void t8(String nm, int n, Map s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.get(key[i]) != null) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t9(Map s) { int sum = 0; int iters = 20; timer.start("ContainsValue (/n) ", iters * s.size()); int step = absentSize / iters; for (int i = 0; i < absentSize; i += step) if (s.containsValue(absent[i])) ++sum; timer.finish(); reallyAssert (sum != 0); } static void ktest(Map s, int size, Integer[] key) { timer.start("ContainsKey ", size); Set ks = s.keySet(); int sum = 0; for (int i = 0; i < size; i++) { if (ks.contains(key[i])) ++sum; } timer.finish(); reallyAssert (sum == size); } static void ittest1(Map s, int size) { int sum = 0; timer.start("Iter Key ", size); for (Iterator it = s.keySet().iterator(); it.hasNext(); ) { if(it.next() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void ittest2(Map s, int size) { int sum = 0; timer.start("Iter Value ", size); for (Iterator it = s.values().iterator(); it.hasNext(); ) { if(it.next() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void ittest3(Map s, int size) { int sum = 0; timer.start("Iter Entry ", size); for (Iterator it = s.entrySet().iterator(); it.hasNext(); ) { if(it.next() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void ittest4(Map s, int size, int pos) { IdentityHashMap seen = new IdentityHashMap(size); reallyAssert (s.size() == size); int sum = 0; timer.start("Iter XEntry ", size); Iterator it = s.entrySet().iterator(); Integer k = null; Integer v = null; for (int i = 0; i < size-pos; ++i) { Map.Entry x = (Map.Entry)(it.next()); k = (Integer)x.getKey(); v = (Integer)x.getValue(); seen.put(k, k); if (v != MISSING) ++sum; } reallyAssert (s.containsKey(k)); it.remove(); reallyAssert (!s.containsKey(k)); while (it.hasNext()) { Map.Entry x = (Map.Entry)(it.next()); Integer k2 = (Integer)x.getKey(); seen.put(k2, k2); if (k2 != MISSING) ++sum; } reallyAssert (s.size() == size-1); s.put(k, v); reallyAssert (seen.size() == size); timer.finish(); reallyAssert (sum == size); reallyAssert (s.size() == size); } static void ittest(Map s, int size) { ittest1(s, size); ittest2(s, size); ittest3(s, size); // for (int i = 0; i < size-1; ++i) // ittest4(s, size, i); } static void entest1(Hashtable ht, int size) { int sum = 0; timer.start("Iter Enumeration Key ", size); for (Enumeration en = ht.keys(); en.hasMoreElements(); ) { if (en.nextElement() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void entest2(Hashtable ht, int size) { int sum = 0; timer.start("Iter Enumeration Value ", size); for (Enumeration en = ht.elements(); en.hasMoreElements(); ) { if (en.nextElement() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void entest3(Hashtable ht, int size) { int sum = 0; timer.start("Iterf Enumeration Key ", size); Enumeration en = ht.keys(); for (int i = 0; i < size; ++i) { if (en.nextElement() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void entest4(Hashtable ht, int size) { int sum = 0; timer.start("Iterf Enumeration Value", size); Enumeration en = ht.elements(); for (int i = 0; i < size; ++i) { if (en.nextElement() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void entest(Map s, int size) { if (s instanceof Hashtable) { Hashtable ht = (Hashtable)s; // entest3(ht, size); // entest4(ht, size); entest1(ht, size); entest2(ht, size); entest1(ht, size); entest2(ht, size); entest1(ht, size); entest2(ht, size); } } static void rtest(Map s, int size) { timer.start("Remove (iterator) ", size); for (Iterator it = s.keySet().iterator(); it.hasNext(); ) { it.next(); it.remove(); } timer.finish(); } static void rvtest(Map s, int size) { timer.start("Remove (iterator) ", size); for (Iterator it = s.values().iterator(); it.hasNext(); ) { it.next(); it.remove(); } timer.finish(); } static void dtest(Map s, int size, Integer[] key) { timer.start("Put (putAll) ", size * 2); Map s2 = null; try { s2 = (Map) (s.getClass().newInstance()); s2.putAll(s); } catch (Exception e) { e.printStackTrace(); return; } timer.finish(); timer.start("Iter Equals ", size * 2); boolean eqt = s2.equals(s) && s.equals(s2); reallyAssert (eqt); timer.finish(); timer.start("Iter HashCode ", size * 2); int shc = s.hashCode(); int s2hc = s2.hashCode(); reallyAssert (shc == s2hc); timer.finish(); timer.start("Put (present) ", size); s2.putAll(s); timer.finish(); timer.start("Iter EntrySet contains ", size * 2); Set es2 = s2.entrySet(); int sum = 0; for (Iterator i1 = s.entrySet().iterator(); i1.hasNext(); ) { Object entry = i1.next(); if (es2.contains(entry)) ++sum; } timer.finish(); reallyAssert (sum == size); t6("Get ", size, s2, key, absent); Integer hold = (Integer)s2.get(key[size-1]); s2.put(key[size-1], absent[0]); timer.start("Iter Equals ", size * 2); eqt = s2.equals(s) && s.equals(s2); reallyAssert (!eqt); timer.finish(); timer.start("Iter HashCode ", size * 2); int s1h = s.hashCode(); int s2h = s2.hashCode(); reallyAssert (s1h != s2h); timer.finish(); s2.put(key[size-1], hold); timer.start("Remove (iterator) ", size * 2); Iterator s2i = s2.entrySet().iterator(); Set es = s.entrySet(); while (s2i.hasNext()) reallyAssert(es.remove(s2i.next())); timer.finish(); if (!s.isEmpty()) System.out.println(s); reallyAssert (s.isEmpty()); timer.start("Clear ", size); s2.clear(); timer.finish(); reallyAssert (s2.isEmpty() && s.isEmpty()); } static void stest(Map s, int size) throws Exception { if (!(s instanceof Serializable)) return; System.out.print("Serialize : "); for (int i = 0; i < size; i++) { s.put(new Integer(i), new Integer(1)); } long startTime = Utils.nanoTime(); FileOutputStream fs = new FileOutputStream("IntMapCheck.dat"); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(fs)); out.writeObject(s); out.close(); FileInputStream is = new FileInputStream("IntMapCheck.dat"); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(is)); Map m = (Map)in.readObject(); long endTime = Utils.nanoTime(); long time = endTime - startTime; System.out.print(time + "ms"); if (s instanceof IdentityHashMap) return; reallyAssert (s.equals(m)); } static void test(Map s, Integer[] key) { int size = key.length; t3("Put (absent) ", size, s, key, size); t3("Put (present) ", size, s, key, 0); t7("ContainsKey ", size, s, key, absent); t4("ContainsKey ", size, s, key, size); ktest(s, size, key); t4("ContainsKey ", absentSize, s, absent, 0); t6("Get ", size, s, key, absent); t1("Get (present) ", size, s, key, size); t1("Get (absent) ", absentSize, s, absent, 0); t2("Remove (absent) ", absentSize, s, absent, 0); t5("Remove (present) ", size, s, key, size / 2); t3("Put (half present) ", size, s, key, size / 2); ittest(s, size); entest(s, size); t9(s); rtest(s, size); t4("ContainsKey ", size, s, key, 0); t2("Remove (absent) ", size, s, key, 0); t3("Put (presized) ", size, s, key, size); dtest(s, size, key); } static class TestTimer { private String name; private long numOps; private long startTime; private String cname; static final java.util.TreeMap accum = new java.util.TreeMap(); static void printStats() { for (Iterator it = accum.entrySet().iterator(); it.hasNext(); ) { Map.Entry e = (Map.Entry)(it.next()); Stats stats = ((Stats)(e.getValue())); long n = stats.number; double t; if (n > 0) t = stats.sum / n; else t = stats.least; long nano = Math.round(1000000.0 * t); System.out.println(e.getKey() + ": " + nano); } } void start(String name, long numOps) { this.name = name; this.cname = classify(); this.numOps = numOps; startTime = Utils.nanoTime(); } String classify() { if (name.startsWith("Get")) return "Get "; else if (name.startsWith("Put")) return "Put "; else if (name.startsWith("Remove")) return "Remove "; else if (name.startsWith("Iter")) return "Iter "; else return null; } void finish() { long endTime = Utils.nanoTime(); long time = endTime - startTime; double timePerOp = (((double)time)/numOps) / 1000000; Object st = accum.get(name); if (st == null) accum.put(name, new Stats(timePerOp)); else { Stats stats = (Stats) st; stats.sum += timePerOp; stats.number++; if (timePerOp < stats.least) stats.least = timePerOp; } if (cname != null) { st = accum.get(cname); if (st == null) accum.put(cname, new Stats(timePerOp)); else { Stats stats = (Stats) st; stats.sum += timePerOp; stats.number++; if (timePerOp < stats.least) stats.least = timePerOp; } } } } static class Stats { double sum = 0; double least; long number = 0; Stats(double t) { least = t; } } static Random rng = new Random(); static void shuffle(Integer[] keys) { int size = keys.length; for (int i=size; i>1; i--) { int r = rng.nextInt(i); Integer t = keys[i-1]; keys[i-1] = keys[r]; keys[r] = t; } } } backport-util-concurrent-3.1-src/test/loops/src/RLIBar.java0000644001750700037720000002223210253737131022531 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ // Adapted from code that was in turn // Derived from SocketPerformanceTest.java - BugID: 4763450 // // import java.io.*; import java.net.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; public class RLIBar { static int batchLimit ; static int mseq ; static int nReady ; static int ExThreads ; static int ASum ; static final ReentrantLock Gate = new ReentrantLock () ; static final Condition GateCond = Gate.newCondition () ; static final ReentrantLock HoldQ = new ReentrantLock () ; static final Condition HoldQCond = HoldQ.newCondition() ; static boolean Hold = false ; static int HoldPop ; static int HoldLimit ; static private boolean HoldCheck () { try { HoldQ.lock(); try { if (!Hold) return false; else { ++HoldPop ; if (HoldPop >= HoldLimit) { System.out.print ("Holding ") ; Thread.sleep (1000) ; System.out.println () ; Hold = false ; HoldQCond.signalAll () ; } else while (Hold) HoldQCond.await() ; if (--HoldPop == 0) HoldQCond.signalAll () ; return true; } } finally { HoldQ.unlock(); } } catch (Exception Ex) { System.out.println ("Unexpected exception in Hold: " + Ex) ; return false; } } private static class Server { private int nClients; final ReentrantLock thisLock = new ReentrantLock(); final Condition thisCond = thisLock.newCondition(); Server (int nClients) { this.nClients = nClients; try { for (int i = 0; i < nClients; ++i) { final int fix = i ; new Thread() { public void run () { runServer(fix); }}.start(); } } catch (Exception e) { System.err.println(e) ; } } // the total number of messages received by all server threads // on this server int msgsReceived = 0; // incremented each time we get a complete batch of requests private int currentBatch = 0; // the number of requests received since the last time currentBatch // was incremented private int currentBatchSize = 0; private void runServer (int id) { int msg ; boolean held = false; final ReentrantLock thisLock = this.thisLock; final Condition thisCond = this.thisCond; try { // Startup barrier - rendezvous - wait for all threads. // Forces all threads to park on their LWPs, ensuring // proper provisioning on T1. // Alternately, use THR_BOUND threads Gate.lock(); try { ++nReady ; if (nReady == ExThreads ) { GateCond.signalAll () ; } while (nReady != ExThreads ) GateCond.await() ; } finally { Gate.unlock(); } for (;;) { // if (!held && currentBatchSize == 0) held = HoldCheck () ; msg = (++ mseq) ^ id ; thisLock.lock(); try { ASum += msg ; ++msgsReceived; int myBatch = currentBatch; if (++currentBatchSize >= batchLimit) { // this batch is full, start a new one ... ++currentBatch; currentBatchSize = 0; // and wake up everyone in this one thisCond.signalAll () ; } // Wait until our batch is complete while (myBatch == currentBatch) thisCond.await(); } finally { thisLock.unlock(); } } } catch (Exception e) { System.err.println("Server thread: exception " + e) ; e.printStackTrace(); } } } public static void main (String[] args) throws Exception { int nServers = 10 ; int nClients = 10 ; int samplePeriod = 10000; int nSamples = 5; int nextArg = 0; while (nextArg < args.length) { String arg = args[nextArg++]; if (arg.equals("-nc")) nClients = Integer.parseInt(args[nextArg++]); else if (arg.equals("-ns")) nServers = Integer.parseInt(args[nextArg++]); else if (arg.equals("-batch")) batchLimit = Integer.parseInt(args[nextArg++]); else if (arg.equals("-sample")) samplePeriod = Integer.parseInt(args[nextArg++]); else if (arg.equals("-np")) nSamples = Integer.parseInt(args[nextArg++]); else { System.err.println ("Argument error:" + arg) ; System.exit (1) ; } } if (nClients <= 0 || nServers <= 0 || samplePeriod <= 0 || batchLimit > nClients) { System.err.println ("Argument error") ; System.exit (1) ; } // default batch size is 2/3 the number of clients // (for no particular reason) if (false && batchLimit <= 0) batchLimit = (2 * nClients + 1) / 3; ExThreads = nServers * nClients ; // expected # of threads HoldLimit = ExThreads ; // start up all threads Server[] servers = new Server[nServers]; for (int i = 0; i < nServers; ++i) { servers[i] = new Server(nClients); } // Wait for consensus try { Gate.lock(); try { while (nReady != ExThreads ) GateCond.await() ; } finally { Gate.unlock(); } } catch (Exception ex) { System.out.println (ex); } System.out.println ( nReady + " Ready: nc=" + nClients + " ns=" + nServers + " batch=" + batchLimit) ; // Start sampling ... // Methodological problem: all the mutator threads // can starve the compiler threads, resulting in skewed scores. // In theory, over time, the scores will improve as the compiler // threads are granted CPU cycles, but in practice a "warm up" phase // might be good idea to help C2. For this reason I've implemented // the "Hold" facility. long lastNumMsgs = 0; long sampleStart = System.currentTimeMillis(); for (int j = 0; j < nSamples; ++j) { // when this sample period is supposed to end long sampleEnd = sampleStart + samplePeriod; for (;;) { long now = System.currentTimeMillis(); if (now >= sampleEnd) { // when it really did end sampleEnd = now; break; } Thread.sleep(sampleEnd - now); } if (false && j == 2) { System.out.print ("Hold activated ...") ; HoldQ.lock(); try { Hold = true ; while (Hold) HoldQCond.await() ; } finally { HoldQ.unlock(); } } // there's no synchronization here, so the total i get is // approximate, but that's OK since any i miss for this // sample will get credited to the next sample, and on average // we'll be right long numMsgs = 0; for (int i = 0; i < nServers; ++i) numMsgs += servers[i].msgsReceived; long deltaMsgs = numMsgs - lastNumMsgs; long deltaT = sampleEnd - sampleStart; if (true || j != 2) { // Don't report results if we issued a hold ... System.out.print( "Sample period = " + deltaT + " ms; " + "New msgs rcvd = " + deltaMsgs + "; " + "Throughput = " + (deltaMsgs*1000 / deltaT) + " msg/sec\n"); // for (int i = 0; i < nServers; ++i) // servers[i].thisLock.dump(); } sampleStart = sampleEnd; lastNumMsgs = numMsgs; } System.exit(0); } } backport-util-concurrent-3.1-src/test/loops/src/MapCheck.java0000644001750700037720000004306510431260156023134 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ /** * @test * @synopsis Times and checks basic map operations */ import edu.emory.mathcs.backport.java.util.*; import java.io.*; import java.util.Map; import java.util.Hashtable; import java.util.Iterator; import java.util.Set; import java.util.Random; import java.util.IdentityHashMap; import java.util.Enumeration; public class MapCheck { static final int absentSize = 1 << 17; static final int absentMask = absentSize - 1; static Object[] absent = new Object[absentSize]; static final Object MISSING = new Object(); static TestTimer timer = new TestTimer(); static void reallyAssert(boolean b) { if (!b) throw new Error("Failed Assertion"); } public static void main(String[] args) throws Exception { Class mapClass = edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap.class; int numTests = 50; int size = 50000; if (args.length > 0) { try { mapClass = Class.forName(args[0]); } catch(ClassNotFoundException e) { throw new RuntimeException("Class " + args[0] + " not found."); } } if (args.length > 1) numTests = Integer.parseInt(args[1]); if (args.length > 2) size = Integer.parseInt(args[2]); boolean doSerializeTest = args.length > 3; System.out.println("Testing " + mapClass.getName() + " trials: " + numTests + " size: " + size); for (int i = 0; i < absentSize; ++i) absent[i] = new Object(); Object[] key = new Object[size]; for (int i = 0; i < size; ++i) key[i] = new Object(); forceMem(size * 8); for (int rep = 0; rep < numTests; ++rep) { runTest(newMap(mapClass), key); } TestTimer.printStats(); if (doSerializeTest) stest(newMap(mapClass), size); } static Map newMap(Class cl) { try { Map m = (Map)cl.newInstance(); return m; } catch(Exception e) { throw new RuntimeException("Can't instantiate " + cl + ": " + e); } } static void runTest(Map s, Object[] key) { shuffle(key); int size = key.length; long startTime = System.currentTimeMillis(); test(s, key); long time = System.currentTimeMillis() - startTime; } static void forceMem(int n) { // force enough memory Long[] junk = new Long[n]; for (int i = 0; i < junk.length; ++i) junk[i] = new Long(i); int sum = 0; for (int i = 0; i < junk.length; ++i) sum += (int)(junk[i].longValue() + i); if (sum == 0) System.out.println("Useless number = " + sum); junk = null; // System.gc(); } static void t1(String nm, int n, Map s, Object[] key, int expect) { int sum = 0; int iters = 4; timer.start(nm, n * iters); for (int j = 0; j < iters; ++j) { for (int i = 0; i < n; i++) { if (s.get(key[i]) != null) ++sum; } } timer.finish(); reallyAssert (sum == expect * iters); } static void t2(String nm, int n, Map s, Object[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.remove(key[i]) != null) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t3(String nm, int n, Map s, Object[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.put(key[i], absent[i & absentMask]) == null) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t4(String nm, int n, Map s, Object[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.containsKey(key[i])) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t5(String nm, int n, Map s, Object[] key, int expect) { int sum = 0; timer.start(nm, n/2); for (int i = n-2; i >= 0; i-=2) { if (s.remove(key[i]) != null) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t6(String nm, int n, Map s, Object[] k1, Object[] k2) { int sum = 0; timer.start(nm, n * 2); for (int i = 0; i < n; i++) { if (s.get(k1[i]) != null) ++sum; if (s.get(k2[i & absentMask]) != null) ++sum; } timer.finish(); reallyAssert (sum == n); } static void t7(String nm, int n, Map s, Object[] k1, Object[] k2) { int sum = 0; timer.start(nm, n * 2); for (int i = 0; i < n; i++) { if (s.containsKey(k1[i])) ++sum; if (s.containsKey(k2[i & absentMask])) ++sum; } timer.finish(); reallyAssert (sum == n); } static void t8(String nm, int n, Map s, Object[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.get(key[i]) != null) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t9(Map s) { int sum = 0; int iters = 20; timer.start("ContainsValue (/n) ", iters * s.size()); int step = absentSize / iters; for (int i = 0; i < absentSize; i += step) if (s.containsValue(absent[i])) ++sum; timer.finish(); reallyAssert (sum != 0); } static void ktest(Map s, int size, Object[] key) { timer.start("ContainsKey ", size); Set ks = s.keySet(); int sum = 0; for (int i = 0; i < size; i++) { if (ks.contains(key[i])) ++sum; } timer.finish(); reallyAssert (sum == size); } static void ittest1(Map s, int size) { int sum = 0; timer.start("Iter Key ", size); for (Iterator it = s.keySet().iterator(); it.hasNext(); ) { if(it.next() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void ittest2(Map s, int size) { int sum = 0; timer.start("Iter Value ", size); for (Iterator it = s.values().iterator(); it.hasNext(); ) { if(it.next() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void ittest3(Map s, int size) { int sum = 0; int hsum = 0; timer.start("Iter Entry ", size); for (Iterator it = s.entrySet().iterator(); it.hasNext(); ) { Map.Entry e = (Map.Entry)it.next(); if(e != MISSING) { hsum += System.identityHashCode(e.getKey()); hsum += System.identityHashCode(e.getValue()); hsum >>>= 1; ++sum; } } timer.finish(); reallyAssert(size == 0 || hsum >= 0); reallyAssert (sum == size); } static void ittest4(Map s, int size, int pos) { IdentityHashMap seen = new IdentityHashMap(size); reallyAssert (s.size() == size); int sum = 0; timer.start("Iter XEntry ", size); Iterator it = s.entrySet().iterator(); Object k = null; Object v = null; for (int i = 0; i < size-pos; ++i) { Map.Entry x = (Map.Entry)(it.next()); k = x.getKey(); v = x.getValue(); seen.put(k, k); if (x != MISSING) ++sum; } reallyAssert (s.containsKey(k)); it.remove(); reallyAssert (!s.containsKey(k)); while (it.hasNext()) { Map.Entry x = (Map.Entry)(it.next()); Object k2 = x.getKey(); seen.put(k2, k2); if (x != MISSING) ++sum; } reallyAssert (s.size() == size-1); s.put(k, v); reallyAssert (seen.size() == size); timer.finish(); reallyAssert (sum == size); reallyAssert (s.size() == size); } static void ittest(Map s, int size) { ittest1(s, size); ittest2(s, size); ittest3(s, size); // for (int i = 0; i < size-1; ++i) // ittest4(s, size, i); } static void entest1(Hashtable ht, int size) { int sum = 0; timer.start("Iter Enumeration Key ", size); for (Enumeration en = ht.keys(); en.hasMoreElements(); ) { if (en.nextElement() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void entest2(Hashtable ht, int size) { int sum = 0; timer.start("Iter Enumeration Value ", size); for (Enumeration en = ht.elements(); en.hasMoreElements(); ) { if (en.nextElement() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void entest3(Hashtable ht, int size) { int sum = 0; timer.start("Iterf Enumeration Key ", size); Enumeration en = ht.keys(); for (int i = 0; i < size; ++i) { if (en.nextElement() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void entest4(Hashtable ht, int size) { int sum = 0; timer.start("Iterf Enumeration Value", size); Enumeration en = ht.elements(); for (int i = 0; i < size; ++i) { if (en.nextElement() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void entest(Map s, int size) { if (s instanceof Hashtable) { Hashtable ht = (Hashtable)s; // entest3(ht, size); // entest4(ht, size); entest1(ht, size); entest2(ht, size); entest1(ht, size); entest2(ht, size); entest1(ht, size); entest2(ht, size); } } static void rtest(Map s, int size) { timer.start("Remove (iterator) ", size); for (Iterator it = s.keySet().iterator(); it.hasNext(); ) { it.next(); it.remove(); } timer.finish(); } static void rvtest(Map s, int size) { timer.start("Remove (iterator) ", size); for (Iterator it = s.values().iterator(); it.hasNext(); ) { it.next(); it.remove(); } timer.finish(); } static void dtest(Map s, int size, Object[] key) { timer.start("Put (putAll) ", size * 2); Map s2 = null; try { s2 = (Map) (s.getClass().newInstance()); s2.putAll(s); } catch (Exception e) { e.printStackTrace(); return; } timer.finish(); timer.start("Iter Equals ", size * 2); boolean eqt = s2.equals(s) && s.equals(s2); reallyAssert (eqt); timer.finish(); timer.start("Iter HashCode ", size * 2); int shc = s.hashCode(); int s2hc = s2.hashCode(); reallyAssert (shc == s2hc); timer.finish(); timer.start("Put (present) ", size); s2.putAll(s); timer.finish(); timer.start("Iter EntrySet contains ", size * 2); Set es2 = s2.entrySet(); int sum = 0; for (Iterator i1 = s.entrySet().iterator(); i1.hasNext(); ) { Object entry = i1.next(); if (es2.contains(entry)) ++sum; } timer.finish(); reallyAssert (sum == size); t6("Get ", size, s2, key, absent); Object hold = s2.get(key[size-1]); s2.put(key[size-1], absent[0]); timer.start("Iter Equals ", size * 2); eqt = s2.equals(s) && s.equals(s2); reallyAssert (!eqt); timer.finish(); timer.start("Iter HashCode ", size * 2); int s1h = s.hashCode(); int s2h = s2.hashCode(); reallyAssert (s1h != s2h); timer.finish(); s2.put(key[size-1], hold); timer.start("Remove (iterator) ", size * 2); Iterator s2i = s2.entrySet().iterator(); Set es = s.entrySet(); while (s2i.hasNext()) es.remove(s2i.next()); timer.finish(); reallyAssert (s.isEmpty()); timer.start("Clear ", size); s2.clear(); timer.finish(); reallyAssert (s2.isEmpty() && s.isEmpty()); } static void stest(Map s, int size) throws Exception { if (!(s instanceof Serializable)) return; System.out.print("Serialize : "); for (int i = 0; i < size; i++) { s.put(new Integer(i), Boolean.TRUE); } long startTime = System.currentTimeMillis(); FileOutputStream fs = new FileOutputStream("MapCheck.dat"); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(fs)); out.writeObject(s); out.close(); FileInputStream is = new FileInputStream("MapCheck.dat"); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(is)); Map m = (Map)in.readObject(); long endTime = System.currentTimeMillis(); long time = endTime - startTime; System.out.print(time + "ms"); if (s instanceof IdentityHashMap) return; reallyAssert (s.equals(m)); } static void test(Map s, Object[] key) { int size = key.length; t3("Put (absent) ", size, s, key, size); t3("Put (present) ", size, s, key, 0); t7("ContainsKey ", size, s, key, absent); t4("ContainsKey ", size, s, key, size); ktest(s, size, key); t4("ContainsKey ", absentSize, s, absent, 0); t6("Get ", size, s, key, absent); t1("Get (present) ", size, s, key, size); t1("Get (absent) ", absentSize, s, absent, 0); t2("Remove (absent) ", absentSize, s, absent, 0); t5("Remove (present) ", size, s, key, size / 2); t3("Put (half present) ", size, s, key, size / 2); ittest(s, size); entest(s, size); t9(s); rtest(s, size); t4("ContainsKey ", size, s, key, 0); t2("Remove (absent) ", size, s, key, 0); t3("Put (presized) ", size, s, key, size); dtest(s, size, key); } static class TestTimer { private String name; private long numOps; private long startTime; private String cname; static final java.util.TreeMap accum = new java.util.TreeMap(); static void printStats() { for (Iterator it = accum.entrySet().iterator(); it.hasNext(); ) { Map.Entry e = (Map.Entry)(it.next()); Stats stats = ((Stats)(e.getValue())); int n = stats.number; double t; if (n > 0) t = stats.sum / n; else t = stats.least; long nano = Math.round(1000000.0 * t); System.out.println(e.getKey() + ": " + nano); } } void start(String name, long numOps) { this.name = name; this.cname = classify(); this.numOps = numOps; startTime = System.currentTimeMillis(); } String classify() { if (name.startsWith("Get")) return "Get "; else if (name.startsWith("Put")) return "Put "; else if (name.startsWith("Remove")) return "Remove "; else if (name.startsWith("Iter")) return "Iter "; else return null; } void finish() { long endTime = System.currentTimeMillis(); long time = endTime - startTime; double timePerOp = ((double)time)/numOps; Object st = accum.get(name); if (st == null) accum.put(name, new Stats(timePerOp)); else { Stats stats = (Stats) st; stats.sum += timePerOp; stats.number++; if (timePerOp < stats.least) stats.least = timePerOp; } if (cname != null) { st = accum.get(cname); if (st == null) accum.put(cname, new Stats(timePerOp)); else { Stats stats = (Stats) st; stats.sum += timePerOp; stats.number++; if (timePerOp < stats.least) stats.least = timePerOp; } } } } static class Stats { double sum = 0; double least; int number = 0; Stats(double t) { least = t; } } static Random rng = new Random(); static void shuffle(Object[] keys) { int size = keys.length; for (int i=size; i>1; i--) { int r = rng.nextInt(i); Object t = keys[i-1]; keys[i-1] = keys[r]; keys[r] = t; } } } backport-util-concurrent-3.1-src/test/loops/src/RLJBar.java0000644001750700037720000001202410431260156022524 0ustar dawidkdcl// Yet another contended object monitor throughput test // adapted from bug reports import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import java.util.Map; class Producer extends Thread { // private static Hashtable buddiesOnline = new Hashtable(); private static Map buddiesOnline = new ConcurrentHashMap(); public Producer (String name) { super(name); } public void run() { Object key = null ; final ReentrantLock dr = RLJBar.DeathRow; final ReentrantLock bar = RLJBar.bar; final ReentrantLock end = RLJBar.End; final Condition endCondition = RLJBar.EndCondition; if (RLJBar.OneKey) key = new Integer(0) ; // per-thread v. per iteration // The barrier has a number of interesting effects: // 1. It enforces full LWP provisioning on T1. // (nearly all workers park concurrently). // 2. It gives the C2 compiler thread(s) a chance to run. // By transiently quiescing the workings the C2 threads // might avoid starvation. // try { bar.lock(); try { ++RLJBar.nUp ; if (RLJBar.nUp == RLJBar.nThreads) { if (RLJBar.quiesce != 0) { RLJBar.barCondition.await(RLJBar.quiesce * 1000000, TimeUnit.NANOSECONDS) ; } RLJBar.epoch = System.currentTimeMillis () ; RLJBar.barCondition.signalAll () ; // System.out.print ("Consensus ") ; } if (RLJBar.UseBar) { while (RLJBar.nUp != RLJBar.nThreads) { RLJBar.barCondition.await () ; } } } finally { bar.unlock(); } } catch (Exception ex) { System.out.println ("Exception in barrier: " + ex) ; } // Main execution time ... the code being timed ... // HashTable.get() is highly contended (serial). for (int loop = 1; loop < 100000 ;loop++) { if (!RLJBar.OneKey) key = new Integer(0) ; buddiesOnline.get(key); } // Mutator epilog: // The following code determines if the test will/wont include (measure) // thread death time. end.lock(); try { ++RLJBar.nDead ; if (RLJBar.nDead == RLJBar.nUp) { // System.out.print((System.currentTimeMillis()-RLJBar.epoch) + " ms") ; endCondition.signalAll() ; } } finally { end.unlock(); } dr.lock(); dr.unlock(); } } public class RLJBar // ProdConsTest { public static final int ITERS = 10; public static boolean OneKey = false ; // alloc once or once per iteration public static boolean UseBar = false ; public static int nThreads = 100 ; public static int nUp = 0 ; public static int nDead = 0 ; public static ReentrantLock bar = new ReentrantLock() ; public static Condition barCondition = bar.newCondition() ; public static long epoch ; public static ReentrantLock DeathRow = new ReentrantLock () ; public static ReentrantLock End = new ReentrantLock () ; public static int quiesce = 0 ; public static Condition EndCondition = End.newCondition(); public static void main (String[] args) { int argix = 0 ; if (argix < args.length && args[argix].equals("-o")) { ++argix ; OneKey = true ; System.out.println ("OneKey") ; } if (argix < args.length && args[argix].equals ("-b")) { ++argix ; UseBar = true ; System.out.println ("UseBar") ; } if (argix < args.length && args[argix].equals ("-q")) { ++argix ; if (argix < args.length) { quiesce = Integer.parseInt (args[argix++]) ; System.out.println ("Quiesce " + quiesce + " msecs") ; } } for (int k = 0; k < ITERS; ++k) oneRun(); } public static void oneRun() { DeathRow = new ReentrantLock () ; End = new ReentrantLock () ; EndCondition = End.newCondition(); nDead = nUp = 0 ; long cyBase = System.currentTimeMillis () ; DeathRow.lock(); try { for (int i = 1; i <= nThreads ; i++) { new Producer("Producer" + i).start(); } try { End.lock(); try { while (nDead != nThreads) EndCondition.await() ; } finally { End.unlock(); } } catch (Exception ex) { System.out.println ("Exception in End: " + ex) ; } } finally { DeathRow.unlock(); } System.out.println ("Outer time: " + (System.currentTimeMillis()-cyBase)) ; // Let workers quiesce/exit. try { Thread.sleep (1000) ; } catch (Exception ex) {} ; } } backport-util-concurrent-3.1-src/test/loops/src/CancelledProducerConsumerLoops.java0000644001750700037720000001237710365574245027607 0ustar dawidkdcl/* * @test %I% %E% * @bug 4486658 * @compile -source 1.5 CancelledProducerConsumerLoops.java * @run main/timeout=7000 CancelledProducerConsumerLoops * @summary Checks for responsiveness of blocking queues to cancellation. * Runs under the assumption that ITERS computations require more than * TIMEOUT msecs to complete. */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; public class CancelledProducerConsumerLoops { static final int CAPACITY = 100; static final long TIMEOUT = 100; static final ExecutorService pool = Executors.newCachedThreadPool(); static boolean print = false; public static void main(String[] args) throws Exception { int maxPairs = 8; int iters = 1000000; if (args.length > 0) maxPairs = Integer.parseInt(args[0]); print = true; for (int i = 1; i <= maxPairs; i += (i+1) >>> 1) { System.out.println("Pairs:" + i); try { oneTest(i, iters); } catch(BrokenBarrierException bb) { // OK, ignore } Thread.sleep(100); } pool.shutdown(); } static void oneRun(BlockingQueue q, int npairs, int iters) throws Exception { LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier = new CyclicBarrier(npairs * 2 + 1, timer); Future[] prods = new Future[npairs]; Future[] cons = new Future[npairs]; for (int i = 0; i < npairs; ++i) { prods[i] = pool.submit(new Producer(q, barrier, iters)); cons[i] = pool.submit(new Consumer(q, barrier, iters)); } barrier.await(); Thread.sleep(TIMEOUT); boolean tooLate = false; for (int i = 1; i < npairs; ++i) { if (!prods[i].cancel(true)) tooLate = true; if (!cons[i].cancel(true)) tooLate = true; } Object p0 = prods[0].get(); Object c0 = cons[0].get(); if (!tooLate) { for (int i = 1; i < npairs; ++i) { if (!prods[i].isDone() || !prods[i].isCancelled()) throw new Error("Only one producer thread should complete"); if (!cons[i].isDone() || !cons[i].isCancelled()) throw new Error("Only one consumer thread should complete"); } } else System.out.print("(cancelled too late) "); long endTime = Utils.nanoTime(); long time = endTime - timer.startTime; if (print) { double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } } static void oneTest(int pairs, int iters) throws Exception { if (print) System.out.print("ArrayBlockingQueue "); oneRun(new ArrayBlockingQueue(CAPACITY), pairs, iters); if (print) System.out.print("LinkedBlockingQueue "); oneRun(new LinkedBlockingQueue(CAPACITY), pairs, iters); if (print) System.out.print("SynchronousQueue "); oneRun(new SynchronousQueue(), pairs, iters / 8); if (print) System.out.print("SynchronousQueue(fair) "); oneRun(new SynchronousQueue(true), pairs, iters / 8); /* Can legitimately run out of memory before cancellation if (print) System.out.print("PriorityBlockingQueue "); oneRun(new PriorityBlockingQueue(ITERS / 2 * pairs), pairs, iters / 4); */ } static abstract class Stage implements Callable { final BlockingQueue queue; final CyclicBarrier barrier; final int iters; Stage (BlockingQueue q, CyclicBarrier b, int iters) { queue = q; barrier = b; this.iters = iters; } } static class Producer extends Stage { Producer(BlockingQueue q, CyclicBarrier b, int iters) { super(q, b, iters); } public Object call() throws Exception { barrier.await(); int s = 0; int l = 4321; for (int i = 0; i < iters; ++i) { l = LoopHelpers.compute1(l); s += LoopHelpers.compute2(l); if (!queue.offer(new Integer(l), 1, TimeUnit.SECONDS)) break; } return new Integer(s); } } static class Consumer extends Stage { Consumer(BlockingQueue q, CyclicBarrier b, int iters) { super(q, b, iters); } public Object call() throws Exception { barrier.await(); int l = 0; int s = 0; for (int i = 0; i < iters; ++i) { Integer x = (Integer)queue.poll(1, TimeUnit.SECONDS); if (x == null) break; l = LoopHelpers.compute1(x.intValue()); s += l; } return new Integer(s); } } } backport-util-concurrent-3.1-src/test/loops/src/Finals.java0000644001750700037720000000413210253737131022671 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ public class Finals { static int npairs = 2; static int iters = 10000000; static final int LEN = 4; static final Long[] nums = new Long[LEN]; static volatile boolean done; static volatile long total; public static void main(String[] args) { for (int i = 0; i < LEN; ++i) nums[i] = new Long(i+1); Thread[] ps = new Thread[npairs]; Thread[] as = new Reader[npairs]; for (int i = 0; i < npairs; ++i) { ps[i] = new Writer(); as[i] = new Reader(); } for (int i = 0; i < as.length; ++i) { ps[i].start(); as[i].start(); } } static long nextRandom(long seed) { return (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1); } static long initialSeed(Object x) { return (System.currentTimeMillis() + x.hashCode()) | 1; } static class Writer extends Thread { public void run() { long s = initialSeed(this); int n = iters; while (!done && n-- > 0) { int k = (int)(s & (LEN-1)); int l = (k+1) & (LEN-1); nums[k] = new Long(s); nums[l] = new Long(s); s = nextRandom(s); if (s == 0) s = initialSeed(this); } done = true; total += s; } } static class Reader extends Thread { public void run() { int n = iters; long s = initialSeed(this); while (s != 0 && n > 0) { long nexts = nums[(int)(s & (LEN-1))].longValue(); if (nexts != s) --n; else if (done) break; s = nexts; } done = true; total += s; if (s == 0) throw new Error("Saw uninitialized value"); } } } backport-util-concurrent-3.1-src/test/loops/src/ConcurrentDequeLoops.java0000644001750700037720000001223210431260156025574 0ustar dawidkdcl/* * @test %I% %E% * @bug 4486658 * @compile -source 1.5 ConcurrentDequeLoops.java * @run main/timeout=230 ConcurrentDequeLoops * @summary Checks that a set of threads can repeatedly get and modify items */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; import java.util.ArrayList; public class ConcurrentDequeLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static AtomicInteger totalItems; static boolean print = false; public static void main(String[] args) throws Exception { int maxStages = 8; int items = 1000000; Class klass = null; if (args.length > 0) { try { klass = Class.forName(args[0]); } catch(ClassNotFoundException e) { throw new RuntimeException("Class " + args[0] + " not found."); } } else throw new Error(); if (args.length > 1) maxStages = Integer.parseInt(args[1]); System.out.print("Class: " + klass.getName()); System.out.println(" stages: " + maxStages); print = false; System.out.println("Warmup..."); oneRun(klass, 1, items); Thread.sleep(100); oneRun(klass, 1, items); Thread.sleep(100); print = true; int k = 1; for (int i = 1; i <= maxStages;) { oneRun(klass, i, items); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static class Stage implements Callable { final Deque queue; final CyclicBarrier barrier; final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); int items; Stage (Deque q, CyclicBarrier b, int items) { queue = q; barrier = b; this.items = items; } public Object call() { // Repeatedly take something from queue if possible, // transform it, and put back in. try { barrier.await(); int l = (int)Utils.nanoTime(); int takes = 0; for (;;) { Integer item; int rnd = rng.next(); if ((rnd & 1) == 0) item = (Integer)queue.pollFirst(); else item = (Integer)queue.pollLast(); if (item != null) { ++takes; l += LoopHelpers.compute2(item.intValue()); } else if (takes != 0) { totalItems.getAndAdd(-takes); takes = 0; } else if (totalItems.get() <= 0) break; l = LoopHelpers.compute1(l); if (items > 0) { --items; Integer res = new Integer(l); if ((rnd & 16) == 0) queue.addFirst(res); else queue.addLast(res); } else { // spinwait for (int k = 1 + (l & 15); k != 0; --k) l = LoopHelpers.compute1(LoopHelpers.compute2(l)); if ((l & 3) == 3) { Thread.sleep(1); } } } return new Integer(l); } catch (Exception ie) { ie.printStackTrace(); throw new Error("Call loop failed"); } } } static void oneRun(Class klass, int n, int items) throws Exception { Deque q = (Deque)klass.newInstance(); LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); CyclicBarrier barrier = new CyclicBarrier(n + 1, timer); totalItems = new AtomicInteger(n * items); ArrayList results = new ArrayList(n); for (int i = 0; i < n; ++i) results.add(pool.submit(new Stage(q, barrier, items))); if (print) System.out.print("Threads: " + n + "\t:"); barrier.await(); int total = 0; for (int i = 0; i < n; ++i) { Future f = (Future)results.get(i); Integer r = (Integer)f.get(); total += r.intValue(); } long endTime = Utils.nanoTime(); long time = endTime - timer.startTime; if (print) System.out.println(LoopHelpers.rightJustify(time / (items * n)) + " ns per item"); if (total == 0) // avoid overoptimization System.out.println("useless result: " + total); } } backport-util-concurrent-3.1-src/test/loops/src/NavigableMapCheck.java0000644001750700037720000003627210431777323024760 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ /** * @test * @synopsis Times and checks basic map operations */ import edu.emory.mathcs.backport.java.util.*; import java.io.*; import java.util.Random; import java.util.Map; import java.util.Iterator; import java.util.Set; public class NavigableMapCheck { static int absentSize; static int absentMask; static Integer[] absent; static final Integer MISSING = new Integer(Integer.MIN_VALUE); static TestTimer timer = new TestTimer(); static void reallyAssert(boolean b) { if (!b) throw new Error("Failed Assertion"); } public static void main(String[] args) throws Exception { Class mapClass = null; int numTests = 50; int size = 50000; if (args.length > 0) { try { mapClass = Class.forName(args[0]); } catch(ClassNotFoundException e) { throw new RuntimeException("Class " + args[0] + " not found."); } } if (args.length > 1) numTests = Integer.parseInt(args[1]); if (args.length > 2) size = Integer.parseInt(args[2]); System.out.println("Testing " + mapClass.getName() + " trials: " + numTests + " size: " + size); absentSize = 8; while (absentSize < size) absentSize <<= 1; absentMask = absentSize - 1; absent = new Integer[absentSize]; for (int i = 0; i < absentSize; ++i) absent[i] = new Integer(i * 2); Integer[] key = new Integer[size]; for (int i = 0; i < size; ++i) key[i] = new Integer(i * 2 + 1); for (int rep = 0; rep < numTests; ++rep) { runTest(newMap(mapClass), key); } TestTimer.printStats(); } static NavigableMap newMap(Class cl) { try { NavigableMap m = (NavigableMap)cl.newInstance(); return m; } catch(Exception e) { throw new RuntimeException("Can't instantiate " + cl + ": " + e); } } static void runTest(NavigableMap s, Integer[] key) { shuffle(key); int size = key.length; long startTime = System.currentTimeMillis(); test(s, key); long time = System.currentTimeMillis() - startTime; } static void t1(String nm, int n, NavigableMap s, Integer[] key, int expect) { int sum = 0; int iters = 4; timer.start(nm, n * iters); for (int j = 0; j < iters; ++j) { for (int i = 0; i < n; i++) { if (s.get(key[i]) != null) ++sum; } } timer.finish(); reallyAssert (sum == expect * iters); } static void t2(String nm, int n, NavigableMap s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.remove(key[i]) != null) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t3(String nm, int n, NavigableMap s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.put(key[i], absent[i & absentMask]) == null) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t4(String nm, int n, NavigableMap s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.containsKey(key[i])) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t5(String nm, int n, NavigableMap s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n/2); for (int i = n-2; i >= 0; i-=2) { if (s.remove(key[i]) != null) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t6(String nm, int n, NavigableMap s, Integer[] k1, Integer[] k2) { int sum = 0; timer.start(nm, n * 2); for (int i = 0; i < n; i++) { if (s.get(k1[i]) != null) ++sum; if (s.get(k2[i & absentMask]) != null) ++sum; } timer.finish(); reallyAssert (sum == n); } static void t7(String nm, int n, NavigableMap s, Integer[] k1, Integer[] k2) { int sum = 0; timer.start(nm, n * 2); for (int i = 0; i < n; i++) { if (s.containsKey(k1[i])) ++sum; if (s.containsKey(k2[i & absentMask])) ++sum; } timer.finish(); reallyAssert (sum == n); } static void t8(String nm, int n, NavigableMap s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.get(key[i]) != null) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t9(NavigableMap s) { int sum = 0; int iters = 20; timer.start("ContainsValue (/n) ", iters * s.size()); int step = absentSize / iters; for (int i = 0; i < absentSize; i += step) if (s.containsValue(absent[i])) ++sum; timer.finish(); reallyAssert (sum != 0); } static void higherTest(NavigableMap s) { int sum = 0; int iters = s.size(); timer.start("Higher ", iters); Map.Entry e = s.firstEntry(); while (e != null) { ++sum; e = s.higherEntry(e.getKey()); } timer.finish(); reallyAssert (sum == iters); } static void lowerTest(NavigableMap s) { int sum = 0; int iters = s.size(); timer.start("Lower ", iters); Map.Entry e = s.firstEntry(); while (e != null) { ++sum; e = s.higherEntry(e.getKey()); } timer.finish(); reallyAssert (sum == iters); } static void ceilingTest(NavigableMap s) { int sum = 0; int iters = s.size(); if (iters > absentSize) iters = absentSize; timer.start("Ceiling ", iters); for (int i = 0; i < iters; ++i) { Map.Entry e = s.ceilingEntry(absent[i]); if (e != null) ++sum; } timer.finish(); reallyAssert (sum == iters); } static void floorTest(NavigableMap s) { int sum = 0; int iters = s.size(); if (iters > absentSize) iters = absentSize; timer.start("Floor ", iters); for (int i = 1; i < iters; ++i) { Map.Entry e = s.floorEntry(absent[i]); if (e != null) ++sum; } timer.finish(); reallyAssert (sum == iters-1); } static void ktest(NavigableMap s, int size, Integer[] key) { timer.start("ContainsKey ", size); Set ks = s.keySet(); int sum = 0; for (int i = 0; i < size; i++) { if (ks.contains(key[i])) ++sum; } timer.finish(); reallyAssert (sum == size); } static void ittest1(NavigableMap s, int size) { int sum = 0; timer.start("Iter Key ", size); for (Iterator it = s.keySet().iterator(); it.hasNext(); ) { if(it.next() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void ittest2(NavigableMap s, int size) { int sum = 0; timer.start("Iter Value ", size); for (Iterator it = s.values().iterator(); it.hasNext(); ) { if(it.next() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void ittest3(NavigableMap s, int size) { int sum = 0; timer.start("Iter Entry ", size); for (Iterator it = s.entrySet().iterator(); it.hasNext(); ) { if(it.next() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void ittest(NavigableMap s, int size) { ittest1(s, size); ittest2(s, size); ittest3(s, size); } static void rittest1(NavigableMap s, int size) { int sum = 0; timer.start("Desc Iter Key ", size); for (Iterator it = s.descendingKeySet().iterator(); it.hasNext(); ) { if(it.next() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void rittest(NavigableMap s, int size) { rittest1(s, size); // rittest2(s, size); } static void rtest(NavigableMap s, int size) { timer.start("Remove (iterator) ", size); for (Iterator it = s.keySet().iterator(); it.hasNext(); ) { it.next(); it.remove(); } timer.finish(); } static void rvtest(NavigableMap s, int size) { timer.start("Remove (iterator) ", size); for (Iterator it = s.values().iterator(); it.hasNext(); ) { it.next(); it.remove(); } timer.finish(); } static void dtest(NavigableMap s, int size, Integer[] key) { timer.start("Put (putAll) ", size * 2); NavigableMap s2 = null; try { s2 = (NavigableMap) (s.getClass().newInstance()); s2.putAll(s); } catch (Exception e) { e.printStackTrace(); return; } timer.finish(); timer.start("Iter Equals ", size * 2); boolean eqt = s2.equals(s) && s.equals(s2); reallyAssert (eqt); timer.finish(); timer.start("Iter HashCode ", size * 2); int shc = s.hashCode(); int s2hc = s2.hashCode(); reallyAssert (shc == s2hc); timer.finish(); timer.start("Put (present) ", size); s2.putAll(s); timer.finish(); timer.start("Iter EntrySet contains ", size * 2); Set es2 = s2.entrySet(); int sum = 0; for (Iterator i1 = s.entrySet().iterator(); i1.hasNext(); ) { Object entry = i1.next(); if (es2.contains(entry)) ++sum; } timer.finish(); reallyAssert (sum == size); t6("Get ", size, s2, key, absent); Object hold = s2.get(key[size-1]); s2.put(key[size-1], absent[0]); timer.start("Iter Equals ", size * 2); eqt = s2.equals(s) && s.equals(s2); reallyAssert (!eqt); timer.finish(); timer.start("Iter HashCode ", size * 2); int s1h = s.hashCode(); int s2h = s2.hashCode(); reallyAssert (s1h != s2h); timer.finish(); s2.put(key[size-1], hold); timer.start("Remove (iterator) ", size * 2); Iterator s2i = s2.entrySet().iterator(); Set es = s.entrySet(); while (s2i.hasNext()) es.remove(s2i.next()); timer.finish(); reallyAssert (s.isEmpty()); timer.start("Clear ", size); s2.clear(); timer.finish(); reallyAssert (s2.isEmpty() && s.isEmpty()); } static void test(NavigableMap s, Integer[] key) { int size = key.length; t3("Put (absent) ", size, s, key, size); t3("Put (present) ", size, s, key, 0); t7("ContainsKey ", size, s, key, absent); t4("ContainsKey ", size, s, key, size); ktest(s, size, key); t4("ContainsKey ", absentSize, s, absent, 0); t6("Get ", size, s, key, absent); t1("Get (present) ", size, s, key, size); t1("Get (absent) ", absentSize, s, absent, 0); t2("Remove (absent) ", absentSize, s, absent, 0); t5("Remove (present) ", size, s, key, size / 2); t3("Put (half present) ", size, s, key, size / 2); ittest(s, size); rittest(s, size); higherTest(s); ceilingTest(s); floorTest(s); lowerTest(s); t9(s); rtest(s, size); t4("ContainsKey ", size, s, key, 0); t2("Remove (absent) ", size, s, key, 0); t3("Put (presized) ", size, s, key, size); dtest(s, size, key); } static class TestTimer { private String name; private long numOps; private long startTime; private String cname; static final java.util.TreeMap accum = new java.util.TreeMap(); static void printStats() { for (Iterator it = accum.entrySet().iterator(); it.hasNext(); ) { Map.Entry e = (Map.Entry)(it.next()); Stats stats = ((Stats)(e.getValue())); int n = stats.number; double t; if (n > 0) t = stats.sum / n; else t = stats.least; long nano = Math.round(1000000.0 * t); System.out.println(e.getKey() + ": " + nano); } } void start(String name, long numOps) { this.name = name; this.cname = classify(); this.numOps = numOps; startTime = System.currentTimeMillis(); } String classify() { if (name.startsWith("Get")) return "Get "; else if (name.startsWith("Put")) return "Put "; else if (name.startsWith("Remove")) return "Remove "; else if (name.startsWith("Iter")) return "Iter "; else return null; } void finish() { long endTime = System.currentTimeMillis(); long time = endTime - startTime; double timePerOp = ((double)time)/numOps; Object st = accum.get(name); if (st == null) accum.put(name, new Stats(timePerOp)); else { Stats stats = (Stats) st; stats.sum += timePerOp; stats.number++; if (timePerOp < stats.least) stats.least = timePerOp; } if (cname != null) { st = accum.get(cname); if (st == null) accum.put(cname, new Stats(timePerOp)); else { Stats stats = (Stats) st; stats.sum += timePerOp; stats.number++; if (timePerOp < stats.least) stats.least = timePerOp; } } } } static class Stats { double sum = 0; double least; int number = 0; Stats(double t) { least = t; } } static Random rng = new Random(); static void shuffle(Integer[] keys) { int size = keys.length; for (int i=size; i>1; i--) { int r = rng.nextInt(i); Integer t = keys[i-1]; keys[i-1] = keys[r]; keys[r] = t; } } } backport-util-concurrent-3.1-src/test/loops/src/MapWordLoops.java0000644001750700037720000001314210431260156024040 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import edu.emory.mathcs.backport.java.util.*; import java.io.*; import java.util.Map; public class MapWordLoops { static final String[] WORDS_FILES = { "kw.txt", "class.txt", "dir.txt", "ids.txt", }; static final int MAX_WORDS = 500000; static final int pinsert = 60; static final int premove = 1; static final int NOPS = 5000000; static final int numTests = 3; public static void main(String[] args) { Class mapClass = null; try { mapClass = Class.forName(args[0]); } catch(ClassNotFoundException e) { throw new RuntimeException("Class " + args[0] + " not found."); } System.out.println("Testing " + mapClass.getName()); for (int s = 0; s < WORDS_FILES.length; ++s) tests(mapClass, numTests, s); for (int s = WORDS_FILES.length-1; s >= 0; --s) tests(mapClass, numTests, s); } static void tests(Class mapClass, int numTests, int sizeIndex) { try { String[] key = readWords(sizeIndex); int size = key.length; System.out.print("n = " +LoopHelpers.rightJustify(size) +" : "); long least = Long.MAX_VALUE; for (int i = 0; i < numTests; ++i) { Map m = newMap(mapClass); long t = doTest(i, mapClass.getName(), m, key); if (t < least) least = t; m.clear(); m = null; } long nano = Math.round(1000000.0 * (least) / NOPS); System.out.println(LoopHelpers.rightJustify(nano) + " ns per op"); } catch (IOException ignore) { return; // skip test if can't read file } } static Map newMap(Class cl) { try { Map m = (Map)cl.newInstance(); return m; } catch(Exception e) { throw new RuntimeException("Can't instantiate " + cl + ": " + e); } } static void pause() { try { Thread.sleep(100); } catch(InterruptedException ie) { return; } } static String[] readWords(int sizeIndex) throws IOException { String[] l = new String[MAX_WORDS]; String[] array = null; try { FileReader fr = new FileReader(WORDS_FILES[sizeIndex]); BufferedReader reader = new BufferedReader(fr); int k = 0; for (;;) { String s = reader.readLine(); if (s == null) break; l[k++] = s; } array = new String[k]; for (int i = 0; i < k; ++i) { array[i] = l[i]; l[i] = null; } l = null; reader.close(); } catch (IOException ex) { System.out.println("Can't read words file:" + ex); throw ex; } return array; } static long doTest(int id, String name, final Map m, final String[] key) { // System.out.print(name + "\t"); Runner runner = new Runner(id, m, key); long startTime = System.currentTimeMillis(); runner.run(); long afterRun = System.currentTimeMillis(); long runTime = (afterRun - startTime); int np = runner.total; if (runner.total == runner.hashCode()) System.out.println("Useless Number" + runner.total); int sz = runner.maxsz; if (sz == runner.hashCode()) System.out.println("Useless Number" + sz); // System.out.print(" m = " + sz); return runTime; } static class Runner implements Runnable { final Map map; final String[] key; LoopHelpers.SimpleRandom rng; final int pctrem; final int pctins; int nputs = 0; int npgets = 0; int nagets = 0; int nremoves = 0; volatile int total; int maxsz; Runner(int id, Map m, String[] k) { map = m; key = k; pctrem = (int)(((long)premove * (long)(Integer.MAX_VALUE/2)) / 50); pctins = (int)(((long)pinsert * (long)(Integer.MAX_VALUE/2)) / 50); rng = new LoopHelpers.SimpleRandom((id + 1) * 8862213513L); } int oneStep(int j) { int n = key.length; int r = rng.next() & 0x7FFFFFFF; int jinc = (r & 7); j += jinc - 3; if (j >= n) j -= n; if (j < 0) j += n; int l = n / 4 + j; if (l >= n) l -= n; String k = key[j]; String x = (String)map.get(k); if (x == null) { ++nagets; if (r < pctins) { map.put(k, key[l]); ++nputs; int csz = nputs - nremoves; if (csz > maxsz) maxsz = csz; } } else { if (k== x) ++npgets; if (r < pctrem) { map.remove(k); ++nremoves; j += ((r >>> 8) & 7) + n / 2; if (j >= n) j -= n; } } return j; } public void run() { int j = key.length / 2; for (int i = 0; i < NOPS; ++i) { j = oneStep(j); } total = nputs + npgets + nagets + nremoves; } } } backport-util-concurrent-3.1-src/test/loops/src/TimeoutMutexLoops.java0000644001750700037720000000665010253737131025152 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ /* * @test * Checks for responsiveness of locks to timeouts. Runs under the * assumption that ITERS computations require more than TIMEOUT msecs * to complete, which seems to be a safe assumption for another * decade. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class TimeoutMutexLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static final int ITERS = Integer.MAX_VALUE; static final long TIMEOUT = 100; public static void main(String[] args) throws Exception { // int maxThreads = 100; // if (args.length > 0) // maxThreads = Integer.parseInt(args[0]); // // print = true; // // for (int i = 1; i <= maxThreads; i += (i+1) >>> 1) { // System.out.print("Threads: " + i); // new MutexLoop(i).test(); // Thread.sleep(TIMEOUT); // } // pool.shutdown(); } static final class MutexLoop implements Runnable { private int v = rng.next(); private volatile boolean completed; private volatile int result = 17; // private final Mutex lock = new Mutex(); private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; MutexLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } // final void test() throws Exception { // for (int i = 0; i < nthreads; ++i) // pool.execute(this); // barrier.await(); // Thread.sleep(TIMEOUT); // lock.lock(); // barrier.await(); // if (print) { // long time = timer.getTime(); // double secs = (double)(time) / 1000000000.0; // System.out.println("\t " + secs + "s run time"); // } // // if (completed) // throw new Error("Some thread completed instead of timing out"); // int r = result; // if (r == 0) // avoid overoptimization // System.out.println("useless result: " + r); // } // public final void run() { // try { // barrier.await(); // int sum = v; // int x = 0; // int n = ITERS; // do { // if (!lock.tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) // break; // try { // v = x = LoopHelpers.compute1(v); // } // finally { // lock.unlock(); // } // sum += LoopHelpers.compute2(x); // } while (n-- > 0); // if (n <= 0) // completed = true; // barrier.await(); // result += sum; // } // catch (Exception ie) { // return; // } } } } backport-util-concurrent-3.1-src/test/loops/src/SimpleMutexLoops.java0000644001750700037720000000713610256105111024743 0ustar dawidkdcl/* * @test * @synopsis multiple threads using a single lock */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class SimpleMutexLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int iters = 2000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); // new MutexLoop(1).test(); // new MutexLoop(1).test(); print = true; int k = 1; for (int i = 1; i <= maxThreads;) { System.out.print("Threads: " + i); // new MutexLoop(i).test(); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } // static final class MutexLoop implements Runnable { // private int v = rng.next(); // private volatile int result = 17; // private final Mutex lock = new Mutex(); // private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); // private final CyclicBarrier barrier; // private final int nthreads; // private volatile int readBarrier; // MutexLoop(int nthreads) { // this.nthreads = nthreads; // barrier = new CyclicBarrier(nthreads+1, timer); // } // // final void test() throws Exception { // for (int i = 0; i < nthreads; ++i) // pool.execute(this); // barrier.await(); // barrier.await(); // if (print) { // long time = timer.getTime(); // long tpi = time / ((long)iters * nthreads); // System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock"); // double secs = (double)(time) / 1000000000.0; // System.out.println("\t " + secs + "s run time"); // } // // int r = result; // if (r == 0) // avoid overoptimization // System.out.println("useless result: " + r); // } // // public final void run() { // final Mutex lock = this.lock; // try { // barrier.await(); // int sum = v + 1; // int x = 0; // int n = iters; // while (n-- > 0) { // lock.lock(); // int k = (sum & 3); // if (k > 0) { // x = v; // while (k-- > 0) // x = LoopHelpers.compute6(x); // v = x; // } // else x = sum + 1; // lock.unlock(); // if ((x += readBarrier) == 0) // ++readBarrier; // for (int l = x & 7; l > 0; --l) // sum += LoopHelpers.compute6(sum); // } // barrier.await(); // result += sum; // } // catch (Exception ie) { // return; // } // } // } } backport-util-concurrent-3.1-src/test/loops/src/ExecutorCompletionServiceLoops.java0000644001750700037720000000510710201025631027632 0ustar dawidkdcl/* * @test %I% %E% * @bug 166 * @compile -source 1.5 ExecutorCompletionServiceLoops.java * @run main/timeout=3600 ExecutorCompletionServiceLoops * @summary Exercise ExecutorCompletionServiceLoops */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; public class ExecutorCompletionServiceLoops { static final int POOLSIZE = 100; static final ExecutorService pool = Executors.newFixedThreadPool(POOLSIZE); static final ExecutorCompletionService ecs = new ExecutorCompletionService(pool); static boolean print = false; public static void main(String[] args) throws Exception { int max = 8; int base = 10000; if (args.length > 0) max = Integer.parseInt(args[0]); System.out.println("Warmup..."); oneTest( base ); Thread.sleep(100); print = true; for (int i = 1; i <= max; i += (i+1) >>> 1) { System.out.print("n: " + i * base); oneTest(i * base ); Thread.sleep(100); } pool.shutdown(); } static class Task implements Callable { public Object call() { int l = System.identityHashCode(this); l = LoopHelpers.compute2(l); int s = LoopHelpers.compute1(l); l = LoopHelpers.compute2(l); s += LoopHelpers.compute1(l); return new Integer(s); } } static class Producer implements Runnable { final ExecutorCompletionService cs; final int iters; Producer(ExecutorCompletionService ecs, int i) { cs = ecs; iters = i; } public void run() { for (int i = 0; i < iters; ++i) ecs.submit(new Task()); } } static void oneTest(int iters) throws Exception { long startTime = Utils.nanoTime(); new Thread(new Producer(ecs, iters)).start(); int r = 0; for (int i = 0; i < iters; ++i) r += ((Integer)ecs.take().get()).intValue(); long elapsed = Utils.nanoTime() - startTime; long tpi = elapsed/ iters; if (print) System.out.println("\t: " + LoopHelpers.rightJustify(tpi) + " ns per task"); if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } } backport-util-concurrent-3.1-src/test/loops/src/NoopSpinLockLoops.java0000644001750700037720000000652010253737131025053 0ustar dawidkdcl/* * @test * @synopsis multiple threads using a single builtin lock */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import edu.emory.mathcs.backport.java.util.*; public final class NoopSpinLockLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int iters = 20000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); new ReentrantLockLoop(1).test(); new ReentrantLockLoop(1).test(); print = true; int k = 1; for (int i = 1; i <= maxThreads;) { System.out.print("Threads: " + i); new ReentrantLockLoop(i).test(); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static final class ReentrantLockLoop implements Runnable { private int v = rng.next(); private volatile int result = 17; private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; private volatile int readBarrier; private final AtomicInteger spinlock = new AtomicInteger(); ReentrantLockLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); if (print) { long time = timer.getTime(); long tpi = time / ((long)iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { final AtomicInteger lock = this.spinlock; try { barrier.await(); int sum = v + 1; int x = sum + 1; int n = iters; while (n-- > 0) { while (!lock.compareAndSet(0, 1)) ; x = LoopHelpers.compute4(x); lock.set(0); if ((x += readBarrier) == 0) ++readBarrier; sum += x; } barrier.await(); result += sum; } catch (Exception ie) { return; } } } } backport-util-concurrent-3.1-src/test/loops/src/DequeBash.java0000644001750700037720000003670410346121124023320 0ustar dawidkdcl/* * Written by Josh Bloch of Google Inc. and released to the public domain, * as explained at http://creativecommons.org/licenses/publicdomain. */ import edu.emory.mathcs.backport.java.util.*; import java.io.*; import java.util.Collection; import java.util.Arrays; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.List; import java.util.Collections; /** * Interface-based Deque tester. This test currently makes three * assumptions about the implementation under test: * * 1) It has no size limitation. * 2) It implements Serializable. * 3) It has a conventional (Collection) constructor. * * All of these assumptions could be relaxed. */ public class DequeBash { static int seed = 7; static int nextTail = 0; static int nextHead = -1; static int size() { return nextTail - nextHead - 1; } static int random(int bound) { int x = seed; int t = (x % 127773) * 16807 - (x / 127773) * 2836; seed = (t > 0)? t : t + 0x7fffffff; return (t & 0x7fffffff) % bound; } static int random() { int x = seed; int t = (x % 127773) * 16807 - (x / 127773) * 2836; seed = (t > 0)? t : t + 0x7fffffff; return (t & 0x7fffffff); } public static void main(String args[]) throws Exception { Class cls = Class.forName(args[0]); int n = 1000000; for (int j = 0; j < 3; ++j) { Deque deque = (Deque) cls.newInstance(); nextTail = 0; nextHead = -1; long start = System.currentTimeMillis(); mainTest(deque, n); long end = System.currentTimeMillis(); System.out.println("Time: " + (end - start) + "ms"); if (deque.isEmpty()) System.out.print(" "); } } static void mainTest(Deque deque, int n) throws Exception { /* * Perform a random sequence of operations, keeping contiguous * sequence of integers on the deque. */ for (int i = 0; i < n; i++) { sizeTests(deque); randomOp(deque); // Test iterator occasionally if ((i & 1023) == 0) { testIter(deque); testDescendingIter(deque); } // Test serialization and copying if ((i & 4095) == 0) { testEqual(deque, (Deque)deepCopy(deque)); testEqual(deque, (Deque) deque.getClass(). getConstructor(new Class[] {Collection.class}). newInstance(new Object[] {deque})); } // Test fancy removal stuff once in a blue moon if ((i & 8191) == 0) testRemove(deque); } // Stupid tests for clear, toString deque.clear(); testEmpty(deque); Collection c = Arrays.asList(new Integer[] {new Integer(1), new Integer(2), new Integer(3)}); deque.addAll(c); if (!deque.toString().equals("[1, 2, 3]")) throw new Exception("Deque.toString(): " + deque.toString()); } static void testIter(Deque deque) throws Exception { int next = nextHead + 1; int count = 0; for (Iterator itr = deque.iterator(); itr.hasNext();) { int j = ((Integer)itr.next()).intValue(); if (j != next++) throw new Exception("Element "+ j + " != " + (next-1)); count++; } if (count != size()) throw new Exception("Count " + count + " != " + size()); } static void testDescendingIter(Deque deque) throws Exception { int next = deque.size() + nextHead; int count = 0; for (Iterator it = deque.descendingIterator(); it.hasNext();) { int j = ((Integer)it.next()).intValue(); if (j != next--) throw new Exception("Element "+ j + " != " + (next-1)); count++; } if (count != size()) throw new Exception("Count " + count + " != " + size()); } static void sizeTests(Deque deque) throws Exception { if (deque.size() != size()) throw new Exception("Size: " + deque.size() + ", expecting " + size()); if (deque.isEmpty() != (size() == 0)) throw new Exception( "IsEmpty " + deque.isEmpty() + ", size " + size()); // Check head and tail if (size() == 0) testEmpty(deque); else nonEmptyTest(deque); } static void nonEmptyTest(Deque deque) throws Exception { if (((Integer)deque.getFirst()).intValue() != nextHead + 1) throw new Exception("getFirst got: " + deque.getFirst() + " expecting " + (nextHead + 1)); if (((Integer)deque.element()).intValue() != nextHead + 1) throw new Exception("element got: " + deque.element() + " expecting " + (nextHead + 1)); if (((Integer)deque.peekFirst()).intValue() != nextHead + 1) throw new Exception("peekFirst got: "+deque.peekFirst() + " expecting " + (nextHead + 1)); if (((Integer)deque.peek()).intValue() != nextHead + 1) throw new Exception("peek got: " + deque.peek() + " expecting " + (nextHead + 1)); if (((Integer)deque.peekLast()).intValue() != nextTail - 1) throw new Exception("peekLast got: " + deque.peekLast() + " expecting " + (nextTail - 1)); if (((Integer)deque.getLast()).intValue() != nextTail - 1) throw new Exception("getLast got: " + deque.getLast() + " expecting " + (nextTail - 1)); } static void randomOp(Deque deque) throws Exception { // Perform a random operation switch(random() & 3) { case 0: switch(random() & 3) { case 0: deque.addLast(new Integer(nextTail++)); break; case 1: deque.offerLast(new Integer(nextTail++)); break; case 2: deque.offer(new Integer(nextTail++)); break; case 3: deque.add(new Integer(nextTail++)); break; default: throw new Exception("How'd we get here"); } break; case 1: if (size() == 0) { int result = 666; boolean threw = false; try { switch(random(3)) { case 0: result = ((Integer)deque.removeFirst()).intValue(); break; case 1: result = ((Integer)deque.remove()).intValue(); break; case 2: result = ((Integer)deque.pop()).intValue(); break; default: throw new Exception("How'd we get here"); } } catch(NoSuchElementException e) { threw = true; } if (!threw) throw new Exception("Remove-no exception: " + result); } else { // deque nonempty int result = -1; switch(random(5)) { case 0: result = ((Integer)deque.removeFirst()).intValue(); break; case 1: result = ((Integer)deque.remove()).intValue(); break; case 2: result = ((Integer)deque.pop()).intValue(); break; case 3: result = ((Integer)deque.pollFirst()).intValue(); break; case 4: result = ((Integer)deque.poll()).intValue(); break; default: throw new Exception("How'd we get here"); } if (result != ++nextHead) throw new Exception( "Removed "+ result + " expecting "+(nextHead - 1)); } break; case 2: switch(random(3)) { case 0: deque.addFirst(new Integer(nextHead--)); break; case 1: deque.offerFirst(new Integer(nextHead--)); break; case 2: deque.push(new Integer(nextHead--)); break; default: throw new Exception("How'd we get here"); } break; case 3: if (size() == 0) { int result = -1; boolean threw = false; try { result = ((Integer)deque.removeLast()).intValue(); } catch(NoSuchElementException e) { threw = true; } if (!threw) throw new Exception("Remove-no exception: " + result); } else { // deque nonempty int result = ((random() & 1) == 0? ((Integer)deque.removeLast()).intValue() : ((Integer)deque.pollLast()).intValue()); if (result != --nextTail) throw new Exception( "Removed "+ result + " expecting "+(nextTail + 1)); } break; default: throw new Exception("How'd we get here"); } } private static void testEqual(Deque d1, Deque d2) throws Exception { if (d1.size() != d2.size()) throw new Exception("Size " + d1.size() + " != " + d2.size()); Iterator it = d2.iterator(); for(Iterator itr = d1.iterator(); itr.hasNext();) { int i = ((Integer)itr.next()).intValue(); int j = ((Integer)it.next()).intValue(); if (j != i) throw new Exception("Element " + j + " != " + i); } for(Iterator itr = d1.iterator(); itr.hasNext();) { int i = ((Integer)itr.next()).intValue(); if (!d2.contains(new Integer(i))) throw new Exception("d2 doesn't contain " + i); } for(Iterator itr = d2.iterator(); itr.hasNext();) { int i = ((Integer)itr.next()).intValue(); if (!d1.contains(new Integer(i))) throw new Exception("d2 doesn't contain " + i); } if (d1.contains(new Integer(Integer.MIN_VALUE))) throw new Exception("d2 contains Integer.MIN_VALUE"); if (d2.contains(new Integer(Integer.MIN_VALUE))) throw new Exception("d2 contains Integer.MIN_VALUE"); if (d1.contains(null)) throw new Exception("d1 contains null"); if (d2.contains(null)) throw new Exception("d2 contains null"); if (!d1.containsAll(d2)) throw new Exception("d1 doesn't contain all of d2"); if (!d2.containsAll(d1)) throw new Exception("d2 doesn't contain all of d1"); Collection c = Collections.singleton(new Integer(Integer.MIN_VALUE)); if (d1.containsAll(c)) throw new Exception("d1 contains all of {Integer.MIN_VALUE }"); if (d2.containsAll(c)) throw new Exception("d2 contains all of {Integer.MIN_VALUE }"); } private static Object deepCopy(Object o) { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(o); oos.flush(); ByteArrayInputStream bin = new ByteArrayInputStream( bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bin); return ois.readObject(); } catch(Exception e) { throw new IllegalArgumentException(e.toString()); } } private static void testRemove(Deque deque) throws Exception { Deque copy = null; switch(random() & 1) { case 0: copy = (Deque) deque.getClass(). getConstructor(new Class[] {Collection.class}). newInstance(new Object[] {deque}); break; case 1: copy = (Deque)deepCopy(deque); break; default: throw new Exception("How'd we get here"); } int numRemoved = 0; for (Iterator it = copy.iterator(); it.hasNext(); ) { if ((((Integer)it.next()).intValue() & 1) == 0) { it.remove(); numRemoved++; } } if (copy.size() + numRemoved != size()) throw new Exception((copy.size() + numRemoved) + " != " + size()); for (Iterator itr = copy.iterator(); itr.hasNext();) { int i = ((Integer)itr.next()).intValue(); if ((i & 1) == 0) throw new Exception("Even number still present: " + i); } List elements = Arrays.asList(copy.toArray(new Integer[0])); Collections.shuffle(elements); for (Iterator itr = elements.iterator(); itr.hasNext();) { int e = ((Integer)itr.next()).intValue(); if (!copy.contains(new Integer(e))) throw new Exception(e + " missing."); boolean removed = false; switch(random(3)) { case 0: removed = copy.remove(new Integer(e)); break; case 1: removed = copy.removeFirstOccurrence(new Integer(e)); break; case 2: removed = copy.removeLastOccurrence(new Integer(e)); break; default: throw new Exception("How'd we get here"); } if (!removed) throw new Exception(e + " not removed."); if (copy.contains(new Integer(e))) throw new Exception(e + " present after removal."); } testEmpty(copy); copy = (Deque) deque.getClass(). getConstructor(new Class[] {Collection.class}). newInstance(new Object[] {deque}); copy.retainAll(deque); testEqual(deque, copy); copy.removeAll(deque); testEmpty(copy); } static boolean checkedThrows; private static void testEmpty(Deque deque) throws Exception { if (!deque.isEmpty()) throw new Exception("Deque isn't empty"); if (deque.size() != 0) throw new Exception("Deque size isn't zero"); if (!(deque.pollFirst() == null)) throw new Exception("pollFirst lies"); if (!(deque.poll() == null)) throw new Exception("poll lies"); if (!(deque.peekFirst() == null)) throw new Exception("peekFirst lies"); if (!(deque.peek() == null)) throw new Exception("peek lies"); if (!(deque.pollLast() == null)) throw new Exception("pollLast lies"); if (!(deque.peekLast() == null)) throw new Exception("peekLast lies"); if (!checkedThrows) { checkedThrows = true; boolean threw = false; int result = 666; try { result = ((random() & 1) == 0? ((Integer)deque.getFirst()).intValue() : ((Integer)deque.element()).intValue()); } catch(NoSuchElementException e) { threw = true; } if (!threw) throw new Exception("getFirst-no exception: "+result); threw = false; try { result = ((Integer)deque.getLast()).intValue(); } catch(NoSuchElementException e) { threw = true; } if (!threw) throw new Exception("getLast-no exception: "+result); } } } backport-util-concurrent-3.1-src/test/loops/src/SimpleTimedLockLoops.java0000644001750700037720000000707010256105111025511 0ustar dawidkdcl/* * @test * @synopsis multiple threads using a single lock */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class SimpleTimedLockLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int iters = 10000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); print = true; int reps = 3; for (int i = 1; i <= maxThreads; i += (i+1) >>> 1) { int n = reps; if (reps > 1) --reps; while (n-- > 0) { System.out.print("Threads: " + i); new ReentrantLockLoop(i).test(); Thread.sleep(100); } } pool.shutdown(); } static final class ReentrantLockLoop implements Runnable { private int v = rng.next(); private volatile int result = 17; private final ReentrantLock lock = new ReentrantLock(); private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; private volatile int readBarrier; ReentrantLockLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); if (print) { long time = timer.getTime(); long tpi = time / ((long)iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { final ReentrantLock lock = this.lock; try { barrier.await(); int sum = v + 1; int x = 0; int n = iters; while (n > 0) { if (lock.tryLock(1, TimeUnit.SECONDS)) { --n; int k = (sum & 3); if (k > 0) { x = v; while (k-- > 0) x = LoopHelpers.compute6(x); v = x; } else x = sum + 1; lock.unlock(); } if ((x += readBarrier) == 0) ++readBarrier; for (int l = x & 7; l > 0; --l) sum += LoopHelpers.compute6(sum); } barrier.await(); result += sum; } catch (Exception ie) { return; } } } } backport-util-concurrent-3.1-src/test/loops/src/NavigableSetCheck.java0000644001750700037720000003211610431260156024756 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ /** * @test * @synopsis Times and checks basic set operations */ import edu.emory.mathcs.backport.java.util.*; import java.io.*; import java.util.Random; import java.util.Iterator; import java.util.Map; public class NavigableSetCheck { static int absentSize; static int absentMask; static Integer[] absent; static final Integer MISSING = new Integer(Integer.MIN_VALUE); static TestTimer timer = new TestTimer(); static void reallyAssert(boolean b) { if (!b) throw new Error("Failed Assertion"); } public static void main(String[] args) throws Exception { Class setClass = null; int numTests = 50; int size = 50000; if (args.length > 0) { try { setClass = Class.forName(args[0]); } catch(ClassNotFoundException e) { throw new RuntimeException("Class " + args[0] + " not found."); } } if (args.length > 1) numTests = Integer.parseInt(args[1]); if (args.length > 2) size = Integer.parseInt(args[2]); System.out.println("Testing " + setClass.getName() + " trials: " + numTests + " size: " + size); absentSize = 8; while (absentSize < size) absentSize <<= 1; absentMask = absentSize - 1; absent = new Integer[absentSize]; for (int i = 0; i < absentSize; ++i) absent[i] = new Integer(i * 2); Integer[] key = new Integer[size]; for (int i = 0; i < size; ++i) key[i] = new Integer(i * 2 + 1); for (int rep = 0; rep < numTests; ++rep) { runTest(newSet(setClass), key); } TestTimer.printStats(); } static NavigableSet newSet(Class cl) { try { NavigableSet m = (NavigableSet)cl.newInstance(); return m; } catch(Exception e) { throw new RuntimeException("Can't instantiate " + cl + ": " + e); } } static void runTest(NavigableSet s, Integer[] key) { shuffle(key); int size = key.length; long startTime = System.currentTimeMillis(); test(s, key); long time = System.currentTimeMillis() - startTime; } static void t1(String nm, int n, NavigableSet s, Integer[] key, int expect) { int sum = 0; int iters = 4; timer.start(nm, n * iters); for (int j = 0; j < iters; ++j) { for (int i = 0; i < n; i++) { if (s.contains(key[i])) ++sum; } } timer.finish(); reallyAssert (sum == expect * iters); } static void t2(String nm, int n, NavigableSet s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.remove(key[i])) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t3(String nm, int n, NavigableSet s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.add(key[i])) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t4(String nm, int n, NavigableSet s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.contains(key[i])) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t5(String nm, int n, NavigableSet s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n/2); for (int i = n-2; i >= 0; i-=2) { if (s.remove(key[i])) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void t6(String nm, int n, NavigableSet s, Integer[] k1, Integer[] k2) { int sum = 0; timer.start(nm, n * 2); for (int i = 0; i < n; i++) { if (s.contains(k1[i])) ++sum; if (s.contains(k2[i & absentMask])) ++sum; } timer.finish(); reallyAssert (sum == n); } static void t7(String nm, int n, NavigableSet s, Integer[] k1, Integer[] k2) { int sum = 0; timer.start(nm, n * 2); for (int i = 0; i < n; i++) { if (s.contains(k1[i])) ++sum; if (s.contains(k2[i & absentMask])) ++sum; } timer.finish(); reallyAssert (sum == n); } static void t8(String nm, int n, NavigableSet s, Integer[] key, int expect) { int sum = 0; timer.start(nm, n); for (int i = 0; i < n; i++) { if (s.contains(key[i])) ++sum; } timer.finish(); reallyAssert (sum == expect); } static void higherTest(NavigableSet s) { int sum = 0; int iters = s.size(); timer.start("Higher ", iters); Object e = s.first(); while (e != null) { ++sum; e = s.higher(e); } timer.finish(); reallyAssert (sum == iters); } static void lowerTest(NavigableSet s) { int sum = 0; int iters = s.size(); timer.start("Lower ", iters); Object e = s.first(); while (e != null) { ++sum; e = s.higher(e); } timer.finish(); reallyAssert (sum == iters); } static void ceilingTest(NavigableSet s) { int sum = 0; int iters = s.size(); if (iters > absentSize) iters = absentSize; timer.start("Ceiling ", iters); for (int i = 0; i < iters; ++i) { Object e = s.ceiling(absent[i]); if (e != null) ++sum; } timer.finish(); reallyAssert (sum == iters); } static void floorTest(NavigableSet s) { int sum = 0; int iters = s.size(); if (iters > absentSize) iters = absentSize; timer.start("Floor ", iters); for (int i = 1; i < iters; ++i) { Object e = s.floor(absent[i]); if (e != null) ++sum; } timer.finish(); reallyAssert (sum == iters-1); } static void ktest(NavigableSet s, int size, Integer[] key) { timer.start("Contains ", size); int sum = 0; for (int i = 0; i < size; i++) { if (s.contains(key[i])) ++sum; } timer.finish(); reallyAssert (sum == size); } static void ittest1(NavigableSet s, int size) { int sum = 0; timer.start("Iter Key ", size); for (Iterator it = s.iterator(); it.hasNext(); ) { if(it.next() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void ittest(NavigableSet s, int size) { ittest1(s, size); } static void rittest1(NavigableSet s, int size) { int sum = 0; timer.start("Desc Iter Key ", size); for (Iterator it = s.descendingIterator(); it.hasNext(); ) { if(it.next() != MISSING) ++sum; } timer.finish(); reallyAssert (sum == size); } static void rittest(NavigableSet s, int size) { rittest1(s, size); } static void rtest(NavigableSet s, int size) { timer.start("Remove (iterator) ", size); for (Iterator it = s.iterator(); it.hasNext(); ) { it.next(); it.remove(); } timer.finish(); } static void dtest(NavigableSet s, int size, Integer[] key) { timer.start("Add (addAll) ", size * 2); NavigableSet s2 = null; try { s2 = (NavigableSet) (s.getClass().newInstance()); s2.addAll(s); } catch (Exception e) { e.printStackTrace(); return; } timer.finish(); timer.start("Iter Equals ", size * 2); boolean eqt = s2.equals(s) && s.equals(s2); reallyAssert (eqt); timer.finish(); timer.start("Iter HashCode ", size * 2); int shc = s.hashCode(); int s2hc = s2.hashCode(); reallyAssert (shc == s2hc); timer.finish(); timer.start("Add (present) ", size); s2.addAll(s); timer.finish(); t6("Contains ", size, s2, key, absent); boolean as2 = s2.add(absent[absentSize-1]); reallyAssert(as2); timer.start("Iter Equals ", size * 2); eqt = s2.equals(s) && s.equals(s2); if (as2) reallyAssert (!eqt); timer.finish(); timer.start("Iter HashCode ", size * 2); int s1h = s.hashCode(); int s2h = s2.hashCode(); if (as2) reallyAssert (s1h != s2h); timer.finish(); timer.start("Clear ", size); s.clear(); s2.clear(); timer.finish(); reallyAssert (s2.isEmpty() && s.isEmpty()); } static void test(NavigableSet s, Integer[] key) { int size = key.length; t3("Add (absent) ", size, s, key, size); t3("Add (present) ", size, s, key, 0); t7("ContainsKey ", size, s, key, absent); t4("ContainsKey ", size, s, key, size); ktest(s, size, key); t4("Contains ", absentSize, s, absent, 0); t6("Contains ", size, s, key, absent); t1("Contains (present) ", size, s, key, size); t1("Contains (absent) ", absentSize, s, absent, 0); t2("Remove (absent) ", absentSize, s, absent, 0); t5("Remove (present) ", size, s, key, size / 2); t3("Add (half present) ", size, s, key, size / 2); ittest(s, size); rittest(s, size); higherTest(s); ceilingTest(s); floorTest(s); lowerTest(s); rtest(s, size); t4("Contains ", size, s, key, 0); t2("Remove (absent) ", size, s, key, 0); t3("Add (presized) ", size, s, key, size); dtest(s, size, key); } static class TestTimer { private String name; private long numOps; private long startTime; private String cname; static final java.util.TreeMap accum = new java.util.TreeMap(); static void printStats() { for (Iterator it = accum.entrySet().iterator(); it.hasNext(); ) { Map.Entry e = (Map.Entry)(it.next()); Stats stats = ((Stats)(e.getValue())); int n = stats.number; double t; if (n > 0) t = stats.sum / n; else t = stats.least; long nano = Math.round(1000000.0 * t); System.out.println(e.getKey() + ": " + nano); } } void start(String name, long numOps) { this.name = name; this.cname = classify(); this.numOps = numOps; startTime = System.currentTimeMillis(); } String classify() { if (name.startsWith("Contains")) return "Contains "; else if (name.startsWith("Add")) return "Add "; else if (name.startsWith("Remove")) return "Remove "; else if (name.startsWith("Iter")) return "Iter "; else return null; } void finish() { long endTime = System.currentTimeMillis(); long time = endTime - startTime; double timePerOp = ((double)time)/numOps; Object st = accum.get(name); if (st == null) accum.put(name, new Stats(timePerOp)); else { Stats stats = (Stats) st; stats.sum += timePerOp; stats.number++; if (timePerOp < stats.least) stats.least = timePerOp; } if (cname != null) { st = accum.get(cname); if (st == null) accum.put(cname, new Stats(timePerOp)); else { Stats stats = (Stats) st; stats.sum += timePerOp; stats.number++; if (timePerOp < stats.least) stats.least = timePerOp; } } } } static class Stats { double sum = 0; double least; int number = 0; Stats(double t) { least = t; } } static Random rng = new Random(); static void shuffle(Integer[] keys) { int size = keys.length; for (int i=size; i>1; i--) { int r = rng.nextInt(i); Integer t = keys[i-1]; keys[i-1] = keys[r]; keys[r] = t; } } } backport-util-concurrent-3.1-src/test/loops/src/TimeUnitLoops.java0000644001750700037720000000365110253737131024235 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import edu.emory.mathcs.backport.java.util.concurrent.*; import java.util.Random; public class TimeUnitLoops { static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); /** * False value allows aggressive inlining of cvt() calls from * test(). True value prevents any inlining, requiring virtual * method dispatch. */ static final boolean PREVENT_INLINING = true; // The following all are used by inlining prevention clause: static int index = 0; static final int NUNITS = 100; static final TimeUnit[] units = new TimeUnit[NUNITS]; static { TimeUnit[] v = TimeUnit.values(); for (int i = 0; i < NUNITS; ++i) units[i] = v[rng.next() % v.length]; } public static void main(String[] args) throws Exception { long start = System.currentTimeMillis(); long s = 0; for (int i = 0; i < 100; ++i) { s += test(); if (s == start) System.out.println(" "); } long end = System.currentTimeMillis(); System.out.println("Time: " + (end - start) + " ms"); } static long test() { long sum = 0; int x = rng.next(); for (int i = 0; i < 1000000; ++i) { long l = (long)x + (long)x; sum += cvt(l, TimeUnit.SECONDS); sum += TimeUnit.MILLISECONDS.toMicros(l+2); sum += cvt(l+17, TimeUnit.NANOSECONDS); sum += cvt(l+42, TimeUnit.MILLISECONDS); x = LoopHelpers.compute4(x); } return sum + x; } static long cvt(long d, TimeUnit u) { if (PREVENT_INLINING) { u = units[index]; index = (index+1) % NUNITS; } return u.toNanos(d); } } backport-util-concurrent-3.1-src/test/loops/src/ListBash.java0000644001750700037720000002362410346121124023165 0ustar dawidkdcl/* * Written by Josh Bloch and Doug Lea with assistance from members of * JCP JSR-166 Expert Group and released to the public domain, as * explained at http://creativecommons.org/licenses/publicdomain */ import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; import java.util.Random; import java.util.List; import java.util.Iterator; import java.util.ListIterator; import java.util.Arrays; public class ListBash { static boolean canRemove = true; static final Random rnd = new Random(); static int numItr; static int listSize; static boolean synch; static Class cl; public static void main(String[] args) { numItr = Integer.parseInt(args[1]); listSize = Integer.parseInt(args[2]); cl = null; try { cl = Class.forName(args[0]); } catch(ClassNotFoundException e) { fail("Class " + args[0] + " not found."); } synch = (args.length>3); oneRun(); oneRun(); oneRun(); } static void oneRun() { long startTime = Utils.nanoTime(); for (int i=0; i 0; --i) { synchronized(obj) { x = x * 134775813 + 1; } } return x; } } backport-util-concurrent-3.1-src/test/loops/src/SimpleFairReentrantLockLoops.java0000644001750700037720000000705510256105111027216 0ustar dawidkdcl/* * @test * @synopsis multiple threads using a single lock */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class SimpleFairReentrantLockLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int iters = 2000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); new ReentrantLockLoop(1).test(); new ReentrantLockLoop(1).test(); print = true; int k = 1; for (int i = 1; i <= maxThreads;) { System.out.print("Threads: " + i); new ReentrantLockLoop(i).test(); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static final class ReentrantLockLoop implements Runnable { private int v = rng.next(); private volatile int result = 17; private final ReentrantLock lock = new ReentrantLock(true); private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; private volatile int readBarrier; ReentrantLockLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); if (print) { long time = timer.getTime(); long tpi = time / ((long)iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { final ReentrantLock lock = this.lock; try { barrier.await(); int sum = v + 1; int x = 0; int n = iters; while (n-- > 0) { lock.lock(); int k = (sum & 3); if (k > 0) { x = v; while (k-- > 0) x = LoopHelpers.compute6(x); v = x; } else x = sum + 1; lock.unlock(); if ((x += readBarrier) == 0) ++readBarrier; for (int l = x & 7; l > 0; --l) sum += LoopHelpers.compute6(sum); } barrier.await(); result += sum; } catch (Exception ie) { return; } } } } backport-util-concurrent-3.1-src/test/loops/src/SimpleSemaphoreLoops.java0000644001750700037720000000671210256105111025563 0ustar dawidkdcl/* * @test * @synopsis multiple threads using a single lock */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class SimpleSemaphoreLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int iters = 10000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); print = true; int reps = 2; for (int i = 1; i <= maxThreads; i += (i+1) >>> 1) { int n = reps; if (reps > 1) --reps; while (n-- > 0) { System.out.print("Threads: " + i); new SemaphoreLoop(i).test(); Thread.sleep(100); } } pool.shutdown(); } static final class SemaphoreLoop implements Runnable { private int v = rng.next(); private volatile int result = 17; private final Semaphore lock = new Semaphore(1, false); private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; private volatile int readBarrier; SemaphoreLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); if (print) { long time = timer.getTime(); long tpi = time / ((long)iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { final Semaphore lock = this.lock; try { barrier.await(); int sum = v + 1; int x = 0; int n = iters; while (n-- > 0) { lock.acquireUninterruptibly(); int k = (sum & 3); if (k > 0) { x = v; while (k-- > 0) x = LoopHelpers.compute6(x); v = x; } else x = sum + 1; lock.release(); if ((x += readBarrier) == 0) ++readBarrier; for (int l = x & 7; l > 0; --l) sum += LoopHelpers.compute6(sum); } barrier.await(); result += sum; } catch (Exception ie) { return; } } } } backport-util-concurrent-3.1-src/test/loops/src/SimpleNoLockLoops.java0000644001750700037720000000662210256105111025025 0ustar dawidkdcl/* * @test * @synopsis multiple threads using a single builtin lock */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; public final class SimpleNoLockLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static int iters = 2000000; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); new ReentrantLockLoop(1).test(); new ReentrantLockLoop(1).test(); print = true; int k = 1; for (int i = 1; i <= maxThreads;) { System.out.print("Threads: " + i); new ReentrantLockLoop(i).test(); Thread.sleep(100); if (i == k) { k = i << 1; i = i + (i >>> 1); } else i = k; } pool.shutdown(); } static final class ReentrantLockLoop implements Runnable { private int v = rng.next(); private volatile int result = 17; private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; private volatile int readBarrier; ReentrantLockLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { for (int i = 0; i < nthreads; ++i) pool.execute(this); barrier.await(); barrier.await(); if (print) { long time = timer.getTime(); long tpi = time / ((long)iters * nthreads); System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock"); double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } int r = result; if (r == 0) // avoid overoptimization System.out.println("useless result: " + r); } public final void run() { try { barrier.await(); int sum = v + 1; int x = 0; int n = iters; while (n-- > 0) { int k = (sum & 3); if (k > 0) { x = v; while (k-- > 0) x = LoopHelpers.compute6(x); v = x; } else x = sum + 1; if ((x += readBarrier) == 0) ++readBarrier; for (int l = x & 1; l > 0; --l) sum += LoopHelpers.compute6(sum); } barrier.await(); result += sum; } catch (Exception ie) { return; } } } } backport-util-concurrent-3.1-src/test/loops/src/CancelledFutureLoops.java0000644001750700037720000000731410253737131025544 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ /* * @test * @summary Checks for responsiveness of futures to cancellation. * Runs under * the assumption that ITERS computations require more than TIMEOUT * msecs to complete. */ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; public final class CancelledFutureLoops { static final ExecutorService pool = Executors.newCachedThreadPool(); static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom(); static boolean print = false; static final int ITERS = 10000000; static final long TIMEOUT = 100; public static void main(String[] args) throws Exception { int maxThreads = 100; if (args.length > 0) maxThreads = Integer.parseInt(args[0]); print = true; for (int i = 2; i <= maxThreads; i += (i+1) >>> 1) { System.out.print("Threads: " + i); new FutureLoop(i).test(); Thread.sleep(TIMEOUT); } pool.shutdown(); } static final class FutureLoop implements Callable { private int v = rng.next(); private final ReentrantLock lock = new ReentrantLock(); private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); private final CyclicBarrier barrier; private final int nthreads; FutureLoop(int nthreads) { this.nthreads = nthreads; barrier = new CyclicBarrier(nthreads+1, timer); } final void test() throws Exception { Future[] futures = new Future[nthreads]; for (int i = 0; i < nthreads; ++i) futures[i] = pool.submit(this); barrier.await(); Thread.sleep(TIMEOUT); boolean tooLate = false; for (int i = 1; i < nthreads; ++i) { if (!futures[i].cancel(true)) tooLate = true; // Unbunch some of the cancels if ( (i & 3) == 0) Thread.sleep(1 + rng.next() % 10); } Object f0 = futures[0].get(); if (!tooLate) { for (int i = 1; i < nthreads; ++i) { if (!futures[i].isDone() || !futures[i].isCancelled()) throw new Error("Only one thread should complete"); } } else System.out.print("(cancelled too late) "); long endTime = Utils.nanoTime(); long time = endTime - timer.startTime; if (print) { double secs = (double)(time) / 1000000000.0; System.out.println("\t " + secs + "s run time"); } } public final Object call() throws Exception { barrier.await(); int sum = v; int x = 0; int n = ITERS; while (n-- > 0) { lock.lockInterruptibly(); try { v = x = LoopHelpers.compute1(v); } finally { lock.unlock(); } sum += LoopHelpers.compute2(LoopHelpers.compute2(x)); } return new Integer(sum); } } } backport-util-concurrent-3.1-src/test/loops/src/TSPExchangerTest.java0000644001750700037720000006114610431777323024625 0ustar dawidkdcl/* * Written by Doug Lea and Bill Scherer with assistance from members * of JCP JSR-166 Expert Group and released to the public domain, as * explained at http://creativecommons.org/licenses/publicdomain */ import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import java.util.Random; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; /** * A parallel Traveling Salesperson Problem (TSP) program based on a * genetic algorithm using an Exchanger. A population of chromosomes is * distributed among "subpops". Each chromosomes represents a tour, * and its fitness is the total tour length. * * A set of worker threads perform updates on subpops. The basic * update step is: *
    *
  1. Select a breeder b from the subpop *
  2. Create a strand of its tour with a random starting point and length *
  3. Offer the strand to the exchanger, receiving a strand from * another subpop *
  4. Combine b and the received strand using crossing function to * create new chromosome c. *
  5. Replace a chromosome in the subpop with c. *
* * This continues for a given number of generations per subpop. * Because there are normally more subpops than threads, each worker * thread performs small (randomly sized) run of updates for one * subpop and then selects another. A run continues until there is at * most one remaining thread performing updates. * * See below for more details. */ public class TSPExchangerTest { static final int NCPUS = Runtime.getRuntime().availableProcessors(); /** Runs start with two threads, increasing by two through max */ static final int DEFAULT_MAX_THREADS = Math.max(4, NCPUS + NCPUS/2); /** The number of replication runs per thread value */ static final int DEFAULT_REPLICATIONS = 3; /** If true, print statistics in SNAPSHOT_RATE intervals */ static boolean verbose = true; static final long SNAPSHOT_RATE = 10000; // in milliseconds /** * The problem size. Each city is a random point. The goal is to * find a tour among them with smallest total Euclidean distance. */ static final int DEFAULT_CITIES = 144; // Tuning parameters. /** * The number of chromosomes per subpop. Must be a power of two. * * Smaller values lead to faster iterations but poorer quality * results */ static final int DEFAULT_SUBPOP_SIZE = 32; /** * The number of iterations per subpop. Convergence appears * to be roughly proportional to #cities-squared */ static final int DEFAULT_GENERATIONS = DEFAULT_CITIES * DEFAULT_CITIES; /** * The number of subpops. The total population is #subpops * subpopSize, * which should be roughly on the order of #cities-squared * * Smaller values lead to faster total runs but poorer quality * results */ static final int DEFAULT_NSUBPOPS = DEFAULT_GENERATIONS / DEFAULT_SUBPOP_SIZE; /** * The minimum length for a random chromosome strand. * Must be at least 1. */ static final int MIN_STRAND_LENGTH = 3; /** * The probablility mask value for creating random strands, * that have lengths at least MIN_STRAND_LENGTH, and grow * with exposnential decay 2^(-(1/(RANDOM_STRAND_MASK + 1) * Must be 1 less than a power of two. */ static final int RANDOM_STRAND_MASK = 7; /** * Probablility control for selecting breeders. * Breeders are selected starting at the best-fitness chromosome, * with exponentially decaying probablility * 1 / (subpopSize >>> BREEDER_DECAY). * * Larger values usually cause faster convergence but poorer * quality results */ static final int BREEDER_DECAY = 1; /** * Probablility control for selecting dyers. * Dyers are selected starting at the worst-fitness chromosome, * with exponentially decaying probablility * 1 / (subpopSize >>> DYER_DECAY) * * Larger values usually cause faster convergence but poorer * quality results */ static final int DYER_DECAY = 1; /** * The set of cities. Created once per program run, to * make it easier to compare solutions across different runs. */ static CitySet cities; public static void main(String[] args) throws Exception { int maxThreads = DEFAULT_MAX_THREADS; int nCities = DEFAULT_CITIES; int subpopSize = DEFAULT_SUBPOP_SIZE; int nGen = nCities * nCities; int nSubpops = nCities * nCities / subpopSize; int nReps = DEFAULT_REPLICATIONS; try { int argc = 0; while (argc < args.length) { String option = args[argc++]; if (option.equals("-c")) { nCities = Integer.parseInt(args[argc]); nGen = nCities * nCities; nSubpops = nCities * nCities / subpopSize; } else if (option.equals("-p")) subpopSize = Integer.parseInt(args[argc]); else if (option.equals("-g")) nGen = Integer.parseInt(args[argc]); else if (option.equals("-n")) nSubpops = Integer.parseInt(args[argc]); else if (option.equals("-q")) { verbose = false; argc--; } else if (option.equals("-r")) nReps = Integer.parseInt(args[argc]); else maxThreads = Integer.parseInt(option); argc++; } } catch (Exception e) { reportUsageErrorAndDie(); } System.out.print("TSPExchangerTest"); System.out.print(" -c " + nCities); System.out.print(" -g " + nGen); System.out.print(" -p " + subpopSize); System.out.print(" -n " + nSubpops); System.out.print(" -r " + nReps); System.out.print(" max threads " + maxThreads); System.out.println(); cities = new CitySet(nCities); if (false && NCPUS > 4) { int h = NCPUS/2; System.out.println("Threads: " + h + " Warmup"); oneRun(h, nSubpops, subpopSize, nGen); Thread.sleep(500); } int maxt = (maxThreads < nSubpops) ? maxThreads : nSubpops; for (int j = 0; j < nReps; ++j) { for (int i = 2; i <= maxt; i += 2) { System.out.println("Threads: " + i + " Replication: " + j); oneRun(i, nSubpops, subpopSize, nGen); Thread.sleep(500); } } } static void reportUsageErrorAndDie() { System.out.print("usage: TSPExchangerTest"); System.out.print(" [-c #cities]"); System.out.print(" [-p #subpopSize]"); System.out.print(" [-g #generations]"); System.out.print(" [-n #subpops]"); System.out.print(" [-r #replications]"); System.out.print(" [-q]"); System.out.print(" #threads]"); System.out.println(); System.exit(0); } /** * Perform one run with the given parameters. Each run complete * when there are fewer than 2 active threads. When there is * only one remaining thread, it will have no one to exchange * with, so it is terminated (via interrupt). */ static void oneRun(int nThreads, int nSubpops, int subpopSize, int nGen) throws InterruptedException { Population p = new Population(nThreads, nSubpops, subpopSize, nGen); ProgressMonitor mon = null; if (verbose) { p.printSnapshot(0); mon = new ProgressMonitor(p); mon.start(); } long startTime = Utils.nanoTime(); p.start(); p.awaitDone(); long stopTime = Utils.nanoTime(); if (mon != null) mon.interrupt(); p.shutdown(); // Thread.sleep(100); long elapsed = stopTime - startTime; double secs = (double)elapsed / 1000000000.0; p.printSnapshot(secs); } /** * A Population creates the subpops, subpops, and threads for a run * and has control methods to start, stop, and report progress. */ static final class Population { final Worker[] threads; final Subpop[] subpops; final Exchanger exchanger; final CountDownLatch done; final int nGen; final int subpopSize; final int nThreads; Population(int nThreads, int nSubpops, int subpopSize, int nGen) { this.nThreads = nThreads; this.nGen = nGen; this.subpopSize = subpopSize; this.exchanger = new Exchanger(); this.done = new CountDownLatch(nThreads - 1); this.subpops = new Subpop[nSubpops]; for (int i = 0; i < nSubpops; i++) subpops[i] = new Subpop(this); this.threads = new Worker[nThreads]; int maxExchanges = nGen * nSubpops / nThreads; for (int i = 0; i < nThreads; ++i) { threads[i] = new Worker(this, maxExchanges); } } void start() { for (int i = 0; i < nThreads; ++i) { threads[i].start(); } } /** Stop the tasks */ void shutdown() { for (int i = 0; i < threads.length; ++ i) threads[i].interrupt(); } void threadDone() { done.countDown(); } /** Wait for tasks to complete */ void awaitDone() throws InterruptedException { done.await(); } int totalExchanges() { int xs = 0; for (int i = 0; i < threads.length; ++i) xs += threads[i].exchanges; return xs; } /** * Prints statistics, including best and worst tour lengths * for points scaled in [0,1), scaled by the square root of * number of points. This simplifies checking results. The * expected optimal TSP for random points is believed to be * around 0.76 * sqrt(N). For papers discussing this, see * http://www.densis.fee.unicamp.br/~moscato/TSPBIB_home.html */ void printSnapshot(double secs) { int xs = totalExchanges(); long rate = (xs == 0)? 0L : (long)((secs * 1000000000.0) / xs); Chromosome bestc = subpops[0].chromosomes[0]; Chromosome worstc = bestc; for (int k = 0; k < subpops.length; ++k) { Chromosome[] cs = subpops[k].chromosomes; if (cs[0].fitness < bestc.fitness) bestc = cs[0]; int w = cs[cs.length-1].fitness; if (cs[cs.length-1].fitness > worstc.fitness) worstc = cs[cs.length-1]; } double sqrtn = Math.sqrt(cities.length); double best = bestc.unitTourLength() / sqrtn; double worst = worstc.unitTourLength() / sqrtn; System.out.println("N:" + nThreads + " T:" + secs + " B:" + best + " W:" + worst + " X:" + xs + " R:" + rate); // exchanger.printStats(); // System.out.print(" s: " + exchanger.aveSpins()); // System.out.print(" p: " + exchanger.aveParks()); } } /** * Worker threads perform updates on subpops. */ static final class Worker extends Thread { final Population pop; final int maxExchanges; int exchanges; final RNG rng = new RNG(); Worker(Population pop, int maxExchanges) { this.pop = pop; this.maxExchanges = maxExchanges; } /** * Repeatedly, find a subpop that is not being updated by * another thread, and run a random number of updates on it. */ public void run() { try { int len = pop.subpops.length; int pos = (rng.next() & 0x7FFFFFFF) % len; while (exchanges < maxExchanges) { Subpop s = pop.subpops[pos]; AtomicBoolean busy = s.busy; if (!busy.get() && busy.compareAndSet(false, true)) { exchanges += s.runUpdates(); busy.set(false); pos = (rng.next() & 0x7FFFFFFF) % len; } else if (++pos >= len) pos = 0; } pop.threadDone(); } catch (InterruptedException fallthrough) { } } } /** * A Subpop maintains a set of chromosomes.. */ static final class Subpop { /** The chromosomes, kept in sorted order */ final Chromosome[] chromosomes; /** The parent population */ final Population pop; /** Reservation bit for worker threads */ final AtomicBoolean busy; /** The common exchanger, same for all subpops */ final Exchanger exchanger; /** The current strand being exchanged */ Strand strand; /** Bitset used in cross */ final int[] inTour; final RNG rng; final int subpopSize; Subpop(Population pop) { this.pop = pop; this.subpopSize = pop.subpopSize; this.exchanger = pop.exchanger; this.busy = new AtomicBoolean(false); this.rng = new RNG(); int length = cities.length; this.strand = new Strand(length); this.inTour = new int[(length >>> 5) + 1]; this.chromosomes = new Chromosome[subpopSize]; for (int j = 0; j < subpopSize; ++j) chromosomes[j] = new Chromosome(length, rng); Arrays.sort(chromosomes); } /** * Run a random number of updates. The number of updates is * at least 1 and no more than subpopSize. This * controls the granularity of multiplexing subpop updates on * to threads. It is small enough to balance out updates * across tasks, but large enough to avoid having runs * dominated by subpop selection. It is randomized to avoid * long runs where pairs of subpops exchange only with each * other. It is hardwired because small variations of it * don't matter much. * * @param g the first generation to run. */ int runUpdates() throws InterruptedException { int n = 1 + (rng.next() & ((subpopSize << 1) - 1)); for (int i = 0; i < n; ++i) update(); return n; } /** * Choose a breeder, exchange strand with another subpop, and * cross them to create new chromosome to replace a chosen * dyer. */ void update() throws InterruptedException { int b = chooseBreeder(); int d = chooseDyer(b); Chromosome breeder = chromosomes[b]; Chromosome child = chromosomes[d]; chooseStrand(breeder); strand = (Strand)exchanger.exchange(strand); cross(breeder, child); fixOrder(child, d); } /** * Choose a breeder, with exponentially decreasing probability * starting at best. * @return index of selected breeder */ int chooseBreeder() { int mask = (subpopSize >>> BREEDER_DECAY) - 1; int b = 0; while ((rng.next() & mask) != mask) { if (++b >= subpopSize) b = 0; } return b; } /** * Choose a chromosome that will be replaced, with * exponentially decreasing probablility starting at * worst, ignoring the excluded index * @param exclude index to ignore; use -1 to not exclude any * @return index of selected dyer */ int chooseDyer(int exclude) { int mask = (subpopSize >>> DYER_DECAY) - 1; int d = subpopSize - 1; while (d == exclude || (rng.next() & mask) != mask) { if (--d < 0) d = subpopSize - 1; } return d; } /** * Select a random strand of b's. * @param breeder the breeder */ void chooseStrand(Chromosome breeder) { int[] bs = breeder.alleles; int length = bs.length; int strandLength = MIN_STRAND_LENGTH; while (strandLength < length && (rng.next() & RANDOM_STRAND_MASK) != RANDOM_STRAND_MASK) strandLength++; strand.strandLength = strandLength; int[] ss = strand.alleles; int k = (rng.next() & 0x7FFFFFFF) % length; for (int i = 0; i < strandLength; ++i) { ss[i] = bs[k]; if (++k >= length) k = 0; } } /** * Copy current strand to start of c's, and then append all * remaining b's that aren't in the strand. * @param breeder the breeder * @param child the child */ void cross(Chromosome breeder, Chromosome child) { for (int k = 0; k < inTour.length; ++k) // clear bitset inTour[k] = 0; // Copy current strand to c int[] cs = child.alleles; int ssize = strand.strandLength; int[] ss = strand.alleles; int i; for (i = 0; i < ssize; ++i) { int x = ss[i]; cs[i] = x; inTour[x >>> 5] |= 1 << (x & 31); // record in bit set } // Find index of matching origin in b int first = cs[0]; int j = 0; int[] bs = breeder.alleles; while (bs[j] != first) ++j; // Append remaining b's that aren't already in tour while (i < cs.length) { if (++j >= bs.length) j = 0; int x = bs[j]; if ((inTour[x >>> 5] & (1 << (x & 31))) == 0) cs[i++] = x; } } /** * Fix the sort order of a changed Chromosome c at position k * @param c the chromosome * @param k the index */ void fixOrder(Chromosome c, int k) { Chromosome[] cs = chromosomes; int oldFitness = c.fitness; c.recalcFitness(); int newFitness = c.fitness; if (newFitness < oldFitness) { int j = k; int p = j - 1; while (p >= 0 && cs[p].fitness > newFitness) { cs[j] = cs[p]; j = p--; } cs[j] = c; } else if (newFitness > oldFitness) { int j = k; int n = j + 1; while (n < cs.length && cs[n].fitness < newFitness) { cs[j] = cs[n]; j = n++; } cs[j] = c; } } } /** * A Chromosome is a candidate TSP tour. */ static final class Chromosome implements Comparable { /** Index of cities in tour order */ final int[] alleles; /** Total tour length */ int fitness; /** * Initialize to random tour */ Chromosome(int length, RNG random) { alleles = new int[length]; for (int i = 0; i < length; i++) alleles[i] = i; for (int i = length - 1; i > 0; i--) { int idx = (random.next() & 0x7FFFFFFF) % alleles.length; int tmp = alleles[i]; alleles[i] = alleles[idx]; alleles[idx] = tmp; } recalcFitness(); } public int compareTo(Object x) { // to enable sorting int xf = ((Chromosome)x).fitness; int f = fitness; return ((f == xf)? 0 :((f < xf)? -1 : 1)); } void recalcFitness() { int[] a = alleles; int len = a.length; int p = a[0]; long f = cities.distanceBetween(a[len-1], p); for (int i = 1; i < len; i++) { int n = a[i]; f += cities.distanceBetween(p, n); p = n; } fitness = (int)(f / len); } /** * Return tour length for points scaled in [0, 1). */ double unitTourLength() { int[] a = alleles; int len = a.length; int p = a[0]; double f = cities.unitDistanceBetween(a[len-1], p); for (int i = 1; i < len; i++) { int n = a[i]; f += cities.unitDistanceBetween(p, n); p = n; } return f; } /** * Check that this tour visits each city */ void validate() { int len = alleles.length; boolean[] used = new boolean[len]; for (int i = 0; i < len; ++i) used[alleles[i]] = true; for (int i = 0; i < len; ++i) if (!used[i]) throw new Error("Bad tour"); } } /** * A Strand is a random sub-sequence of a Chromosome. Each subpop * creates only one strand, and then trades it with others, * refilling it on each iteration. */ static final class Strand { final int[] alleles; int strandLength; Strand(int length) { alleles = new int[length]; } } /** * A collection of (x,y) points that represent cities. */ static final class CitySet { final int length; final int[] xPts; final int[] yPts; final int[][] distances; CitySet(int n) { this.length = n; this.xPts = new int[n]; this.yPts = new int[n]; this.distances = new int[n][n]; RNG random = new RNG(); for (int i = 0; i < n; i++) { xPts[i] = (random.next() & 0x7FFFFFFF); yPts[i] = (random.next() & 0x7FFFFFFF); } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { double dx = (double)xPts[i] - (double)xPts[j]; double dy = (double)yPts[i] - (double)yPts[j]; double dd = Math.sqrt(dx*dx+dy*dy) / 2.0; long ld = Math.round(dd); distances[i][j] = (ld >= Integer.MAX_VALUE)? Integer.MAX_VALUE : (int)ld; } } } /** * Returns the cached distance between a pair of cities */ int distanceBetween(int i, int j) { return distances[i][j]; } // Scale ints to doubles in [0,1) static final double PSCALE = (double)0x80000000L; /** * Return distance for points scaled in [0,1). This simplifies * checking results. The expected optimal TSP for random * points is believed to be around 0.76 * sqrt(N). For papers * discussing this, see * http://www.densis.fee.unicamp.br/~moscato/TSPBIB_home.html */ double unitDistanceBetween(int i, int j) { double dx = ((double)xPts[i] - (double)xPts[j]) / PSCALE; double dy = ((double)yPts[i] - (double)yPts[j]) / PSCALE; return Math.sqrt(dx*dx+dy*dy); } } /** * Cheap XorShift random number generator */ static final class RNG { /** Seed generator for XorShift RNGs */ static final Random seedGenerator = new Random(); int seed; RNG(int seed) { this.seed = seed; } RNG() { this.seed = seedGenerator.nextInt() | 1; } int next() { int x = seed; x ^= x << 6; x ^= x >>> 21; x ^= x << 7; seed = x; return x; } } static final class ProgressMonitor extends Thread { final Population pop; ProgressMonitor(Population p) { pop = p; } public void run() { double time = 0; try { while (!Thread.interrupted()) { sleep(SNAPSHOT_RATE); time += SNAPSHOT_RATE; pop.printSnapshot(time / 1000.0); } } catch (InterruptedException ie) {} } } } backport-util-concurrent-3.1-src/test/loops/src/NoopMutex.java0000644001750700037720000000100310256104654023406 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; class NoopMutex { public static void main(String[] args) throws Exception { AtomicInteger lock = new AtomicInteger(); for (int i = 100000000; i > 0; --i) { lock.compareAndSet(0,1); lock.set(0); } } } backport-util-concurrent-3.1-src/test/loops/words/0000755001750700037720000000000010643402426021160 5ustar dawidkdclbackport-util-concurrent-3.1-src/test/loops/words/dir.txt0000644001750700037720000376427310256105111022514 0ustar dawidkdclSCCS SCCS/s.overview-bundled.html SCCS/s.jdi-overview.html SCCS/s.overview-core.html com com/sun com/sun/accessibility com/sun/accessibility/internal com/sun/accessibility/internal/resources com/sun/accessibility/internal/resources/SCCS com/sun/accessibility/internal/resources/SCCS/s.accessibility_de.properties com/sun/accessibility/internal/resources/SCCS/s.accessibility.properties com/sun/accessibility/internal/resources/SCCS/s.accessibility_en.properties com/sun/accessibility/internal/resources/SCCS/s.accessibility_es.properties com/sun/accessibility/internal/resources/SCCS/s.accessibility_fr.properties com/sun/accessibility/internal/resources/SCCS/s.accessibility_it.properties com/sun/accessibility/internal/resources/SCCS/s.accessibility_ja.properties com/sun/accessibility/internal/resources/SCCS/s.accessibility_ko.properties com/sun/accessibility/internal/resources/SCCS/s.accessibility_sv.properties com/sun/accessibility/internal/resources/SCCS/s.accessibility_zh_CN.properties com/sun/accessibility/internal/resources/SCCS/s.accessibility_zh_TW.properties com/sun/accessibility/internal/resources/accessibility_zh_CN.properties com/sun/accessibility/internal/resources/accessibility.properties com/sun/accessibility/internal/resources/accessibility_de.properties com/sun/accessibility/internal/resources/accessibility_en.properties com/sun/accessibility/internal/resources/accessibility_es.properties com/sun/accessibility/internal/resources/accessibility_fr.properties com/sun/accessibility/internal/resources/accessibility_it.properties com/sun/accessibility/internal/resources/accessibility_ja.properties com/sun/accessibility/internal/resources/accessibility_ko.properties com/sun/accessibility/internal/resources/accessibility_sv.properties com/sun/accessibility/internal/resources/accessibility_zh_TW.properties com/sun/beans com/sun/beans/SCCS com/sun/beans/SCCS/s.ObjectHandler.java com/sun/beans/ObjectHandler.java com/sun/corba com/sun/corba/se com/sun/corba/se/ActivationIDL com/sun/corba/se/ActivationIDL/SCCS com/sun/corba/se/GiopIDL com/sun/corba/se/GiopIDL/SCCS com/sun/corba/se/GiopIDL/SCCS/s.messages.idl com/sun/corba/se/GiopIDL/SCCS/s.GIOP.idl com/sun/corba/se/GiopIDL/messages.idl com/sun/corba/se/GiopIDL/GIOP.idl com/sun/corba/se/PortableActivationIDL com/sun/corba/se/PortableActivationIDL/SCCS com/sun/corba/se/PortableActivationIDL/SCCS/s.activation.idl com/sun/corba/se/PortableActivationIDL/activation.idl com/sun/corba/se/connection com/sun/corba/se/connection/SCCS com/sun/corba/se/extension com/sun/corba/se/extension/SCCS com/sun/corba/se/impl com/sun/corba/se/impl/activation com/sun/corba/se/impl/activation/SCCS com/sun/corba/se/impl/activation/SCCS/s.NameServiceStartThread.java com/sun/corba/se/impl/activation/SCCS/s.CommandHandler.java com/sun/corba/se/impl/activation/SCCS/s.ServerMain.java com/sun/corba/se/impl/activation/SCCS/s.ORBD.java com/sun/corba/se/impl/activation/SCCS/s.ProcessMonitorThread.java com/sun/corba/se/impl/activation/SCCS/s.RepositoryImpl.java com/sun/corba/se/impl/activation/SCCS/s.ServerManagerImpl.java com/sun/corba/se/impl/activation/SCCS/s.ServerTableEntry.java com/sun/corba/se/impl/activation/SCCS/s.ServerTool.java com/sun/corba/se/impl/activation/NameServiceStartThread.java com/sun/corba/se/impl/activation/CommandHandler.java com/sun/corba/se/impl/activation/RepositoryImpl.java com/sun/corba/se/impl/activation/ORBD.java com/sun/corba/se/impl/activation/ProcessMonitorThread.java com/sun/corba/se/impl/activation/ServerMain.java com/sun/corba/se/impl/activation/ServerManagerImpl.java com/sun/corba/se/impl/activation/ServerTableEntry.java com/sun/corba/se/impl/activation/ServerTool.java com/sun/corba/se/impl/copyobject com/sun/corba/se/impl/copyobject/SCCS com/sun/corba/se/impl/copyobject/SCCS/s.FallbackObjectCopierImpl.java com/sun/corba/se/impl/copyobject/SCCS/s.CopierManagerImpl.java com/sun/corba/se/impl/copyobject/SCCS/s.JavaStreamObjectCopierImpl.java com/sun/corba/se/impl/copyobject/SCCS/s.JavaInputStream.sjava com/sun/corba/se/impl/copyobject/SCCS/s.JavaOutputStream.sjava com/sun/corba/se/impl/copyobject/SCCS/s.ORBStreamObjectCopierImpl.java com/sun/corba/se/impl/copyobject/SCCS/s.ReferenceObjectCopierImpl.java com/sun/corba/se/impl/copyobject/FallbackObjectCopierImpl.java com/sun/corba/se/impl/copyobject/CopierManagerImpl.java com/sun/corba/se/impl/copyobject/JavaStreamObjectCopierImpl.java com/sun/corba/se/impl/copyobject/JavaInputStream.sjava com/sun/corba/se/impl/copyobject/JavaOutputStream.sjava com/sun/corba/se/impl/copyobject/ORBStreamObjectCopierImpl.java com/sun/corba/se/impl/copyobject/ReferenceObjectCopierImpl.java com/sun/corba/se/impl/corba com/sun/corba/se/impl/corba/SCCS com/sun/corba/se/impl/corba/SCCS/s.AnyImplHelper.java com/sun/corba/se/impl/corba/SCCS/s.AnyImpl.java com/sun/corba/se/impl/corba/SCCS/s.CORBAObjectImpl.java com/sun/corba/se/impl/corba/SCCS/s.AsynchInvoke.java com/sun/corba/se/impl/corba/SCCS/s.ExceptionListImpl.java com/sun/corba/se/impl/corba/SCCS/s.ContextImpl.java com/sun/corba/se/impl/corba/SCCS/s.ContextListImpl.java com/sun/corba/se/impl/corba/SCCS/s.EnvironmentImpl.java com/sun/corba/se/impl/corba/SCCS/s.ServerRequestImpl.java com/sun/corba/se/impl/corba/SCCS/s.NVListImpl.java com/sun/corba/se/impl/corba/SCCS/s.NamedValueImpl.java com/sun/corba/se/impl/corba/SCCS/s.PrincipalImpl.java com/sun/corba/se/impl/corba/SCCS/s.RequestImpl.java com/sun/corba/se/impl/corba/SCCS/s.TCUtility.java com/sun/corba/se/impl/corba/SCCS/s.TypeCodeFactory.java com/sun/corba/se/impl/corba/SCCS/s.TypeCodeImpl.java com/sun/corba/se/impl/corba/SCCS/s.TypeCodeImplHelper.java com/sun/corba/se/impl/corba/SCCS/s.orb_config_design.txt com/sun/corba/se/impl/corba/AnyImplHelper.java com/sun/corba/se/impl/corba/AnyImpl.java com/sun/corba/se/impl/corba/AsynchInvoke.java com/sun/corba/se/impl/corba/CORBAObjectImpl.java com/sun/corba/se/impl/corba/ContextImpl.java com/sun/corba/se/impl/corba/ContextListImpl.java com/sun/corba/se/impl/corba/EnvironmentImpl.java com/sun/corba/se/impl/corba/ExceptionListImpl.java com/sun/corba/se/impl/corba/NVListImpl.java com/sun/corba/se/impl/corba/NamedValueImpl.java com/sun/corba/se/impl/corba/PrincipalImpl.java com/sun/corba/se/impl/corba/RequestImpl.java com/sun/corba/se/impl/corba/ServerRequestImpl.java com/sun/corba/se/impl/corba/TCUtility.java com/sun/corba/se/impl/corba/TypeCodeFactory.java com/sun/corba/se/impl/corba/TypeCodeImpl.java com/sun/corba/se/impl/corba/TypeCodeImplHelper.java com/sun/corba/se/impl/corba/orb_config_design.txt com/sun/corba/se/impl/core com/sun/corba/se/impl/core/SCCS com/sun/corba/se/impl/dynamicany com/sun/corba/se/impl/dynamicany/SCCS com/sun/corba/se/impl/dynamicany/SCCS/s.DynAnyCollectionImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynAnyBasicImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynAnyComplexImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynAnyConstructedImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynAnyFactoryImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynAnyImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynAnyUtil.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynArrayImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynEnumImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynFixedImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynSequenceImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynStructImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynUnionImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynValueBoxImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynValueCommonImpl.java com/sun/corba/se/impl/dynamicany/SCCS/s.DynValueImpl.java com/sun/corba/se/impl/dynamicany/DynAnyCollectionImpl.java com/sun/corba/se/impl/dynamicany/DynAnyBasicImpl.java com/sun/corba/se/impl/dynamicany/DynAnyComplexImpl.java com/sun/corba/se/impl/dynamicany/DynAnyConstructedImpl.java com/sun/corba/se/impl/dynamicany/DynAnyFactoryImpl.java com/sun/corba/se/impl/dynamicany/DynAnyImpl.java com/sun/corba/se/impl/dynamicany/DynAnyUtil.java com/sun/corba/se/impl/dynamicany/DynArrayImpl.java com/sun/corba/se/impl/dynamicany/DynEnumImpl.java com/sun/corba/se/impl/dynamicany/DynFixedImpl.java com/sun/corba/se/impl/dynamicany/DynSequenceImpl.java com/sun/corba/se/impl/dynamicany/DynStructImpl.java com/sun/corba/se/impl/dynamicany/DynUnionImpl.java com/sun/corba/se/impl/dynamicany/DynValueBoxImpl.java com/sun/corba/se/impl/dynamicany/DynValueCommonImpl.java com/sun/corba/se/impl/dynamicany/DynValueImpl.java com/sun/corba/se/impl/encoding com/sun/corba/se/impl/encoding/SCCS com/sun/corba/se/impl/encoding/SCCS/s.BufferManagerReadGrow.java com/sun/corba/se/impl/encoding/SCCS/s.BufferManagerFactory.java com/sun/corba/se/impl/encoding/SCCS/s.BufferManagerRead.java com/sun/corba/se/impl/encoding/SCCS/s.BufferManagerReadStream.java com/sun/corba/se/impl/encoding/SCCS/s.BufferManagerWrite.java com/sun/corba/se/impl/encoding/SCCS/s.BufferManagerWriteCollect.java com/sun/corba/se/impl/encoding/SCCS/s.BufferManagerWriteGrow.java com/sun/corba/se/impl/encoding/SCCS/s.BufferManagerWriteStream.java com/sun/corba/se/impl/encoding/SCCS/s.BufferQueue.java com/sun/corba/se/impl/encoding/SCCS/s.ByteBufferWithInfo.java com/sun/corba/se/impl/encoding/SCCS/s.CDRInputObject.java com/sun/corba/se/impl/encoding/SCCS/s.CDRInputStream.java com/sun/corba/se/impl/encoding/SCCS/s.IDLJavaSerializationInputStream.java com/sun/corba/se/impl/encoding/SCCS/s.CDRInputStreamBase.java com/sun/corba/se/impl/encoding/SCCS/s.CDRInputStream_1_0.java com/sun/corba/se/impl/encoding/SCCS/s.CDRInputStream_1_1.java com/sun/corba/se/impl/encoding/SCCS/s.CDRInputStream_1_2.java com/sun/corba/se/impl/encoding/SCCS/s.CDROutputObject.java com/sun/corba/se/impl/encoding/SCCS/s.CDROutputStream.java com/sun/corba/se/impl/encoding/SCCS/s.CDROutputStreamBase.java com/sun/corba/se/impl/encoding/SCCS/s.CDROutputStream_1_0.java com/sun/corba/se/impl/encoding/SCCS/s.CDROutputStream_1_1.java com/sun/corba/se/impl/encoding/SCCS/s.CDROutputStream_1_2.java com/sun/corba/se/impl/encoding/SCCS/s.CachedCodeBase.java com/sun/corba/se/impl/encoding/SCCS/s.CodeSetCache.java com/sun/corba/se/impl/encoding/SCCS/s.CodeSetComponentInfo.java com/sun/corba/se/impl/encoding/SCCS/s.CodeSetConversion.java com/sun/corba/se/impl/encoding/SCCS/s.EncapsInputStream.java com/sun/corba/se/impl/encoding/SCCS/s.EncapsOutputStream.java com/sun/corba/se/impl/encoding/SCCS/s.IDLJavaSerializationOutputStream.java com/sun/corba/se/impl/encoding/SCCS/s.MarkAndResetHandler.java com/sun/corba/se/impl/encoding/SCCS/s.MarshalInputStream.java com/sun/corba/se/impl/encoding/SCCS/s.MarshalOutputStream.java com/sun/corba/se/impl/encoding/SCCS/s.OSFCodeSetRegistry.java com/sun/corba/se/impl/encoding/SCCS/s.RestorableInputStream.java com/sun/corba/se/impl/encoding/SCCS/s.TypeCodeInputStream.java com/sun/corba/se/impl/encoding/SCCS/s.TypeCodeOutputStream.java com/sun/corba/se/impl/encoding/SCCS/s.TypeCodeReader.java com/sun/corba/se/impl/encoding/SCCS/s.WrapperInputStream.java com/sun/corba/se/impl/encoding/BufferManagerReadStream.java com/sun/corba/se/impl/encoding/BufferManagerFactory.java com/sun/corba/se/impl/encoding/BufferManagerRead.java com/sun/corba/se/impl/encoding/BufferManagerReadGrow.java com/sun/corba/se/impl/encoding/BufferManagerWriteCollect.java com/sun/corba/se/impl/encoding/BufferManagerWrite.java com/sun/corba/se/impl/encoding/BufferManagerWriteGrow.java com/sun/corba/se/impl/encoding/BufferManagerWriteStream.java com/sun/corba/se/impl/encoding/BufferQueue.java com/sun/corba/se/impl/encoding/ByteBufferWithInfo.java com/sun/corba/se/impl/encoding/CDRInputObject.java com/sun/corba/se/impl/encoding/CDRInputStream.java com/sun/corba/se/impl/encoding/WrapperInputStream.java com/sun/corba/se/impl/encoding/TypeCodeReader.java com/sun/corba/se/impl/encoding/CDRInputStreamBase.java com/sun/corba/se/impl/encoding/CDRInputStream_1_0.java com/sun/corba/se/impl/encoding/CDRInputStream_1_1.java com/sun/corba/se/impl/encoding/CDRInputStream_1_2.java com/sun/corba/se/impl/encoding/CDROutputObject.java com/sun/corba/se/impl/encoding/CDROutputStream.java com/sun/corba/se/impl/encoding/CDROutputStreamBase.java com/sun/corba/se/impl/encoding/CDROutputStream_1_0.java com/sun/corba/se/impl/encoding/CDROutputStream_1_1.java com/sun/corba/se/impl/encoding/CDROutputStream_1_2.java com/sun/corba/se/impl/encoding/CachedCodeBase.java com/sun/corba/se/impl/encoding/CodeSetCache.java com/sun/corba/se/impl/encoding/CodeSetComponentInfo.java com/sun/corba/se/impl/encoding/CodeSetConversion.java com/sun/corba/se/impl/encoding/EncapsInputStream.java com/sun/corba/se/impl/encoding/EncapsOutputStream.java com/sun/corba/se/impl/encoding/IDLJavaSerializationInputStream.java com/sun/corba/se/impl/encoding/IDLJavaSerializationOutputStream.java com/sun/corba/se/impl/encoding/MarkAndResetHandler.java com/sun/corba/se/impl/encoding/MarshalInputStream.java com/sun/corba/se/impl/encoding/MarshalOutputStream.java com/sun/corba/se/impl/encoding/OSFCodeSetRegistry.java com/sun/corba/se/impl/encoding/RestorableInputStream.java com/sun/corba/se/impl/encoding/TypeCodeInputStream.java com/sun/corba/se/impl/encoding/TypeCodeOutputStream.java com/sun/corba/se/impl/interceptors com/sun/corba/se/impl/interceptors/SCCS com/sun/corba/se/impl/interceptors/SCCS/s.ClientRequestInfoImpl.java com/sun/corba/se/impl/interceptors/SCCS/s.CDREncapsCodec.java com/sun/corba/se/impl/interceptors/SCCS/s.InterceptorInvoker.java com/sun/corba/se/impl/interceptors/SCCS/s.CodecFactoryImpl.java com/sun/corba/se/impl/interceptors/SCCS/s.IORInfoImpl.java com/sun/corba/se/impl/interceptors/SCCS/s.ServerRequestInfoImpl.java com/sun/corba/se/impl/interceptors/SCCS/s.InterceptorList.java com/sun/corba/se/impl/interceptors/SCCS/s.ORBInitInfoImpl.java com/sun/corba/se/impl/interceptors/SCCS/s.PICurrent.java com/sun/corba/se/impl/interceptors/SCCS/s.PIHandlerImpl.java com/sun/corba/se/impl/interceptors/SCCS/s.PINoOpHandlerImpl.java com/sun/corba/se/impl/interceptors/SCCS/s.RequestInfoImpl.java com/sun/corba/se/impl/interceptors/SCCS/s.SlotTable.java com/sun/corba/se/impl/interceptors/SCCS/s.SlotTableStack.java com/sun/corba/se/impl/interceptors/SCCS/s.ThreadCurrentStack.sjava com/sun/corba/se/impl/interceptors/ClientRequestInfoImpl.java com/sun/corba/se/impl/interceptors/CDREncapsCodec.java com/sun/corba/se/impl/interceptors/ServerRequestInfoImpl.java com/sun/corba/se/impl/interceptors/CodecFactoryImpl.java com/sun/corba/se/impl/interceptors/IORInfoImpl.java com/sun/corba/se/impl/interceptors/InterceptorInvoker.java com/sun/corba/se/impl/interceptors/InterceptorList.java com/sun/corba/se/impl/interceptors/ORBInitInfoImpl.java com/sun/corba/se/impl/interceptors/PICurrent.java com/sun/corba/se/impl/interceptors/PIHandlerImpl.java com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.java com/sun/corba/se/impl/interceptors/RequestInfoImpl.java com/sun/corba/se/impl/interceptors/SlotTable.java com/sun/corba/se/impl/interceptors/SlotTableStack.java com/sun/corba/se/impl/interceptors/ThreadCurrentStack.sjava com/sun/corba/se/impl/io com/sun/corba/se/impl/io/SCCS com/sun/corba/se/impl/io/SCCS/s.ObjectStreamClass.java com/sun/corba/se/impl/io/SCCS/s.FVDCodeBaseImpl.java com/sun/corba/se/impl/io/SCCS/s.IIOPInputStream.java com/sun/corba/se/impl/io/SCCS/s.IIOPOutputStream.java com/sun/corba/se/impl/io/SCCS/s.InputStreamHook.java com/sun/corba/se/impl/io/SCCS/s.ObjectStreamClassCorbaExt.java com/sun/corba/se/impl/io/SCCS/s.ObjectStreamField.java com/sun/corba/se/impl/io/SCCS/s.OptionalDataException.java com/sun/corba/se/impl/io/SCCS/s.OutputStreamHook.java com/sun/corba/se/impl/io/SCCS/s.TypeMismatchException.java com/sun/corba/se/impl/io/SCCS/s.ValueHandlerImpl.java com/sun/corba/se/impl/io/SCCS/s.ValueUtility.java com/sun/corba/se/impl/io/ObjectStreamClassCorbaExt.java com/sun/corba/se/impl/io/FVDCodeBaseImpl.java com/sun/corba/se/impl/io/IIOPInputStream.java com/sun/corba/se/impl/io/IIOPOutputStream.java com/sun/corba/se/impl/io/InputStreamHook.java com/sun/corba/se/impl/io/ObjectStreamClass.java com/sun/corba/se/impl/io/OptionalDataException.java com/sun/corba/se/impl/io/ObjectStreamField.java com/sun/corba/se/impl/io/OutputStreamHook.java com/sun/corba/se/impl/io/TypeMismatchException.java com/sun/corba/se/impl/io/ValueHandlerImpl.java com/sun/corba/se/impl/io/ValueUtility.java com/sun/corba/se/impl/ior com/sun/corba/se/impl/ior/SCCS com/sun/corba/se/impl/ior/SCCS/s.EncapsulationUtility.java com/sun/corba/se/impl/ior/SCCS/s.ByteBuffer.java com/sun/corba/se/impl/ior/SCCS/s.GenericIdentifiable.java com/sun/corba/se/impl/ior/SCCS/s.FreezableList.java com/sun/corba/se/impl/ior/SCCS/s.IdentifiableFactoryFinderBase.java com/sun/corba/se/impl/ior/SCCS/s.GenericTaggedComponent.java com/sun/corba/se/impl/ior/SCCS/s.GenericTaggedProfile.java com/sun/corba/se/impl/ior/SCCS/s.IORImpl.java com/sun/corba/se/impl/ior/SCCS/s.IORTemplateImpl.java com/sun/corba/se/impl/ior/SCCS/s.IORTemplateListImpl.java com/sun/corba/se/impl/ior/SCCS/s.JIDLObjectKeyTemplate.java com/sun/corba/se/impl/ior/SCCS/s.NewObjectKeyTemplateBase.java com/sun/corba/se/impl/ior/SCCS/s.TaggedProfileTemplateFactoryFinderImpl.java com/sun/corba/se/impl/ior/SCCS/s.ObjectAdapterIdArray.java com/sun/corba/se/impl/ior/SCCS/s.ObjectAdapterIdBase.java com/sun/corba/se/impl/ior/SCCS/s.ObjectAdapterIdNumber.java com/sun/corba/se/impl/ior/SCCS/s.ObjectIdImpl.java com/sun/corba/se/impl/ior/SCCS/s.ObjectKeyFactoryImpl.java com/sun/corba/se/impl/ior/SCCS/s.ObjectKeyImpl.java com/sun/corba/se/impl/ior/SCCS/s.ObjectKeyTemplateBase.java com/sun/corba/se/impl/ior/SCCS/s.ObjectReferenceFactoryImpl.java com/sun/corba/se/impl/ior/SCCS/s.ObjectReferenceProducerBase.java com/sun/corba/se/impl/ior/SCCS/s.ObjectReferenceTemplateImpl.java com/sun/corba/se/impl/ior/SCCS/s.OldJIDLObjectKeyTemplate.java com/sun/corba/se/impl/ior/SCCS/s.OldObjectKeyTemplateBase.java com/sun/corba/se/impl/ior/SCCS/s.OldPOAObjectKeyTemplate.java com/sun/corba/se/impl/ior/SCCS/s.POAObjectKeyTemplate.java com/sun/corba/se/impl/ior/SCCS/s.StubIORImpl.java com/sun/corba/se/impl/ior/SCCS/s.TaggedComponentFactoryFinderImpl.java com/sun/corba/se/impl/ior/SCCS/s.TaggedProfileFactoryFinderImpl.java com/sun/corba/se/impl/ior/SCCS/s.TestAssertions com/sun/corba/se/impl/ior/SCCS/s.ior.mdl com/sun/corba/se/impl/ior/SCCS/s.notes com/sun/corba/se/impl/ior/SCCS/s.WireObjectKeyTemplate.java com/sun/corba/se/impl/ior/iiop com/sun/corba/se/impl/ior/iiop/SCCS com/sun/corba/se/impl/ior/iiop/SCCS/s.AlternateIIOPAddressComponentImpl.java com/sun/corba/se/impl/ior/iiop/SCCS/s.CodeSetsComponentImpl.java com/sun/corba/se/impl/ior/iiop/SCCS/s.IIOPAddressBase.java com/sun/corba/se/impl/ior/iiop/SCCS/s.IIOPAddressClosureImpl.java com/sun/corba/se/impl/ior/iiop/SCCS/s.IIOPAddressImpl.java com/sun/corba/se/impl/ior/iiop/SCCS/s.IIOPProfileImpl.java com/sun/corba/se/impl/ior/iiop/SCCS/s.IIOPProfileTemplateImpl.java com/sun/corba/se/impl/ior/iiop/SCCS/s.JavaCodebaseComponentImpl.java com/sun/corba/se/impl/ior/iiop/SCCS/s.JavaSerializationComponent.java com/sun/corba/se/impl/ior/iiop/SCCS/s.MaxStreamFormatVersionComponentImpl.java com/sun/corba/se/impl/ior/iiop/SCCS/s.ORBTypeComponentImpl.java com/sun/corba/se/impl/ior/iiop/SCCS/s.RequestPartitioningComponentImpl.java com/sun/corba/se/impl/ior/iiop/MaxStreamFormatVersionComponentImpl.java com/sun/corba/se/impl/ior/iiop/AlternateIIOPAddressComponentImpl.java com/sun/corba/se/impl/ior/iiop/CodeSetsComponentImpl.java com/sun/corba/se/impl/ior/iiop/IIOPAddressBase.java com/sun/corba/se/impl/ior/iiop/IIOPAddressClosureImpl.java com/sun/corba/se/impl/ior/iiop/IIOPAddressImpl.java com/sun/corba/se/impl/ior/iiop/IIOPProfileImpl.java com/sun/corba/se/impl/ior/iiop/IIOPProfileTemplateImpl.java com/sun/corba/se/impl/ior/iiop/JavaCodebaseComponentImpl.java com/sun/corba/se/impl/ior/iiop/JavaSerializationComponent.java com/sun/corba/se/impl/ior/iiop/ORBTypeComponentImpl.java com/sun/corba/se/impl/ior/iiop/RequestPartitioningComponentImpl.java com/sun/corba/se/impl/ior/FreezableList.java com/sun/corba/se/impl/ior/ByteBuffer.java com/sun/corba/se/impl/ior/IdentifiableFactoryFinderBase.java com/sun/corba/se/impl/ior/EncapsulationUtility.java com/sun/corba/se/impl/ior/GenericIdentifiable.java com/sun/corba/se/impl/ior/GenericTaggedComponent.java com/sun/corba/se/impl/ior/GenericTaggedProfile.java com/sun/corba/se/impl/ior/IORImpl.java com/sun/corba/se/impl/ior/IORTemplateImpl.java com/sun/corba/se/impl/ior/IORTemplateListImpl.java com/sun/corba/se/impl/ior/ObjectReferenceProducerBase.java com/sun/corba/se/impl/ior/JIDLObjectKeyTemplate.java com/sun/corba/se/impl/ior/NewObjectKeyTemplateBase.java com/sun/corba/se/impl/ior/ObjectAdapterIdArray.java com/sun/corba/se/impl/ior/ObjectAdapterIdBase.java com/sun/corba/se/impl/ior/ObjectAdapterIdNumber.java com/sun/corba/se/impl/ior/ObjectIdImpl.java com/sun/corba/se/impl/ior/ObjectKeyFactoryImpl.java com/sun/corba/se/impl/ior/ObjectKeyImpl.java com/sun/corba/se/impl/ior/ObjectKeyTemplateBase.java com/sun/corba/se/impl/ior/ObjectReferenceFactoryImpl.java com/sun/corba/se/impl/ior/ObjectReferenceTemplateImpl.java com/sun/corba/se/impl/ior/OldJIDLObjectKeyTemplate.java com/sun/corba/se/impl/ior/OldObjectKeyTemplateBase.java com/sun/corba/se/impl/ior/OldPOAObjectKeyTemplate.java com/sun/corba/se/impl/ior/TestAssertions com/sun/corba/se/impl/ior/ior.mdl com/sun/corba/se/impl/ior/StubIORImpl.java com/sun/corba/se/impl/ior/POAObjectKeyTemplate.java com/sun/corba/se/impl/ior/TaggedComponentFactoryFinderImpl.java com/sun/corba/se/impl/ior/TaggedProfileFactoryFinderImpl.java com/sun/corba/se/impl/ior/TaggedProfileTemplateFactoryFinderImpl.java com/sun/corba/se/impl/ior/WireObjectKeyTemplate.java com/sun/corba/se/impl/ior/notes com/sun/corba/se/impl/javax com/sun/corba/se/impl/javax/rmi com/sun/corba/se/impl/javax/rmi/CORBA com/sun/corba/se/impl/javax/rmi/CORBA/SCCS com/sun/corba/se/impl/javax/rmi/CORBA/SCCS/s.StubDelegateImpl.java com/sun/corba/se/impl/javax/rmi/CORBA/SCCS/s.Util.java com/sun/corba/se/impl/javax/rmi/CORBA/StubDelegateImpl.java com/sun/corba/se/impl/javax/rmi/CORBA/Util.java com/sun/corba/se/impl/javax/rmi/SCCS com/sun/corba/se/impl/javax/rmi/SCCS/s.PortableRemoteObject.java com/sun/corba/se/impl/javax/rmi/PortableRemoteObject.java com/sun/corba/se/impl/legacy com/sun/corba/se/impl/legacy/connection com/sun/corba/se/impl/legacy/connection/SCCS com/sun/corba/se/impl/legacy/connection/SCCS/s.SocketFactoryAcceptorImpl.java com/sun/corba/se/impl/legacy/connection/SCCS/s.DefaultSocketFactory.java com/sun/corba/se/impl/legacy/connection/SCCS/s.EndPointInfoImpl.java com/sun/corba/se/impl/legacy/connection/SCCS/s.SocketFactoryContactInfoListIteratorImpl.java com/sun/corba/se/impl/legacy/connection/SCCS/s.LegacyServerSocketManagerImpl.java com/sun/corba/se/impl/legacy/connection/SCCS/s.SocketFactoryConnectionImpl.java com/sun/corba/se/impl/legacy/connection/SCCS/s.SocketFactoryContactInfoImpl.java com/sun/corba/se/impl/legacy/connection/SCCS/s.SocketFactoryContactInfoListImpl.java com/sun/corba/se/impl/legacy/connection/SCCS/s.USLPort.java com/sun/corba/se/impl/legacy/connection/LegacyServerSocketManagerImpl.java com/sun/corba/se/impl/legacy/connection/DefaultSocketFactory.java com/sun/corba/se/impl/legacy/connection/EndPointInfoImpl.java com/sun/corba/se/impl/legacy/connection/SocketFactoryConnectionImpl.java com/sun/corba/se/impl/legacy/connection/SocketFactoryAcceptorImpl.java com/sun/corba/se/impl/legacy/connection/SocketFactoryContactInfoListIteratorImpl.java com/sun/corba/se/impl/legacy/connection/SocketFactoryContactInfoImpl.java com/sun/corba/se/impl/legacy/connection/SocketFactoryContactInfoListImpl.java com/sun/corba/se/impl/legacy/connection/USLPort.java com/sun/corba/se/impl/monitoring com/sun/corba/se/impl/monitoring/SCCS com/sun/corba/se/impl/monitoring/SCCS/s.MonitoredAttributeInfoFactoryImpl.java com/sun/corba/se/impl/monitoring/SCCS/s.MonitoredAttributeInfoImpl.java com/sun/corba/se/impl/monitoring/SCCS/s.MonitoredObjectFactoryImpl.java com/sun/corba/se/impl/monitoring/SCCS/s.MonitoredObjectImpl.java com/sun/corba/se/impl/monitoring/SCCS/s.MonitoringManagerFactoryImpl.java com/sun/corba/se/impl/monitoring/SCCS/s.MonitoringManagerImpl.java com/sun/corba/se/impl/monitoring/MonitoredAttributeInfoFactoryImpl.java com/sun/corba/se/impl/monitoring/MonitoredAttributeInfoImpl.java com/sun/corba/se/impl/monitoring/MonitoredObjectFactoryImpl.java com/sun/corba/se/impl/monitoring/MonitoredObjectImpl.java com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.java com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.java com/sun/corba/se/impl/naming com/sun/corba/se/impl/naming/cosnaming com/sun/corba/se/impl/naming/cosnaming/SCCS com/sun/corba/se/impl/naming/cosnaming/SCCS/s.InterOperableNamingImpl.java com/sun/corba/se/impl/naming/cosnaming/SCCS/s.BindingIteratorImpl.java com/sun/corba/se/impl/naming/cosnaming/SCCS/s.InternalBindingKey.java com/sun/corba/se/impl/naming/cosnaming/SCCS/s.InternalBindingValue.java com/sun/corba/se/impl/naming/cosnaming/SCCS/s.NamingContextDataStore.java com/sun/corba/se/impl/naming/cosnaming/SCCS/s.NamingContextImpl.java com/sun/corba/se/impl/naming/cosnaming/SCCS/s.NamingUtils.java com/sun/corba/se/impl/naming/cosnaming/SCCS/s.TransientBindingIterator.java com/sun/corba/se/impl/naming/cosnaming/SCCS/s.TransientNameServer.java com/sun/corba/se/impl/naming/cosnaming/SCCS/s.TransientNameService.java com/sun/corba/se/impl/naming/cosnaming/SCCS/s.TransientNamingContext.java com/sun/corba/se/impl/naming/cosnaming/InterOperableNamingImpl.java com/sun/corba/se/impl/naming/cosnaming/BindingIteratorImpl.java com/sun/corba/se/impl/naming/cosnaming/TransientBindingIterator.java com/sun/corba/se/impl/naming/cosnaming/InternalBindingKey.java com/sun/corba/se/impl/naming/cosnaming/InternalBindingValue.java com/sun/corba/se/impl/naming/cosnaming/NamingContextDataStore.java com/sun/corba/se/impl/naming/cosnaming/NamingContextImpl.java com/sun/corba/se/impl/naming/cosnaming/NamingUtils.java com/sun/corba/se/impl/naming/cosnaming/TransientNameServer.java com/sun/corba/se/impl/naming/cosnaming/TransientNameService.java com/sun/corba/se/impl/naming/cosnaming/TransientNamingContext.java com/sun/corba/se/impl/naming/namingutil com/sun/corba/se/impl/naming/namingutil/SCCS com/sun/corba/se/impl/naming/namingutil/SCCS/s.IIOPEndpointInfo.java com/sun/corba/se/impl/naming/namingutil/SCCS/s.CorbalocURL.java com/sun/corba/se/impl/naming/namingutil/SCCS/s.CorbanameURL.java com/sun/corba/se/impl/naming/namingutil/SCCS/s.INSURLHandler.java com/sun/corba/se/impl/naming/namingutil/SCCS/s.INSURL.java com/sun/corba/se/impl/naming/namingutil/SCCS/s.INSURLBase.java com/sun/corba/se/impl/naming/namingutil/SCCS/s.NamingConstants.java com/sun/corba/se/impl/naming/namingutil/SCCS/s.Utility.java com/sun/corba/se/impl/naming/namingutil/IIOPEndpointInfo.java com/sun/corba/se/impl/naming/namingutil/CorbalocURL.java com/sun/corba/se/impl/naming/namingutil/CorbanameURL.java com/sun/corba/se/impl/naming/namingutil/INSURLHandler.java com/sun/corba/se/impl/naming/namingutil/INSURL.java com/sun/corba/se/impl/naming/namingutil/INSURLBase.java com/sun/corba/se/impl/naming/namingutil/NamingConstants.java com/sun/corba/se/impl/naming/namingutil/Utility.java com/sun/corba/se/impl/naming/pcosnaming com/sun/corba/se/impl/naming/pcosnaming/SCCS com/sun/corba/se/impl/naming/pcosnaming/SCCS/s.PersistentBindingIterator.java com/sun/corba/se/impl/naming/pcosnaming/SCCS/s.InternalBindingKey.java com/sun/corba/se/impl/naming/pcosnaming/SCCS/s.InternalBindingValue.java com/sun/corba/se/impl/naming/pcosnaming/SCCS/s.NameServer.java com/sun/corba/se/impl/naming/pcosnaming/SCCS/s.NameService.java com/sun/corba/se/impl/naming/pcosnaming/SCCS/s.NamingContextImpl.java com/sun/corba/se/impl/naming/pcosnaming/SCCS/s.ServantManagerImpl.java com/sun/corba/se/impl/naming/pcosnaming/InternalBindingValue.java com/sun/corba/se/impl/naming/pcosnaming/InternalBindingKey.java com/sun/corba/se/impl/naming/pcosnaming/NamingContextImpl.java com/sun/corba/se/impl/naming/pcosnaming/NameServer.java com/sun/corba/se/impl/naming/pcosnaming/NameService.java com/sun/corba/se/impl/naming/pcosnaming/PersistentBindingIterator.java com/sun/corba/se/impl/naming/pcosnaming/ServantManagerImpl.java com/sun/corba/se/impl/oa com/sun/corba/se/impl/oa/SCCS com/sun/corba/se/impl/oa/SCCS/s.NullServantImpl.java com/sun/corba/se/impl/oa/poa com/sun/corba/se/impl/oa/poa/SCCS com/sun/corba/se/impl/oa/poa/SCCS/s.ActiveObjectMap.java com/sun/corba/se/impl/oa/poa/SCCS/s.AOMEntry.java com/sun/corba/se/impl/oa/poa/SCCS/s.IdAssignmentPolicyImpl.java com/sun/corba/se/impl/oa/poa/SCCS/s.BadServerIdHandler.java com/sun/corba/se/impl/oa/poa/SCCS/s.DelegateImpl.java com/sun/corba/se/impl/oa/poa/SCCS/s.IdUniquenessPolicyImpl.java com/sun/corba/se/impl/oa/poa/SCCS/s.ImplicitActivationPolicyImpl.java com/sun/corba/se/impl/oa/poa/SCCS/s.LifespanPolicyImpl.java com/sun/corba/se/impl/oa/poa/SCCS/s.POACurrent.java com/sun/corba/se/impl/oa/poa/SCCS/s.POAFactory.java com/sun/corba/se/impl/oa/poa/SCCS/s.POAImpl.java com/sun/corba/se/impl/oa/poa/SCCS/s.POAManagerImpl.java com/sun/corba/se/impl/oa/poa/SCCS/s.POAPolicyMediator.java com/sun/corba/se/impl/oa/poa/SCCS/s.POAPolicyMediatorBase.java com/sun/corba/se/impl/oa/poa/SCCS/s.POAPolicyMediatorBase_R.java com/sun/corba/se/impl/oa/poa/SCCS/s.POAPolicyMediatorFactory.java com/sun/corba/se/impl/oa/poa/SCCS/s.POAPolicyMediatorImpl_NR_UDS.java com/sun/corba/se/impl/oa/poa/SCCS/s.POAPolicyMediatorImpl_NR_USM.java com/sun/corba/se/impl/oa/poa/SCCS/s.POAPolicyMediatorImpl_R_AOM.java com/sun/corba/se/impl/oa/poa/SCCS/s.POAPolicyMediatorImpl_R_UDS.java com/sun/corba/se/impl/oa/poa/SCCS/s.POAPolicyMediatorImpl_R_USM.java com/sun/corba/se/impl/oa/poa/SCCS/s.Policies.java com/sun/corba/se/impl/oa/poa/SCCS/s.RequestProcessingPolicyImpl.java com/sun/corba/se/impl/oa/poa/SCCS/s.ServantRetentionPolicyImpl.java com/sun/corba/se/impl/oa/poa/SCCS/s.ThreadPolicyImpl.java com/sun/corba/se/impl/oa/poa/SCCS/s.minor_code_example.txt com/sun/corba/se/impl/oa/poa/SCCS/s.standard_minor_codes.txt com/sun/corba/se/impl/oa/poa/ActiveObjectMap.java com/sun/corba/se/impl/oa/poa/AOMEntry.java com/sun/corba/se/impl/oa/poa/IdAssignmentPolicyImpl.java com/sun/corba/se/impl/oa/poa/BadServerIdHandler.java com/sun/corba/se/impl/oa/poa/DelegateImpl.java com/sun/corba/se/impl/oa/poa/ImplicitActivationPolicyImpl.java com/sun/corba/se/impl/oa/poa/IdUniquenessPolicyImpl.java com/sun/corba/se/impl/oa/poa/LifespanPolicyImpl.java com/sun/corba/se/impl/oa/poa/POACurrent.java com/sun/corba/se/impl/oa/poa/POAFactory.java com/sun/corba/se/impl/oa/poa/POAImpl.java com/sun/corba/se/impl/oa/poa/POAManagerImpl.java com/sun/corba/se/impl/oa/poa/POAPolicyMediator.java com/sun/corba/se/impl/oa/poa/Policies.java com/sun/corba/se/impl/oa/poa/POAPolicyMediatorBase.java com/sun/corba/se/impl/oa/poa/POAPolicyMediatorBase_R.java com/sun/corba/se/impl/oa/poa/POAPolicyMediatorFactory.java com/sun/corba/se/impl/oa/poa/POAPolicyMediatorImpl_NR_UDS.java com/sun/corba/se/impl/oa/poa/POAPolicyMediatorImpl_NR_USM.java com/sun/corba/se/impl/oa/poa/POAPolicyMediatorImpl_R_AOM.java com/sun/corba/se/impl/oa/poa/POAPolicyMediatorImpl_R_UDS.java com/sun/corba/se/impl/oa/poa/POAPolicyMediatorImpl_R_USM.java com/sun/corba/se/impl/oa/poa/RequestProcessingPolicyImpl.java com/sun/corba/se/impl/oa/poa/ServantRetentionPolicyImpl.java com/sun/corba/se/impl/oa/poa/ThreadPolicyImpl.java com/sun/corba/se/impl/oa/poa/minor_code_example.txt com/sun/corba/se/impl/oa/poa/standard_minor_codes.txt com/sun/corba/se/impl/oa/toa com/sun/corba/se/impl/oa/toa/SCCS com/sun/corba/se/impl/oa/toa/SCCS/s.TOAFactory.java com/sun/corba/se/impl/oa/toa/SCCS/s.TOA.java com/sun/corba/se/impl/oa/toa/SCCS/s.TOAImpl.java com/sun/corba/se/impl/oa/toa/SCCS/s.TransientObjectManager.java com/sun/corba/se/impl/oa/toa/TOAFactory.java com/sun/corba/se/impl/oa/toa/TOA.java com/sun/corba/se/impl/oa/toa/TOAImpl.java com/sun/corba/se/impl/oa/toa/TransientObjectManager.java com/sun/corba/se/impl/oa/NullServantImpl.java com/sun/corba/se/impl/orb com/sun/corba/se/impl/orb/SCCS com/sun/corba/se/impl/orb/SCCS/s.AppletDataCollector.java com/sun/corba/se/impl/orb/SCCS/s.DataCollectorBase.java com/sun/corba/se/impl/orb/SCCS/s.DataCollectorFactory.java com/sun/corba/se/impl/orb/SCCS/s.NormalDataCollector.java com/sun/corba/se/impl/orb/SCCS/s.NormalParserAction.java com/sun/corba/se/impl/orb/SCCS/s.NormalParserData.java com/sun/corba/se/impl/orb/SCCS/s.ORBConfiguratorImpl.java com/sun/corba/se/impl/orb/SCCS/s.ORBDataParserImpl.java com/sun/corba/se/impl/orb/SCCS/s.ORBImpl.java com/sun/corba/se/impl/orb/SCCS/s.ORBSingleton.java com/sun/corba/se/impl/orb/SCCS/s.ORBVersionImpl.java com/sun/corba/se/impl/orb/SCCS/s.ParserAction.java com/sun/corba/se/impl/orb/SCCS/s.ParserActionBase.java com/sun/corba/se/impl/orb/SCCS/s.ParserActionFactory.java com/sun/corba/se/impl/orb/SCCS/s.ParserDataBase.java com/sun/corba/se/impl/orb/SCCS/s.ParserTable.java com/sun/corba/se/impl/orb/SCCS/s.PrefixParserAction.java com/sun/corba/se/impl/orb/SCCS/s.PrefixParserData.java com/sun/corba/se/impl/orb/SCCS/s.PropertyOnlyDataCollector.java com/sun/corba/se/impl/orb/SCCS/s.parsing_combinators.txt com/sun/corba/se/impl/orb/AppletDataCollector.java com/sun/corba/se/impl/orb/DataCollectorBase.java com/sun/corba/se/impl/orb/DataCollectorFactory.java com/sun/corba/se/impl/orb/NormalDataCollector.java com/sun/corba/se/impl/orb/NormalParserAction.java com/sun/corba/se/impl/orb/NormalParserData.java com/sun/corba/se/impl/orb/ORBConfiguratorImpl.java com/sun/corba/se/impl/orb/ORBDataParserImpl.java com/sun/corba/se/impl/orb/ORBImpl.java com/sun/corba/se/impl/orb/ORBSingleton.java com/sun/corba/se/impl/orb/ORBVersionImpl.java com/sun/corba/se/impl/orb/ParserAction.java com/sun/corba/se/impl/orb/ParserActionBase.java com/sun/corba/se/impl/orb/ParserActionFactory.java com/sun/corba/se/impl/orb/ParserDataBase.java com/sun/corba/se/impl/orb/ParserTable.java com/sun/corba/se/impl/orb/PrefixParserAction.java com/sun/corba/se/impl/orb/PrefixParserData.java com/sun/corba/se/impl/orb/PropertyOnlyDataCollector.java com/sun/corba/se/impl/orb/parsing_combinators.txt com/sun/corba/se/impl/orbutil com/sun/corba/se/impl/orbutil/SCCS com/sun/corba/se/impl/orbutil/SCCS/s.CorbaResourceUtil.java com/sun/corba/se/impl/orbutil/SCCS/s.CacheTable.java com/sun/corba/se/impl/orbutil/SCCS/s.GetPropertyAction.java com/sun/corba/se/impl/orbutil/SCCS/s.DefineWrapper.sjava com/sun/corba/se/impl/orbutil/SCCS/s.DenseIntMapImpl.java com/sun/corba/se/impl/orbutil/SCCS/s.IIOPInputStream_1_3_1.java com/sun/corba/se/impl/orbutil/SCCS/s.HexOutputStream.java com/sun/corba/se/impl/orbutil/SCCS/s.IIOPInputStream_1_3.java com/sun/corba/se/impl/orbutil/SCCS/s.IIOPOutputStream_1_3.java com/sun/corba/se/impl/orbutil/SCCS/s.IIOPOutputStream_1_3_1.java com/sun/corba/se/impl/orbutil/SCCS/s.LegacyHookGetFields.java com/sun/corba/se/impl/orbutil/SCCS/s.LegacyHookPutFields.java com/sun/corba/se/impl/orbutil/SCCS/s.LogKeywords.java com/sun/corba/se/impl/orbutil/SCCS/s.ObjectStreamClass_1_3_1.java com/sun/corba/se/impl/orbutil/SCCS/s.ORBClassLoader.java com/sun/corba/se/impl/orbutil/SCCS/s.ORBConstants.java com/sun/corba/se/impl/orbutil/SCCS/s.ORBUtility.java com/sun/corba/se/impl/orbutil/SCCS/s.ObjectStreamClassUtil_1_3.java com/sun/corba/se/impl/orbutil/SCCS/s.ObjectStreamField.java com/sun/corba/se/impl/orbutil/SCCS/s.ObjectUtility.java com/sun/corba/se/impl/orbutil/SCCS/s.ObjectWriter.java com/sun/corba/se/impl/orbutil/SCCS/s.RepIdDelegator.java com/sun/corba/se/impl/orbutil/SCCS/s.RepIdDelegator_1_3.java com/sun/corba/se/impl/orbutil/SCCS/s.RepIdDelegator_1_3_1.java com/sun/corba/se/impl/orbutil/SCCS/s.RepositoryIdCache_1_3.java com/sun/corba/se/impl/orbutil/SCCS/s.RepositoryIdCache_1_3_1.java com/sun/corba/se/impl/orbutil/SCCS/s.RepositoryIdFactory.java com/sun/corba/se/impl/orbutil/SCCS/s.RepositoryIdInterface.java com/sun/corba/se/impl/orbutil/SCCS/s.RepositoryIdStrings.java com/sun/corba/se/impl/orbutil/SCCS/s.RepositoryIdUtility.java com/sun/corba/se/impl/orbutil/SCCS/s.RepositoryId_1_3.java com/sun/corba/se/impl/orbutil/SCCS/s.RepositoryId_1_3_1.java com/sun/corba/se/impl/orbutil/SCCS/s.StackImpl.java com/sun/corba/se/impl/orbutil/SCCS/s.ValueHandlerImpl_1_3.java com/sun/corba/se/impl/orbutil/SCCS/s.ValueHandlerImpl_1_3_1.java com/sun/corba/se/impl/orbutil/closure com/sun/corba/se/impl/orbutil/closure/SCCS com/sun/corba/se/impl/orbutil/closure/SCCS/s.Constant.java com/sun/corba/se/impl/orbutil/closure/SCCS/s.Future.java com/sun/corba/se/impl/orbutil/closure/Constant.java com/sun/corba/se/impl/orbutil/closure/Future.java com/sun/corba/se/impl/orbutil/concurrent com/sun/corba/se/impl/orbutil/concurrent/SCCS com/sun/corba/se/impl/orbutil/concurrent/SCCS/s.DebugMutex.java com/sun/corba/se/impl/orbutil/concurrent/SCCS/s.CondVar.java com/sun/corba/se/impl/orbutil/concurrent/SCCS/s.ReentrantMutex.java com/sun/corba/se/impl/orbutil/concurrent/SCCS/s.Mutex.java com/sun/corba/se/impl/orbutil/concurrent/SCCS/s.Sync.java com/sun/corba/se/impl/orbutil/concurrent/SCCS/s.SyncUtil.java com/sun/corba/se/impl/orbutil/concurrent/ReentrantMutex.java com/sun/corba/se/impl/orbutil/concurrent/CondVar.java com/sun/corba/se/impl/orbutil/concurrent/DebugMutex.java com/sun/corba/se/impl/orbutil/concurrent/Mutex.java com/sun/corba/se/impl/orbutil/concurrent/Sync.java com/sun/corba/se/impl/orbutil/concurrent/SyncUtil.java com/sun/corba/se/impl/orbutil/fsm com/sun/corba/se/impl/orbutil/fsm/SCCS com/sun/corba/se/impl/orbutil/fsm/SCCS/s.GuardedAction.java com/sun/corba/se/impl/orbutil/fsm/SCCS/s.NameBase.java com/sun/corba/se/impl/orbutil/fsm/SCCS/s.StateEngineImpl.java com/sun/corba/se/impl/orbutil/fsm/StateEngineImpl.java com/sun/corba/se/impl/orbutil/fsm/GuardedAction.java com/sun/corba/se/impl/orbutil/fsm/NameBase.java com/sun/corba/se/impl/orbutil/graph com/sun/corba/se/impl/orbutil/graph/SCCS com/sun/corba/se/impl/orbutil/graph/SCCS/s.GraphImpl.java com/sun/corba/se/impl/orbutil/graph/SCCS/s.Graph.java com/sun/corba/se/impl/orbutil/graph/SCCS/s.Node.java com/sun/corba/se/impl/orbutil/graph/SCCS/s.NodeData.java com/sun/corba/se/impl/orbutil/graph/GraphImpl.java com/sun/corba/se/impl/orbutil/graph/Graph.java com/sun/corba/se/impl/orbutil/graph/Node.java com/sun/corba/se/impl/orbutil/graph/NodeData.java com/sun/corba/se/impl/orbutil/resources com/sun/corba/se/impl/orbutil/resources/SCCS com/sun/corba/se/impl/orbutil/resources/SCCS/s.sunorb_de.properties com/sun/corba/se/impl/orbutil/resources/SCCS/s.sunorb.properties com/sun/corba/se/impl/orbutil/resources/SCCS/s.sunorb_es.properties com/sun/corba/se/impl/orbutil/resources/SCCS/s.sunorb_fr.properties com/sun/corba/se/impl/orbutil/resources/SCCS/s.sunorb_it.properties com/sun/corba/se/impl/orbutil/resources/SCCS/s.sunorb_ja.properties com/sun/corba/se/impl/orbutil/resources/SCCS/s.sunorb_ko.properties com/sun/corba/se/impl/orbutil/resources/SCCS/s.sunorb_sv.properties com/sun/corba/se/impl/orbutil/resources/SCCS/s.sunorb_zh_CN.properties com/sun/corba/se/impl/orbutil/resources/SCCS/s.sunorb_zh_TW.properties com/sun/corba/se/impl/orbutil/resources/sunorb_de.properties com/sun/corba/se/impl/orbutil/resources/sunorb.properties com/sun/corba/se/impl/orbutil/resources/sunorb_es.properties com/sun/corba/se/impl/orbutil/resources/sunorb_fr.properties com/sun/corba/se/impl/orbutil/resources/sunorb_it.properties com/sun/corba/se/impl/orbutil/resources/sunorb_ja.properties com/sun/corba/se/impl/orbutil/resources/sunorb_ko.properties com/sun/corba/se/impl/orbutil/resources/sunorb_sv.properties com/sun/corba/se/impl/orbutil/resources/sunorb_zh_CN.properties com/sun/corba/se/impl/orbutil/resources/sunorb_zh_TW.properties com/sun/corba/se/impl/orbutil/threadpool com/sun/corba/se/impl/orbutil/threadpool/SCCS com/sun/corba/se/impl/orbutil/threadpool/SCCS/s.ThreadPoolManagerImpl.java com/sun/corba/se/impl/orbutil/threadpool/SCCS/s.ThreadPoolImpl.java com/sun/corba/se/impl/orbutil/threadpool/SCCS/s.TimeoutException.java com/sun/corba/se/impl/orbutil/threadpool/SCCS/s.WorkQueueImpl.java com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.java com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.java com/sun/corba/se/impl/orbutil/threadpool/TimeoutException.java com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java com/sun/corba/se/impl/orbutil/CorbaResourceUtil.java com/sun/corba/se/impl/orbutil/CacheTable.java com/sun/corba/se/impl/orbutil/DenseIntMapImpl.java com/sun/corba/se/impl/orbutil/DefineWrapper.sjava com/sun/corba/se/impl/orbutil/ObjectStreamClassUtil_1_3.java com/sun/corba/se/impl/orbutil/GetPropertyAction.java com/sun/corba/se/impl/orbutil/HexOutputStream.java com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3.java com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3_1.java com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3.java com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3_1.java com/sun/corba/se/impl/orbutil/LegacyHookGetFields.java com/sun/corba/se/impl/orbutil/LegacyHookPutFields.java com/sun/corba/se/impl/orbutil/LogKeywords.java com/sun/corba/se/impl/orbutil/ORBClassLoader.java com/sun/corba/se/impl/orbutil/ORBConstants.java com/sun/corba/se/impl/orbutil/ORBUtility.java com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1.java com/sun/corba/se/impl/orbutil/ObjectStreamField.java com/sun/corba/se/impl/orbutil/ObjectUtility.java com/sun/corba/se/impl/orbutil/ObjectWriter.java com/sun/corba/se/impl/orbutil/RepIdDelegator.java com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3.java com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3_1.java com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3.java com/sun/corba/se/impl/orbutil/StackImpl.java com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3_1.java com/sun/corba/se/impl/orbutil/RepositoryIdFactory.java com/sun/corba/se/impl/orbutil/RepositoryIdInterface.java com/sun/corba/se/impl/orbutil/RepositoryIdStrings.java com/sun/corba/se/impl/orbutil/RepositoryIdUtility.java com/sun/corba/se/impl/orbutil/RepositoryId_1_3.java com/sun/corba/se/impl/orbutil/RepositoryId_1_3_1.java com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3.java com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3_1.java com/sun/corba/se/impl/presentation com/sun/corba/se/impl/presentation/rmi com/sun/corba/se/impl/presentation/rmi/SCCS com/sun/corba/se/impl/presentation/rmi/SCCS/s.DynamicMethodMarshallerImpl.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.DynamicStubImpl.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.ExceptionHandler.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.ExceptionHandlerImpl.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.IDLNameTranslatorImpl.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.IDLNameTranslatorImpl_save.sjava com/sun/corba/se/impl/presentation/rmi/SCCS/s.IDLType.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.IDLTypeException.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.IDLTypesUtil.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.IDLTypesUtil_save.sjava com/sun/corba/se/impl/presentation/rmi/SCCS/s.InvocationHandlerFactoryImpl.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.JNDIStateFactoryImpl.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.PresentationManagerImpl.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.ReflectiveTie.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.StubConnectImpl.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.StubFactoryBase.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.StubFactoryDynamicBase.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.StubFactoryFactoryBase.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.StubFactoryFactoryDynamicBase.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.StubFactoryFactoryProxyImpl.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.StubFactoryFactoryStaticImpl.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.StubFactoryProxyImpl.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.StubFactoryStaticImpl.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.StubInvocationHandlerImpl.java com/sun/corba/se/impl/presentation/rmi/SCCS/s.jndi.properties com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl.java com/sun/corba/se/impl/presentation/rmi/DynamicStubImpl.java com/sun/corba/se/impl/presentation/rmi/ExceptionHandler.java com/sun/corba/se/impl/presentation/rmi/ExceptionHandlerImpl.java com/sun/corba/se/impl/presentation/rmi/IDLNameTranslatorImpl.java com/sun/corba/se/impl/presentation/rmi/IDLNameTranslatorImpl_save.sjava com/sun/corba/se/impl/presentation/rmi/IDLType.java com/sun/corba/se/impl/presentation/rmi/IDLTypeException.java com/sun/corba/se/impl/presentation/rmi/IDLTypesUtil.java com/sun/corba/se/impl/presentation/rmi/IDLTypesUtil_save.sjava com/sun/corba/se/impl/presentation/rmi/InvocationHandlerFactoryImpl.java com/sun/corba/se/impl/presentation/rmi/JNDIStateFactoryImpl.java com/sun/corba/se/impl/presentation/rmi/PresentationManagerImpl.java com/sun/corba/se/impl/presentation/rmi/ReflectiveTie.java com/sun/corba/se/impl/presentation/rmi/StubConnectImpl.java com/sun/corba/se/impl/presentation/rmi/StubFactoryBase.java com/sun/corba/se/impl/presentation/rmi/StubFactoryDynamicBase.java com/sun/corba/se/impl/presentation/rmi/StubFactoryFactoryBase.java com/sun/corba/se/impl/presentation/rmi/StubFactoryFactoryDynamicBase.java com/sun/corba/se/impl/presentation/rmi/StubFactoryFactoryProxyImpl.java com/sun/corba/se/impl/presentation/rmi/StubFactoryFactoryStaticImpl.java com/sun/corba/se/impl/presentation/rmi/StubFactoryProxyImpl.java com/sun/corba/se/impl/presentation/rmi/StubFactoryStaticImpl.java com/sun/corba/se/impl/presentation/rmi/StubInvocationHandlerImpl.java com/sun/corba/se/impl/presentation/rmi/jndi.properties com/sun/corba/se/impl/protocol com/sun/corba/se/impl/protocol/SCCS com/sun/corba/se/impl/protocol/SCCS/s.AddressingDispositionException.java com/sun/corba/se/impl/protocol/SCCS/s.BootstrapServerRequestDispatcher.java com/sun/corba/se/impl/protocol/SCCS/s.CorbaClientDelegateImpl.java com/sun/corba/se/impl/protocol/SCCS/s.CorbaClientRequestDispatcherImpl.java com/sun/corba/se/impl/protocol/SCCS/s.CorbaInvocationInfo.java com/sun/corba/se/impl/protocol/SCCS/s.CorbaMessageMediatorImpl.java com/sun/corba/se/impl/protocol/SCCS/s.CorbaServerRequestDispatcherImpl.java com/sun/corba/se/impl/protocol/SCCS/s.FullServantCacheLocalCRDImpl.java com/sun/corba/se/impl/protocol/SCCS/s.INSServerRequestDispatcher.java com/sun/corba/se/impl/protocol/SCCS/s.JIDLLocalCRDImpl.java com/sun/corba/se/impl/protocol/SCCS/s.InfoOnlyServantCacheLocalCRDImpl.java com/sun/corba/se/impl/protocol/SCCS/s.LocalClientRequestDispatcherBase.java com/sun/corba/se/impl/protocol/SCCS/s.MinimalServantCacheLocalCRDImpl.java com/sun/corba/se/impl/protocol/SCCS/s.NotLocalLocalCRDImpl.java com/sun/corba/se/impl/protocol/SCCS/s.POALocalCRDImpl.java com/sun/corba/se/impl/protocol/SCCS/s.RequestCanceledException.java com/sun/corba/se/impl/protocol/SCCS/s.RequestDispatcherRegistryImpl.java com/sun/corba/se/impl/protocol/SCCS/s.ServantCacheLocalCRDBase.java com/sun/corba/se/impl/protocol/SCCS/s.SharedCDRClientRequestDispatcherImpl.java com/sun/corba/se/impl/protocol/SCCS/s.SpecialMethod.java com/sun/corba/se/impl/protocol/giopmsgheaders com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.AddressingDispositionHelper.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.CancelRequestMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.CancelRequestMessage_1_0.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.CancelRequestMessage_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.CancelRequestMessage_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.FragmentMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.FragmentMessage_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.FragmentMessage_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.IORAddressingInfo.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.IORAddressingInfoHelper.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.KeyAddr.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.LocateReplyMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.LocateReplyOrReplyMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.LocateReplyMessage_1_0.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.LocateReplyMessage_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.LocateReplyMessage_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.LocateRequestMessage_1_0.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.LocateRequestMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.LocateRequestMessage_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.LocateRequestMessage_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.Message.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.MessageBase.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.MessageHandler.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.Message_1_0.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.Message_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.Message_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.ProfileAddr.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.RequestMessage_1_0.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.ReferenceAddr.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.ReplyMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.ReplyMessage_1_0.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.ReplyMessage_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.ReplyMessage_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.RequestMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.RequestMessage_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.RequestMessage_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.TargetAddress.java com/sun/corba/se/impl/protocol/giopmsgheaders/SCCS/s.TargetAddressHelper.java com/sun/corba/se/impl/protocol/giopmsgheaders/LocateReplyMessage_1_0.java com/sun/corba/se/impl/protocol/giopmsgheaders/AddressingDispositionHelper.java com/sun/corba/se/impl/protocol/giopmsgheaders/CancelRequestMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/CancelRequestMessage_1_0.java com/sun/corba/se/impl/protocol/giopmsgheaders/CancelRequestMessage_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/CancelRequestMessage_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/FragmentMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/FragmentMessage_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/FragmentMessage_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/IORAddressingInfo.java com/sun/corba/se/impl/protocol/giopmsgheaders/IORAddressingInfoHelper.java com/sun/corba/se/impl/protocol/giopmsgheaders/KeyAddr.java com/sun/corba/se/impl/protocol/giopmsgheaders/LocateReplyMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/LocateReplyOrReplyMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/LocateReplyMessage_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/LocateReplyMessage_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage_1_0.java com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/Message.java com/sun/corba/se/impl/protocol/giopmsgheaders/MessageBase.java com/sun/corba/se/impl/protocol/giopmsgheaders/MessageHandler.java com/sun/corba/se/impl/protocol/giopmsgheaders/Message_1_0.java com/sun/corba/se/impl/protocol/giopmsgheaders/Message_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/Message_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/ProfileAddr.java com/sun/corba/se/impl/protocol/giopmsgheaders/ReferenceAddr.java com/sun/corba/se/impl/protocol/giopmsgheaders/ReplyMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/ReplyMessage_1_0.java com/sun/corba/se/impl/protocol/giopmsgheaders/ReplyMessage_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/ReplyMessage_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/RequestMessage.java com/sun/corba/se/impl/protocol/giopmsgheaders/RequestMessage_1_0.java com/sun/corba/se/impl/protocol/giopmsgheaders/RequestMessage_1_1.java com/sun/corba/se/impl/protocol/giopmsgheaders/RequestMessage_1_2.java com/sun/corba/se/impl/protocol/giopmsgheaders/TargetAddress.java com/sun/corba/se/impl/protocol/giopmsgheaders/TargetAddressHelper.java com/sun/corba/se/impl/protocol/oldlocal com/sun/corba/se/impl/protocol/oldlocal/SCCS com/sun/corba/se/impl/protocol/oldlocal/SCCS/s.LocalClientRequestImpl.sjava com/sun/corba/se/impl/protocol/oldlocal/SCCS/s.LocalClientResponseImpl.sjava com/sun/corba/se/impl/protocol/oldlocal/SCCS/s.LocalServerRequestImpl.sjava com/sun/corba/se/impl/protocol/oldlocal/SCCS/s.LocalServerResponseImpl.sjava com/sun/corba/se/impl/protocol/oldlocal/LocalClientRequestImpl.sjava com/sun/corba/se/impl/protocol/oldlocal/LocalClientResponseImpl.sjava com/sun/corba/se/impl/protocol/oldlocal/LocalServerRequestImpl.sjava com/sun/corba/se/impl/protocol/oldlocal/LocalServerResponseImpl.sjava com/sun/corba/se/impl/protocol/BootstrapServerRequestDispatcher.java com/sun/corba/se/impl/protocol/AddressingDispositionException.java com/sun/corba/se/impl/protocol/CorbaClientRequestDispatcherImpl.java com/sun/corba/se/impl/protocol/CorbaClientDelegateImpl.java com/sun/corba/se/impl/protocol/CorbaServerRequestDispatcherImpl.java com/sun/corba/se/impl/protocol/CorbaInvocationInfo.java com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.java com/sun/corba/se/impl/protocol/FullServantCacheLocalCRDImpl.java com/sun/corba/se/impl/protocol/JIDLLocalCRDImpl.java com/sun/corba/se/impl/protocol/RequestDispatcherRegistryImpl.java com/sun/corba/se/impl/protocol/INSServerRequestDispatcher.java com/sun/corba/se/impl/protocol/InfoOnlyServantCacheLocalCRDImpl.java com/sun/corba/se/impl/protocol/NotLocalLocalCRDImpl.java com/sun/corba/se/impl/protocol/LocalClientRequestDispatcherBase.java com/sun/corba/se/impl/protocol/MinimalServantCacheLocalCRDImpl.java com/sun/corba/se/impl/protocol/POALocalCRDImpl.java com/sun/corba/se/impl/protocol/RequestCanceledException.java com/sun/corba/se/impl/protocol/SpecialMethod.java com/sun/corba/se/impl/protocol/ServantCacheLocalCRDBase.java com/sun/corba/se/impl/protocol/SharedCDRClientRequestDispatcherImpl.java com/sun/corba/se/impl/resolver com/sun/corba/se/impl/resolver/SCCS com/sun/corba/se/impl/resolver/SCCS/s.ORBDefaultInitRefResolverImpl.java com/sun/corba/se/impl/resolver/SCCS/s.BootstrapResolverImpl.java com/sun/corba/se/impl/resolver/SCCS/s.CompositeResolverImpl.java com/sun/corba/se/impl/resolver/SCCS/s.FileResolverImpl.java com/sun/corba/se/impl/resolver/SCCS/s.INSURLOperationImpl.java com/sun/corba/se/impl/resolver/SCCS/s.LocalResolverImpl.java com/sun/corba/se/impl/resolver/SCCS/s.ORBInitRefResolverImpl.java com/sun/corba/se/impl/resolver/SCCS/s.SplitLocalResolverImpl.java com/sun/corba/se/impl/resolver/ORBDefaultInitRefResolverImpl.java com/sun/corba/se/impl/resolver/BootstrapResolverImpl.java com/sun/corba/se/impl/resolver/CompositeResolverImpl.java com/sun/corba/se/impl/resolver/FileResolverImpl.java com/sun/corba/se/impl/resolver/INSURLOperationImpl.java com/sun/corba/se/impl/resolver/LocalResolverImpl.java com/sun/corba/se/impl/resolver/ORBInitRefResolverImpl.java com/sun/corba/se/impl/resolver/SplitLocalResolverImpl.java com/sun/corba/se/impl/transport com/sun/corba/se/impl/transport/SCCS com/sun/corba/se/impl/transport/SCCS/s.CorbaContactInfoListIteratorImpl.java com/sun/corba/se/impl/transport/SCCS/s.BufferConnectionImpl.sjava com/sun/corba/se/impl/transport/SCCS/s.ByteBufferPoolImpl.java com/sun/corba/se/impl/transport/SCCS/s.CorbaConnectionCacheBase.java com/sun/corba/se/impl/transport/SCCS/s.CorbaContactInfoBase.java com/sun/corba/se/impl/transport/SCCS/s.CorbaContactInfoListImpl.java com/sun/corba/se/impl/transport/SCCS/s.CorbaInboundConnectionCacheImpl.java com/sun/corba/se/impl/transport/SCCS/s.CorbaOutboundConnectionCacheImpl.java com/sun/corba/se/impl/transport/SCCS/s.CorbaResponseWaitingRoomImpl.java com/sun/corba/se/impl/transport/SCCS/s.CorbaTransportManagerImpl.java com/sun/corba/se/impl/transport/SCCS/s.DefaultIORToSocketInfoImpl.java com/sun/corba/se/impl/transport/SCCS/s.DefaultSocketFactoryImpl.java com/sun/corba/se/impl/transport/SCCS/s.EventHandlerBase.java com/sun/corba/se/impl/transport/SCCS/s.ListenerThreadImpl.java com/sun/corba/se/impl/transport/SCCS/s.ReadTCPTimeoutsImpl.java com/sun/corba/se/impl/transport/SCCS/s.ReaderThreadImpl.java com/sun/corba/se/impl/transport/SCCS/s.SelectorImpl.java com/sun/corba/se/impl/transport/SCCS/s.SharedCDRContactInfoImpl.java com/sun/corba/se/impl/transport/SCCS/s.SocketOrChannelAcceptorImpl.java com/sun/corba/se/impl/transport/SCCS/s.SocketOrChannelConnectionImpl.java com/sun/corba/se/impl/transport/SCCS/s.SocketOrChannelContactInfoImpl.java com/sun/corba/se/impl/transport/CorbaConnectionCacheBase.java com/sun/corba/se/impl/transport/BufferConnectionImpl.sjava com/sun/corba/se/impl/transport/ByteBufferPoolImpl.java com/sun/corba/se/impl/transport/CorbaContactInfoListIteratorImpl.java com/sun/corba/se/impl/transport/CorbaContactInfoBase.java com/sun/corba/se/impl/transport/CorbaContactInfoListImpl.java com/sun/corba/se/impl/transport/CorbaInboundConnectionCacheImpl.java com/sun/corba/se/impl/transport/CorbaOutboundConnectionCacheImpl.java com/sun/corba/se/impl/transport/CorbaResponseWaitingRoomImpl.java com/sun/corba/se/impl/transport/CorbaTransportManagerImpl.java com/sun/corba/se/impl/transport/DefaultIORToSocketInfoImpl.java com/sun/corba/se/impl/transport/DefaultSocketFactoryImpl.java com/sun/corba/se/impl/transport/EventHandlerBase.java com/sun/corba/se/impl/transport/ListenerThreadImpl.java com/sun/corba/se/impl/transport/ReadTCPTimeoutsImpl.java com/sun/corba/se/impl/transport/ReaderThreadImpl.java com/sun/corba/se/impl/transport/SelectorImpl.java com/sun/corba/se/impl/transport/SharedCDRContactInfoImpl.java com/sun/corba/se/impl/transport/SocketOrChannelAcceptorImpl.java com/sun/corba/se/impl/transport/SocketOrChannelConnectionImpl.java com/sun/corba/se/impl/transport/SocketOrChannelContactInfoImpl.java com/sun/corba/se/impl/util com/sun/corba/se/impl/util/SCCS com/sun/corba/se/impl/util/SCCS/s.IdentityHashtableEnumerator.java com/sun/corba/se/impl/util/SCCS/s.IdentityHashtable.java com/sun/corba/se/impl/util/SCCS/s.JDKClassLoader.java com/sun/corba/se/impl/util/SCCS/s.JDKBridge.java com/sun/corba/se/impl/util/SCCS/s.ORBProperties.java com/sun/corba/se/impl/util/SCCS/s.PackagePrefixChecker.java com/sun/corba/se/impl/util/SCCS/s.RepositoryId.java com/sun/corba/se/impl/util/SCCS/s.RepositoryIdCache.java com/sun/corba/se/impl/util/SCCS/s.SUNVMCID.java com/sun/corba/se/impl/util/SCCS/s.Utility.java com/sun/corba/se/impl/util/SCCS/s.Version.java com/sun/corba/se/impl/util/PackagePrefixChecker.java com/sun/corba/se/impl/util/IdentityHashtable.java com/sun/corba/se/impl/util/JDKBridge.java com/sun/corba/se/impl/util/JDKClassLoader.java com/sun/corba/se/impl/util/IdentityHashtableEnumerator.java com/sun/corba/se/impl/util/ORBProperties.java com/sun/corba/se/impl/util/RepositoryId.java com/sun/corba/se/impl/util/RepositoryIdCache.java com/sun/corba/se/impl/util/SUNVMCID.java com/sun/corba/se/impl/util/Utility.java com/sun/corba/se/impl/util/Version.java com/sun/corba/se/interceptor com/sun/corba/se/interceptor/SCCS com/sun/corba/se/internal com/sun/corba/se/internal/Activation com/sun/corba/se/internal/Activation/SCCS com/sun/corba/se/internal/CosNaming com/sun/corba/se/internal/CosNaming/SCCS com/sun/corba/se/internal/CosNaming/SCCS/s.BootstrapServer.java com/sun/corba/se/internal/CosNaming/BootstrapServer.java com/sun/corba/se/internal/DynamicAny com/sun/corba/se/internal/DynamicAny/SCCS com/sun/corba/se/internal/Interceptors com/sun/corba/se/internal/Interceptors/SCCS com/sun/corba/se/internal/Interceptors/SCCS/s.PIORB.java com/sun/corba/se/internal/Interceptors/PIORB.java com/sun/corba/se/internal/PCosNaming com/sun/corba/se/internal/PCosNaming/SCCS com/sun/corba/se/internal/POA com/sun/corba/se/internal/POA/SCCS com/sun/corba/se/internal/POA/SCCS/s.POAORB.java com/sun/corba/se/internal/POA/POAORB.java com/sun/corba/se/internal/corba com/sun/corba/se/internal/corba/SCCS com/sun/corba/se/internal/corba/SCCS/s.ORBSingleton.java com/sun/corba/se/internal/corba/ORBSingleton.java com/sun/corba/se/internal/core com/sun/corba/se/internal/core/SCCS com/sun/corba/se/internal/iiop com/sun/corba/se/internal/iiop/SCCS com/sun/corba/se/internal/iiop/SCCS/s.ORB.java com/sun/corba/se/internal/iiop/messages com/sun/corba/se/internal/iiop/messages/SCCS com/sun/corba/se/internal/iiop/ORB.java com/sun/corba/se/internal/io com/sun/corba/se/internal/io/SCCS com/sun/corba/se/internal/io/SCCS/s.ObjectStreamClass.java com/sun/corba/se/internal/io/SCCS/s.IIOPInputStream.java com/sun/corba/se/internal/io/SCCS/s.IIOPOutputStream.java com/sun/corba/se/internal/io/SCCS/s.LibraryManager.java com/sun/corba/se/internal/io/IIOPInputStream.java com/sun/corba/se/internal/io/IIOPOutputStream.java com/sun/corba/se/internal/io/LibraryManager.java com/sun/corba/se/internal/io/ObjectStreamClass.java com/sun/corba/se/internal/ior com/sun/corba/se/internal/ior/SCCS com/sun/corba/se/internal/javax com/sun/corba/se/internal/javax/rmi com/sun/corba/se/internal/javax/rmi/CORBA com/sun/corba/se/internal/javax/rmi/CORBA/SCCS com/sun/corba/se/internal/javax/rmi/SCCS com/sun/corba/se/internal/orbutil com/sun/corba/se/internal/orbutil/SCCS com/sun/corba/se/internal/orbutil/resources com/sun/corba/se/internal/orbutil/resources/SCCS com/sun/corba/se/internal/util com/sun/corba/se/internal/util/SCCS com/sun/corba/se/org com/sun/corba/se/org/omg com/sun/corba/se/org/omg/CORBA com/sun/corba/se/org/omg/CORBA/SCCS com/sun/corba/se/org/omg/CORBA/SCCS/s.ORB.java com/sun/corba/se/org/omg/CORBA/ORB.java com/sun/corba/se/pept com/sun/corba/se/pept/SCCS com/sun/corba/se/pept/SCCS/s.package.html com/sun/corba/se/pept/broker com/sun/corba/se/pept/broker/SCCS com/sun/corba/se/pept/broker/SCCS/s.Broker.java com/sun/corba/se/pept/broker/Broker.java com/sun/corba/se/pept/encoding com/sun/corba/se/pept/encoding/SCCS com/sun/corba/se/pept/encoding/SCCS/s.InputObject.java com/sun/corba/se/pept/encoding/SCCS/s.OutputObject.java com/sun/corba/se/pept/encoding/InputObject.java com/sun/corba/se/pept/encoding/OutputObject.java com/sun/corba/se/pept/protocol com/sun/corba/se/pept/protocol/SCCS com/sun/corba/se/pept/protocol/SCCS/s.ClientInvocationInfo.java com/sun/corba/se/pept/protocol/SCCS/s.ClientDelegate.java com/sun/corba/se/pept/protocol/SCCS/s.ClientRequestDispatcher.java com/sun/corba/se/pept/protocol/SCCS/s.MessageMediator.java com/sun/corba/se/pept/protocol/SCCS/s.ProtocolHandler.java com/sun/corba/se/pept/protocol/SCCS/s.ServerRequestDispatcher.java com/sun/corba/se/pept/protocol/ClientInvocationInfo.java com/sun/corba/se/pept/protocol/ClientDelegate.java com/sun/corba/se/pept/protocol/ClientRequestDispatcher.java com/sun/corba/se/pept/protocol/MessageMediator.java com/sun/corba/se/pept/protocol/ProtocolHandler.java com/sun/corba/se/pept/protocol/ServerRequestDispatcher.java com/sun/corba/se/pept/transport com/sun/corba/se/pept/transport/SCCS com/sun/corba/se/pept/transport/SCCS/s.ByteBufferPool.java com/sun/corba/se/pept/transport/SCCS/s.Acceptor.java com/sun/corba/se/pept/transport/SCCS/s.ConnectionCache.java com/sun/corba/se/pept/transport/SCCS/s.Connection.java com/sun/corba/se/pept/transport/SCCS/s.ContactInfoListIterator.java com/sun/corba/se/pept/transport/SCCS/s.ContactInfo.java com/sun/corba/se/pept/transport/SCCS/s.ContactInfoList.java com/sun/corba/se/pept/transport/SCCS/s.ListenerThread.java com/sun/corba/se/pept/transport/SCCS/s.EventHandler.java com/sun/corba/se/pept/transport/SCCS/s.InboundConnectionCache.java com/sun/corba/se/pept/transport/SCCS/s.OutboundConnectionCache.java com/sun/corba/se/pept/transport/SCCS/s.ReaderThread.java com/sun/corba/se/pept/transport/SCCS/s.ResponseWaitingRoom.java com/sun/corba/se/pept/transport/SCCS/s.Selector.java com/sun/corba/se/pept/transport/SCCS/s.TransportManager.java com/sun/corba/se/pept/transport/SCCS/s.transport.zargo com/sun/corba/se/pept/transport/ByteBufferPool.java com/sun/corba/se/pept/transport/Acceptor.java com/sun/corba/se/pept/transport/ConnectionCache.java com/sun/corba/se/pept/transport/Connection.java com/sun/corba/se/pept/transport/ContactInfoListIterator.java com/sun/corba/se/pept/transport/ContactInfo.java com/sun/corba/se/pept/transport/ContactInfoList.java com/sun/corba/se/pept/transport/InboundConnectionCache.java com/sun/corba/se/pept/transport/EventHandler.java com/sun/corba/se/pept/transport/ListenerThread.java com/sun/corba/se/pept/transport/ReaderThread.java com/sun/corba/se/pept/transport/Selector.java com/sun/corba/se/pept/transport/OutboundConnectionCache.java com/sun/corba/se/pept/transport/ResponseWaitingRoom.java com/sun/corba/se/pept/transport/TransportManager.java com/sun/corba/se/pept/transport/transport.zargo com/sun/corba/se/pept/package.html com/sun/corba/se/spi com/sun/corba/se/spi/activation com/sun/corba/se/spi/activation/SCCS com/sun/corba/se/spi/activation/SCCS/s.activation.idl com/sun/corba/se/spi/activation/activation.idl com/sun/corba/se/spi/copyobject com/sun/corba/se/spi/copyobject/SCCS com/sun/corba/se/spi/copyobject/SCCS/s.CopyobjectDefaults.java com/sun/corba/se/spi/copyobject/SCCS/s.CopierManager.java com/sun/corba/se/spi/copyobject/SCCS/s.ObjectCopierFactory.java com/sun/corba/se/spi/copyobject/SCCS/s.ObjectCopier.java com/sun/corba/se/spi/copyobject/SCCS/s.ReflectiveCopyException.java com/sun/corba/se/spi/copyobject/CopyobjectDefaults.java com/sun/corba/se/spi/copyobject/CopierManager.java com/sun/corba/se/spi/copyobject/ObjectCopierFactory.java com/sun/corba/se/spi/copyobject/ObjectCopier.java com/sun/corba/se/spi/copyobject/ReflectiveCopyException.java com/sun/corba/se/spi/costransactions com/sun/corba/se/spi/costransactions/SCCS com/sun/corba/se/spi/costransactions/SCCS/s.TransactionService.java com/sun/corba/se/spi/costransactions/TransactionService.java com/sun/corba/se/spi/encoding com/sun/corba/se/spi/encoding/SCCS com/sun/corba/se/spi/encoding/SCCS/s.CorbaOutputObject.java com/sun/corba/se/spi/encoding/SCCS/s.CorbaInputObject.java com/sun/corba/se/spi/encoding/CorbaInputObject.java com/sun/corba/se/spi/encoding/CorbaOutputObject.java com/sun/corba/se/spi/extension com/sun/corba/se/spi/extension/SCCS com/sun/corba/se/spi/extension/SCCS/s.ServantCachingPolicy.java com/sun/corba/se/spi/extension/SCCS/s.CopyObjectPolicy.java com/sun/corba/se/spi/extension/SCCS/s.RequestPartitioningPolicy.java com/sun/corba/se/spi/extension/SCCS/s.ZeroPortPolicy.java com/sun/corba/se/spi/extension/RequestPartitioningPolicy.java com/sun/corba/se/spi/extension/CopyObjectPolicy.java com/sun/corba/se/spi/extension/ServantCachingPolicy.java com/sun/corba/se/spi/extension/ZeroPortPolicy.java com/sun/corba/se/spi/ior com/sun/corba/se/spi/ior/SCCS com/sun/corba/se/spi/ior/SCCS/s.IORFactories.java com/sun/corba/se/spi/ior/SCCS/s.IOR.java com/sun/corba/se/spi/ior/SCCS/s.EncapsulationFactoryBase.java com/sun/corba/se/spi/ior/SCCS/s.IORTemplateList.java com/sun/corba/se/spi/ior/SCCS/s.IORFactory.java com/sun/corba/se/spi/ior/SCCS/s.IORTemplate.java com/sun/corba/se/spi/ior/SCCS/s.IdentifiableFactory.java com/sun/corba/se/spi/ior/SCCS/s.Identifiable.java com/sun/corba/se/spi/ior/SCCS/s.IdentifiableBase.java com/sun/corba/se/spi/ior/SCCS/s.ObjectId.java com/sun/corba/se/spi/ior/SCCS/s.IdentifiableContainerBase.java com/sun/corba/se/spi/ior/SCCS/s.IdentifiableFactoryFinder.java com/sun/corba/se/spi/ior/SCCS/s.MakeImmutable.java com/sun/corba/se/spi/ior/SCCS/s.ObjectAdapterId.java com/sun/corba/se/spi/ior/SCCS/s.ObjectKeyTemplate.java com/sun/corba/se/spi/ior/SCCS/s.ObjectKey.java com/sun/corba/se/spi/ior/SCCS/s.ObjectKeyFactory.java com/sun/corba/se/spi/ior/SCCS/s.TaggedComponentBase.java com/sun/corba/se/spi/ior/SCCS/s.TaggedComponent.java com/sun/corba/se/spi/ior/SCCS/s.iornotes com/sun/corba/se/spi/ior/SCCS/s.TaggedComponentFactoryFinder.java com/sun/corba/se/spi/ior/SCCS/s.TaggedProfile.java com/sun/corba/se/spi/ior/SCCS/s.TaggedProfileTemplate.java com/sun/corba/se/spi/ior/SCCS/s.TaggedProfileTemplateBase.java com/sun/corba/se/spi/ior/SCCS/s.WriteContents.java com/sun/corba/se/spi/ior/SCCS/s.Writeable.java com/sun/corba/se/spi/ior/SCCS/s.package.html com/sun/corba/se/spi/ior/iiop com/sun/corba/se/spi/ior/iiop/SCCS com/sun/corba/se/spi/ior/iiop/SCCS/s.AlternateIIOPAddressComponent.java com/sun/corba/se/spi/ior/iiop/SCCS/s.CodeSetsComponent.java com/sun/corba/se/spi/ior/iiop/SCCS/s.GIOPVersion.java com/sun/corba/se/spi/ior/iiop/SCCS/s.IIOPAddress.java com/sun/corba/se/spi/ior/iiop/SCCS/s.IIOPFactories.java com/sun/corba/se/spi/ior/iiop/SCCS/s.IIOPProfile.java com/sun/corba/se/spi/ior/iiop/SCCS/s.IIOPProfileTemplate.java com/sun/corba/se/spi/ior/iiop/SCCS/s.JavaCodebaseComponent.java com/sun/corba/se/spi/ior/iiop/SCCS/s.MaxStreamFormatVersionComponent.java com/sun/corba/se/spi/ior/iiop/SCCS/s.ORBTypeComponent.java com/sun/corba/se/spi/ior/iiop/SCCS/s.RequestPartitioningComponent.java com/sun/corba/se/spi/ior/iiop/MaxStreamFormatVersionComponent.java com/sun/corba/se/spi/ior/iiop/AlternateIIOPAddressComponent.java com/sun/corba/se/spi/ior/iiop/CodeSetsComponent.java com/sun/corba/se/spi/ior/iiop/GIOPVersion.java com/sun/corba/se/spi/ior/iiop/IIOPAddress.java com/sun/corba/se/spi/ior/iiop/IIOPFactories.java com/sun/corba/se/spi/ior/iiop/IIOPProfile.java com/sun/corba/se/spi/ior/iiop/IIOPProfileTemplate.java com/sun/corba/se/spi/ior/iiop/JavaCodebaseComponent.java com/sun/corba/se/spi/ior/iiop/RequestPartitioningComponent.java com/sun/corba/se/spi/ior/iiop/ORBTypeComponent.java com/sun/corba/se/spi/ior/IORFactories.java com/sun/corba/se/spi/ior/IOR.java com/sun/corba/se/spi/ior/EncapsulationFactoryBase.java com/sun/corba/se/spi/ior/IORTemplate.java com/sun/corba/se/spi/ior/IORFactory.java com/sun/corba/se/spi/ior/IdentifiableContainerBase.java com/sun/corba/se/spi/ior/IORTemplateList.java com/sun/corba/se/spi/ior/Identifiable.java com/sun/corba/se/spi/ior/IdentifiableBase.java com/sun/corba/se/spi/ior/TaggedComponentFactoryFinder.java com/sun/corba/se/spi/ior/IdentifiableFactory.java com/sun/corba/se/spi/ior/IdentifiableFactoryFinder.java com/sun/corba/se/spi/ior/MakeImmutable.java com/sun/corba/se/spi/ior/ObjectAdapterId.java com/sun/corba/se/spi/ior/ObjectId.java com/sun/corba/se/spi/ior/ObjectKey.java com/sun/corba/se/spi/ior/ObjectKeyFactory.java com/sun/corba/se/spi/ior/ObjectKeyTemplate.java com/sun/corba/se/spi/ior/TaggedComponent.java com/sun/corba/se/spi/ior/TaggedComponentBase.java com/sun/corba/se/spi/ior/TaggedProfileTemplate.java com/sun/corba/se/spi/ior/TaggedProfile.java com/sun/corba/se/spi/ior/package.html com/sun/corba/se/spi/ior/iornotes com/sun/corba/se/spi/ior/TaggedProfileTemplateBase.java com/sun/corba/se/spi/ior/WriteContents.java com/sun/corba/se/spi/ior/Writeable.java com/sun/corba/se/spi/legacy com/sun/corba/se/spi/legacy/connection com/sun/corba/se/spi/legacy/connection/SCCS com/sun/corba/se/spi/legacy/connection/SCCS/s.ORBSocketFactory.java com/sun/corba/se/spi/legacy/connection/SCCS/s.Connection.java com/sun/corba/se/spi/legacy/connection/SCCS/s.README.txt com/sun/corba/se/spi/legacy/connection/SCCS/s.GetEndPointInfoAgainException.java com/sun/corba/se/spi/legacy/connection/SCCS/s.LegacyServerSocketEndPointInfo.java com/sun/corba/se/spi/legacy/connection/SCCS/s.LegacyServerSocketManager.java com/sun/corba/se/spi/legacy/connection/ORBSocketFactory.java com/sun/corba/se/spi/legacy/connection/Connection.java com/sun/corba/se/spi/legacy/connection/README.txt com/sun/corba/se/spi/legacy/connection/GetEndPointInfoAgainException.java com/sun/corba/se/spi/legacy/connection/LegacyServerSocketEndPointInfo.java com/sun/corba/se/spi/legacy/connection/LegacyServerSocketManager.java com/sun/corba/se/spi/legacy/interceptor com/sun/corba/se/spi/legacy/interceptor/SCCS com/sun/corba/se/spi/legacy/interceptor/SCCS/s.ORBInitInfoExt.java com/sun/corba/se/spi/legacy/interceptor/SCCS/s.IORInfoExt.java com/sun/corba/se/spi/legacy/interceptor/SCCS/s.RequestInfoExt.java com/sun/corba/se/spi/legacy/interceptor/SCCS/s.UnknownType.java com/sun/corba/se/spi/legacy/interceptor/ORBInitInfoExt.java com/sun/corba/se/spi/legacy/interceptor/IORInfoExt.java com/sun/corba/se/spi/legacy/interceptor/RequestInfoExt.java com/sun/corba/se/spi/legacy/interceptor/UnknownType.java com/sun/corba/se/spi/logging com/sun/corba/se/spi/logging/SCCS com/sun/corba/se/spi/logging/SCCS/s.LogWrapperFactory.java com/sun/corba/se/spi/logging/SCCS/s.CORBALogDomains.java com/sun/corba/se/spi/logging/SCCS/s.LogWrapperBase.java com/sun/corba/se/spi/logging/data com/sun/corba/se/spi/logging/data/SCCS com/sun/corba/se/spi/logging/data/SCCS/s.Interceptors.mc com/sun/corba/se/spi/logging/data/SCCS/s.Activation.mc com/sun/corba/se/spi/logging/data/SCCS/s.IOR.mc com/sun/corba/se/spi/logging/data/SCCS/s.Naming.mc com/sun/corba/se/spi/logging/data/SCCS/s.OMG.mc com/sun/corba/se/spi/logging/data/SCCS/s.ORBUtil.mc com/sun/corba/se/spi/logging/data/SCCS/s.POA.mc com/sun/corba/se/spi/logging/data/SCCS/s.Util.mc com/sun/corba/se/spi/logging/data/Activation.mc com/sun/corba/se/spi/logging/data/IOR.mc com/sun/corba/se/spi/logging/data/Interceptors.mc com/sun/corba/se/spi/logging/data/Naming.mc com/sun/corba/se/spi/logging/data/OMG.mc com/sun/corba/se/spi/logging/data/ORBUtil.mc com/sun/corba/se/spi/logging/data/POA.mc com/sun/corba/se/spi/logging/data/Util.mc com/sun/corba/se/spi/logging/CORBALogDomains.java com/sun/corba/se/spi/logging/LogWrapperBase.java com/sun/corba/se/spi/logging/LogWrapperFactory.java com/sun/corba/se/spi/monitoring com/sun/corba/se/spi/monitoring/SCCS com/sun/corba/se/spi/monitoring/SCCS/s.MonitoredAttribute.java com/sun/corba/se/spi/monitoring/SCCS/s.CorbaMBean.zargo com/sun/corba/se/spi/monitoring/SCCS/s.MonitoredAttributeInfoFactory.java com/sun/corba/se/spi/monitoring/SCCS/s.LongMonitoredAttributeBase.java com/sun/corba/se/spi/monitoring/SCCS/s.MonitoredAttributeBase.java com/sun/corba/se/spi/monitoring/SCCS/s.MonitoredAttributeInfo.java com/sun/corba/se/spi/monitoring/SCCS/s.MonitoredObjectFactory.java com/sun/corba/se/spi/monitoring/SCCS/s.MonitoredObject.java com/sun/corba/se/spi/monitoring/SCCS/s.MonitoringConstants.java com/sun/corba/se/spi/monitoring/SCCS/s.MonitoringFactories.java com/sun/corba/se/spi/monitoring/SCCS/s.MonitoringManager.java com/sun/corba/se/spi/monitoring/SCCS/s.cut1.zargo com/sun/corba/se/spi/monitoring/SCCS/s.MonitoringManagerFactory.java com/sun/corba/se/spi/monitoring/SCCS/s.StatisticMonitoredAttribute.java com/sun/corba/se/spi/monitoring/SCCS/s.StatisticsAccumulator.java com/sun/corba/se/spi/monitoring/SCCS/s.StringMonitoredAttributeBase.java com/sun/corba/se/spi/monitoring/SCCS/s.package.html com/sun/corba/se/spi/monitoring/MonitoredAttribute.java com/sun/corba/se/spi/monitoring/CorbaMBean.zargo com/sun/corba/se/spi/monitoring/cut1.zargo com/sun/corba/se/spi/monitoring/LongMonitoredAttributeBase.java com/sun/corba/se/spi/monitoring/MonitoredAttributeBase.java com/sun/corba/se/spi/monitoring/MonitoredAttributeInfo.java com/sun/corba/se/spi/monitoring/MonitoredAttributeInfoFactory.java com/sun/corba/se/spi/monitoring/MonitoredObject.java com/sun/corba/se/spi/monitoring/MonitoredObjectFactory.java com/sun/corba/se/spi/monitoring/MonitoringConstants.java com/sun/corba/se/spi/monitoring/MonitoringFactories.java com/sun/corba/se/spi/monitoring/MonitoringManager.java com/sun/corba/se/spi/monitoring/package.html com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java com/sun/corba/se/spi/monitoring/StatisticMonitoredAttribute.java com/sun/corba/se/spi/monitoring/StatisticsAccumulator.java com/sun/corba/se/spi/monitoring/StringMonitoredAttributeBase.java com/sun/corba/se/spi/oa com/sun/corba/se/spi/oa/SCCS com/sun/corba/se/spi/oa/SCCS/s.OAInvocationInfo.java com/sun/corba/se/spi/oa/SCCS/s.NullServant.java com/sun/corba/se/spi/oa/SCCS/s.OADefault.java com/sun/corba/se/spi/oa/SCCS/s.OADestroyed.java com/sun/corba/se/spi/oa/SCCS/s.ObjectAdapter.java com/sun/corba/se/spi/oa/SCCS/s.ObjectAdapterBase.java com/sun/corba/se/spi/oa/SCCS/s.ObjectAdapterFactory.java com/sun/corba/se/spi/oa/OAInvocationInfo.java com/sun/corba/se/spi/oa/NullServant.java com/sun/corba/se/spi/oa/OADefault.java com/sun/corba/se/spi/oa/OADestroyed.java com/sun/corba/se/spi/oa/ObjectAdapterFactory.java com/sun/corba/se/spi/oa/ObjectAdapter.java com/sun/corba/se/spi/oa/ObjectAdapterBase.java com/sun/corba/se/spi/orb com/sun/corba/se/spi/orb/SCCS com/sun/corba/se/spi/orb/SCCS/s.ORBVersionFactory.java com/sun/corba/se/spi/orb/SCCS/s.DataCollector.java com/sun/corba/se/spi/orb/SCCS/s.ORB.java com/sun/corba/se/spi/orb/SCCS/s.ORBConfigurator.java com/sun/corba/se/spi/orb/SCCS/s.ORBData.java com/sun/corba/se/spi/orb/SCCS/s.ORBVersion.java com/sun/corba/se/spi/orb/SCCS/s.ParserDataFactory.java com/sun/corba/se/spi/orb/SCCS/s.Operation.java com/sun/corba/se/spi/orb/SCCS/s.OperationFactory.java com/sun/corba/se/spi/orb/SCCS/s.ParserData.java com/sun/corba/se/spi/orb/SCCS/s.ParserImplBase.java com/sun/corba/se/spi/orb/SCCS/s.ParserImplTableBase.java com/sun/corba/se/spi/orb/SCCS/s.PropertyParser.java com/sun/corba/se/spi/orb/SCCS/s.StringPair.java com/sun/corba/se/spi/orb/ORBConfigurator.java com/sun/corba/se/spi/orb/DataCollector.java com/sun/corba/se/spi/orb/ORB.java com/sun/corba/se/spi/orb/ORBVersionFactory.java com/sun/corba/se/spi/orb/ORBData.java com/sun/corba/se/spi/orb/ORBVersion.java com/sun/corba/se/spi/orb/OperationFactory.java com/sun/corba/se/spi/orb/Operation.java com/sun/corba/se/spi/orb/ParserDataFactory.java com/sun/corba/se/spi/orb/ParserData.java com/sun/corba/se/spi/orb/ParserImplTableBase.java com/sun/corba/se/spi/orb/ParserImplBase.java com/sun/corba/se/spi/orb/PropertyParser.java com/sun/corba/se/spi/orb/StringPair.java com/sun/corba/se/spi/orbutil com/sun/corba/se/spi/orbutil/closure com/sun/corba/se/spi/orbutil/closure/SCCS com/sun/corba/se/spi/orbutil/closure/SCCS/s.ClosureFactory.java com/sun/corba/se/spi/orbutil/closure/SCCS/s.Closure.java com/sun/corba/se/spi/orbutil/closure/ClosureFactory.java com/sun/corba/se/spi/orbutil/closure/Closure.java com/sun/corba/se/spi/orbutil/fsm com/sun/corba/se/spi/orbutil/fsm/SCCS com/sun/corba/se/spi/orbutil/fsm/SCCS/s.ActionBase.java com/sun/corba/se/spi/orbutil/fsm/SCCS/s.Action.java com/sun/corba/se/spi/orbutil/fsm/SCCS/s.GuardBase.java com/sun/corba/se/spi/orbutil/fsm/SCCS/s.FSM.java com/sun/corba/se/spi/orbutil/fsm/SCCS/s.FSMImpl.java com/sun/corba/se/spi/orbutil/fsm/SCCS/s.FSMTest.java com/sun/corba/se/spi/orbutil/fsm/SCCS/s.Guard.java com/sun/corba/se/spi/orbutil/fsm/SCCS/s.StateEngineFactory.java com/sun/corba/se/spi/orbutil/fsm/SCCS/s.Input.java com/sun/corba/se/spi/orbutil/fsm/SCCS/s.InputImpl.java com/sun/corba/se/spi/orbutil/fsm/SCCS/s.State.java com/sun/corba/se/spi/orbutil/fsm/SCCS/s.StateEngine.java com/sun/corba/se/spi/orbutil/fsm/SCCS/s.StateImpl.java com/sun/corba/se/spi/orbutil/fsm/ActionBase.java com/sun/corba/se/spi/orbutil/fsm/Action.java com/sun/corba/se/spi/orbutil/fsm/StateEngine.java com/sun/corba/se/spi/orbutil/fsm/FSM.java com/sun/corba/se/spi/orbutil/fsm/FSMImpl.java com/sun/corba/se/spi/orbutil/fsm/FSMTest.java com/sun/corba/se/spi/orbutil/fsm/Guard.java com/sun/corba/se/spi/orbutil/fsm/GuardBase.java com/sun/corba/se/spi/orbutil/fsm/Input.java com/sun/corba/se/spi/orbutil/fsm/InputImpl.java com/sun/corba/se/spi/orbutil/fsm/State.java com/sun/corba/se/spi/orbutil/fsm/StateEngineFactory.java com/sun/corba/se/spi/orbutil/fsm/StateImpl.java com/sun/corba/se/spi/orbutil/proxy com/sun/corba/se/spi/orbutil/proxy/SCCS com/sun/corba/se/spi/orbutil/proxy/SCCS/s.CompositeInvocationHandlerImpl.java com/sun/corba/se/spi/orbutil/proxy/SCCS/s.CompositeInvocationHandler.java com/sun/corba/se/spi/orbutil/proxy/SCCS/s.DelegateInvocationHandlerImpl.java com/sun/corba/se/spi/orbutil/proxy/SCCS/s.InvocationHandlerFactory.java com/sun/corba/se/spi/orbutil/proxy/SCCS/s.LinkedInvocationHandler.java com/sun/corba/se/spi/orbutil/proxy/CompositeInvocationHandlerImpl.java com/sun/corba/se/spi/orbutil/proxy/CompositeInvocationHandler.java com/sun/corba/se/spi/orbutil/proxy/DelegateInvocationHandlerImpl.java com/sun/corba/se/spi/orbutil/proxy/InvocationHandlerFactory.java com/sun/corba/se/spi/orbutil/proxy/LinkedInvocationHandler.java com/sun/corba/se/spi/orbutil/threadpool com/sun/corba/se/spi/orbutil/threadpool/SCCS com/sun/corba/se/spi/orbutil/threadpool/SCCS/s.WorkQueue.java com/sun/corba/se/spi/orbutil/threadpool/SCCS/s.Work.java com/sun/corba/se/spi/orbutil/threadpool/SCCS/s.NoSuchThreadPoolException.java com/sun/corba/se/spi/orbutil/threadpool/SCCS/s.NoSuchWorkQueueException.java com/sun/corba/se/spi/orbutil/threadpool/SCCS/s.ThreadPool.java com/sun/corba/se/spi/orbutil/threadpool/SCCS/s.ThreadPoolChooser.java com/sun/corba/se/spi/orbutil/threadpool/SCCS/s.ThreadPoolManager.java com/sun/corba/se/spi/orbutil/threadpool/WorkQueue.java com/sun/corba/se/spi/orbutil/threadpool/Work.java com/sun/corba/se/spi/orbutil/threadpool/NoSuchThreadPoolException.java com/sun/corba/se/spi/orbutil/threadpool/NoSuchWorkQueueException.java com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.java com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolChooser.java com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.java com/sun/corba/se/spi/presentation com/sun/corba/se/spi/presentation/rmi com/sun/corba/se/spi/presentation/rmi/SCCS com/sun/corba/se/spi/presentation/rmi/SCCS/s.DynamicMethodMarshaller.java com/sun/corba/se/spi/presentation/rmi/SCCS/s.DynamicStub.java com/sun/corba/se/spi/presentation/rmi/SCCS/s.IDLNameTranslator.java com/sun/corba/se/spi/presentation/rmi/SCCS/s.PresentationDefaults.java com/sun/corba/se/spi/presentation/rmi/SCCS/s.PresentationManager.java com/sun/corba/se/spi/presentation/rmi/SCCS/s.StubAdapter.java com/sun/corba/se/spi/presentation/rmi/SCCS/s.StubWrapper.java com/sun/corba/se/spi/presentation/rmi/DynamicMethodMarshaller.java com/sun/corba/se/spi/presentation/rmi/DynamicStub.java com/sun/corba/se/spi/presentation/rmi/IDLNameTranslator.java com/sun/corba/se/spi/presentation/rmi/PresentationDefaults.java com/sun/corba/se/spi/presentation/rmi/PresentationManager.java com/sun/corba/se/spi/presentation/rmi/StubAdapter.java com/sun/corba/se/spi/presentation/rmi/StubWrapper.java com/sun/corba/se/spi/protocol com/sun/corba/se/spi/protocol/SCCS com/sun/corba/se/spi/protocol/SCCS/s.CorbaServerRequestDispatcher.java com/sun/corba/se/spi/protocol/SCCS/s.ClientDelegateFactory.java com/sun/corba/se/spi/protocol/SCCS/s.CorbaClientDelegate.java com/sun/corba/se/spi/protocol/SCCS/s.CorbaMessageMediator.java com/sun/corba/se/spi/protocol/SCCS/s.CorbaProtocolHandler.java com/sun/corba/se/spi/protocol/SCCS/s.ForwardException.java com/sun/corba/se/spi/protocol/SCCS/s.PIHandler.java com/sun/corba/se/spi/protocol/SCCS/s.InitialServerRequestDispatcher.java com/sun/corba/se/spi/protocol/SCCS/s.LocalClientRequestDispatcher.java com/sun/corba/se/spi/protocol/SCCS/s.LocalClientRequestDispatcherFactory.java com/sun/corba/se/spi/protocol/SCCS/s.RequestDispatcherDefault.java com/sun/corba/se/spi/protocol/SCCS/s.RequestDispatcherRegistry.java com/sun/corba/se/spi/protocol/SCCS/s.protocol.zargo com/sun/corba/se/spi/protocol/CorbaServerRequestDispatcher.java com/sun/corba/se/spi/protocol/ClientDelegateFactory.java com/sun/corba/se/spi/protocol/CorbaClientDelegate.java com/sun/corba/se/spi/protocol/CorbaMessageMediator.java com/sun/corba/se/spi/protocol/CorbaProtocolHandler.java com/sun/corba/se/spi/protocol/ForwardException.java com/sun/corba/se/spi/protocol/PIHandler.java com/sun/corba/se/spi/protocol/InitialServerRequestDispatcher.java com/sun/corba/se/spi/protocol/LocalClientRequestDispatcher.java com/sun/corba/se/spi/protocol/LocalClientRequestDispatcherFactory.java com/sun/corba/se/spi/protocol/RequestDispatcherDefault.java com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.java com/sun/corba/se/spi/protocol/protocol.zargo com/sun/corba/se/spi/resolver com/sun/corba/se/spi/resolver/SCCS com/sun/corba/se/spi/resolver/SCCS/s.LocalResolver.java com/sun/corba/se/spi/resolver/SCCS/s.Resolver.java com/sun/corba/se/spi/resolver/SCCS/s.ResolverDefault.java com/sun/corba/se/spi/resolver/ResolverDefault.java com/sun/corba/se/spi/resolver/LocalResolver.java com/sun/corba/se/spi/resolver/Resolver.java com/sun/corba/se/spi/servicecontext com/sun/corba/se/spi/servicecontext/SCCS com/sun/corba/se/spi/servicecontext/SCCS/s.CodeSetServiceContext.java com/sun/corba/se/spi/servicecontext/SCCS/s.ORBVersionServiceContext.java com/sun/corba/se/spi/servicecontext/SCCS/s.MaxStreamFormatVersionServiceContext.java com/sun/corba/se/spi/servicecontext/SCCS/s.SendingContextServiceContext.java com/sun/corba/se/spi/servicecontext/SCCS/s.ServiceContext.java com/sun/corba/se/spi/servicecontext/SCCS/s.ServiceContextData.java com/sun/corba/se/spi/servicecontext/SCCS/s.ServiceContextRegistry.java com/sun/corba/se/spi/servicecontext/SCCS/s.ServiceContexts.java com/sun/corba/se/spi/servicecontext/SCCS/s.UEInfoServiceContext.java com/sun/corba/se/spi/servicecontext/SCCS/s.UnknownServiceContext.java com/sun/corba/se/spi/servicecontext/ORBVersionServiceContext.java com/sun/corba/se/spi/servicecontext/CodeSetServiceContext.java com/sun/corba/se/spi/servicecontext/MaxStreamFormatVersionServiceContext.java com/sun/corba/se/spi/servicecontext/SendingContextServiceContext.java com/sun/corba/se/spi/servicecontext/ServiceContext.java com/sun/corba/se/spi/servicecontext/ServiceContextData.java com/sun/corba/se/spi/servicecontext/ServiceContextRegistry.java com/sun/corba/se/spi/servicecontext/ServiceContexts.java com/sun/corba/se/spi/servicecontext/UEInfoServiceContext.java com/sun/corba/se/spi/servicecontext/UnknownServiceContext.java com/sun/corba/se/spi/transport com/sun/corba/se/spi/transport/SCCS com/sun/corba/se/spi/transport/SCCS/s.CorbaConnectionCache.java com/sun/corba/se/spi/transport/SCCS/s.CorbaAcceptor.java com/sun/corba/se/spi/transport/SCCS/s.CorbaConnection.java com/sun/corba/se/spi/transport/SCCS/s.CorbaContactInfoListFactory.java com/sun/corba/se/spi/transport/SCCS/s.CorbaContactInfo.java com/sun/corba/se/spi/transport/SCCS/s.CorbaContactInfoList.java com/sun/corba/se/spi/transport/SCCS/s.CorbaContactInfoListIterator.java com/sun/corba/se/spi/transport/SCCS/s.CorbaResponseWaitingRoom.java com/sun/corba/se/spi/transport/SCCS/s.CorbaTransportManager.java com/sun/corba/se/spi/transport/SCCS/s.IIOPPrimaryToContactInfo.java com/sun/corba/se/spi/transport/SCCS/s.IORToSocketInfo.java com/sun/corba/se/spi/transport/SCCS/s.IORTransformer.java com/sun/corba/se/spi/transport/SCCS/s.ORBSocketFactory.java com/sun/corba/se/spi/transport/SCCS/s.ReadTimeouts.java com/sun/corba/se/spi/transport/SCCS/s.ReadTimeoutsFactory.java com/sun/corba/se/spi/transport/SCCS/s.SocketInfo.java com/sun/corba/se/spi/transport/SCCS/s.SocketOrChannelAcceptor.java com/sun/corba/se/spi/transport/SCCS/s.TransportDefault.java com/sun/corba/se/spi/transport/CorbaConnection.java com/sun/corba/se/spi/transport/CorbaAcceptor.java com/sun/corba/se/spi/transport/CorbaContactInfoListFactory.java com/sun/corba/se/spi/transport/CorbaConnectionCache.java com/sun/corba/se/spi/transport/CorbaContactInfo.java com/sun/corba/se/spi/transport/CorbaContactInfoList.java com/sun/corba/se/spi/transport/CorbaContactInfoListIterator.java com/sun/corba/se/spi/transport/CorbaResponseWaitingRoom.java com/sun/corba/se/spi/transport/CorbaTransportManager.java com/sun/corba/se/spi/transport/IIOPPrimaryToContactInfo.java com/sun/corba/se/spi/transport/IORToSocketInfo.java com/sun/corba/se/spi/transport/IORTransformer.java com/sun/corba/se/spi/transport/SocketOrChannelAcceptor.java com/sun/corba/se/spi/transport/ORBSocketFactory.java com/sun/corba/se/spi/transport/ReadTimeouts.java com/sun/corba/se/spi/transport/ReadTimeoutsFactory.java com/sun/corba/se/spi/transport/SocketInfo.java com/sun/corba/se/spi/transport/TransportDefault.java com/sun/image com/sun/image/codec com/sun/image/codec/jpeg com/sun/image/codec/jpeg/SCCS com/sun/image/codec/jpeg/SCCS/s.TruncatedFileException.java com/sun/image/codec/jpeg/SCCS/s.ImageFormatException.java com/sun/image/codec/jpeg/SCCS/s.JPEGCodec.java com/sun/image/codec/jpeg/SCCS/s.JPEGDecodeParam.java com/sun/image/codec/jpeg/SCCS/s.JPEGEncodeParam.java com/sun/image/codec/jpeg/SCCS/s.JPEGHuffmanTable.java com/sun/image/codec/jpeg/SCCS/s.JPEGImageDecoder.java com/sun/image/codec/jpeg/SCCS/s.JPEGImageEncoder.java com/sun/image/codec/jpeg/SCCS/s.JPEGQTable.java com/sun/image/codec/jpeg/SCCS/s.package.html com/sun/image/codec/jpeg/ImageFormatException.java com/sun/image/codec/jpeg/JPEGCodec.java com/sun/image/codec/jpeg/JPEGDecodeParam.java com/sun/image/codec/jpeg/JPEGEncodeParam.java com/sun/image/codec/jpeg/JPEGHuffmanTable.java com/sun/image/codec/jpeg/JPEGImageDecoder.java com/sun/image/codec/jpeg/JPEGImageEncoder.java com/sun/image/codec/jpeg/JPEGQTable.java com/sun/image/codec/jpeg/TruncatedFileException.java com/sun/image/codec/jpeg/package.html com/sun/imageio com/sun/imageio/metadata com/sun/imageio/metadata/SCCS com/sun/imageio/metadata/SCCS/s.XmlChars.java com/sun/imageio/metadata/SCCS/s.XmlNames.java com/sun/imageio/metadata/XmlChars.java com/sun/imageio/metadata/XmlNames.java com/sun/imageio/plugins com/sun/imageio/plugins/bmp com/sun/imageio/plugins/bmp/SCCS com/sun/imageio/plugins/bmp/SCCS/s.BMPImageReader.java com/sun/imageio/plugins/bmp/SCCS/s.BMPConstants.java com/sun/imageio/plugins/bmp/SCCS/s.BMPMetadataFormatResources.java com/sun/imageio/plugins/bmp/SCCS/s.BMPImageReaderSpi.java com/sun/imageio/plugins/bmp/SCCS/s.BMPImageWriter.java com/sun/imageio/plugins/bmp/SCCS/s.BMPImageWriterSpi.java com/sun/imageio/plugins/bmp/SCCS/s.BMPMetadata.java com/sun/imageio/plugins/bmp/SCCS/s.BMPMetadataFormat.java com/sun/imageio/plugins/bmp/BMPImageReaderSpi.java com/sun/imageio/plugins/bmp/BMPConstants.java com/sun/imageio/plugins/bmp/BMPImageReader.java com/sun/imageio/plugins/bmp/BMPMetadataFormatResources.java com/sun/imageio/plugins/bmp/BMPImageWriter.java com/sun/imageio/plugins/bmp/BMPImageWriterSpi.java com/sun/imageio/plugins/bmp/BMPMetadata.java com/sun/imageio/plugins/bmp/BMPMetadataFormat.java com/sun/imageio/plugins/common com/sun/imageio/plugins/common/SCCS com/sun/imageio/plugins/common/SCCS/s.InputStreamAdapter.java com/sun/imageio/plugins/common/SCCS/s.BogusColorSpace.java com/sun/imageio/plugins/common/SCCS/s.I18N.java com/sun/imageio/plugins/common/SCCS/s.I18NImpl.java com/sun/imageio/plugins/common/SCCS/s.ImageUtil.java com/sun/imageio/plugins/common/SCCS/s.StandardMetadataFormatResources.java com/sun/imageio/plugins/common/SCCS/s.StandardMetadataFormat.java com/sun/imageio/plugins/common/SCCS/s.SubImageInputStream.java com/sun/imageio/plugins/common/SCCS/s.iio-plugin.properties com/sun/imageio/plugins/common/StandardMetadataFormat.java com/sun/imageio/plugins/common/BogusColorSpace.java com/sun/imageio/plugins/common/I18N.java com/sun/imageio/plugins/common/I18NImpl.java com/sun/imageio/plugins/common/ImageUtil.java com/sun/imageio/plugins/common/InputStreamAdapter.java com/sun/imageio/plugins/common/StandardMetadataFormatResources.java com/sun/imageio/plugins/common/SubImageInputStream.java com/sun/imageio/plugins/common/iio-plugin.properties com/sun/imageio/plugins/gif com/sun/imageio/plugins/gif/SCCS com/sun/imageio/plugins/gif/SCCS/s.GIFImageMetadataFormat.java com/sun/imageio/plugins/gif/SCCS/s.GIFImageMetadata.java com/sun/imageio/plugins/gif/SCCS/s.GIFImageMetadataFormatResources.java com/sun/imageio/plugins/gif/SCCS/s.GIFImageReader.java com/sun/imageio/plugins/gif/SCCS/s.GIFImageReaderSpi.java com/sun/imageio/plugins/gif/SCCS/s.GIFStreamMetadata.java com/sun/imageio/plugins/gif/SCCS/s.GIFStreamMetadataFormat.java com/sun/imageio/plugins/gif/SCCS/s.GIFStreamMetadataFormatResources.java com/sun/imageio/plugins/gif/GIFImageMetadataFormat.java com/sun/imageio/plugins/gif/GIFImageMetadata.java com/sun/imageio/plugins/gif/GIFImageMetadataFormatResources.java com/sun/imageio/plugins/gif/GIFImageReader.java com/sun/imageio/plugins/gif/GIFImageReaderSpi.java com/sun/imageio/plugins/gif/GIFStreamMetadata.java com/sun/imageio/plugins/gif/GIFStreamMetadataFormat.java com/sun/imageio/plugins/gif/GIFStreamMetadataFormatResources.java com/sun/imageio/plugins/jpeg com/sun/imageio/plugins/jpeg/SCCS com/sun/imageio/plugins/jpeg/SCCS/s.JPEGImageMetadataFormat.java com/sun/imageio/plugins/jpeg/SCCS/s.AdobeMarkerSegment.java com/sun/imageio/plugins/jpeg/SCCS/s.COMMarkerSegment.java com/sun/imageio/plugins/jpeg/SCCS/s.DHTMarkerSegment.java com/sun/imageio/plugins/jpeg/SCCS/s.DQTMarkerSegment.java com/sun/imageio/plugins/jpeg/SCCS/s.DRIMarkerSegment.java com/sun/imageio/plugins/jpeg/SCCS/s.JFIFMarkerSegment.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEG.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEGBuffer.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEGImageWriterResources.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEGImageMetadataFormatResources.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEGImageReader.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEGImageReaderResources.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEGImageReaderSpi.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEGImageWriter.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEGMetadataFormatResources.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEGImageWriterSpi.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEGMetadata.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEGMetadataFormat.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEGStreamMetadataFormat.java com/sun/imageio/plugins/jpeg/SCCS/s.MarkerSegment.java com/sun/imageio/plugins/jpeg/SCCS/s.JPEGStreamMetadataFormatResources.java com/sun/imageio/plugins/jpeg/SCCS/s.SOFMarkerSegment.java com/sun/imageio/plugins/jpeg/SCCS/s.SOSMarkerSegment.java com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormat.java com/sun/imageio/plugins/jpeg/AdobeMarkerSegment.java com/sun/imageio/plugins/jpeg/COMMarkerSegment.java com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java com/sun/imageio/plugins/jpeg/DRIMarkerSegment.java com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java com/sun/imageio/plugins/jpeg/JPEG.java com/sun/imageio/plugins/jpeg/JPEGBuffer.java com/sun/imageio/plugins/jpeg/JPEGImageWriterResources.java com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormatResources.java com/sun/imageio/plugins/jpeg/JPEGImageReader.java com/sun/imageio/plugins/jpeg/JPEGImageReaderResources.java com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java com/sun/imageio/plugins/jpeg/JPEGImageWriter.java com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormat.java com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java com/sun/imageio/plugins/jpeg/JPEGMetadata.java com/sun/imageio/plugins/jpeg/JPEGMetadataFormat.java com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormatResources.java com/sun/imageio/plugins/jpeg/JPEGMetadataFormatResources.java com/sun/imageio/plugins/jpeg/MarkerSegment.java com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java com/sun/imageio/plugins/png com/sun/imageio/plugins/png/SCCS com/sun/imageio/plugins/png/SCCS/s.PNGImageReaderSpi.java com/sun/imageio/plugins/png/SCCS/s.PNGImageReader.java com/sun/imageio/plugins/png/SCCS/s.PNGMetadataFormatResources.java com/sun/imageio/plugins/png/SCCS/s.PNGImageWriter.java com/sun/imageio/plugins/png/SCCS/s.PNGImageWriterSpi.java com/sun/imageio/plugins/png/SCCS/s.PNGMetadata.java com/sun/imageio/plugins/png/SCCS/s.PNGMetadataFormat.java com/sun/imageio/plugins/png/SCCS/s.RowFilter.java com/sun/imageio/plugins/png/PNGImageReaderSpi.java com/sun/imageio/plugins/png/PNGImageReader.java com/sun/imageio/plugins/png/PNGMetadataFormatResources.java com/sun/imageio/plugins/png/PNGImageWriter.java com/sun/imageio/plugins/png/PNGImageWriterSpi.java com/sun/imageio/plugins/png/PNGMetadata.java com/sun/imageio/plugins/png/PNGMetadataFormat.java com/sun/imageio/plugins/png/RowFilter.java com/sun/imageio/plugins/wbmp com/sun/imageio/plugins/wbmp/SCCS com/sun/imageio/plugins/wbmp/SCCS/s.WBMPImageReaderSpi.java com/sun/imageio/plugins/wbmp/SCCS/s.WBMPImageReader.java com/sun/imageio/plugins/wbmp/SCCS/s.WBMPImageWriter.java com/sun/imageio/plugins/wbmp/SCCS/s.WBMPImageWriterSpi.java com/sun/imageio/plugins/wbmp/SCCS/s.WBMPMetadata.java com/sun/imageio/plugins/wbmp/SCCS/s.WBMPMetadataFormat.java com/sun/imageio/plugins/wbmp/WBMPImageReader.java com/sun/imageio/plugins/wbmp/WBMPImageReaderSpi.java com/sun/imageio/plugins/wbmp/WBMPImageWriter.java com/sun/imageio/plugins/wbmp/WBMPImageWriterSpi.java com/sun/imageio/plugins/wbmp/WBMPMetadata.java com/sun/imageio/plugins/wbmp/WBMPMetadataFormat.java com/sun/imageio/spi com/sun/imageio/spi/SCCS com/sun/imageio/spi/SCCS/s.InputStreamImageInputStreamSpi.java com/sun/imageio/spi/SCCS/s.FileImageInputStreamSpi.java com/sun/imageio/spi/SCCS/s.FileImageOutputStreamSpi.java com/sun/imageio/spi/SCCS/s.OutputStreamImageOutputStreamSpi.java com/sun/imageio/spi/SCCS/s.RAFImageInputStreamSpi.java com/sun/imageio/spi/SCCS/s.RAFImageOutputStreamSpi.java com/sun/imageio/spi/InputStreamImageInputStreamSpi.java com/sun/imageio/spi/FileImageInputStreamSpi.java com/sun/imageio/spi/FileImageOutputStreamSpi.java com/sun/imageio/spi/OutputStreamImageOutputStreamSpi.java com/sun/imageio/spi/RAFImageInputStreamSpi.java com/sun/imageio/spi/RAFImageOutputStreamSpi.java com/sun/inputmethods com/sun/inputmethods/internal com/sun/inputmethods/internal/indicim com/sun/inputmethods/internal/indicim/SCCS com/sun/inputmethods/internal/indicim/SCCS/s.DevanagariInputMethodDescriptor.java com/sun/inputmethods/internal/indicim/SCCS/s.DevanagariTables.java com/sun/inputmethods/internal/indicim/SCCS/s.IndicInputMethod.java com/sun/inputmethods/internal/indicim/SCCS/s.IndicInputMethodImpl.java com/sun/inputmethods/internal/indicim/SCCS/s.java.awt.im.spi.InputMethodDescriptor com/sun/inputmethods/internal/indicim/resources com/sun/inputmethods/internal/indicim/resources/SCCS com/sun/inputmethods/internal/indicim/resources/SCCS/s.DisplayNames_de.properties com/sun/inputmethods/internal/indicim/resources/SCCS/s.DisplayNames.properties com/sun/inputmethods/internal/indicim/resources/SCCS/s.DisplayNames_es.properties com/sun/inputmethods/internal/indicim/resources/SCCS/s.DisplayNames_fr.properties com/sun/inputmethods/internal/indicim/resources/SCCS/s.DisplayNames_it.properties com/sun/inputmethods/internal/indicim/resources/SCCS/s.DisplayNames_ja.properties com/sun/inputmethods/internal/indicim/resources/SCCS/s.DisplayNames_ko.properties com/sun/inputmethods/internal/indicim/resources/SCCS/s.DisplayNames_sv.properties com/sun/inputmethods/internal/indicim/resources/SCCS/s.DisplayNames_zh_CN.properties com/sun/inputmethods/internal/indicim/resources/SCCS/s.DisplayNames_zh_TW.properties com/sun/inputmethods/internal/indicim/resources/DisplayNames_de.properties com/sun/inputmethods/internal/indicim/resources/DisplayNames.properties com/sun/inputmethods/internal/indicim/resources/DisplayNames_es.properties com/sun/inputmethods/internal/indicim/resources/DisplayNames_fr.properties com/sun/inputmethods/internal/indicim/resources/DisplayNames_it.properties com/sun/inputmethods/internal/indicim/resources/DisplayNames_ja.properties com/sun/inputmethods/internal/indicim/resources/DisplayNames_ko.properties com/sun/inputmethods/internal/indicim/resources/DisplayNames_sv.properties com/sun/inputmethods/internal/indicim/resources/DisplayNames_zh_CN.properties com/sun/inputmethods/internal/indicim/resources/DisplayNames_zh_TW.properties com/sun/inputmethods/internal/indicim/DevanagariInputMethodDescriptor.java com/sun/inputmethods/internal/indicim/DevanagariTables.java com/sun/inputmethods/internal/indicim/IndicInputMethod.java com/sun/inputmethods/internal/indicim/IndicInputMethodImpl.java com/sun/inputmethods/internal/indicim/java.awt.im.spi.InputMethodDescriptor com/sun/inputmethods/internal/thaiim com/sun/inputmethods/internal/thaiim/SCCS com/sun/inputmethods/internal/thaiim/SCCS/s.ThaiInputMethodImpl.java com/sun/inputmethods/internal/thaiim/SCCS/s.ThaiInputMethod.java com/sun/inputmethods/internal/thaiim/SCCS/s.ThaiInputMethodDescriptor.java com/sun/inputmethods/internal/thaiim/SCCS/s.ThaiRules.java com/sun/inputmethods/internal/thaiim/SCCS/s.java.awt.im.spi.InputMethodDescriptor com/sun/inputmethods/internal/thaiim/resources com/sun/inputmethods/internal/thaiim/resources/SCCS com/sun/inputmethods/internal/thaiim/resources/SCCS/s.DisplayNames.properties com/sun/inputmethods/internal/thaiim/resources/DisplayNames.properties com/sun/inputmethods/internal/thaiim/ThaiInputMethodDescriptor.java com/sun/inputmethods/internal/thaiim/ThaiInputMethod.java com/sun/inputmethods/internal/thaiim/ThaiInputMethodImpl.java com/sun/inputmethods/internal/thaiim/ThaiRules.java com/sun/inputmethods/internal/thaiim/java.awt.im.spi.InputMethodDescriptor com/sun/jarsigner com/sun/jarsigner/SCCS com/sun/jarsigner/SCCS/s.ContentSignerParameters.java com/sun/jarsigner/SCCS/s.ContentSigner.java com/sun/jarsigner/SCCS/s.package.html com/sun/jarsigner/ContentSigner.java com/sun/jarsigner/package.html com/sun/jarsigner/ContentSignerParameters.java com/sun/java com/sun/java/browser com/sun/java/browser/dom com/sun/java/browser/dom/SCCS com/sun/java/browser/dom/SCCS/s.DOMUnsupportedException.java com/sun/java/browser/dom/SCCS/s.DOMAccessException.java com/sun/java/browser/dom/SCCS/s.DOMAccessor.java com/sun/java/browser/dom/SCCS/s.DOMAction.java com/sun/java/browser/dom/SCCS/s.DOMService.java com/sun/java/browser/dom/SCCS/s.DOMServiceProvider.java com/sun/java/browser/dom/DOMUnsupportedException.java com/sun/java/browser/dom/DOMAccessException.java com/sun/java/browser/dom/DOMAccessor.java com/sun/java/browser/dom/DOMAction.java com/sun/java/browser/dom/DOMService.java com/sun/java/browser/dom/DOMServiceProvider.java com/sun/java/browser/net com/sun/java/browser/net/SCCS com/sun/java/browser/net/SCCS/s.ProxyServiceProvider.java com/sun/java/browser/net/SCCS/s.ProxyInfo.java com/sun/java/browser/net/SCCS/s.ProxyService.java com/sun/java/browser/net/ProxyService.java com/sun/java/browser/net/ProxyInfo.java com/sun/java/browser/net/ProxyServiceProvider.java com/sun/java/swing com/sun/java/swing/SCCS com/sun/java/swing/SCCS/s.SwingUtilities2.java com/sun/java/swing/plaf com/sun/java/swing/plaf/gtk com/sun/java/swing/plaf/gtk/SCCS com/sun/java/swing/plaf/gtk/SCCS/s.BluecurveEngineParser.java com/sun/java/swing/plaf/gtk/SCCS/s.BluecurveColorType.java com/sun/java/swing/plaf/gtk/SCCS/s.BluecurveEngine.java com/sun/java/swing/plaf/gtk/SCCS/s.BlueprintEngineParser.java com/sun/java/swing/plaf/gtk/SCCS/s.BluecurveStyle.java com/sun/java/swing/plaf/gtk/SCCS/s.BlueprintEngine.java com/sun/java/swing/plaf/gtk/SCCS/s.BlueprintGraphicsUtils.java com/sun/java/swing/plaf/gtk/SCCS/s.BlueprintStyle.java com/sun/java/swing/plaf/gtk/SCCS/s.CircularIdentityList.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKColorChooserPanel.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKColorType.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKConstants.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKEngine.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKEngineParser.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKFileChooserUI.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKGraphicsUtils.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKIconFactory.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKLookAndFeel.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKPainter.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKParser.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKRegion.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKScanner.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKStyle.java com/sun/java/swing/plaf/gtk/SCCS/s.GTKStyleFactory.java com/sun/java/swing/plaf/gtk/SCCS/s.Metacity.java com/sun/java/swing/plaf/gtk/SCCS/s.PangoFonts.java com/sun/java/swing/plaf/gtk/SCCS/s.PixmapEngine.java com/sun/java/swing/plaf/gtk/SCCS/s.PixmapEngineParser.java com/sun/java/swing/plaf/gtk/SCCS/s.PixmapStyle.java com/sun/java/swing/plaf/gtk/SCCS/s.PropertyParser.java com/sun/java/swing/plaf/gtk/SCCS/s.XColors.java com/sun/java/swing/plaf/gtk/SCCS/s.package.html com/sun/java/swing/plaf/gtk/icons com/sun/java/swing/plaf/gtk/icons/SCCS com/sun/java/swing/plaf/gtk/icons/SCCS/s.Directory.gif com/sun/java/swing/plaf/gtk/icons/SCCS/s.File.gif com/sun/java/swing/plaf/gtk/icons/Directory.gif com/sun/java/swing/plaf/gtk/icons/File.gif com/sun/java/swing/plaf/gtk/resources com/sun/java/swing/plaf/gtk/resources/SCCS com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk-dialog-error-6.png com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk-cancel-4.png com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk-dialog-question-6.png com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk-dialog-info-6.png com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk-dialog-warning-6.png com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk-no-4.png com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk-ok-4.png com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk-yes-4.png com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk.properties com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk_de.properties com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk_es.properties com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk_fr.properties com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk_it.properties com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk_ja.properties com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk_ko.properties com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk_sv.properties com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk_zh_CN.properties com/sun/java/swing/plaf/gtk/resources/SCCS/s.gtk_zh_TW.properties com/sun/java/swing/plaf/gtk/resources/metacity com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/metacity-1 com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/metacity-1/SCCS com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/metacity-1/SCCS/s.metacity-theme-1.xml com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/metacity-1/metacity-theme-1.xml com/sun/java/swing/plaf/gtk/resources/gtk-dialog-error-6.png com/sun/java/swing/plaf/gtk/resources/gtk-cancel-4.png com/sun/java/swing/plaf/gtk/resources/gtk-dialog-info-6.png com/sun/java/swing/plaf/gtk/resources/gtk-dialog-question-6.png com/sun/java/swing/plaf/gtk/resources/gtk-dialog-warning-6.png com/sun/java/swing/plaf/gtk/resources/gtk-no-4.png com/sun/java/swing/plaf/gtk/resources/gtk-ok-4.png com/sun/java/swing/plaf/gtk/resources/gtk-yes-4.png com/sun/java/swing/plaf/gtk/resources/gtk.properties com/sun/java/swing/plaf/gtk/resources/gtk_de.properties com/sun/java/swing/plaf/gtk/resources/gtk_es.properties com/sun/java/swing/plaf/gtk/resources/gtk_fr.properties com/sun/java/swing/plaf/gtk/resources/gtk_it.properties com/sun/java/swing/plaf/gtk/resources/gtk_ja.properties com/sun/java/swing/plaf/gtk/resources/gtk_ko.properties com/sun/java/swing/plaf/gtk/resources/gtk_sv.properties com/sun/java/swing/plaf/gtk/resources/gtk_zh_CN.properties com/sun/java/swing/plaf/gtk/resources/gtk_zh_TW.properties com/sun/java/swing/plaf/gtk/BluecurveEngineParser.java com/sun/java/swing/plaf/gtk/BluecurveColorType.java com/sun/java/swing/plaf/gtk/BluecurveEngine.java com/sun/java/swing/plaf/gtk/BlueprintEngineParser.java com/sun/java/swing/plaf/gtk/BluecurveStyle.java com/sun/java/swing/plaf/gtk/BlueprintEngine.java com/sun/java/swing/plaf/gtk/BlueprintGraphicsUtils.java com/sun/java/swing/plaf/gtk/BlueprintStyle.java com/sun/java/swing/plaf/gtk/CircularIdentityList.java com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java com/sun/java/swing/plaf/gtk/GTKColorType.java com/sun/java/swing/plaf/gtk/GTKConstants.java com/sun/java/swing/plaf/gtk/GTKEngine.java com/sun/java/swing/plaf/gtk/GTKPainter.java com/sun/java/swing/plaf/gtk/GTKEngineParser.java com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java com/sun/java/swing/plaf/gtk/GTKGraphicsUtils.java com/sun/java/swing/plaf/gtk/GTKIconFactory.java com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java com/sun/java/swing/plaf/gtk/GTKParser.java com/sun/java/swing/plaf/gtk/GTKRegion.java com/sun/java/swing/plaf/gtk/GTKScanner.java com/sun/java/swing/plaf/gtk/GTKStyle.java com/sun/java/swing/plaf/gtk/GTKStyleFactory.java com/sun/java/swing/plaf/gtk/Metacity.java com/sun/java/swing/plaf/gtk/PangoFonts.java com/sun/java/swing/plaf/gtk/PixmapEngine.java com/sun/java/swing/plaf/gtk/PixmapEngineParser.java com/sun/java/swing/plaf/gtk/PixmapStyle.java com/sun/java/swing/plaf/gtk/PropertyParser.java com/sun/java/swing/plaf/gtk/XColors.java com/sun/java/swing/plaf/gtk/package.html com/sun/java/swing/plaf/motif com/sun/java/swing/plaf/motif/SCCS com/sun/java/swing/plaf/motif/SCCS/s.MotifButtonListener.java com/sun/java/swing/plaf/motif/SCCS/s.MotifBorders.java com/sun/java/swing/plaf/motif/SCCS/s.MotifCheckBoxMenuItemUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifButtonUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifComboBoxRenderer.java com/sun/java/swing/plaf/motif/SCCS/s.MotifCheckBoxUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifDesktopIconUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifComboBoxUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifDesktopPaneUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifEditorPaneUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifFileChooserUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifGraphicsUtils.java com/sun/java/swing/plaf/motif/SCCS/s.MotifLabelUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifMenuMouseListener.java com/sun/java/swing/plaf/motif/SCCS/s.MotifIconFactory.java com/sun/java/swing/plaf/motif/SCCS/s.MotifInternalFrameTitlePane.java com/sun/java/swing/plaf/motif/SCCS/s.MotifInternalFrameUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifLookAndFeel.java com/sun/java/swing/plaf/motif/SCCS/s.MotifMenuBarUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifMenuItemUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifRadioButtonMenuItemUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifMenuMouseMotionListener.java com/sun/java/swing/plaf/motif/SCCS/s.MotifMenuUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifOptionPaneUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifPasswordFieldUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifPopupMenuSeparatorUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifPopupMenuUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifProgressBarUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifSplitPaneDivider.java com/sun/java/swing/plaf/motif/SCCS/s.MotifRadioButtonUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifScrollBarButton.java com/sun/java/swing/plaf/motif/SCCS/s.MotifScrollBarUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifScrollPaneUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifSeparatorUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifSliderUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifSplitPaneUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifTabbedPaneUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifTextAreaUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifTextFieldUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifTextPaneUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifTextUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifTreeUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifToggleButtonUI.java com/sun/java/swing/plaf/motif/SCCS/s.MotifTreeCellRenderer.java com/sun/java/swing/plaf/motif/icons com/sun/java/swing/plaf/motif/icons/SCCS com/sun/java/swing/plaf/motif/icons/SCCS/s.ScrollDownArrow.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.DesktopIcon.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.Error.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.Inform.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.Question.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.Warn.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.ScrollDownArrowActive.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.ScrollKnobH.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.ScrollLeftArrow.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.ScrollLeftArrowActive.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.ScrollRightArrow.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.ScrollRightArrowActive.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.ScrollUpArrow.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.ScrollUpArrowActive.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.StandardBackground.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.TrayBottom.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.TrayLeft.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.TrayRight.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.TrayTop.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.TreeClosed.gif com/sun/java/swing/plaf/motif/icons/SCCS/s.TreeOpen.gif com/sun/java/swing/plaf/motif/icons/ScrollDownArrow.gif com/sun/java/swing/plaf/motif/icons/DesktopIcon.gif com/sun/java/swing/plaf/motif/icons/Error.gif com/sun/java/swing/plaf/motif/icons/Inform.gif com/sun/java/swing/plaf/motif/icons/Question.gif com/sun/java/swing/plaf/motif/icons/ScrollDownArrowActive.gif com/sun/java/swing/plaf/motif/icons/ScrollKnobH.gif com/sun/java/swing/plaf/motif/icons/ScrollLeftArrow.gif com/sun/java/swing/plaf/motif/icons/ScrollLeftArrowActive.gif com/sun/java/swing/plaf/motif/icons/ScrollRightArrow.gif com/sun/java/swing/plaf/motif/icons/ScrollRightArrowActive.gif com/sun/java/swing/plaf/motif/icons/ScrollUpArrow.gif com/sun/java/swing/plaf/motif/icons/ScrollUpArrowActive.gif com/sun/java/swing/plaf/motif/icons/StandardBackground.gif com/sun/java/swing/plaf/motif/icons/TrayBottom.gif com/sun/java/swing/plaf/motif/icons/TrayLeft.gif com/sun/java/swing/plaf/motif/icons/TrayRight.gif com/sun/java/swing/plaf/motif/icons/TrayTop.gif com/sun/java/swing/plaf/motif/icons/TreeClosed.gif com/sun/java/swing/plaf/motif/icons/TreeOpen.gif com/sun/java/swing/plaf/motif/icons/Warn.gif com/sun/java/swing/plaf/motif/resources com/sun/java/swing/plaf/motif/resources/SCCS com/sun/java/swing/plaf/motif/resources/SCCS/s.motif_de.properties com/sun/java/swing/plaf/motif/resources/SCCS/s.motif.properties com/sun/java/swing/plaf/motif/resources/SCCS/s.motif_es.properties com/sun/java/swing/plaf/motif/resources/SCCS/s.motif_fr.properties com/sun/java/swing/plaf/motif/resources/SCCS/s.motif_it.properties com/sun/java/swing/plaf/motif/resources/SCCS/s.motif_ja.properties com/sun/java/swing/plaf/motif/resources/SCCS/s.motif_ko.properties com/sun/java/swing/plaf/motif/resources/SCCS/s.motif_sv.properties com/sun/java/swing/plaf/motif/resources/SCCS/s.motif_zh_CN.properties com/sun/java/swing/plaf/motif/resources/SCCS/s.motif_zh_TW.properties com/sun/java/swing/plaf/motif/resources/motif_zh_CN.properties com/sun/java/swing/plaf/motif/resources/motif.properties com/sun/java/swing/plaf/motif/resources/motif_de.properties com/sun/java/swing/plaf/motif/resources/motif_es.properties com/sun/java/swing/plaf/motif/resources/motif_fr.properties com/sun/java/swing/plaf/motif/resources/motif_it.properties com/sun/java/swing/plaf/motif/resources/motif_ja.properties com/sun/java/swing/plaf/motif/resources/motif_ko.properties com/sun/java/swing/plaf/motif/resources/motif_sv.properties com/sun/java/swing/plaf/motif/resources/motif_zh_TW.properties com/sun/java/swing/plaf/motif/MotifButtonListener.java com/sun/java/swing/plaf/motif/MotifBorders.java com/sun/java/swing/plaf/motif/MotifCheckBoxUI.java com/sun/java/swing/plaf/motif/MotifButtonUI.java com/sun/java/swing/plaf/motif/MotifCheckBoxMenuItemUI.java com/sun/java/swing/plaf/motif/MotifComboBoxRenderer.java com/sun/java/swing/plaf/motif/MotifComboBoxUI.java com/sun/java/swing/plaf/motif/MotifDesktopIconUI.java com/sun/java/swing/plaf/motif/MotifDesktopPaneUI.java com/sun/java/swing/plaf/motif/MotifEditorPaneUI.java com/sun/java/swing/plaf/motif/MotifFileChooserUI.java com/sun/java/swing/plaf/motif/MotifGraphicsUtils.java com/sun/java/swing/plaf/motif/MotifMenuMouseMotionListener.java com/sun/java/swing/plaf/motif/MotifIconFactory.java com/sun/java/swing/plaf/motif/MotifInternalFrameUI.java com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane.java com/sun/java/swing/plaf/motif/MotifLabelUI.java com/sun/java/swing/plaf/motif/MotifLookAndFeel.java com/sun/java/swing/plaf/motif/MotifMenuBarUI.java com/sun/java/swing/plaf/motif/MotifMenuItemUI.java com/sun/java/swing/plaf/motif/MotifMenuMouseListener.java com/sun/java/swing/plaf/motif/MotifRadioButtonMenuItemUI.java com/sun/java/swing/plaf/motif/MotifMenuUI.java com/sun/java/swing/plaf/motif/MotifOptionPaneUI.java com/sun/java/swing/plaf/motif/MotifPasswordFieldUI.java com/sun/java/swing/plaf/motif/MotifPopupMenuSeparatorUI.java com/sun/java/swing/plaf/motif/MotifPopupMenuUI.java com/sun/java/swing/plaf/motif/MotifProgressBarUI.java com/sun/java/swing/plaf/motif/MotifScrollBarButton.java com/sun/java/swing/plaf/motif/MotifRadioButtonUI.java com/sun/java/swing/plaf/motif/MotifScrollBarUI.java com/sun/java/swing/plaf/motif/MotifScrollPaneUI.java com/sun/java/swing/plaf/motif/MotifSeparatorUI.java com/sun/java/swing/plaf/motif/MotifSliderUI.java com/sun/java/swing/plaf/motif/MotifSplitPaneDivider.java com/sun/java/swing/plaf/motif/MotifSplitPaneUI.java com/sun/java/swing/plaf/motif/MotifTabbedPaneUI.java com/sun/java/swing/plaf/motif/MotifTextAreaUI.java com/sun/java/swing/plaf/motif/MotifTextFieldUI.java com/sun/java/swing/plaf/motif/MotifTextPaneUI.java com/sun/java/swing/plaf/motif/MotifTextUI.java com/sun/java/swing/plaf/motif/MotifToggleButtonUI.java com/sun/java/swing/plaf/motif/MotifTreeCellRenderer.java com/sun/java/swing/plaf/motif/MotifTreeUI.java com/sun/java/swing/plaf/windows com/sun/java/swing/plaf/windows/SCCS com/sun/java/swing/plaf/windows/SCCS/s.WindowsButtonListener.java com/sun/java/swing/plaf/windows/SCCS/s.DesktopProperty.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsBorders.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsCheckBoxUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsButtonUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsInternalFrameUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsCheckBoxMenuItemUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsClassicLookAndFeel.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsComboBoxUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsDesktopIconUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsDesktopManager.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsDesktopPaneUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsEditorPaneUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsFileChooserUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsGraphicsUtils.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsIconFactory.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsRadioButtonMenuItemUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsInternalFrameTitlePane.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsLabelUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsListUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsLookAndFeel.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsMenuBarUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsMenuItemUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsMenuUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsOptionPaneUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsPasswordFieldUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsPopupMenuUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsPopupWindow.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsProgressBarUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsSplitPaneDivider.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsRadioButtonUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsRootPaneUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsScrollBarUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsScrollPaneUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsSeparatorUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsSliderUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsSpinnerUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsToolBarSeparatorUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsSplitPaneUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsTabbedPaneUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsTableHeaderUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsTableUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsTextAreaUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsTextFieldUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsTextPaneUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsTextUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsToggleButtonUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsToolBarUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsTreeUI.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsUtils.java com/sun/java/swing/plaf/windows/SCCS/s.XPStyle.java com/sun/java/swing/plaf/windows/SCCS/s.WindowsPopupMenuSeparatorUI.java com/sun/java/swing/plaf/windows/icons com/sun/java/swing/plaf/windows/icons/SCCS com/sun/java/swing/plaf/windows/icons/SCCS/s.DetailsView.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.Computer.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.StandardBackground.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.Directory.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.Error.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.File.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.FloppyDrive.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.HardDrive.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.HomeFolder.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.Inform.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.JavaCup32.png com/sun/java/swing/plaf/windows/icons/SCCS/s.ListView.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.NewFolder.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.Question.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.TreeClosed.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.TreeLeaf.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.TreeOpen.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.UpFolder.gif com/sun/java/swing/plaf/windows/icons/SCCS/s.Warn.gif com/sun/java/swing/plaf/windows/icons/StandardBackground.gif com/sun/java/swing/plaf/windows/icons/Computer.gif com/sun/java/swing/plaf/windows/icons/DetailsView.gif com/sun/java/swing/plaf/windows/icons/Directory.gif com/sun/java/swing/plaf/windows/icons/Error.gif com/sun/java/swing/plaf/windows/icons/File.gif com/sun/java/swing/plaf/windows/icons/FloppyDrive.gif com/sun/java/swing/plaf/windows/icons/HardDrive.gif com/sun/java/swing/plaf/windows/icons/HomeFolder.gif com/sun/java/swing/plaf/windows/icons/Inform.gif com/sun/java/swing/plaf/windows/icons/JavaCup32.png com/sun/java/swing/plaf/windows/icons/ListView.gif com/sun/java/swing/plaf/windows/icons/NewFolder.gif com/sun/java/swing/plaf/windows/icons/Question.gif com/sun/java/swing/plaf/windows/icons/TreeClosed.gif com/sun/java/swing/plaf/windows/icons/TreeLeaf.gif com/sun/java/swing/plaf/windows/icons/TreeOpen.gif com/sun/java/swing/plaf/windows/icons/UpFolder.gif com/sun/java/swing/plaf/windows/icons/Warn.gif com/sun/java/swing/plaf/windows/resources com/sun/java/swing/plaf/windows/resources/SCCS com/sun/java/swing/plaf/windows/resources/SCCS/s.windows_zh_CN.properties com/sun/java/swing/plaf/windows/resources/SCCS/s.windows.properties com/sun/java/swing/plaf/windows/resources/SCCS/s.windows_de.properties com/sun/java/swing/plaf/windows/resources/SCCS/s.windows_es.properties com/sun/java/swing/plaf/windows/resources/SCCS/s.windows_fr.properties com/sun/java/swing/plaf/windows/resources/SCCS/s.windows_it.properties com/sun/java/swing/plaf/windows/resources/SCCS/s.windows_ja.properties com/sun/java/swing/plaf/windows/resources/SCCS/s.windows_ko.properties com/sun/java/swing/plaf/windows/resources/SCCS/s.windows_sv.properties com/sun/java/swing/plaf/windows/resources/SCCS/s.windows_zh_TW.properties com/sun/java/swing/plaf/windows/resources/windows_de.properties com/sun/java/swing/plaf/windows/resources/windows.properties com/sun/java/swing/plaf/windows/resources/windows_es.properties com/sun/java/swing/plaf/windows/resources/windows_fr.properties com/sun/java/swing/plaf/windows/resources/windows_it.properties com/sun/java/swing/plaf/windows/resources/windows_ja.properties com/sun/java/swing/plaf/windows/resources/windows_ko.properties com/sun/java/swing/plaf/windows/resources/windows_sv.properties com/sun/java/swing/plaf/windows/resources/windows_zh_CN.properties com/sun/java/swing/plaf/windows/resources/windows_zh_TW.properties com/sun/java/swing/plaf/windows/WindowsButtonListener.java com/sun/java/swing/plaf/windows/DesktopProperty.java com/sun/java/swing/plaf/windows/WindowsBorders.java com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI.java com/sun/java/swing/plaf/windows/WindowsButtonUI.java com/sun/java/swing/plaf/windows/WindowsClassicLookAndFeel.java com/sun/java/swing/plaf/windows/WindowsCheckBoxUI.java com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java com/sun/java/swing/plaf/windows/WindowsDesktopIconUI.java com/sun/java/swing/plaf/windows/WindowsDesktopManager.java com/sun/java/swing/plaf/windows/WindowsDesktopPaneUI.java com/sun/java/swing/plaf/windows/XPStyle.java com/sun/java/swing/plaf/windows/WindowsIconFactory.java com/sun/java/swing/plaf/windows/WindowsEditorPaneUI.java com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java com/sun/java/swing/plaf/windows/WindowsGraphicsUtils.java com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane.java com/sun/java/swing/plaf/windows/WindowsInternalFrameUI.java com/sun/java/swing/plaf/windows/WindowsLabelUI.java com/sun/java/swing/plaf/windows/WindowsListUI.java com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java com/sun/java/swing/plaf/windows/WindowsMenuBarUI.java com/sun/java/swing/plaf/windows/WindowsMenuItemUI.java com/sun/java/swing/plaf/windows/WindowsMenuUI.java com/sun/java/swing/plaf/windows/WindowsOptionPaneUI.java com/sun/java/swing/plaf/windows/WindowsPasswordFieldUI.java com/sun/java/swing/plaf/windows/WindowsPopupMenuUI.java com/sun/java/swing/plaf/windows/WindowsPopupWindow.java com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI.java com/sun/java/swing/plaf/windows/WindowsRadioButtonUI.java com/sun/java/swing/plaf/windows/WindowsRootPaneUI.java com/sun/java/swing/plaf/windows/WindowsScrollBarUI.java com/sun/java/swing/plaf/windows/WindowsScrollPaneUI.java com/sun/java/swing/plaf/windows/WindowsSeparatorUI.java com/sun/java/swing/plaf/windows/WindowsSliderUI.java com/sun/java/swing/plaf/windows/WindowsSpinnerUI.java com/sun/java/swing/plaf/windows/WindowsSplitPaneDivider.java com/sun/java/swing/plaf/windows/WindowsSplitPaneUI.java com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI.java com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java com/sun/java/swing/plaf/windows/WindowsTableUI.java com/sun/java/swing/plaf/windows/WindowsTextUI.java com/sun/java/swing/plaf/windows/WindowsTextAreaUI.java com/sun/java/swing/plaf/windows/WindowsTextFieldUI.java com/sun/java/swing/plaf/windows/WindowsTextPaneUI.java com/sun/java/swing/plaf/windows/WindowsToggleButtonUI.java com/sun/java/swing/plaf/windows/WindowsToolBarSeparatorUI.java com/sun/java/swing/plaf/windows/WindowsToolBarUI.java com/sun/java/swing/plaf/windows/WindowsTreeUI.java com/sun/java/swing/plaf/windows/WindowsUtils.java com/sun/java/swing/plaf/windows/WindowsPopupMenuSeparatorUI.java com/sun/java/swing/SwingUtilities2.java com/sun/java/util com/sun/java/util/jar com/sun/java/util/jar/pack com/sun/java/util/jar/pack/SCCS com/sun/java/util/jar/pack/SCCS/s.AdaptiveCoding.java com/sun/java/util/jar/pack/SCCS/s.Attribute.java com/sun/java/util/jar/pack/SCCS/s.BandStructure.java com/sun/java/util/jar/pack/SCCS/s.ClassReader.java com/sun/java/util/jar/pack/SCCS/s.ClassWriter.java com/sun/java/util/jar/pack/SCCS/s.Code.java com/sun/java/util/jar/pack/SCCS/s.Coding.java com/sun/java/util/jar/pack/SCCS/s.CodingChooser.java com/sun/java/util/jar/pack/SCCS/s.CodingMethod.java com/sun/java/util/jar/pack/SCCS/s.ConstantPool.java com/sun/java/util/jar/pack/SCCS/s.Constants.java com/sun/java/util/jar/pack/SCCS/s.Driver.java com/sun/java/util/jar/pack/SCCS/s.Fixups.java com/sun/java/util/jar/pack/SCCS/s.Histogram.java com/sun/java/util/jar/pack/SCCS/s.Instruction.java com/sun/java/util/jar/pack/SCCS/s.NativeUnpack.java com/sun/java/util/jar/pack/SCCS/s.Package.java com/sun/java/util/jar/pack/SCCS/s.PropMap.java com/sun/java/util/jar/pack/SCCS/s.PackageReader.java com/sun/java/util/jar/pack/SCCS/s.PackageWriter.java com/sun/java/util/jar/pack/SCCS/s.PackerImpl.java com/sun/java/util/jar/pack/SCCS/s.PopulationCoding.java com/sun/java/util/jar/pack/SCCS/s.UnpackerImpl.java com/sun/java/util/jar/pack/SCCS/s.Utils.java com/sun/java/util/jar/pack/SCCS/s.intrinsic.properties com/sun/java/util/jar/pack/SCCS/s.package.html com/sun/java/util/jar/pack/AdaptiveCoding.java com/sun/java/util/jar/pack/Attribute.java com/sun/java/util/jar/pack/BandStructure.java com/sun/java/util/jar/pack/ClassReader.java com/sun/java/util/jar/pack/ClassWriter.java com/sun/java/util/jar/pack/Code.java com/sun/java/util/jar/pack/Coding.java com/sun/java/util/jar/pack/CodingChooser.java com/sun/java/util/jar/pack/CodingMethod.java com/sun/java/util/jar/pack/ConstantPool.java com/sun/java/util/jar/pack/Constants.java com/sun/java/util/jar/pack/Driver.java com/sun/java/util/jar/pack/Fixups.java com/sun/java/util/jar/pack/Histogram.java com/sun/java/util/jar/pack/Instruction.java com/sun/java/util/jar/pack/NativeUnpack.java com/sun/java/util/jar/pack/Package.java com/sun/java/util/jar/pack/PackageReader.java com/sun/java/util/jar/pack/PackageWriter.java com/sun/java/util/jar/pack/PackerImpl.java com/sun/java/util/jar/pack/PopulationCoding.java com/sun/java/util/jar/pack/PropMap.java com/sun/java/util/jar/pack/UnpackerImpl.java com/sun/java/util/jar/pack/Utils.java com/sun/java/util/jar/pack/intrinsic.properties com/sun/java/util/jar/pack/package.html com/sun/java/util/logging com/sun/java/util/logging/ulf com/sun/java/util/logging/ulf/SCCS com/sun/java2d com/sun/java2d/fontchecker com/sun/java2d/fontchecker/SCCS com/sun/java2d/fontchecker/SCCS/s.FontCheckerConstants.java com/sun/java2d/fontchecker/SCCS/s.FontCheckDummy.java com/sun/java2d/fontchecker/SCCS/s.FontChecker.java com/sun/java2d/fontchecker/SCCS/s.FontFileFilter.java com/sun/java2d/fontchecker/SCCS/s.README.txt com/sun/java2d/fontchecker/FontCheckerConstants.java com/sun/java2d/fontchecker/FontCheckDummy.java com/sun/java2d/fontchecker/FontChecker.java com/sun/java2d/fontchecker/FontFileFilter.java com/sun/java2d/fontchecker/README.txt com/sun/java_cup com/sun/java_cup/internal com/sun/java_cup/internal/SCCS com/sun/java_cup/internal/SCCS/s.action_part.java com/sun/java_cup/internal/SCCS/s.Main.java com/sun/java_cup/internal/SCCS/s.action_production.java com/sun/java_cup/internal/SCCS/s.assoc.java com/sun/java_cup/internal/SCCS/s.emit.java com/sun/java_cup/internal/SCCS/s.internal_error.java com/sun/java_cup/internal/SCCS/s.lalr_item.java com/sun/java_cup/internal/SCCS/s.lalr_item_set.java com/sun/java_cup/internal/SCCS/s.lalr_state.java com/sun/java_cup/internal/SCCS/s.lalr_transition.java com/sun/java_cup/internal/SCCS/s.lexer.java com/sun/java_cup/internal/SCCS/s.lr_item_core.java com/sun/java_cup/internal/SCCS/s.non_terminal.java com/sun/java_cup/internal/SCCS/s.nonassoc_action.java com/sun/java_cup/internal/SCCS/s.parse_action.java com/sun/java_cup/internal/SCCS/s.parser.java com/sun/java_cup/internal/SCCS/s.parse_action_row.java com/sun/java_cup/internal/SCCS/s.parse_action_table.java com/sun/java_cup/internal/SCCS/s.parse_reduce_row.java com/sun/java_cup/internal/SCCS/s.parse_reduce_table.java com/sun/java_cup/internal/SCCS/s.production.java com/sun/java_cup/internal/SCCS/s.production_part.java com/sun/java_cup/internal/SCCS/s.reduce_action.java com/sun/java_cup/internal/SCCS/s.shift_action.java com/sun/java_cup/internal/SCCS/s.sym.java com/sun/java_cup/internal/SCCS/s.symbol.java com/sun/java_cup/internal/SCCS/s.symbol_part.java com/sun/java_cup/internal/SCCS/s.symbol_set.java com/sun/java_cup/internal/SCCS/s.terminal.java com/sun/java_cup/internal/SCCS/s.terminal_set.java com/sun/java_cup/internal/SCCS/s.version.java com/sun/java_cup/internal/runtime com/sun/java_cup/internal/runtime/SCCS com/sun/java_cup/internal/runtime/SCCS/s.lr_parser.java com/sun/java_cup/internal/runtime/SCCS/s.Scanner.java com/sun/java_cup/internal/runtime/SCCS/s.Symbol.java com/sun/java_cup/internal/runtime/SCCS/s.virtual_parse_stack.java com/sun/java_cup/internal/runtime/Scanner.java com/sun/java_cup/internal/runtime/Symbol.java com/sun/java_cup/internal/runtime/lr_parser.java com/sun/java_cup/internal/runtime/virtual_parse_stack.java com/sun/java_cup/internal/action_part.java com/sun/java_cup/internal/Main.java com/sun/java_cup/internal/action_production.java com/sun/java_cup/internal/assoc.java com/sun/java_cup/internal/emit.java com/sun/java_cup/internal/internal_error.java com/sun/java_cup/internal/lalr_item.java com/sun/java_cup/internal/lalr_item_set.java com/sun/java_cup/internal/lalr_state.java com/sun/java_cup/internal/lalr_transition.java com/sun/java_cup/internal/lexer.java com/sun/java_cup/internal/lr_item_core.java com/sun/java_cup/internal/non_terminal.java com/sun/java_cup/internal/nonassoc_action.java com/sun/java_cup/internal/parse_action.java com/sun/java_cup/internal/parser.java com/sun/java_cup/internal/parse_action_row.java com/sun/java_cup/internal/parse_action_table.java com/sun/java_cup/internal/parse_reduce_row.java com/sun/java_cup/internal/parse_reduce_table.java com/sun/java_cup/internal/production.java com/sun/java_cup/internal/production_part.java com/sun/java_cup/internal/reduce_action.java com/sun/java_cup/internal/shift_action.java com/sun/java_cup/internal/sym.java com/sun/java_cup/internal/symbol.java com/sun/java_cup/internal/symbol_part.java com/sun/java_cup/internal/symbol_set.java com/sun/java_cup/internal/terminal.java com/sun/java_cup/internal/terminal_set.java com/sun/java_cup/internal/version.java com/sun/javadoc com/sun/javadoc/SCCS com/sun/javadoc/SCCS/s.AnnotationTypeDoc.java com/sun/javadoc/SCCS/s.AnnotationDesc.java com/sun/javadoc/SCCS/s.Doc.java com/sun/javadoc/SCCS/s.AnnotationTypeElementDoc.java com/sun/javadoc/SCCS/s.AnnotationValue.java com/sun/javadoc/SCCS/s.ClassDoc.java com/sun/javadoc/SCCS/s.ConstructorDoc.java com/sun/javadoc/SCCS/s.Doclet.java com/sun/javadoc/SCCS/s.ParameterizedType.java com/sun/javadoc/SCCS/s.DocErrorReporter.java com/sun/javadoc/SCCS/s.ExecutableMemberDoc.java com/sun/javadoc/SCCS/s.FieldDoc.java com/sun/javadoc/SCCS/s.LanguageVersion.java com/sun/javadoc/SCCS/s.MemberDoc.java com/sun/javadoc/SCCS/s.MethodDoc.java com/sun/javadoc/SCCS/s.PackageDoc.java com/sun/javadoc/SCCS/s.ParamTag.java com/sun/javadoc/SCCS/s.Parameter.java com/sun/javadoc/SCCS/s.ProgramElementDoc.java com/sun/javadoc/SCCS/s.RootDoc.java com/sun/javadoc/SCCS/s.SeeTag.java com/sun/javadoc/SCCS/s.SerialFieldTag.java com/sun/javadoc/SCCS/s.SourcePosition.java com/sun/javadoc/SCCS/s.Tag.java com/sun/javadoc/SCCS/s.ThrowsTag.java com/sun/javadoc/SCCS/s.Type.java com/sun/javadoc/SCCS/s.TypeVariable.java com/sun/javadoc/SCCS/s.WildcardType.java com/sun/javadoc/SCCS/s.package.html com/sun/javadoc/AnnotationTypeDoc.java com/sun/javadoc/AnnotationDesc.java com/sun/javadoc/Doc.java com/sun/javadoc/AnnotationTypeElementDoc.java com/sun/javadoc/AnnotationValue.java com/sun/javadoc/ClassDoc.java com/sun/javadoc/ConstructorDoc.java com/sun/javadoc/Doclet.java com/sun/javadoc/SerialFieldTag.java com/sun/javadoc/SeeTag.java com/sun/javadoc/DocErrorReporter.java com/sun/javadoc/ExecutableMemberDoc.java com/sun/javadoc/FieldDoc.java com/sun/javadoc/LanguageVersion.java com/sun/javadoc/MemberDoc.java com/sun/javadoc/MethodDoc.java com/sun/javadoc/PackageDoc.java com/sun/javadoc/ParamTag.java com/sun/javadoc/Parameter.java com/sun/javadoc/ParameterizedType.java com/sun/javadoc/ProgramElementDoc.java com/sun/javadoc/RootDoc.java com/sun/javadoc/SourcePosition.java com/sun/javadoc/Tag.java com/sun/javadoc/ThrowsTag.java com/sun/javadoc/Type.java com/sun/javadoc/TypeVariable.java com/sun/javadoc/WildcardType.java com/sun/javadoc/package.html com/sun/jdi com/sun/jdi/SCCS com/sun/jdi/SCCS/s.AbsentInformationException.java com/sun/jdi/SCCS/s.Accessible.java com/sun/jdi/SCCS/s.ArrayReference.java com/sun/jdi/SCCS/s.ArrayType.java com/sun/jdi/SCCS/s.BooleanType.java com/sun/jdi/SCCS/s.BooleanValue.java com/sun/jdi/SCCS/s.Bootstrap.java com/sun/jdi/SCCS/s.ByteType.java com/sun/jdi/SCCS/s.ByteValue.java com/sun/jdi/SCCS/s.CharType.java com/sun/jdi/SCCS/s.CharValue.java com/sun/jdi/SCCS/s.ClassLoaderReference.java com/sun/jdi/SCCS/s.ClassNotLoadedException.java com/sun/jdi/SCCS/s.ClassObjectReference.java com/sun/jdi/SCCS/s.LongValue.java com/sun/jdi/SCCS/s.Location.java com/sun/jdi/SCCS/s.ClassNotPreparedException.java com/sun/jdi/SCCS/s.ClassType.java com/sun/jdi/SCCS/s.DoubleType.java com/sun/jdi/SCCS/s.DoubleValue.java com/sun/jdi/SCCS/s.Field.java com/sun/jdi/SCCS/s.FloatType.java com/sun/jdi/SCCS/s.FloatValue.java com/sun/jdi/SCCS/s.IncompatibleThreadStateException.java com/sun/jdi/SCCS/s.InconsistentDebugInfoException.java com/sun/jdi/SCCS/s.IntegerType.java com/sun/jdi/SCCS/s.IntegerValue.java com/sun/jdi/SCCS/s.InterfaceType.java com/sun/jdi/SCCS/s.InternalException.java com/sun/jdi/SCCS/s.InvalidCodeIndexException.java com/sun/jdi/SCCS/s.InvalidTypeException.java com/sun/jdi/SCCS/s.InvalidLineNumberException.java com/sun/jdi/SCCS/s.InvalidStackFrameException.java com/sun/jdi/SCCS/s.InvocationException.java com/sun/jdi/SCCS/s.JDIPermission.java com/sun/jdi/SCCS/s.LocalVariable.java com/sun/jdi/SCCS/s.Locatable.java com/sun/jdi/SCCS/s.LongType.java com/sun/jdi/SCCS/s.ObjectReference.java com/sun/jdi/SCCS/s.Method.java com/sun/jdi/SCCS/s.Mirror.java com/sun/jdi/SCCS/s.PathSearchingVirtualMachine.java com/sun/jdi/SCCS/s.NativeMethodException.java com/sun/jdi/SCCS/s.ObjectCollectedException.java com/sun/jdi/SCCS/s.ThreadGroupReference.java com/sun/jdi/SCCS/s.ShortType.java com/sun/jdi/SCCS/s.PrimitiveType.java com/sun/jdi/SCCS/s.PrimitiveValue.java com/sun/jdi/SCCS/s.ReferenceType.java com/sun/jdi/SCCS/s.ShortValue.java com/sun/jdi/SCCS/s.StackFrame.java com/sun/jdi/SCCS/s.StringReference.java com/sun/jdi/SCCS/s.VMDisconnectedException.java com/sun/jdi/SCCS/s.ThreadReference.java com/sun/jdi/SCCS/s.Type.java com/sun/jdi/SCCS/s.TypeComponent.java com/sun/jdi/SCCS/s.VMCannotBeModifiedException.java com/sun/jdi/SCCS/s.VMMismatchException.java com/sun/jdi/SCCS/s.VMOutOfMemoryException.java com/sun/jdi/SCCS/s.Value.java com/sun/jdi/SCCS/s.VirtualMachine.java com/sun/jdi/SCCS/s.VoidType.java com/sun/jdi/SCCS/s.VirtualMachineManager.java com/sun/jdi/SCCS/s.VoidValue.java com/sun/jdi/SCCS/s.package.html com/sun/jdi/connect com/sun/jdi/connect/SCCS com/sun/jdi/connect/SCCS/s.AttachingConnector.java com/sun/jdi/connect/SCCS/s.Connector.java com/sun/jdi/connect/SCCS/s.LaunchingConnector.java com/sun/jdi/connect/SCCS/s.package.html com/sun/jdi/connect/SCCS/s.IllegalConnectorArgumentsException.java com/sun/jdi/connect/SCCS/s.ListeningConnector.java com/sun/jdi/connect/SCCS/s.Transport.java com/sun/jdi/connect/SCCS/s.TransportTimeoutException.java com/sun/jdi/connect/SCCS/s.VMStartException.java com/sun/jdi/connect/spi com/sun/jdi/connect/spi/SCCS com/sun/jdi/connect/spi/SCCS/s.ClosedConnectionException.java com/sun/jdi/connect/spi/SCCS/s.Connection.java com/sun/jdi/connect/spi/SCCS/s.TransportService.java com/sun/jdi/connect/spi/SCCS/s.package.html com/sun/jdi/connect/spi/ClosedConnectionException.java com/sun/jdi/connect/spi/Connection.java com/sun/jdi/connect/spi/TransportService.java com/sun/jdi/connect/spi/package.html com/sun/jdi/connect/TransportTimeoutException.java com/sun/jdi/connect/AttachingConnector.java com/sun/jdi/connect/Connector.java com/sun/jdi/connect/LaunchingConnector.java com/sun/jdi/connect/Transport.java com/sun/jdi/connect/IllegalConnectorArgumentsException.java com/sun/jdi/connect/ListeningConnector.java com/sun/jdi/connect/VMStartException.java com/sun/jdi/connect/package.html com/sun/jdi/doc-files com/sun/jdi/doc-files/SCCS com/sun/jdi/doc-files/SCCS/s.signature.html com/sun/jdi/doc-files/signature.html com/sun/jdi/event com/sun/jdi/event/SCCS com/sun/jdi/event/SCCS/s.ModificationWatchpointEvent.java com/sun/jdi/event/SCCS/s.AccessWatchpointEvent.java com/sun/jdi/event/SCCS/s.BreakpointEvent.java com/sun/jdi/event/SCCS/s.ClassPrepareEvent.java com/sun/jdi/event/SCCS/s.ClassUnloadEvent.java com/sun/jdi/event/SCCS/s.Event.java com/sun/jdi/event/SCCS/s.EventIterator.java com/sun/jdi/event/SCCS/s.EventQueue.java com/sun/jdi/event/SCCS/s.EventSet.java com/sun/jdi/event/SCCS/s.ExceptionEvent.java com/sun/jdi/event/SCCS/s.LocatableEvent.java com/sun/jdi/event/SCCS/s.MethodEntryEvent.java com/sun/jdi/event/SCCS/s.MethodExitEvent.java com/sun/jdi/event/SCCS/s.VMDisconnectEvent.java com/sun/jdi/event/SCCS/s.StepEvent.java com/sun/jdi/event/SCCS/s.ThreadDeathEvent.java com/sun/jdi/event/SCCS/s.ThreadStartEvent.java com/sun/jdi/event/SCCS/s.VMDeathEvent.java com/sun/jdi/event/SCCS/s.WatchpointEvent.java com/sun/jdi/event/SCCS/s.VMStartEvent.java com/sun/jdi/event/SCCS/s.package.html com/sun/jdi/event/ModificationWatchpointEvent.java com/sun/jdi/event/AccessWatchpointEvent.java com/sun/jdi/event/BreakpointEvent.java com/sun/jdi/event/ClassPrepareEvent.java com/sun/jdi/event/ClassUnloadEvent.java com/sun/jdi/event/Event.java com/sun/jdi/event/EventIterator.java com/sun/jdi/event/EventQueue.java com/sun/jdi/event/EventSet.java com/sun/jdi/event/ExceptionEvent.java com/sun/jdi/event/LocatableEvent.java com/sun/jdi/event/MethodEntryEvent.java com/sun/jdi/event/MethodExitEvent.java com/sun/jdi/event/StepEvent.java com/sun/jdi/event/package.html com/sun/jdi/event/ThreadDeathEvent.java com/sun/jdi/event/ThreadStartEvent.java com/sun/jdi/event/VMDeathEvent.java com/sun/jdi/event/VMDisconnectEvent.java com/sun/jdi/event/VMStartEvent.java com/sun/jdi/event/WatchpointEvent.java com/sun/jdi/request com/sun/jdi/request/SCCS com/sun/jdi/request/SCCS/s.DuplicateRequestException.java com/sun/jdi/request/SCCS/s.AccessWatchpointRequest.java com/sun/jdi/request/SCCS/s.BreakpointRequest.java com/sun/jdi/request/SCCS/s.ClassPrepareRequest.java com/sun/jdi/request/SCCS/s.ClassUnloadRequest.java com/sun/jdi/request/SCCS/s.EventRequestManager.java com/sun/jdi/request/SCCS/s.EventRequest.java com/sun/jdi/request/SCCS/s.ExceptionRequest.java com/sun/jdi/request/SCCS/s.MethodEntryRequest.java com/sun/jdi/request/SCCS/s.package.html com/sun/jdi/request/SCCS/s.InvalidRequestStateException.java com/sun/jdi/request/SCCS/s.MethodExitRequest.java com/sun/jdi/request/SCCS/s.ModificationWatchpointRequest.java com/sun/jdi/request/SCCS/s.StepRequest.java com/sun/jdi/request/SCCS/s.ThreadDeathRequest.java com/sun/jdi/request/SCCS/s.ThreadStartRequest.java com/sun/jdi/request/SCCS/s.VMDeathRequest.java com/sun/jdi/request/SCCS/s.WatchpointRequest.java com/sun/jdi/request/InvalidRequestStateException.java com/sun/jdi/request/AccessWatchpointRequest.java com/sun/jdi/request/BreakpointRequest.java com/sun/jdi/request/ClassPrepareRequest.java com/sun/jdi/request/ClassUnloadRequest.java com/sun/jdi/request/DuplicateRequestException.java com/sun/jdi/request/EventRequest.java com/sun/jdi/request/EventRequestManager.java com/sun/jdi/request/ExceptionRequest.java com/sun/jdi/request/MethodEntryRequest.java com/sun/jdi/request/MethodExitRequest.java com/sun/jdi/request/StepRequest.java com/sun/jdi/request/package.html com/sun/jdi/request/ThreadDeathRequest.java com/sun/jdi/request/ModificationWatchpointRequest.java com/sun/jdi/request/ThreadStartRequest.java com/sun/jdi/request/VMDeathRequest.java com/sun/jdi/request/WatchpointRequest.java com/sun/jdi/Field.java com/sun/jdi/AbsentInformationException.java com/sun/jdi/Accessible.java com/sun/jdi/ArrayReference.java com/sun/jdi/ArrayType.java com/sun/jdi/BooleanType.java com/sun/jdi/BooleanValue.java com/sun/jdi/Bootstrap.java com/sun/jdi/ByteType.java com/sun/jdi/ByteValue.java com/sun/jdi/CharType.java com/sun/jdi/CharValue.java com/sun/jdi/ClassLoaderReference.java com/sun/jdi/ClassType.java com/sun/jdi/IntegerType.java com/sun/jdi/ClassNotLoadedException.java com/sun/jdi/ClassNotPreparedException.java com/sun/jdi/ClassObjectReference.java com/sun/jdi/DoubleType.java com/sun/jdi/DoubleValue.java com/sun/jdi/FloatType.java com/sun/jdi/FloatValue.java com/sun/jdi/ObjectReference.java com/sun/jdi/Locatable.java com/sun/jdi/IncompatibleThreadStateException.java com/sun/jdi/InconsistentDebugInfoException.java com/sun/jdi/IntegerValue.java com/sun/jdi/InterfaceType.java com/sun/jdi/InternalException.java com/sun/jdi/InvalidCodeIndexException.java com/sun/jdi/Method.java com/sun/jdi/InvalidLineNumberException.java com/sun/jdi/InvalidStackFrameException.java com/sun/jdi/InvalidTypeException.java com/sun/jdi/InvocationException.java com/sun/jdi/JDIPermission.java com/sun/jdi/LocalVariable.java com/sun/jdi/Location.java com/sun/jdi/LongType.java com/sun/jdi/LongValue.java com/sun/jdi/Mirror.java com/sun/jdi/ObjectCollectedException.java com/sun/jdi/NativeMethodException.java com/sun/jdi/StringReference.java com/sun/jdi/PathSearchingVirtualMachine.java com/sun/jdi/PrimitiveType.java com/sun/jdi/PrimitiveValue.java com/sun/jdi/ReferenceType.java com/sun/jdi/ShortType.java com/sun/jdi/ShortValue.java com/sun/jdi/StackFrame.java com/sun/jdi/VMCannotBeModifiedException.java com/sun/jdi/ThreadGroupReference.java com/sun/jdi/ThreadReference.java com/sun/jdi/Type.java com/sun/jdi/TypeComponent.java com/sun/jdi/VirtualMachine.java com/sun/jdi/Value.java com/sun/jdi/VMDisconnectedException.java com/sun/jdi/VMMismatchException.java com/sun/jdi/VMOutOfMemoryException.java com/sun/jdi/VirtualMachineManager.java com/sun/jdi/VoidType.java com/sun/jdi/VoidValue.java com/sun/jdi/package.html com/sun/jlex com/sun/jlex/internal com/sun/jlex/internal/SCCS com/sun/jlex/internal/SCCS/s.Main.java com/sun/jlex/internal/Main.java com/sun/jmx com/sun/jmx/defaults com/sun/jmx/defaults/SCCS com/sun/jmx/defaults/SCCS/s.JmxProperties.java com/sun/jmx/defaults/SCCS/s.ServiceName.java com/sun/jmx/defaults/SCCS/s.package.html com/sun/jmx/defaults/JmxProperties.java com/sun/jmx/defaults/ServiceName.java com/sun/jmx/defaults/package.html com/sun/jmx/interceptor com/sun/jmx/interceptor/SCCS com/sun/jmx/interceptor/SCCS/s.package.html com/sun/jmx/interceptor/SCCS/s.DefaultMBeanServerInterceptor.java com/sun/jmx/interceptor/SCCS/s.MBeanServerInterceptor.java com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.java com/sun/jmx/interceptor/MBeanServerInterceptor.java com/sun/jmx/interceptor/package.html com/sun/jmx/mbeanserver com/sun/jmx/mbeanserver/SCCS com/sun/jmx/mbeanserver/SCCS/s.DynamicMetaDataImpl.java com/sun/jmx/mbeanserver/SCCS/s.BaseMetaDataImpl.java com/sun/jmx/mbeanserver/SCCS/s.package.html com/sun/jmx/mbeanserver/SCCS/s.ClassLoaderRepositorySupport.java com/sun/jmx/mbeanserver/SCCS/s.GetPropertyAction.java com/sun/jmx/mbeanserver/SCCS/s.Introspector.java com/sun/jmx/mbeanserver/SCCS/s.JmxMBeanServer.java com/sun/jmx/mbeanserver/SCCS/s.JmxMBeanServerBuilder.java com/sun/jmx/mbeanserver/SCCS/s.MBeanInstantiator.java com/sun/jmx/mbeanserver/SCCS/s.MBeanInstantiatorImpl.java com/sun/jmx/mbeanserver/SCCS/s.MBeanServerDelegateImpl.java com/sun/jmx/mbeanserver/SCCS/s.MetaData.java com/sun/jmx/mbeanserver/SCCS/s.MetaDataImpl.java com/sun/jmx/mbeanserver/SCCS/s.ModifiableClassLoaderRepository.java com/sun/jmx/mbeanserver/SCCS/s.NamedObject.java com/sun/jmx/mbeanserver/SCCS/s.ObjectInputStreamWithLoader.java com/sun/jmx/mbeanserver/SCCS/s.Repository.java com/sun/jmx/mbeanserver/SCCS/s.RepositorySupport.java com/sun/jmx/mbeanserver/SCCS/s.SecureClassLoaderRepository.java com/sun/jmx/mbeanserver/SCCS/s.StandardMetaDataImpl.java com/sun/jmx/mbeanserver/SCCS/s.SunJmxMBeanServer.java com/sun/jmx/mbeanserver/DynamicMetaDataImpl.java com/sun/jmx/mbeanserver/BaseMetaDataImpl.java com/sun/jmx/mbeanserver/Repository.java com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.java com/sun/jmx/mbeanserver/GetPropertyAction.java com/sun/jmx/mbeanserver/Introspector.java com/sun/jmx/mbeanserver/JmxMBeanServer.java com/sun/jmx/mbeanserver/JmxMBeanServerBuilder.java com/sun/jmx/mbeanserver/MBeanInstantiator.java com/sun/jmx/mbeanserver/MBeanInstantiatorImpl.java com/sun/jmx/mbeanserver/MBeanServerDelegateImpl.java com/sun/jmx/mbeanserver/MetaData.java com/sun/jmx/mbeanserver/MetaDataImpl.java com/sun/jmx/mbeanserver/ModifiableClassLoaderRepository.java com/sun/jmx/mbeanserver/NamedObject.java com/sun/jmx/mbeanserver/ObjectInputStreamWithLoader.java com/sun/jmx/mbeanserver/RepositorySupport.java com/sun/jmx/mbeanserver/SecureClassLoaderRepository.java com/sun/jmx/mbeanserver/StandardMetaDataImpl.java com/sun/jmx/mbeanserver/SunJmxMBeanServer.java com/sun/jmx/mbeanserver/package.html com/sun/jmx/remote com/sun/jmx/remote/internal com/sun/jmx/remote/internal/SCCS com/sun/jmx/remote/internal/SCCS/s.ArrayNotificationBuffer.java com/sun/jmx/remote/internal/SCCS/s.ArrayQueue.java com/sun/jmx/remote/internal/SCCS/s.ClientCommunicatorAdmin.java com/sun/jmx/remote/internal/SCCS/s.ClientListenerInfo.java com/sun/jmx/remote/internal/SCCS/s.ClientNotifForwarder.java com/sun/jmx/remote/internal/SCCS/s.ListenerInfo.java com/sun/jmx/remote/internal/SCCS/s.NotificationBuffer.java com/sun/jmx/remote/internal/SCCS/s.ProxyInputStream.java com/sun/jmx/remote/internal/SCCS/s.ProxyRef.java com/sun/jmx/remote/internal/SCCS/s.RMIExporter.java com/sun/jmx/remote/internal/SCCS/s.ServerCommunicatorAdmin.java com/sun/jmx/remote/internal/SCCS/s.ServerNotifForwarder.java com/sun/jmx/remote/internal/SCCS/s.Unmarshal.java com/sun/jmx/remote/internal/SCCS/s.package.html com/sun/jmx/remote/internal/ArrayNotificationBuffer.java com/sun/jmx/remote/internal/ArrayQueue.java com/sun/jmx/remote/internal/ClientCommunicatorAdmin.java com/sun/jmx/remote/internal/ClientListenerInfo.java com/sun/jmx/remote/internal/ClientNotifForwarder.java com/sun/jmx/remote/internal/ListenerInfo.java com/sun/jmx/remote/internal/NotificationBuffer.java com/sun/jmx/remote/internal/ProxyInputStream.java com/sun/jmx/remote/internal/ProxyRef.java com/sun/jmx/remote/internal/RMIExporter.java com/sun/jmx/remote/internal/ServerCommunicatorAdmin.java com/sun/jmx/remote/internal/ServerNotifForwarder.java com/sun/jmx/remote/internal/Unmarshal.java com/sun/jmx/remote/internal/package.html com/sun/jmx/remote/protocol com/sun/jmx/remote/protocol/iiop com/sun/jmx/remote/protocol/iiop/SCCS com/sun/jmx/remote/protocol/iiop/SCCS/s.ClientProvider.java com/sun/jmx/remote/protocol/iiop/SCCS/s.ServerProvider.java com/sun/jmx/remote/protocol/iiop/ClientProvider.java com/sun/jmx/remote/protocol/iiop/ServerProvider.java com/sun/jmx/remote/protocol/rmi com/sun/jmx/remote/protocol/rmi/SCCS com/sun/jmx/remote/protocol/rmi/SCCS/s.ClientProvider.java com/sun/jmx/remote/protocol/rmi/SCCS/s.ServerProvider.java com/sun/jmx/remote/protocol/rmi/ClientProvider.java com/sun/jmx/remote/protocol/rmi/ServerProvider.java com/sun/jmx/remote/security com/sun/jmx/remote/security/SCCS com/sun/jmx/remote/security/SCCS/s.JMXSubjectDomainCombiner.java com/sun/jmx/remote/security/SCCS/s.FileLoginModule.java com/sun/jmx/remote/security/SCCS/s.MBeanServerFileAccessController.java com/sun/jmx/remote/security/SCCS/s.JMXPluggableAuthenticator.java com/sun/jmx/remote/security/SCCS/s.MBeanServerAccessController.java com/sun/jmx/remote/security/SCCS/s.SubjectDelegator.java com/sun/jmx/remote/security/JMXPluggableAuthenticator.java com/sun/jmx/remote/security/FileLoginModule.java com/sun/jmx/remote/security/MBeanServerAccessController.java com/sun/jmx/remote/security/JMXSubjectDomainCombiner.java com/sun/jmx/remote/security/MBeanServerFileAccessController.java com/sun/jmx/remote/security/SubjectDelegator.java com/sun/jmx/remote/util com/sun/jmx/remote/util/SCCS com/sun/jmx/remote/util/SCCS/s.ClassLogger.java com/sun/jmx/remote/util/SCCS/s.CacheMap.java com/sun/jmx/remote/util/SCCS/s.ClassLoaderWithRepository.java com/sun/jmx/remote/util/SCCS/s.EnvHelp.java com/sun/jmx/remote/util/SCCS/s.OrderClassLoaders.java com/sun/jmx/remote/util/SCCS/s.Service.java com/sun/jmx/remote/util/ClassLogger.java com/sun/jmx/remote/util/CacheMap.java com/sun/jmx/remote/util/ClassLoaderWithRepository.java com/sun/jmx/remote/util/EnvHelp.java com/sun/jmx/remote/util/OrderClassLoaders.java com/sun/jmx/remote/util/Service.java com/sun/jmx/snmp com/sun/jmx/snmp/IPAcl com/sun/jmx/snmp/IPAcl/SCCS com/sun/jmx/snmp/IPAcl/SCCS/s.ASCII_CharStream.README com/sun/jmx/snmp/IPAcl/SCCS/s.ASCII_CharStream.java com/sun/jmx/snmp/IPAcl/SCCS/s.AclEntryImpl.java com/sun/jmx/snmp/IPAcl/SCCS/s.AclImpl.java com/sun/jmx/snmp/IPAcl/SCCS/s.GroupImpl.java com/sun/jmx/snmp/IPAcl/SCCS/s.Host.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMAccess.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMAclBlock.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMAclItem.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMCommunities.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMCommunity.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMEnterprise.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMHost.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMHostInform.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMHostName.java com/sun/jmx/snmp/IPAcl/SCCS/s.Node.java com/sun/jmx/snmp/IPAcl/SCCS/s.ParserTokenManager.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMHostTrap.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMInformBlock.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMInformCommunity.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMInformInterestedHost.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMInformItem.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMIpAddress.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMIpMask.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMIpV6Address.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMManagers.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMNetMask.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMNetMaskV6.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMSecurityDefs.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMTrapBlock.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMTrapCommunity.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMTrapInterestedHost.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMTrapItem.java com/sun/jmx/snmp/IPAcl/SCCS/s.JDMTrapNum.java com/sun/jmx/snmp/IPAcl/SCCS/s.JJTParserState.java com/sun/jmx/snmp/IPAcl/SCCS/s.NetMaskImpl.java com/sun/jmx/snmp/IPAcl/SCCS/s.OwnerImpl.java com/sun/jmx/snmp/IPAcl/SCCS/s.ParseError.java com/sun/jmx/snmp/IPAcl/SCCS/s.ParseException.java com/sun/jmx/snmp/IPAcl/SCCS/s.Parser.java com/sun/jmx/snmp/IPAcl/SCCS/s.Parser.jj com/sun/jmx/snmp/IPAcl/SCCS/s.Parser.jjt com/sun/jmx/snmp/IPAcl/SCCS/s.ParserConstants.java com/sun/jmx/snmp/IPAcl/SCCS/s.TokenMgrError.java com/sun/jmx/snmp/IPAcl/SCCS/s.ParserTreeConstants.java com/sun/jmx/snmp/IPAcl/SCCS/s.PermissionImpl.java com/sun/jmx/snmp/IPAcl/SCCS/s.PrincipalImpl.java com/sun/jmx/snmp/IPAcl/SCCS/s.README.update com/sun/jmx/snmp/IPAcl/SCCS/s.SimpleNode.java com/sun/jmx/snmp/IPAcl/SCCS/s.SnmpAcl.java com/sun/jmx/snmp/IPAcl/SCCS/s.Token.java com/sun/jmx/snmp/IPAcl/SCCS/s.package.html com/sun/jmx/snmp/IPAcl/JDMInformInterestedHost.java com/sun/jmx/snmp/IPAcl/ASCII_CharStream.README com/sun/jmx/snmp/IPAcl/ASCII_CharStream.java com/sun/jmx/snmp/IPAcl/AclEntryImpl.java com/sun/jmx/snmp/IPAcl/AclImpl.java com/sun/jmx/snmp/IPAcl/GroupImpl.java com/sun/jmx/snmp/IPAcl/Host.java com/sun/jmx/snmp/IPAcl/JDMAccess.java com/sun/jmx/snmp/IPAcl/JDMAclBlock.java com/sun/jmx/snmp/IPAcl/JDMAclItem.java com/sun/jmx/snmp/IPAcl/JDMCommunities.java com/sun/jmx/snmp/IPAcl/JDMCommunity.java com/sun/jmx/snmp/IPAcl/JDMEnterprise.java com/sun/jmx/snmp/IPAcl/JDMHost.java com/sun/jmx/snmp/IPAcl/JDMHostInform.java com/sun/jmx/snmp/IPAcl/JDMHostName.java com/sun/jmx/snmp/IPAcl/JDMHostTrap.java com/sun/jmx/snmp/IPAcl/JDMInformBlock.java com/sun/jmx/snmp/IPAcl/JDMInformCommunity.java com/sun/jmx/snmp/IPAcl/JDMSecurityDefs.java com/sun/jmx/snmp/IPAcl/JDMInformItem.java com/sun/jmx/snmp/IPAcl/JDMIpAddress.java com/sun/jmx/snmp/IPAcl/JDMIpMask.java com/sun/jmx/snmp/IPAcl/JDMIpV6Address.java com/sun/jmx/snmp/IPAcl/JDMManagers.java com/sun/jmx/snmp/IPAcl/JDMNetMask.java com/sun/jmx/snmp/IPAcl/JDMNetMaskV6.java com/sun/jmx/snmp/IPAcl/JDMTrapInterestedHost.java com/sun/jmx/snmp/IPAcl/JDMTrapBlock.java com/sun/jmx/snmp/IPAcl/JDMTrapCommunity.java com/sun/jmx/snmp/IPAcl/JDMTrapItem.java com/sun/jmx/snmp/IPAcl/JDMTrapNum.java com/sun/jmx/snmp/IPAcl/JJTParserState.java com/sun/jmx/snmp/IPAcl/TokenMgrError.java com/sun/jmx/snmp/IPAcl/README.update com/sun/jmx/snmp/IPAcl/NetMaskImpl.java com/sun/jmx/snmp/IPAcl/Node.java com/sun/jmx/snmp/IPAcl/OwnerImpl.java com/sun/jmx/snmp/IPAcl/ParseError.java com/sun/jmx/snmp/IPAcl/ParseException.java com/sun/jmx/snmp/IPAcl/Parser.java com/sun/jmx/snmp/IPAcl/Parser.jj com/sun/jmx/snmp/IPAcl/Parser.jjt com/sun/jmx/snmp/IPAcl/ParserConstants.java com/sun/jmx/snmp/IPAcl/ParserTokenManager.java com/sun/jmx/snmp/IPAcl/ParserTreeConstants.java com/sun/jmx/snmp/IPAcl/PermissionImpl.java com/sun/jmx/snmp/IPAcl/PrincipalImpl.java com/sun/jmx/snmp/IPAcl/SimpleNode.java com/sun/jmx/snmp/IPAcl/SnmpAcl.java com/sun/jmx/snmp/IPAcl/Token.java com/sun/jmx/snmp/IPAcl/package.html com/sun/jmx/snmp/SCCS com/sun/jmx/snmp/SCCS/s.EnumRowStatus.java com/sun/jmx/snmp/SCCS/s.BerDecoder.java com/sun/jmx/snmp/SCCS/s.BerEncoder.java com/sun/jmx/snmp/SCCS/s.BerException.java com/sun/jmx/snmp/SCCS/s.Enumerated.java com/sun/jmx/snmp/SCCS/s.InetAddressAcl.java com/sun/jmx/snmp/SCCS/s.ServiceName.java com/sun/jmx/snmp/SCCS/s.SnmpAckPdu.java com/sun/jmx/snmp/SCCS/s.SnmpCounter.java com/sun/jmx/snmp/SCCS/s.SnmpEngine.java com/sun/jmx/snmp/SCCS/s.SnmpBadSecurityLevelException.java com/sun/jmx/snmp/SCCS/s.SnmpCounter64.java com/sun/jmx/snmp/SCCS/s.SnmpDataTypeEnums.java com/sun/jmx/snmp/SCCS/s.SnmpDefinitions.java com/sun/jmx/snmp/SCCS/s.SnmpUnknownAccContrModelException.java com/sun/jmx/snmp/SCCS/s.SnmpEngineFactory.java com/sun/jmx/snmp/SCCS/s.SnmpEngineId.java com/sun/jmx/snmp/SCCS/s.SnmpEngineParameters.java com/sun/jmx/snmp/SCCS/s.SnmpGauge.java com/sun/jmx/snmp/SCCS/s.SnmpInt.java com/sun/jmx/snmp/SCCS/s.SnmpIpAddress.java com/sun/jmx/snmp/SCCS/s.SnmpMessage.java com/sun/jmx/snmp/SCCS/s.SnmpMsg.java com/sun/jmx/snmp/SCCS/s.SnmpNull.java com/sun/jmx/snmp/SCCS/s.SnmpOid.java com/sun/jmx/snmp/SCCS/s.SnmpOidDatabase.java com/sun/jmx/snmp/SCCS/s.SnmpOidDatabaseSupport.java com/sun/jmx/snmp/SCCS/s.SnmpOidRecord.java com/sun/jmx/snmp/SCCS/s.SnmpOidTable.java com/sun/jmx/snmp/SCCS/s.SnmpOidTableSupport.java com/sun/jmx/snmp/SCCS/s.SnmpOpaque.java com/sun/jmx/snmp/SCCS/s.SnmpParameters.java com/sun/jmx/snmp/SCCS/s.SnmpParams.java com/sun/jmx/snmp/SCCS/s.SnmpPdu.java com/sun/jmx/snmp/SCCS/s.SnmpPduBulk.java com/sun/jmx/snmp/SCCS/s.SnmpPduBulkType.java com/sun/jmx/snmp/SCCS/s.SnmpPduFactory.java com/sun/jmx/snmp/SCCS/s.SnmpPduFactoryBER.java com/sun/jmx/snmp/SCCS/s.SnmpPduPacket.java com/sun/jmx/snmp/SCCS/s.SnmpPduRequest.java com/sun/jmx/snmp/SCCS/s.SnmpPduRequestType.java com/sun/jmx/snmp/SCCS/s.SnmpPduTrap.java com/sun/jmx/snmp/SCCS/s.SnmpPeer.java com/sun/jmx/snmp/SCCS/s.SnmpScopedPduBulk.java com/sun/jmx/snmp/SCCS/s.SnmpScopedPduPacket.java com/sun/jmx/snmp/SCCS/s.SnmpScopedPduRequest.java com/sun/jmx/snmp/SCCS/s.SnmpSecurityException.java com/sun/jmx/snmp/SCCS/s.SnmpString.java com/sun/jmx/snmp/SCCS/s.SnmpSecurityParameters.java com/sun/jmx/snmp/SCCS/s.SnmpStatusException.java com/sun/jmx/snmp/SCCS/s.SnmpStringFixed.java com/sun/jmx/snmp/SCCS/s.SnmpTimeticks.java com/sun/jmx/snmp/SCCS/s.SnmpTooBigException.java com/sun/jmx/snmp/SCCS/s.SnmpUnknownMsgProcModelException.java com/sun/jmx/snmp/SCCS/s.SnmpUnknownModelException.java com/sun/jmx/snmp/SCCS/s.SnmpUnknownModelLcdException.java com/sun/jmx/snmp/SCCS/s.UserAcl.java com/sun/jmx/snmp/SCCS/s.SnmpUnknownSecModelException.java com/sun/jmx/snmp/SCCS/s.SnmpUnknownSubSystemException.java com/sun/jmx/snmp/SCCS/s.SnmpUnsignedInt.java com/sun/jmx/snmp/SCCS/s.SnmpUsmKeyHandler.java com/sun/jmx/snmp/SCCS/s.SnmpV3Message.java com/sun/jmx/snmp/SCCS/s.SnmpValue.java com/sun/jmx/snmp/SCCS/s.SnmpVarBind.java com/sun/jmx/snmp/SCCS/s.SnmpVarBindList.java com/sun/jmx/snmp/SCCS/s.ThreadContext.java com/sun/jmx/snmp/SCCS/s.Timestamp.java com/sun/jmx/snmp/SCCS/s.package.html com/sun/jmx/snmp/agent com/sun/jmx/snmp/agent/SCCS com/sun/jmx/snmp/agent/SCCS/s.SnmpEntryOid.java com/sun/jmx/snmp/agent/SCCS/s.SnmpIndex.java com/sun/jmx/snmp/agent/SCCS/s.SnmpErrorHandlerAgent.java com/sun/jmx/snmp/agent/SCCS/s.SnmpGenericMetaServer.java com/sun/jmx/snmp/agent/SCCS/s.SnmpGenericObjectServer.java com/sun/jmx/snmp/agent/SCCS/s.SnmpMib.java com/sun/jmx/snmp/agent/SCCS/s.SnmpMibAgent.java com/sun/jmx/snmp/agent/SCCS/s.SnmpMibAgentMBean.java com/sun/jmx/snmp/agent/SCCS/s.SnmpMibEntry.java com/sun/jmx/snmp/agent/SCCS/s.SnmpMibGroup.java com/sun/jmx/snmp/agent/SCCS/s.SnmpMibHandler.java com/sun/jmx/snmp/agent/SCCS/s.SnmpMibNode.java com/sun/jmx/snmp/agent/SCCS/s.SnmpMibOid.java com/sun/jmx/snmp/agent/SCCS/s.SnmpMibRequest.java com/sun/jmx/snmp/agent/SCCS/s.SnmpTableEntryNotification.java com/sun/jmx/snmp/agent/SCCS/s.SnmpMibRequestImpl.java com/sun/jmx/snmp/agent/SCCS/s.SnmpMibSubRequest.java com/sun/jmx/snmp/agent/SCCS/s.SnmpMibTable.java com/sun/jmx/snmp/agent/SCCS/s.SnmpRequestTree.java com/sun/jmx/snmp/agent/SCCS/s.SnmpStandardMetaServer.java com/sun/jmx/snmp/agent/SCCS/s.SnmpStandardObjectServer.java com/sun/jmx/snmp/agent/SCCS/s.SnmpTableCallbackHandler.java com/sun/jmx/snmp/agent/SCCS/s.SnmpTableEntryFactory.java com/sun/jmx/snmp/agent/SCCS/s.SnmpUserDataFactory.java com/sun/jmx/snmp/agent/SCCS/s.SnmpTableSupport.java com/sun/jmx/snmp/agent/SCCS/s.package.html com/sun/jmx/snmp/agent/SnmpErrorHandlerAgent.java com/sun/jmx/snmp/agent/SnmpEntryOid.java com/sun/jmx/snmp/agent/SnmpGenericObjectServer.java com/sun/jmx/snmp/agent/SnmpGenericMetaServer.java com/sun/jmx/snmp/agent/SnmpMibAgentMBean.java com/sun/jmx/snmp/agent/SnmpIndex.java com/sun/jmx/snmp/agent/SnmpMib.java com/sun/jmx/snmp/agent/SnmpMibAgent.java com/sun/jmx/snmp/agent/SnmpMibEntry.java com/sun/jmx/snmp/agent/SnmpMibGroup.java com/sun/jmx/snmp/agent/SnmpMibHandler.java com/sun/jmx/snmp/agent/SnmpMibNode.java com/sun/jmx/snmp/agent/SnmpMibOid.java com/sun/jmx/snmp/agent/SnmpMibRequest.java com/sun/jmx/snmp/agent/package.html com/sun/jmx/snmp/agent/SnmpMibRequestImpl.java com/sun/jmx/snmp/agent/SnmpMibSubRequest.java com/sun/jmx/snmp/agent/SnmpMibTable.java com/sun/jmx/snmp/agent/SnmpRequestTree.java com/sun/jmx/snmp/agent/SnmpStandardMetaServer.java com/sun/jmx/snmp/agent/SnmpStandardObjectServer.java com/sun/jmx/snmp/agent/SnmpTableCallbackHandler.java com/sun/jmx/snmp/agent/SnmpTableEntryFactory.java com/sun/jmx/snmp/agent/SnmpTableEntryNotification.java com/sun/jmx/snmp/agent/SnmpTableSupport.java com/sun/jmx/snmp/agent/SnmpUserDataFactory.java com/sun/jmx/snmp/daemon com/sun/jmx/snmp/daemon/SCCS com/sun/jmx/snmp/daemon/SCCS/s.CommunicationException.java com/sun/jmx/snmp/daemon/SCCS/s.ClientHandler.java com/sun/jmx/snmp/daemon/SCCS/s.CommunicatorServerMBean.java com/sun/jmx/snmp/daemon/SCCS/s.CommunicatorServer.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpAdaptorServer.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpAdaptorServerMBean.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpInformHandler.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpInformRequest.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpMibTree.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpQManager.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpRequestCounter.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpRequestHandler.java com/sun/jmx/snmp/daemon/SCCS/s.package.html com/sun/jmx/snmp/daemon/SCCS/s.SnmpResponseHandler.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpSendServer.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpSession.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpSocket.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpSubBulkRequestHandler.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpSubNextRequestHandler.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpSubRequestHandler.java com/sun/jmx/snmp/daemon/SCCS/s.SnmpTimerServer.java com/sun/jmx/snmp/daemon/CommunicationException.java com/sun/jmx/snmp/daemon/ClientHandler.java com/sun/jmx/snmp/daemon/CommunicatorServerMBean.java com/sun/jmx/snmp/daemon/CommunicatorServer.java com/sun/jmx/snmp/daemon/SnmpAdaptorServerMBean.java com/sun/jmx/snmp/daemon/SnmpAdaptorServer.java com/sun/jmx/snmp/daemon/SnmpInformHandler.java com/sun/jmx/snmp/daemon/SnmpInformRequest.java com/sun/jmx/snmp/daemon/SnmpMibTree.java com/sun/jmx/snmp/daemon/SnmpQManager.java com/sun/jmx/snmp/daemon/SnmpRequestCounter.java com/sun/jmx/snmp/daemon/SnmpRequestHandler.java com/sun/jmx/snmp/daemon/SnmpResponseHandler.java com/sun/jmx/snmp/daemon/SnmpSendServer.java com/sun/jmx/snmp/daemon/SnmpSession.java com/sun/jmx/snmp/daemon/SnmpSocket.java com/sun/jmx/snmp/daemon/SnmpSubBulkRequestHandler.java com/sun/jmx/snmp/daemon/SnmpSubNextRequestHandler.java com/sun/jmx/snmp/daemon/SnmpSubRequestHandler.java com/sun/jmx/snmp/daemon/SnmpTimerServer.java com/sun/jmx/snmp/daemon/package.html com/sun/jmx/snmp/defaults com/sun/jmx/snmp/defaults/SCCS com/sun/jmx/snmp/defaults/SCCS/s.SnmpProperties.java com/sun/jmx/snmp/defaults/SCCS/s.DefaultPaths.java com/sun/jmx/snmp/defaults/SCCS/s.package.html com/sun/jmx/snmp/defaults/DefaultPaths.java com/sun/jmx/snmp/defaults/SnmpProperties.java com/sun/jmx/snmp/defaults/package.html com/sun/jmx/snmp/internal com/sun/jmx/snmp/internal/SCCS com/sun/jmx/snmp/internal/SCCS/s.SnmpAccessControlSubSystem.java com/sun/jmx/snmp/internal/SCCS/s.SnmpAccessControlModel.java com/sun/jmx/snmp/internal/SCCS/s.SnmpMsgProcessingModel.java com/sun/jmx/snmp/internal/SCCS/s.SnmpDecryptedPdu.java com/sun/jmx/snmp/internal/SCCS/s.SnmpEngineImpl.java com/sun/jmx/snmp/internal/SCCS/s.SnmpIncomingRequest.java com/sun/jmx/snmp/internal/SCCS/s.SnmpIncomingResponse.java com/sun/jmx/snmp/internal/SCCS/s.SnmpLcd.java com/sun/jmx/snmp/internal/SCCS/s.SnmpModel.java com/sun/jmx/snmp/internal/SCCS/s.SnmpModelLcd.java com/sun/jmx/snmp/internal/SCCS/s.SnmpMsgProcessingSubSystem.java com/sun/jmx/snmp/internal/SCCS/s.SnmpOutgoingRequest.java com/sun/jmx/snmp/internal/SCCS/s.SnmpSecurityCache.java com/sun/jmx/snmp/internal/SCCS/s.SnmpSubSystem.java com/sun/jmx/snmp/internal/SCCS/s.SnmpSecurityModel.java com/sun/jmx/snmp/internal/SCCS/s.SnmpSecuritySubSystem.java com/sun/jmx/snmp/internal/SCCS/s.SnmpTools.java com/sun/jmx/snmp/internal/SCCS/s.package.html com/sun/jmx/snmp/internal/SnmpAccessControlSubSystem.java com/sun/jmx/snmp/internal/SnmpAccessControlModel.java com/sun/jmx/snmp/internal/SnmpMsgProcessingSubSystem.java com/sun/jmx/snmp/internal/SnmpDecryptedPdu.java com/sun/jmx/snmp/internal/SnmpEngineImpl.java com/sun/jmx/snmp/internal/SnmpIncomingRequest.java com/sun/jmx/snmp/internal/SnmpIncomingResponse.java com/sun/jmx/snmp/internal/SnmpLcd.java com/sun/jmx/snmp/internal/SnmpModel.java com/sun/jmx/snmp/internal/SnmpModelLcd.java com/sun/jmx/snmp/internal/SnmpMsgProcessingModel.java com/sun/jmx/snmp/internal/SnmpOutgoingRequest.java com/sun/jmx/snmp/internal/SnmpSecurityCache.java com/sun/jmx/snmp/internal/SnmpSecurityModel.java com/sun/jmx/snmp/internal/SnmpSecuritySubSystem.java com/sun/jmx/snmp/internal/SnmpSubSystem.java com/sun/jmx/snmp/internal/SnmpTools.java com/sun/jmx/snmp/internal/package.html com/sun/jmx/snmp/mpm com/sun/jmx/snmp/mpm/SCCS com/sun/jmx/snmp/mpm/SCCS/s.SnmpMsgTranslator.java com/sun/jmx/snmp/mpm/SCCS/s.package.html com/sun/jmx/snmp/mpm/SnmpMsgTranslator.java com/sun/jmx/snmp/mpm/package.html com/sun/jmx/snmp/tasks com/sun/jmx/snmp/tasks/SCCS com/sun/jmx/snmp/tasks/SCCS/s.TaskServer.java com/sun/jmx/snmp/tasks/SCCS/s.Task.java com/sun/jmx/snmp/tasks/SCCS/s.ThreadService.java com/sun/jmx/snmp/tasks/SCCS/s.package.html com/sun/jmx/snmp/tasks/TaskServer.java com/sun/jmx/snmp/tasks/Task.java com/sun/jmx/snmp/tasks/ThreadService.java com/sun/jmx/snmp/tasks/package.html com/sun/jmx/snmp/BerException.java com/sun/jmx/snmp/BerDecoder.java com/sun/jmx/snmp/BerEncoder.java com/sun/jmx/snmp/EnumRowStatus.java com/sun/jmx/snmp/Enumerated.java com/sun/jmx/snmp/InetAddressAcl.java com/sun/jmx/snmp/ServiceName.java com/sun/jmx/snmp/SnmpAckPdu.java com/sun/jmx/snmp/SnmpCounter.java com/sun/jmx/snmp/SnmpCounter64.java com/sun/jmx/snmp/SnmpBadSecurityLevelException.java com/sun/jmx/snmp/SnmpUnknownAccContrModelException.java com/sun/jmx/snmp/SnmpDataTypeEnums.java com/sun/jmx/snmp/SnmpDefinitions.java com/sun/jmx/snmp/SnmpEngine.java com/sun/jmx/snmp/SnmpEngineFactory.java com/sun/jmx/snmp/SnmpEngineId.java com/sun/jmx/snmp/SnmpEngineParameters.java com/sun/jmx/snmp/SnmpGauge.java com/sun/jmx/snmp/SnmpInt.java com/sun/jmx/snmp/SnmpIpAddress.java com/sun/jmx/snmp/SnmpMessage.java com/sun/jmx/snmp/SnmpMsg.java com/sun/jmx/snmp/SnmpNull.java com/sun/jmx/snmp/SnmpOid.java com/sun/jmx/snmp/SnmpOidDatabase.java com/sun/jmx/snmp/SnmpOidDatabaseSupport.java com/sun/jmx/snmp/SnmpOidRecord.java com/sun/jmx/snmp/SnmpOidTable.java com/sun/jmx/snmp/SnmpOpaque.java com/sun/jmx/snmp/SnmpOidTableSupport.java com/sun/jmx/snmp/SnmpParameters.java com/sun/jmx/snmp/SnmpParams.java com/sun/jmx/snmp/SnmpPdu.java com/sun/jmx/snmp/SnmpPduBulk.java com/sun/jmx/snmp/SnmpPduBulkType.java com/sun/jmx/snmp/SnmpPduFactory.java com/sun/jmx/snmp/SnmpPduFactoryBER.java com/sun/jmx/snmp/SnmpPduPacket.java com/sun/jmx/snmp/SnmpPduRequest.java com/sun/jmx/snmp/SnmpPduRequestType.java com/sun/jmx/snmp/SnmpPduTrap.java com/sun/jmx/snmp/SnmpPeer.java com/sun/jmx/snmp/SnmpScopedPduBulk.java com/sun/jmx/snmp/SnmpScopedPduPacket.java com/sun/jmx/snmp/SnmpScopedPduRequest.java com/sun/jmx/snmp/SnmpSecurityException.java com/sun/jmx/snmp/SnmpSecurityParameters.java com/sun/jmx/snmp/SnmpStatusException.java com/sun/jmx/snmp/SnmpString.java com/sun/jmx/snmp/SnmpStringFixed.java com/sun/jmx/snmp/SnmpTimeticks.java com/sun/jmx/snmp/SnmpTooBigException.java com/sun/jmx/snmp/SnmpUnknownModelLcdException.java com/sun/jmx/snmp/SnmpUnknownModelException.java com/sun/jmx/snmp/SnmpValue.java com/sun/jmx/snmp/SnmpUnknownMsgProcModelException.java com/sun/jmx/snmp/SnmpUnknownSecModelException.java com/sun/jmx/snmp/SnmpUnknownSubSystemException.java com/sun/jmx/snmp/SnmpUnsignedInt.java com/sun/jmx/snmp/SnmpUsmKeyHandler.java com/sun/jmx/snmp/SnmpV3Message.java com/sun/jmx/snmp/SnmpVarBind.java com/sun/jmx/snmp/SnmpVarBindList.java com/sun/jmx/snmp/ThreadContext.java com/sun/jmx/snmp/Timestamp.java com/sun/jmx/snmp/UserAcl.java com/sun/jmx/snmp/package.html com/sun/jmx/trace com/sun/jmx/trace/SCCS com/sun/jmx/trace/SCCS/s.TraceDestination.java com/sun/jmx/trace/SCCS/s.Trace.java com/sun/jmx/trace/SCCS/s.TraceImplementation.java com/sun/jmx/trace/SCCS/s.TraceManager.java com/sun/jmx/trace/SCCS/s.TraceTags.java com/sun/jmx/trace/SCCS/s.logging.properties com/sun/jmx/trace/SCCS/s.package.html com/sun/jmx/trace/Trace.java com/sun/jmx/trace/TraceManager.java com/sun/jmx/trace/TraceDestination.java com/sun/jmx/trace/TraceImplementation.java com/sun/jmx/trace/TraceTags.java com/sun/jmx/trace/logging.properties com/sun/jmx/trace/package.html com/sun/jndi com/sun/jndi/cosnaming com/sun/jndi/cosnaming/SCCS com/sun/jndi/cosnaming/SCCS/s.CNBindingEnumeration.java com/sun/jndi/cosnaming/SCCS/s.CNCtx.java com/sun/jndi/cosnaming/SCCS/s.CNCtxFactory.java com/sun/jndi/cosnaming/SCCS/s.CNNameParser.java com/sun/jndi/cosnaming/SCCS/s.CorbanameUrl.java com/sun/jndi/cosnaming/SCCS/s.ExceptionMapper.java com/sun/jndi/cosnaming/SCCS/s.IiopUrl.java com/sun/jndi/cosnaming/SCCS/s.RemoteToCorba.java com/sun/jndi/cosnaming/SCCS/s.jndiprovider.properties com/sun/jndi/cosnaming/CNBindingEnumeration.java com/sun/jndi/cosnaming/CNCtx.java com/sun/jndi/cosnaming/CNCtxFactory.java com/sun/jndi/cosnaming/CNNameParser.java com/sun/jndi/cosnaming/CorbanameUrl.java com/sun/jndi/cosnaming/ExceptionMapper.java com/sun/jndi/cosnaming/IiopUrl.java com/sun/jndi/cosnaming/RemoteToCorba.java com/sun/jndi/cosnaming/jndiprovider.properties com/sun/jndi/dns com/sun/jndi/dns/SCCS com/sun/jndi/dns/SCCS/s.DnsContextFactory.java com/sun/jndi/dns/SCCS/s.DnsClient.java com/sun/jndi/dns/SCCS/s.DnsContext.java com/sun/jndi/dns/SCCS/s.DnsNameParser.java com/sun/jndi/dns/SCCS/s.DnsName.java com/sun/jndi/dns/SCCS/s.ResourceRecord.java com/sun/jndi/dns/SCCS/s.DnsUrl.java com/sun/jndi/dns/SCCS/s.Header.java com/sun/jndi/dns/SCCS/s.NameNode.java com/sun/jndi/dns/SCCS/s.Resolver.java com/sun/jndi/dns/SCCS/s.ResourceRecords.java com/sun/jndi/dns/SCCS/s.ZoneNode.java com/sun/jndi/dns/DnsContextFactory.java com/sun/jndi/dns/DnsClient.java com/sun/jndi/dns/DnsContext.java com/sun/jndi/dns/DnsNameParser.java com/sun/jndi/dns/DnsName.java com/sun/jndi/dns/ResourceRecord.java com/sun/jndi/dns/DnsUrl.java com/sun/jndi/dns/Header.java com/sun/jndi/dns/NameNode.java com/sun/jndi/dns/Resolver.java com/sun/jndi/dns/ResourceRecords.java com/sun/jndi/dns/ZoneNode.java com/sun/jndi/ldap com/sun/jndi/ldap/SCCS com/sun/jndi/ldap/SCCS/s.BindingWithControls.java com/sun/jndi/ldap/SCCS/s.BasicControl.java com/sun/jndi/ldap/SCCS/s.Ber.java com/sun/jndi/ldap/SCCS/s.BerDecoder.java com/sun/jndi/ldap/SCCS/s.BerEncoder.java com/sun/jndi/ldap/SCCS/s.Connection.java com/sun/jndi/ldap/SCCS/s.ClientId.java com/sun/jndi/ldap/SCCS/s.LdapAttribute.java com/sun/jndi/ldap/SCCS/s.Filter.java com/sun/jndi/ldap/SCCS/s.DefaultResponseControlFactory.java com/sun/jndi/ldap/SCCS/s.DigestClientId.java com/sun/jndi/ldap/SCCS/s.EntryChangeResponseControl.java com/sun/jndi/ldap/SCCS/s.EventQueue.java com/sun/jndi/ldap/SCCS/s.EventSupport.java com/sun/jndi/ldap/SCCS/s.LdapCtxFactory.java com/sun/jndi/ldap/SCCS/s.LdapCtx.java com/sun/jndi/ldap/SCCS/s.LdapBindingEnumeration.java com/sun/jndi/ldap/SCCS/s.LdapClient.java com/sun/jndi/ldap/SCCS/s.LdapClientFactory.java com/sun/jndi/ldap/SCCS/s.LdapNameParser.java com/sun/jndi/ldap/SCCS/s.LdapEntry.java com/sun/jndi/ldap/SCCS/s.LdapName.java com/sun/jndi/ldap/SCCS/s.Obj.java com/sun/jndi/ldap/SCCS/s.VersionHelper12.java com/sun/jndi/ldap/SCCS/s.LdapNamingEnumeration.java com/sun/jndi/ldap/SCCS/s.LdapPoolManager.java com/sun/jndi/ldap/SCCS/s.LdapReferralContext.java com/sun/jndi/ldap/SCCS/s.LdapReferralException.java com/sun/jndi/ldap/SCCS/s.LdapRequest.java com/sun/jndi/ldap/SCCS/s.LdapResult.java com/sun/jndi/ldap/SCCS/s.LdapSchemaCtx.java com/sun/jndi/ldap/SCCS/s.LdapSchemaParser.java com/sun/jndi/ldap/SCCS/s.LdapSearchEnumeration.java com/sun/jndi/ldap/SCCS/s.LdapURL.java com/sun/jndi/ldap/SCCS/s.ManageReferralControl.java com/sun/jndi/ldap/SCCS/s.NameClassPairWithControls.java com/sun/jndi/ldap/SCCS/s.NamingEventNotifier.java com/sun/jndi/ldap/SCCS/s.NotifierArgs.java com/sun/jndi/ldap/SCCS/s.PersistentSearchControl.java com/sun/jndi/ldap/SCCS/s.ReferralEnumeration.java com/sun/jndi/ldap/SCCS/s.SearchResultWithControls.java com/sun/jndi/ldap/SCCS/s.ServiceLocator.java com/sun/jndi/ldap/SCCS/s.SimpleClientId.java com/sun/jndi/ldap/SCCS/s.UnsolicitedResponseImpl.java com/sun/jndi/ldap/SCCS/s.VersionHelper.java com/sun/jndi/ldap/SCCS/s.jndiprovider.properties com/sun/jndi/ldap/ext com/sun/jndi/ldap/ext/SCCS com/sun/jndi/ldap/ext/SCCS/s.StartTlsResponseImpl.java com/sun/jndi/ldap/ext/StartTlsResponseImpl.java com/sun/jndi/ldap/pool com/sun/jndi/ldap/pool/SCCS com/sun/jndi/ldap/pool/SCCS/s.ConnectionsWeakRef.java com/sun/jndi/ldap/pool/SCCS/s.ConnectionDesc.java com/sun/jndi/ldap/pool/SCCS/s.Connections.java com/sun/jndi/ldap/pool/SCCS/s.ConnectionsRef.java com/sun/jndi/ldap/pool/SCCS/s.PoolCallback.java com/sun/jndi/ldap/pool/SCCS/s.Pool.java com/sun/jndi/ldap/pool/SCCS/s.PooledConnectionFactory.java com/sun/jndi/ldap/pool/SCCS/s.PoolCleaner.java com/sun/jndi/ldap/pool/SCCS/s.PooledConnection.java com/sun/jndi/ldap/pool/ConnectionsWeakRef.java com/sun/jndi/ldap/pool/ConnectionDesc.java com/sun/jndi/ldap/pool/Connections.java com/sun/jndi/ldap/pool/ConnectionsRef.java com/sun/jndi/ldap/pool/PoolCallback.java com/sun/jndi/ldap/pool/Pool.java com/sun/jndi/ldap/pool/PooledConnectionFactory.java com/sun/jndi/ldap/pool/PoolCleaner.java com/sun/jndi/ldap/pool/PooledConnection.java com/sun/jndi/ldap/sasl com/sun/jndi/ldap/sasl/SCCS com/sun/jndi/ldap/sasl/SCCS/s.DefaultCallbackHandler.java com/sun/jndi/ldap/sasl/SCCS/s.LdapSasl.java com/sun/jndi/ldap/sasl/SCCS/s.SaslInputStream.java com/sun/jndi/ldap/sasl/SCCS/s.SaslOutputStream.java com/sun/jndi/ldap/sasl/DefaultCallbackHandler.java com/sun/jndi/ldap/sasl/LdapSasl.java com/sun/jndi/ldap/sasl/SaslInputStream.java com/sun/jndi/ldap/sasl/SaslOutputStream.java com/sun/jndi/ldap/BindingWithControls.java com/sun/jndi/ldap/BasicControl.java com/sun/jndi/ldap/Ber.java com/sun/jndi/ldap/BerDecoder.java com/sun/jndi/ldap/BerEncoder.java com/sun/jndi/ldap/DigestClientId.java com/sun/jndi/ldap/ClientId.java com/sun/jndi/ldap/Connection.java com/sun/jndi/ldap/Filter.java com/sun/jndi/ldap/LdapBindingEnumeration.java com/sun/jndi/ldap/DefaultResponseControlFactory.java com/sun/jndi/ldap/EntryChangeResponseControl.java com/sun/jndi/ldap/EventQueue.java com/sun/jndi/ldap/EventSupport.java com/sun/jndi/ldap/LdapAttribute.java com/sun/jndi/ldap/LdapClientFactory.java com/sun/jndi/ldap/LdapClient.java com/sun/jndi/ldap/LdapCtxFactory.java com/sun/jndi/ldap/LdapCtx.java com/sun/jndi/ldap/LdapNamingEnumeration.java com/sun/jndi/ldap/LdapEntry.java com/sun/jndi/ldap/LdapName.java com/sun/jndi/ldap/LdapNameParser.java com/sun/jndi/ldap/LdapReferralContext.java com/sun/jndi/ldap/LdapPoolManager.java com/sun/jndi/ldap/ServiceLocator.java com/sun/jndi/ldap/Obj.java com/sun/jndi/ldap/LdapReferralException.java com/sun/jndi/ldap/LdapRequest.java com/sun/jndi/ldap/LdapResult.java com/sun/jndi/ldap/LdapSchemaCtx.java com/sun/jndi/ldap/LdapSchemaParser.java com/sun/jndi/ldap/LdapURL.java com/sun/jndi/ldap/LdapSearchEnumeration.java com/sun/jndi/ldap/ManageReferralControl.java com/sun/jndi/ldap/NameClassPairWithControls.java com/sun/jndi/ldap/NamingEventNotifier.java com/sun/jndi/ldap/NotifierArgs.java com/sun/jndi/ldap/PersistentSearchControl.java com/sun/jndi/ldap/ReferralEnumeration.java com/sun/jndi/ldap/SearchResultWithControls.java com/sun/jndi/ldap/SimpleClientId.java com/sun/jndi/ldap/UnsolicitedResponseImpl.java com/sun/jndi/ldap/VersionHelper.java com/sun/jndi/ldap/VersionHelper12.java com/sun/jndi/ldap/jndiprovider.properties com/sun/jndi/rmi com/sun/jndi/rmi/registry com/sun/jndi/rmi/registry/SCCS com/sun/jndi/rmi/registry/SCCS/s.RegistryContextFactory.java com/sun/jndi/rmi/registry/SCCS/s.ReferenceWrapper.java com/sun/jndi/rmi/registry/SCCS/s.RegistryContext.java com/sun/jndi/rmi/registry/SCCS/s.RemoteReference.java com/sun/jndi/rmi/registry/RegistryContextFactory.java com/sun/jndi/rmi/registry/ReferenceWrapper.java com/sun/jndi/rmi/registry/RegistryContext.java com/sun/jndi/rmi/registry/RemoteReference.java com/sun/jndi/toolkit com/sun/jndi/toolkit/corba com/sun/jndi/toolkit/corba/SCCS com/sun/jndi/toolkit/corba/SCCS/s.CorbaUtils.java com/sun/jndi/toolkit/corba/CorbaUtils.java com/sun/jndi/toolkit/ctx com/sun/jndi/toolkit/ctx/SCCS com/sun/jndi/toolkit/ctx/SCCS/s.ComponentDirContext.java com/sun/jndi/toolkit/ctx/SCCS/s.AtomicContext.java com/sun/jndi/toolkit/ctx/SCCS/s.AtomicDirContext.java com/sun/jndi/toolkit/ctx/SCCS/s.ComponentContext.java com/sun/jndi/toolkit/ctx/SCCS/s.Continuation.java com/sun/jndi/toolkit/ctx/SCCS/s.HeadTail.java com/sun/jndi/toolkit/ctx/SCCS/s.StringHeadTail.java com/sun/jndi/toolkit/ctx/SCCS/s.PartialCompositeContext.java com/sun/jndi/toolkit/ctx/SCCS/s.PartialCompositeDirContext.java com/sun/jndi/toolkit/ctx/AtomicDirContext.java com/sun/jndi/toolkit/ctx/AtomicContext.java com/sun/jndi/toolkit/ctx/PartialCompositeContext.java com/sun/jndi/toolkit/ctx/ComponentContext.java com/sun/jndi/toolkit/ctx/ComponentDirContext.java com/sun/jndi/toolkit/ctx/Continuation.java com/sun/jndi/toolkit/ctx/HeadTail.java com/sun/jndi/toolkit/ctx/PartialCompositeDirContext.java com/sun/jndi/toolkit/ctx/StringHeadTail.java com/sun/jndi/toolkit/dir com/sun/jndi/toolkit/dir/SCCS com/sun/jndi/toolkit/dir/SCCS/s.ContainmentFilter.java com/sun/jndi/toolkit/dir/SCCS/s.AttrFilter.java com/sun/jndi/toolkit/dir/SCCS/s.LazySearchEnumerationImpl.java com/sun/jndi/toolkit/dir/SCCS/s.ContextEnumerator.java com/sun/jndi/toolkit/dir/SCCS/s.DirSearch.java com/sun/jndi/toolkit/dir/SCCS/s.HierMemDirCtx.java com/sun/jndi/toolkit/dir/SCCS/s.SearchFilter.java com/sun/jndi/toolkit/dir/ContainmentFilter.java com/sun/jndi/toolkit/dir/AttrFilter.java com/sun/jndi/toolkit/dir/LazySearchEnumerationImpl.java com/sun/jndi/toolkit/dir/ContextEnumerator.java com/sun/jndi/toolkit/dir/DirSearch.java com/sun/jndi/toolkit/dir/HierMemDirCtx.java com/sun/jndi/toolkit/dir/SearchFilter.java com/sun/jndi/toolkit/url com/sun/jndi/toolkit/url/SCCS com/sun/jndi/toolkit/url/SCCS/s.GenericURLContext.java com/sun/jndi/toolkit/url/SCCS/s.GenericURLDirContext.java com/sun/jndi/toolkit/url/SCCS/s.Uri.java com/sun/jndi/toolkit/url/SCCS/s.UrlUtil.java com/sun/jndi/toolkit/url/GenericURLDirContext.java com/sun/jndi/toolkit/url/GenericURLContext.java com/sun/jndi/toolkit/url/Uri.java com/sun/jndi/toolkit/url/UrlUtil.java com/sun/jndi/url com/sun/jndi/url/corbaname com/sun/jndi/url/corbaname/SCCS com/sun/jndi/url/corbaname/SCCS/s.corbanameURLContextFactory.java com/sun/jndi/url/corbaname/corbanameURLContextFactory.java com/sun/jndi/url/dns com/sun/jndi/url/dns/SCCS com/sun/jndi/url/dns/SCCS/s.dnsURLContextFactory.java com/sun/jndi/url/dns/SCCS/s.dnsURLContext.java com/sun/jndi/url/dns/dnsURLContextFactory.java com/sun/jndi/url/dns/dnsURLContext.java com/sun/jndi/url/iiop com/sun/jndi/url/iiop/SCCS com/sun/jndi/url/iiop/SCCS/s.iiopURLContextFactory.java com/sun/jndi/url/iiop/SCCS/s.iiopURLContext.java com/sun/jndi/url/iiop/iiopURLContextFactory.java com/sun/jndi/url/iiop/iiopURLContext.java com/sun/jndi/url/iiopname com/sun/jndi/url/iiopname/SCCS com/sun/jndi/url/iiopname/SCCS/s.iiopnameURLContextFactory.java com/sun/jndi/url/iiopname/iiopnameURLContextFactory.java com/sun/jndi/url/ldap com/sun/jndi/url/ldap/SCCS com/sun/jndi/url/ldap/SCCS/s.ldapURLContextFactory.java com/sun/jndi/url/ldap/SCCS/s.ldapURLContext.java com/sun/jndi/url/ldap/ldapURLContextFactory.java com/sun/jndi/url/ldap/ldapURLContext.java com/sun/jndi/url/ldaps com/sun/jndi/url/ldaps/SCCS com/sun/jndi/url/ldaps/SCCS/s.ldapsURLContextFactory.java com/sun/jndi/url/ldaps/ldapsURLContextFactory.java com/sun/jndi/url/rmi com/sun/jndi/url/rmi/SCCS com/sun/jndi/url/rmi/SCCS/s.rmiURLContextFactory.java com/sun/jndi/url/rmi/SCCS/s.rmiURLContext.java com/sun/jndi/url/rmi/rmiURLContextFactory.java com/sun/jndi/url/rmi/rmiURLContext.java com/sun/management com/sun/management/SCCS com/sun/management/SCCS/s.UnixOperatingSystemMXBean.java com/sun/management/SCCS/s.GarbageCollectorMXBean.java com/sun/management/SCCS/s.GcInfo.java com/sun/management/SCCS/s.OperatingSystemMXBean.java com/sun/management/SCCS/s.mgmt-overview.html com/sun/management/SCCS/s.package.html com/sun/management/jmx com/sun/management/jmx/SCCS com/sun/management/jmx/SCCS/s.MBeanServerImpl.java com/sun/management/jmx/SCCS/s.Introspector.java com/sun/management/jmx/SCCS/s.JMProperties.java com/sun/management/jmx/SCCS/s.TraceNotification.java com/sun/management/jmx/SCCS/s.ServiceName.java com/sun/management/jmx/SCCS/s.Trace.java com/sun/management/jmx/SCCS/s.TraceFilter.java com/sun/management/jmx/SCCS/s.TraceListener.java com/sun/management/jmx/SCCS/s.package.html com/sun/management/jmx/MBeanServerImpl.java com/sun/management/jmx/Introspector.java com/sun/management/jmx/JMProperties.java com/sun/management/jmx/ServiceName.java com/sun/management/jmx/Trace.java com/sun/management/jmx/TraceFilter.java com/sun/management/jmx/TraceListener.java com/sun/management/jmx/TraceNotification.java com/sun/management/jmx/package.html com/sun/management/UnixOperatingSystemMXBean.java com/sun/management/GarbageCollectorMXBean.java com/sun/management/GcInfo.java com/sun/management/OperatingSystemMXBean.java com/sun/management/mgmt-overview.html com/sun/management/package.html com/sun/media com/sun/media/sound com/sun/media/sound/SCCS com/sun/media/sound/SCCS/s.AbstractMidiDevice.java com/sun/media/sound/SCCS/s.AbstractDataLine.java com/sun/media/sound/SCCS/s.AbstractLine.java com/sun/media/sound/SCCS/s.AbstractMidiDeviceProvider.java com/sun/media/sound/SCCS/s.AbstractMixer.java com/sun/media/sound/SCCS/s.AbstractPlayer.java com/sun/media/sound/SCCS/s.AiffFileFormat.java com/sun/media/sound/SCCS/s.AiffFileReader.java com/sun/media/sound/SCCS/s.AiffFileWriter.java com/sun/media/sound/SCCS/s.AlawCodec.java com/sun/media/sound/SCCS/s.AuFileFormat.java com/sun/media/sound/SCCS/s.AuFileReader.java com/sun/media/sound/SCCS/s.AuFileWriter.java com/sun/media/sound/SCCS/s.AutoClosingClip.java com/sun/media/sound/SCCS/s.DirectAudioDeviceProvider.java com/sun/media/sound/SCCS/s.AutoConnectSequencer.java com/sun/media/sound/SCCS/s.CircularBuffer.java com/sun/media/sound/SCCS/s.DataPusher.java com/sun/media/sound/SCCS/s.DirectAudioDevice.java com/sun/media/sound/SCCS/s.HeadspaceInstrument.java com/sun/media/sound/SCCS/s.EventDispatcher.java com/sun/media/sound/SCCS/s.FastShortMessage.java com/sun/media/sound/SCCS/s.FastSysexMessage.java com/sun/media/sound/SCCS/s.HeadspaceMixerProvider.java com/sun/media/sound/SCCS/s.HeadspaceMixer.java com/sun/media/sound/SCCS/s.HeadspaceSample.java com/sun/media/sound/SCCS/s.HeadspaceSoundbank.java com/sun/media/sound/SCCS/s.HsbParser.java com/sun/media/sound/SCCS/s.JDK13Services.java com/sun/media/sound/SCCS/s.RealTimeSequencerProvider.java com/sun/media/sound/SCCS/s.JSSecurityManager.java com/sun/media/sound/SCCS/s.JavaSoundAudioClip.java com/sun/media/sound/SCCS/s.MidiInDevice.java com/sun/media/sound/SCCS/s.MidiInDeviceProvider.java com/sun/media/sound/SCCS/s.MidiOutDevice.java com/sun/media/sound/SCCS/s.MidiOutDeviceProvider.java com/sun/media/sound/SCCS/s.MidiUtils.java com/sun/media/sound/SCCS/s.MixerClip.java com/sun/media/sound/SCCS/s.MixerMidiChannel.java com/sun/media/sound/SCCS/s.MixerSequencer.java com/sun/media/sound/SCCS/s.MixerSequencerProvider.java com/sun/media/sound/SCCS/s.MixerSourceLine.java com/sun/media/sound/SCCS/s.MixerSynth.java com/sun/media/sound/SCCS/s.MixerSynthProvider.java com/sun/media/sound/SCCS/s.MixerThread.java com/sun/media/sound/SCCS/s.PCMtoPCMCodec.java com/sun/media/sound/SCCS/s.Platform.java com/sun/media/sound/SCCS/s.PortMixer.java com/sun/media/sound/SCCS/s.PortMixerProvider.java com/sun/media/sound/SCCS/s.Printer.java com/sun/media/sound/SCCS/s.RealTimeSequencer.java com/sun/media/sound/SCCS/s.SimpleInputDeviceProvider.java com/sun/media/sound/SCCS/s.ReferenceCountingDevice.java com/sun/media/sound/SCCS/s.RmfFileReader.java com/sun/media/sound/SCCS/s.SimpleInputDevice.java com/sun/media/sound/SCCS/s.StandardMidiFileReader.java com/sun/media/sound/SCCS/s.StandardMidiFileWriter.java com/sun/media/sound/SCCS/s.SunCodec.java com/sun/media/sound/SCCS/s.SunFileReader.java com/sun/media/sound/SCCS/s.SunFileWriter.java com/sun/media/sound/SCCS/s.Toolkit.java com/sun/media/sound/SCCS/s.UlawCodec.java com/sun/media/sound/SCCS/s.WaveFileFormat.java com/sun/media/sound/SCCS/s.WaveFileReader.java com/sun/media/sound/SCCS/s.WaveFileWriter.java com/sun/media/sound/services com/sun/media/sound/services/SCCS com/sun/media/sound/services/SCCS/s.javax.sound.sampled.spi.FormatConversionProvider com/sun/media/sound/services/SCCS/s.javax.sound.midi.spi.MidiDeviceProvider com/sun/media/sound/services/SCCS/s.javax.sound.midi.spi.MidiFileReader com/sun/media/sound/services/SCCS/s.javax.sound.midi.spi.MidiFileWriter com/sun/media/sound/services/SCCS/s.javax.sound.midi.spi.SoundbankReader com/sun/media/sound/services/SCCS/s.javax.sound.sampled.spi.AudioFileReader com/sun/media/sound/services/SCCS/s.javax.sound.sampled.spi.AudioFileWriter com/sun/media/sound/services/SCCS/s.javax.sound.sampled.spi.MixerProvider com/sun/media/sound/services/linux-i586 com/sun/media/sound/services/linux-i586/SCCS com/sun/media/sound/services/linux-i586/SCCS/s.javax.sound.sampled.spi.MixerProvider com/sun/media/sound/services/linux-i586/javax.sound.sampled.spi.MixerProvider com/sun/media/sound/services/windows-i586 com/sun/media/sound/services/windows-i586/SCCS com/sun/media/sound/services/windows-i586/SCCS/s.javax.sound.sampled.spi.MixerProvider com/sun/media/sound/services/windows-i586/javax.sound.sampled.spi.MixerProvider com/sun/media/sound/services/windows-ia64 com/sun/media/sound/services/windows-ia64/SCCS com/sun/media/sound/services/windows-ia64/SCCS/s.javax.sound.sampled.spi.MixerProvider com/sun/media/sound/services/windows-ia64/javax.sound.sampled.spi.MixerProvider com/sun/media/sound/services/javax.sound.midi.spi.MidiDeviceProvider com/sun/media/sound/services/javax.sound.midi.spi.MidiFileReader com/sun/media/sound/services/javax.sound.midi.spi.MidiFileWriter com/sun/media/sound/services/javax.sound.midi.spi.SoundbankReader com/sun/media/sound/services/javax.sound.sampled.spi.AudioFileReader com/sun/media/sound/services/javax.sound.sampled.spi.AudioFileWriter com/sun/media/sound/services/javax.sound.sampled.spi.MixerProvider com/sun/media/sound/services/javax.sound.sampled.spi.FormatConversionProvider com/sun/media/sound/AbstractMidiDeviceProvider.java com/sun/media/sound/AbstractDataLine.java com/sun/media/sound/AbstractLine.java com/sun/media/sound/AbstractMidiDevice.java com/sun/media/sound/AbstractMixer.java com/sun/media/sound/AbstractPlayer.java com/sun/media/sound/AiffFileFormat.java com/sun/media/sound/AiffFileReader.java com/sun/media/sound/AiffFileWriter.java com/sun/media/sound/AlawCodec.java com/sun/media/sound/AuFileFormat.java com/sun/media/sound/AuFileReader.java com/sun/media/sound/AuFileWriter.java com/sun/media/sound/AutoConnectSequencer.java com/sun/media/sound/AutoClosingClip.java com/sun/media/sound/DirectAudioDevice.java com/sun/media/sound/CircularBuffer.java com/sun/media/sound/DataPusher.java com/sun/media/sound/DirectAudioDeviceProvider.java com/sun/media/sound/EventDispatcher.java com/sun/media/sound/FastShortMessage.java com/sun/media/sound/FastSysexMessage.java com/sun/media/sound/HeadspaceInstrument.java com/sun/media/sound/HeadspaceMixer.java com/sun/media/sound/HeadspaceMixerProvider.java com/sun/media/sound/HeadspaceSample.java com/sun/media/sound/HeadspaceSoundbank.java com/sun/media/sound/HsbParser.java com/sun/media/sound/JDK13Services.java com/sun/media/sound/JSSecurityManager.java com/sun/media/sound/RealTimeSequencerProvider.java com/sun/media/sound/JavaSoundAudioClip.java com/sun/media/sound/MidiInDevice.java com/sun/media/sound/MidiInDeviceProvider.java com/sun/media/sound/MidiOutDevice.java com/sun/media/sound/MidiOutDeviceProvider.java com/sun/media/sound/MidiUtils.java com/sun/media/sound/MixerClip.java com/sun/media/sound/MixerMidiChannel.java com/sun/media/sound/MixerSequencer.java com/sun/media/sound/MixerSequencerProvider.java com/sun/media/sound/MixerSourceLine.java com/sun/media/sound/MixerSynth.java com/sun/media/sound/MixerSynthProvider.java com/sun/media/sound/MixerThread.java com/sun/media/sound/PCMtoPCMCodec.java com/sun/media/sound/Platform.java com/sun/media/sound/PortMixer.java com/sun/media/sound/PortMixerProvider.java com/sun/media/sound/Printer.java com/sun/media/sound/RealTimeSequencer.java com/sun/media/sound/ReferenceCountingDevice.java com/sun/media/sound/RmfFileReader.java com/sun/media/sound/SimpleInputDevice.java com/sun/media/sound/SimpleInputDeviceProvider.java com/sun/media/sound/StandardMidiFileReader.java com/sun/media/sound/StandardMidiFileWriter.java com/sun/media/sound/SunCodec.java com/sun/media/sound/SunFileReader.java com/sun/media/sound/SunFileWriter.java com/sun/media/sound/Toolkit.java com/sun/media/sound/UlawCodec.java com/sun/media/sound/WaveFileFormat.java com/sun/media/sound/WaveFileReader.java com/sun/media/sound/WaveFileWriter.java com/sun/mirror com/sun/mirror/SCCS com/sun/mirror/SCCS/s.overview.html com/sun/mirror/apt com/sun/mirror/apt/SCCS com/sun/mirror/apt/SCCS/s.AnnotationProcessorFactory.java com/sun/mirror/apt/SCCS/s.AnnotationProcessor.java com/sun/mirror/apt/SCCS/s.Filer.java com/sun/mirror/apt/SCCS/s.AnnotationProcessorEnvironment.java com/sun/mirror/apt/SCCS/s.AnnotationProcessorListener.java com/sun/mirror/apt/SCCS/s.AnnotationProcessors.java com/sun/mirror/apt/SCCS/s.Messager.java com/sun/mirror/apt/SCCS/s.RoundState.java com/sun/mirror/apt/SCCS/s.RoundCompleteEvent.java com/sun/mirror/apt/SCCS/s.RoundCompleteListener.java com/sun/mirror/apt/SCCS/s.package.html com/sun/mirror/apt/AnnotationProcessorEnvironment.java com/sun/mirror/apt/AnnotationProcessor.java com/sun/mirror/apt/AnnotationProcessorListener.java com/sun/mirror/apt/AnnotationProcessorFactory.java com/sun/mirror/apt/AnnotationProcessors.java com/sun/mirror/apt/Filer.java com/sun/mirror/apt/Messager.java com/sun/mirror/apt/RoundCompleteEvent.java com/sun/mirror/apt/RoundCompleteListener.java com/sun/mirror/apt/RoundState.java com/sun/mirror/apt/package.html com/sun/mirror/declaration com/sun/mirror/declaration/SCCS com/sun/mirror/declaration/SCCS/s.AnnotationMirror.java com/sun/mirror/declaration/SCCS/s.AnnotationValue.java com/sun/mirror/declaration/SCCS/s.AnnotationTypeDeclaration.java com/sun/mirror/declaration/SCCS/s.AnnotationTypeElementDeclaration.java com/sun/mirror/declaration/SCCS/s.ClassDeclaration.java com/sun/mirror/declaration/SCCS/s.ConstructorDeclaration.java com/sun/mirror/declaration/SCCS/s.Declaration.java com/sun/mirror/declaration/SCCS/s.EnumConstantDeclaration.java com/sun/mirror/declaration/SCCS/s.EnumDeclaration.java com/sun/mirror/declaration/SCCS/s.ExecutableDeclaration.java com/sun/mirror/declaration/SCCS/s.FieldDeclaration.java com/sun/mirror/declaration/SCCS/s.InterfaceDeclaration.java com/sun/mirror/declaration/SCCS/s.MemberDeclaration.java com/sun/mirror/declaration/SCCS/s.MethodDeclaration.java com/sun/mirror/declaration/SCCS/s.Modifier.java com/sun/mirror/declaration/SCCS/s.PackageDeclaration.java com/sun/mirror/declaration/SCCS/s.ParameterDeclaration.java com/sun/mirror/declaration/SCCS/s.TypeDeclaration.java com/sun/mirror/declaration/SCCS/s.TypeParameterDeclaration.java com/sun/mirror/declaration/SCCS/s.package.html com/sun/mirror/declaration/AnnotationTypeDeclaration.java com/sun/mirror/declaration/AnnotationMirror.java com/sun/mirror/declaration/AnnotationTypeElementDeclaration.java com/sun/mirror/declaration/AnnotationValue.java com/sun/mirror/declaration/ClassDeclaration.java com/sun/mirror/declaration/ConstructorDeclaration.java com/sun/mirror/declaration/Declaration.java com/sun/mirror/declaration/EnumConstantDeclaration.java com/sun/mirror/declaration/EnumDeclaration.java com/sun/mirror/declaration/ExecutableDeclaration.java com/sun/mirror/declaration/FieldDeclaration.java com/sun/mirror/declaration/InterfaceDeclaration.java com/sun/mirror/declaration/MemberDeclaration.java com/sun/mirror/declaration/MethodDeclaration.java com/sun/mirror/declaration/Modifier.java com/sun/mirror/declaration/PackageDeclaration.java com/sun/mirror/declaration/ParameterDeclaration.java com/sun/mirror/declaration/TypeDeclaration.java com/sun/mirror/declaration/TypeParameterDeclaration.java com/sun/mirror/declaration/package.html com/sun/mirror/type com/sun/mirror/type/SCCS com/sun/mirror/type/SCCS/s.MirroredTypeException.java com/sun/mirror/type/SCCS/s.AnnotationType.java com/sun/mirror/type/SCCS/s.ArrayType.java com/sun/mirror/type/SCCS/s.ClassType.java com/sun/mirror/type/SCCS/s.DeclaredType.java com/sun/mirror/type/SCCS/s.EnumType.java com/sun/mirror/type/SCCS/s.InterfaceType.java com/sun/mirror/type/SCCS/s.MirroredTypesException.java com/sun/mirror/type/SCCS/s.PrimitiveType.java com/sun/mirror/type/SCCS/s.ReferenceType.java com/sun/mirror/type/SCCS/s.TypeMirror.java com/sun/mirror/type/SCCS/s.TypeVariable.java com/sun/mirror/type/SCCS/s.VoidType.java com/sun/mirror/type/SCCS/s.WildcardType.java com/sun/mirror/type/SCCS/s.package.html com/sun/mirror/type/MirroredTypeException.java com/sun/mirror/type/AnnotationType.java com/sun/mirror/type/ArrayType.java com/sun/mirror/type/ClassType.java com/sun/mirror/type/DeclaredType.java com/sun/mirror/type/EnumType.java com/sun/mirror/type/InterfaceType.java com/sun/mirror/type/MirroredTypesException.java com/sun/mirror/type/PrimitiveType.java com/sun/mirror/type/ReferenceType.java com/sun/mirror/type/TypeMirror.java com/sun/mirror/type/TypeVariable.java com/sun/mirror/type/VoidType.java com/sun/mirror/type/WildcardType.java com/sun/mirror/type/package.html com/sun/mirror/util com/sun/mirror/util/SCCS com/sun/mirror/util/SCCS/s.SimpleDeclarationVisitor.java com/sun/mirror/util/SCCS/s.DeclarationFilter.java com/sun/mirror/util/SCCS/s.DeclarationScanner.java com/sun/mirror/util/SCCS/s.DeclarationVisitor.java com/sun/mirror/util/SCCS/s.DeclarationVisitors.java com/sun/mirror/util/SCCS/s.Declarations.java com/sun/mirror/util/SCCS/s.SimpleTypeVisitor.java com/sun/mirror/util/SCCS/s.SourceOrderDeclScanner.java com/sun/mirror/util/SCCS/s.SourcePosition.java com/sun/mirror/util/SCCS/s.TypeVisitor.java com/sun/mirror/util/SCCS/s.Types.java com/sun/mirror/util/SCCS/s.package.html com/sun/mirror/util/DeclarationVisitors.java com/sun/mirror/util/DeclarationFilter.java com/sun/mirror/util/DeclarationScanner.java com/sun/mirror/util/DeclarationVisitor.java com/sun/mirror/util/Declarations.java com/sun/mirror/util/SimpleTypeVisitor.java com/sun/mirror/util/Types.java com/sun/mirror/util/SimpleDeclarationVisitor.java com/sun/mirror/util/SourceOrderDeclScanner.java com/sun/mirror/util/SourcePosition.java com/sun/mirror/util/TypeVisitor.java com/sun/mirror/util/package.html com/sun/mirror/overview.html com/sun/naming com/sun/naming/internal com/sun/naming/internal/SCCS com/sun/naming/internal/SCCS/s.FactoryEnumeration.java com/sun/naming/internal/SCCS/s.NamedWeakReference.java com/sun/naming/internal/SCCS/s.ResourceManager.java com/sun/naming/internal/SCCS/s.VersionHelper.java com/sun/naming/internal/SCCS/s.VersionHelper12.java com/sun/naming/internal/FactoryEnumeration.java com/sun/naming/internal/NamedWeakReference.java com/sun/naming/internal/ResourceManager.java com/sun/naming/internal/VersionHelper.java com/sun/naming/internal/VersionHelper12.java com/sun/org com/sun/org/apache com/sun/org/apache/bcel com/sun/org/apache/bcel/internal com/sun/org/apache/bcel/internal/SCCS com/sun/org/apache/bcel/internal/SCCS/s.ExceptionConstants.java com/sun/org/apache/bcel/internal/SCCS/s.Constants.java com/sun/org/apache/bcel/internal/SCCS/s.Repository.java com/sun/org/apache/bcel/internal/SCCS/s.package.html com/sun/org/apache/bcel/internal/classfile com/sun/org/apache/bcel/internal/classfile/SCCS com/sun/org/apache/bcel/internal/classfile/SCCS/s.CodeException.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.AccessFlags.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.Attribute.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ClassParser.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.Code.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantClass.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.Constant.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantCP.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.package.html com/sun/org/apache/bcel/internal/classfile/SCCS/s.lic com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantDouble.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantFieldref.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantFloat.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantInteger.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantLong.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.Field.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantInterfaceMethodref.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantMethodref.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantNameAndType.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantObject.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantPool.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantString.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantUtf8.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ConstantValue.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.Deprecated.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.DescendingVisitor.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.EmptyVisitor.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.ExceptionTable.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.FieldOrMethod.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.InnerClass.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.InnerClasses.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.JavaClass.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.LineNumber.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.Node.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.LineNumberTable.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.LocalVariable.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.LocalVariableTable.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.Method.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.PMGClass.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.Signature.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.SourceFile.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.StackMap.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.StackMapEntry.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.StackMapType.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.Synthetic.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.Unknown.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.Utility.java com/sun/org/apache/bcel/internal/classfile/SCCS/s.Visitor.java com/sun/org/apache/bcel/internal/classfile/ConstantFieldref.java com/sun/org/apache/bcel/internal/classfile/AccessFlags.java com/sun/org/apache/bcel/internal/classfile/Attribute.java com/sun/org/apache/bcel/internal/classfile/ClassParser.java com/sun/org/apache/bcel/internal/classfile/Code.java com/sun/org/apache/bcel/internal/classfile/CodeException.java com/sun/org/apache/bcel/internal/classfile/Constant.java com/sun/org/apache/bcel/internal/classfile/ConstantCP.java com/sun/org/apache/bcel/internal/classfile/ConstantClass.java com/sun/org/apache/bcel/internal/classfile/ConstantDouble.java com/sun/org/apache/bcel/internal/classfile/ConstantInterfaceMethodref.java com/sun/org/apache/bcel/internal/classfile/ConstantFloat.java com/sun/org/apache/bcel/internal/classfile/ConstantInteger.java com/sun/org/apache/bcel/internal/classfile/ConstantMethodref.java com/sun/org/apache/bcel/internal/classfile/ConstantLong.java com/sun/org/apache/bcel/internal/classfile/lic com/sun/org/apache/bcel/internal/classfile/ConstantNameAndType.java com/sun/org/apache/bcel/internal/classfile/ConstantObject.java com/sun/org/apache/bcel/internal/classfile/ConstantPool.java com/sun/org/apache/bcel/internal/classfile/ConstantString.java com/sun/org/apache/bcel/internal/classfile/ConstantUtf8.java com/sun/org/apache/bcel/internal/classfile/ConstantValue.java com/sun/org/apache/bcel/internal/classfile/Deprecated.java com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java com/sun/org/apache/bcel/internal/classfile/EmptyVisitor.java com/sun/org/apache/bcel/internal/classfile/ExceptionTable.java com/sun/org/apache/bcel/internal/classfile/Field.java com/sun/org/apache/bcel/internal/classfile/FieldOrMethod.java com/sun/org/apache/bcel/internal/classfile/InnerClass.java com/sun/org/apache/bcel/internal/classfile/InnerClasses.java com/sun/org/apache/bcel/internal/classfile/JavaClass.java com/sun/org/apache/bcel/internal/classfile/LineNumber.java com/sun/org/apache/bcel/internal/classfile/LineNumberTable.java com/sun/org/apache/bcel/internal/classfile/LocalVariable.java com/sun/org/apache/bcel/internal/classfile/LocalVariableTable.java com/sun/org/apache/bcel/internal/classfile/Method.java com/sun/org/apache/bcel/internal/classfile/Node.java com/sun/org/apache/bcel/internal/classfile/PMGClass.java com/sun/org/apache/bcel/internal/classfile/Signature.java com/sun/org/apache/bcel/internal/classfile/SourceFile.java com/sun/org/apache/bcel/internal/classfile/StackMap.java com/sun/org/apache/bcel/internal/classfile/StackMapEntry.java com/sun/org/apache/bcel/internal/classfile/StackMapType.java com/sun/org/apache/bcel/internal/classfile/Synthetic.java com/sun/org/apache/bcel/internal/classfile/Unknown.java com/sun/org/apache/bcel/internal/classfile/Utility.java com/sun/org/apache/bcel/internal/classfile/Visitor.java com/sun/org/apache/bcel/internal/classfile/package.html com/sun/org/apache/bcel/internal/generic com/sun/org/apache/bcel/internal/generic/SCCS com/sun/org/apache/bcel/internal/generic/SCCS/s.ACONST_NULL.java com/sun/org/apache/bcel/internal/generic/SCCS/s.AALOAD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.AASTORE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ArrayInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ALOAD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ANEWARRAY.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ARETURN.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ARRAYLENGTH.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ASTORE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ATHROW.java com/sun/org/apache/bcel/internal/generic/SCCS/s.AllocationInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ArithmeticInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ArrayType.java com/sun/org/apache/bcel/internal/generic/SCCS/s.BALOAD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.BASTORE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.BIPUSH.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DALOAD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.D2F.java com/sun/org/apache/bcel/internal/generic/SCCS/s.BREAKPOINT.java com/sun/org/apache/bcel/internal/generic/SCCS/s.BasicType.java com/sun/org/apache/bcel/internal/generic/SCCS/s.BranchHandle.java com/sun/org/apache/bcel/internal/generic/SCCS/s.BranchInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.CALOAD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.CASTORE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.CHECKCAST.java com/sun/org/apache/bcel/internal/generic/SCCS/s.CPInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ClassGen.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ClassGenException.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ClassObserver.java com/sun/org/apache/bcel/internal/generic/SCCS/s.CodeExceptionGen.java com/sun/org/apache/bcel/internal/generic/SCCS/s.CompoundInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ConstantPoolGen.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ConstantPushInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ConversionInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.D2I.java com/sun/org/apache/bcel/internal/generic/SCCS/s.D2L.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DADD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DASTORE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DCMPG.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DCMPL.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DCONST.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DDIV.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DLOAD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DMUL.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DNEG.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DREM.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DRETURN.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DSTORE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DSUB.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DUP.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DUP2.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DUP2_X1.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DUP2_X2.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DUP_X1.java com/sun/org/apache/bcel/internal/generic/SCCS/s.DUP_X2.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FALOAD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.F2D.java com/sun/org/apache/bcel/internal/generic/SCCS/s.EmptyVisitor.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ExceptionThrower.java com/sun/org/apache/bcel/internal/generic/SCCS/s.F2I.java com/sun/org/apache/bcel/internal/generic/SCCS/s.F2L.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FADD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FASTORE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FCMPG.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FCMPL.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FCONST.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FDIV.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FLOAD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FMUL.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FNEG.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FREM.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FRETURN.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FSTORE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FSUB.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FieldGen.java com/sun/org/apache/bcel/internal/generic/SCCS/s.InstructionListObserver.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FieldGenOrMethodGen.java com/sun/org/apache/bcel/internal/generic/SCCS/s.GOTO.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FieldInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FieldObserver.java com/sun/org/apache/bcel/internal/generic/SCCS/s.FieldOrMethod.java com/sun/org/apache/bcel/internal/generic/SCCS/s.GETFIELD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.GETSTATIC.java com/sun/org/apache/bcel/internal/generic/SCCS/s.GOTO_W.java com/sun/org/apache/bcel/internal/generic/SCCS/s.GotoInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.I2B.java com/sun/org/apache/bcel/internal/generic/SCCS/s.I2C.java com/sun/org/apache/bcel/internal/generic/SCCS/s.I2D.java com/sun/org/apache/bcel/internal/generic/SCCS/s.I2F.java com/sun/org/apache/bcel/internal/generic/SCCS/s.I2L.java com/sun/org/apache/bcel/internal/generic/SCCS/s.I2S.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IADD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IALOAD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IAND.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IASTORE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ICONST.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IDIV.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IFEQ.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IFGE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IFGT.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IFLE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IFLT.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IFNE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IFNONNULL.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IFNULL.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IF_ACMPEQ.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IF_ACMPNE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IF_ICMPEQ.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IF_ICMPGE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IF_ICMPGT.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IF_ICMPLE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IF_ICMPLT.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IF_ICMPNE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IINC.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ILOAD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IMPDEP1.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IMPDEP2.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IMUL.java com/sun/org/apache/bcel/internal/generic/SCCS/s.INEG.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IOR.java com/sun/org/apache/bcel/internal/generic/SCCS/s.INSTANCEOF.java com/sun/org/apache/bcel/internal/generic/SCCS/s.INVOKEINTERFACE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.INVOKESPECIAL.java com/sun/org/apache/bcel/internal/generic/SCCS/s.INVOKESTATIC.java com/sun/org/apache/bcel/internal/generic/SCCS/s.INVOKEVIRTUAL.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IREM.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IRETURN.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ISHL.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ISHR.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ISTORE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ISUB.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IUSHR.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IXOR.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IfInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.IndexedInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.Instruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.InstructionConstants.java com/sun/org/apache/bcel/internal/generic/SCCS/s.InstructionFactory.java com/sun/org/apache/bcel/internal/generic/SCCS/s.JSR.java com/sun/org/apache/bcel/internal/generic/SCCS/s.InstructionHandle.java com/sun/org/apache/bcel/internal/generic/SCCS/s.InstructionList.java com/sun/org/apache/bcel/internal/generic/SCCS/s.InstructionTargeter.java com/sun/org/apache/bcel/internal/generic/SCCS/s.InvokeInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.JSR_W.java com/sun/org/apache/bcel/internal/generic/SCCS/s.JsrInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.L2D.java com/sun/org/apache/bcel/internal/generic/SCCS/s.L2F.java com/sun/org/apache/bcel/internal/generic/SCCS/s.L2I.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LADD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LALOAD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LAND.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LASTORE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LCMP.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LCONST.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LDC.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LDC2_W.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LDC_W.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LDIV.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LineNumberGen.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LLOAD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LMUL.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LNEG.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LOOKUPSWITCH.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LOR.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LREM.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LRETURN.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LSHL.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LSHR.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LSTORE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LSUB.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LUSHR.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LXOR.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LoadInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LoadClass.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LocalVariableInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.LocalVariableGen.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ReturnInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.MONITORENTER.java com/sun/org/apache/bcel/internal/generic/SCCS/s.MONITOREXIT.java com/sun/org/apache/bcel/internal/generic/SCCS/s.MULTIANEWARRAY.java com/sun/org/apache/bcel/internal/generic/SCCS/s.MethodGen.java com/sun/org/apache/bcel/internal/generic/SCCS/s.MethodObserver.java com/sun/org/apache/bcel/internal/generic/SCCS/s.NEW.java com/sun/org/apache/bcel/internal/generic/SCCS/s.NEWARRAY.java com/sun/org/apache/bcel/internal/generic/SCCS/s.NOP.java com/sun/org/apache/bcel/internal/generic/SCCS/s.NamedAndTyped.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ObjectType.java com/sun/org/apache/bcel/internal/generic/SCCS/s.POP.java com/sun/org/apache/bcel/internal/generic/SCCS/s.POP2.java com/sun/org/apache/bcel/internal/generic/SCCS/s.PUSH.java com/sun/org/apache/bcel/internal/generic/SCCS/s.PUTFIELD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.PUTSTATIC.java com/sun/org/apache/bcel/internal/generic/SCCS/s.PopInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.PushInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.RET.java com/sun/org/apache/bcel/internal/generic/SCCS/s.RETURN.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ReferenceType.java com/sun/org/apache/bcel/internal/generic/SCCS/s.VariableLengthInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.ReturnaddressType.java com/sun/org/apache/bcel/internal/generic/SCCS/s.SALOAD.java com/sun/org/apache/bcel/internal/generic/SCCS/s.SASTORE.java com/sun/org/apache/bcel/internal/generic/SCCS/s.SIPUSH.java com/sun/org/apache/bcel/internal/generic/SCCS/s.SWAP.java com/sun/org/apache/bcel/internal/generic/SCCS/s.SWITCH.java com/sun/org/apache/bcel/internal/generic/SCCS/s.Select.java com/sun/org/apache/bcel/internal/generic/SCCS/s.StackConsumer.java com/sun/org/apache/bcel/internal/generic/SCCS/s.StackInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.StackProducer.java com/sun/org/apache/bcel/internal/generic/SCCS/s.StoreInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.TABLESWITCH.java com/sun/org/apache/bcel/internal/generic/SCCS/s.TargetLostException.java com/sun/org/apache/bcel/internal/generic/SCCS/s.Type.java com/sun/org/apache/bcel/internal/generic/SCCS/s.TypedInstruction.java com/sun/org/apache/bcel/internal/generic/SCCS/s.UnconditionalBranch.java com/sun/org/apache/bcel/internal/generic/SCCS/s.Visitor.java com/sun/org/apache/bcel/internal/generic/SCCS/s.package.html com/sun/org/apache/bcel/internal/generic/AASTORE.java com/sun/org/apache/bcel/internal/generic/AALOAD.java com/sun/org/apache/bcel/internal/generic/AllocationInstruction.java com/sun/org/apache/bcel/internal/generic/ACONST_NULL.java com/sun/org/apache/bcel/internal/generic/ALOAD.java com/sun/org/apache/bcel/internal/generic/ANEWARRAY.java com/sun/org/apache/bcel/internal/generic/ARETURN.java com/sun/org/apache/bcel/internal/generic/ARRAYLENGTH.java com/sun/org/apache/bcel/internal/generic/ASTORE.java com/sun/org/apache/bcel/internal/generic/ATHROW.java com/sun/org/apache/bcel/internal/generic/DASTORE.java com/sun/org/apache/bcel/internal/generic/D2F.java com/sun/org/apache/bcel/internal/generic/ArithmeticInstruction.java com/sun/org/apache/bcel/internal/generic/ArrayInstruction.java com/sun/org/apache/bcel/internal/generic/ArrayType.java com/sun/org/apache/bcel/internal/generic/BALOAD.java com/sun/org/apache/bcel/internal/generic/BASTORE.java com/sun/org/apache/bcel/internal/generic/BIPUSH.java com/sun/org/apache/bcel/internal/generic/BREAKPOINT.java com/sun/org/apache/bcel/internal/generic/BasicType.java com/sun/org/apache/bcel/internal/generic/BranchHandle.java com/sun/org/apache/bcel/internal/generic/BranchInstruction.java com/sun/org/apache/bcel/internal/generic/CALOAD.java com/sun/org/apache/bcel/internal/generic/CASTORE.java com/sun/org/apache/bcel/internal/generic/CHECKCAST.java com/sun/org/apache/bcel/internal/generic/CPInstruction.java com/sun/org/apache/bcel/internal/generic/ClassGen.java com/sun/org/apache/bcel/internal/generic/ClassGenException.java com/sun/org/apache/bcel/internal/generic/ClassObserver.java com/sun/org/apache/bcel/internal/generic/CodeExceptionGen.java com/sun/org/apache/bcel/internal/generic/CompoundInstruction.java com/sun/org/apache/bcel/internal/generic/ConstantPoolGen.java com/sun/org/apache/bcel/internal/generic/ConstantPushInstruction.java com/sun/org/apache/bcel/internal/generic/ConversionInstruction.java com/sun/org/apache/bcel/internal/generic/D2I.java com/sun/org/apache/bcel/internal/generic/D2L.java com/sun/org/apache/bcel/internal/generic/DADD.java com/sun/org/apache/bcel/internal/generic/DALOAD.java com/sun/org/apache/bcel/internal/generic/DRETURN.java com/sun/org/apache/bcel/internal/generic/DCMPG.java com/sun/org/apache/bcel/internal/generic/DCMPL.java com/sun/org/apache/bcel/internal/generic/DCONST.java com/sun/org/apache/bcel/internal/generic/DDIV.java com/sun/org/apache/bcel/internal/generic/DLOAD.java com/sun/org/apache/bcel/internal/generic/DMUL.java com/sun/org/apache/bcel/internal/generic/DNEG.java com/sun/org/apache/bcel/internal/generic/DREM.java com/sun/org/apache/bcel/internal/generic/EmptyVisitor.java com/sun/org/apache/bcel/internal/generic/DSTORE.java com/sun/org/apache/bcel/internal/generic/DSUB.java com/sun/org/apache/bcel/internal/generic/DUP.java com/sun/org/apache/bcel/internal/generic/DUP2.java com/sun/org/apache/bcel/internal/generic/DUP2_X1.java com/sun/org/apache/bcel/internal/generic/DUP2_X2.java com/sun/org/apache/bcel/internal/generic/DUP_X1.java com/sun/org/apache/bcel/internal/generic/DUP_X2.java com/sun/org/apache/bcel/internal/generic/ExceptionThrower.java com/sun/org/apache/bcel/internal/generic/F2D.java com/sun/org/apache/bcel/internal/generic/F2I.java com/sun/org/apache/bcel/internal/generic/FieldGenOrMethodGen.java com/sun/org/apache/bcel/internal/generic/F2L.java com/sun/org/apache/bcel/internal/generic/FADD.java com/sun/org/apache/bcel/internal/generic/FALOAD.java com/sun/org/apache/bcel/internal/generic/FASTORE.java com/sun/org/apache/bcel/internal/generic/FCMPG.java com/sun/org/apache/bcel/internal/generic/FCMPL.java com/sun/org/apache/bcel/internal/generic/FCONST.java com/sun/org/apache/bcel/internal/generic/FDIV.java com/sun/org/apache/bcel/internal/generic/FLOAD.java com/sun/org/apache/bcel/internal/generic/FMUL.java com/sun/org/apache/bcel/internal/generic/FNEG.java com/sun/org/apache/bcel/internal/generic/FREM.java com/sun/org/apache/bcel/internal/generic/FRETURN.java com/sun/org/apache/bcel/internal/generic/FSTORE.java com/sun/org/apache/bcel/internal/generic/FSUB.java com/sun/org/apache/bcel/internal/generic/FieldGen.java com/sun/org/apache/bcel/internal/generic/FieldInstruction.java com/sun/org/apache/bcel/internal/generic/FieldObserver.java com/sun/org/apache/bcel/internal/generic/FieldOrMethod.java com/sun/org/apache/bcel/internal/generic/GETFIELD.java com/sun/org/apache/bcel/internal/generic/GETSTATIC.java com/sun/org/apache/bcel/internal/generic/InstructionListObserver.java com/sun/org/apache/bcel/internal/generic/GOTO.java com/sun/org/apache/bcel/internal/generic/GOTO_W.java com/sun/org/apache/bcel/internal/generic/GotoInstruction.java com/sun/org/apache/bcel/internal/generic/I2B.java com/sun/org/apache/bcel/internal/generic/I2C.java com/sun/org/apache/bcel/internal/generic/I2D.java com/sun/org/apache/bcel/internal/generic/I2F.java com/sun/org/apache/bcel/internal/generic/I2L.java com/sun/org/apache/bcel/internal/generic/I2S.java com/sun/org/apache/bcel/internal/generic/IADD.java com/sun/org/apache/bcel/internal/generic/IALOAD.java com/sun/org/apache/bcel/internal/generic/IAND.java com/sun/org/apache/bcel/internal/generic/IASTORE.java com/sun/org/apache/bcel/internal/generic/ICONST.java com/sun/org/apache/bcel/internal/generic/IDIV.java com/sun/org/apache/bcel/internal/generic/IFEQ.java com/sun/org/apache/bcel/internal/generic/IFGE.java com/sun/org/apache/bcel/internal/generic/IFGT.java com/sun/org/apache/bcel/internal/generic/IFLE.java com/sun/org/apache/bcel/internal/generic/IFLT.java com/sun/org/apache/bcel/internal/generic/IFNE.java com/sun/org/apache/bcel/internal/generic/IFNONNULL.java com/sun/org/apache/bcel/internal/generic/IFNULL.java com/sun/org/apache/bcel/internal/generic/IF_ACMPEQ.java com/sun/org/apache/bcel/internal/generic/IF_ACMPNE.java com/sun/org/apache/bcel/internal/generic/IF_ICMPEQ.java com/sun/org/apache/bcel/internal/generic/IF_ICMPGE.java com/sun/org/apache/bcel/internal/generic/IF_ICMPGT.java com/sun/org/apache/bcel/internal/generic/IF_ICMPLE.java com/sun/org/apache/bcel/internal/generic/IF_ICMPLT.java com/sun/org/apache/bcel/internal/generic/IF_ICMPNE.java com/sun/org/apache/bcel/internal/generic/IINC.java com/sun/org/apache/bcel/internal/generic/ILOAD.java com/sun/org/apache/bcel/internal/generic/IMPDEP1.java com/sun/org/apache/bcel/internal/generic/IMPDEP2.java com/sun/org/apache/bcel/internal/generic/IMUL.java com/sun/org/apache/bcel/internal/generic/INEG.java com/sun/org/apache/bcel/internal/generic/INSTANCEOF.java com/sun/org/apache/bcel/internal/generic/INVOKEINTERFACE.java com/sun/org/apache/bcel/internal/generic/INVOKESPECIAL.java com/sun/org/apache/bcel/internal/generic/INVOKESTATIC.java com/sun/org/apache/bcel/internal/generic/INVOKEVIRTUAL.java com/sun/org/apache/bcel/internal/generic/IOR.java com/sun/org/apache/bcel/internal/generic/IREM.java com/sun/org/apache/bcel/internal/generic/IRETURN.java com/sun/org/apache/bcel/internal/generic/ISHL.java com/sun/org/apache/bcel/internal/generic/ISHR.java com/sun/org/apache/bcel/internal/generic/ISTORE.java com/sun/org/apache/bcel/internal/generic/ISUB.java com/sun/org/apache/bcel/internal/generic/IUSHR.java com/sun/org/apache/bcel/internal/generic/IXOR.java com/sun/org/apache/bcel/internal/generic/IfInstruction.java com/sun/org/apache/bcel/internal/generic/IndexedInstruction.java com/sun/org/apache/bcel/internal/generic/Instruction.java com/sun/org/apache/bcel/internal/generic/InstructionConstants.java com/sun/org/apache/bcel/internal/generic/InstructionFactory.java com/sun/org/apache/bcel/internal/generic/InstructionHandle.java com/sun/org/apache/bcel/internal/generic/InstructionList.java com/sun/org/apache/bcel/internal/generic/LoadInstruction.java com/sun/org/apache/bcel/internal/generic/InstructionTargeter.java com/sun/org/apache/bcel/internal/generic/InvokeInstruction.java com/sun/org/apache/bcel/internal/generic/JSR.java com/sun/org/apache/bcel/internal/generic/JSR_W.java com/sun/org/apache/bcel/internal/generic/JsrInstruction.java com/sun/org/apache/bcel/internal/generic/L2D.java com/sun/org/apache/bcel/internal/generic/L2F.java com/sun/org/apache/bcel/internal/generic/L2I.java com/sun/org/apache/bcel/internal/generic/LADD.java com/sun/org/apache/bcel/internal/generic/LALOAD.java com/sun/org/apache/bcel/internal/generic/LAND.java com/sun/org/apache/bcel/internal/generic/LASTORE.java com/sun/org/apache/bcel/internal/generic/LCMP.java com/sun/org/apache/bcel/internal/generic/LCONST.java com/sun/org/apache/bcel/internal/generic/LDC.java com/sun/org/apache/bcel/internal/generic/LDC2_W.java com/sun/org/apache/bcel/internal/generic/LDC_W.java com/sun/org/apache/bcel/internal/generic/LDIV.java com/sun/org/apache/bcel/internal/generic/LLOAD.java com/sun/org/apache/bcel/internal/generic/LMUL.java com/sun/org/apache/bcel/internal/generic/LNEG.java com/sun/org/apache/bcel/internal/generic/LOOKUPSWITCH.java com/sun/org/apache/bcel/internal/generic/LOR.java com/sun/org/apache/bcel/internal/generic/LREM.java com/sun/org/apache/bcel/internal/generic/LRETURN.java com/sun/org/apache/bcel/internal/generic/LSHL.java com/sun/org/apache/bcel/internal/generic/LSHR.java com/sun/org/apache/bcel/internal/generic/LSTORE.java com/sun/org/apache/bcel/internal/generic/LSUB.java com/sun/org/apache/bcel/internal/generic/LUSHR.java com/sun/org/apache/bcel/internal/generic/LXOR.java com/sun/org/apache/bcel/internal/generic/LineNumberGen.java com/sun/org/apache/bcel/internal/generic/LoadClass.java com/sun/org/apache/bcel/internal/generic/LocalVariableInstruction.java com/sun/org/apache/bcel/internal/generic/LocalVariableGen.java com/sun/org/apache/bcel/internal/generic/PushInstruction.java com/sun/org/apache/bcel/internal/generic/MONITORENTER.java com/sun/org/apache/bcel/internal/generic/MONITOREXIT.java com/sun/org/apache/bcel/internal/generic/MULTIANEWARRAY.java com/sun/org/apache/bcel/internal/generic/MethodGen.java com/sun/org/apache/bcel/internal/generic/MethodObserver.java com/sun/org/apache/bcel/internal/generic/NEW.java com/sun/org/apache/bcel/internal/generic/NEWARRAY.java com/sun/org/apache/bcel/internal/generic/NOP.java com/sun/org/apache/bcel/internal/generic/NamedAndTyped.java com/sun/org/apache/bcel/internal/generic/ObjectType.java com/sun/org/apache/bcel/internal/generic/POP.java com/sun/org/apache/bcel/internal/generic/POP2.java com/sun/org/apache/bcel/internal/generic/PUSH.java com/sun/org/apache/bcel/internal/generic/PUTFIELD.java com/sun/org/apache/bcel/internal/generic/PUTSTATIC.java com/sun/org/apache/bcel/internal/generic/PopInstruction.java com/sun/org/apache/bcel/internal/generic/ReferenceType.java com/sun/org/apache/bcel/internal/generic/RET.java com/sun/org/apache/bcel/internal/generic/RETURN.java com/sun/org/apache/bcel/internal/generic/ReturnInstruction.java com/sun/org/apache/bcel/internal/generic/ReturnaddressType.java com/sun/org/apache/bcel/internal/generic/SALOAD.java com/sun/org/apache/bcel/internal/generic/SASTORE.java com/sun/org/apache/bcel/internal/generic/SIPUSH.java com/sun/org/apache/bcel/internal/generic/SWAP.java com/sun/org/apache/bcel/internal/generic/SWITCH.java com/sun/org/apache/bcel/internal/generic/Select.java com/sun/org/apache/bcel/internal/generic/StackConsumer.java com/sun/org/apache/bcel/internal/generic/StackInstruction.java com/sun/org/apache/bcel/internal/generic/StackProducer.java com/sun/org/apache/bcel/internal/generic/StoreInstruction.java com/sun/org/apache/bcel/internal/generic/Type.java com/sun/org/apache/bcel/internal/generic/UnconditionalBranch.java com/sun/org/apache/bcel/internal/generic/TABLESWITCH.java com/sun/org/apache/bcel/internal/generic/TargetLostException.java com/sun/org/apache/bcel/internal/generic/TypedInstruction.java com/sun/org/apache/bcel/internal/generic/VariableLengthInstruction.java com/sun/org/apache/bcel/internal/generic/Visitor.java com/sun/org/apache/bcel/internal/generic/package.html com/sun/org/apache/bcel/internal/util com/sun/org/apache/bcel/internal/util/SCCS com/sun/org/apache/bcel/internal/util/SCCS/s.InstructionFinder.java com/sun/org/apache/bcel/internal/util/SCCS/s.AttributeHTML.java com/sun/org/apache/bcel/internal/util/SCCS/s.ByteSequence.java com/sun/org/apache/bcel/internal/util/SCCS/s.Class2HTML.java com/sun/org/apache/bcel/internal/util/SCCS/s.ClassLoader.java com/sun/org/apache/bcel/internal/util/SCCS/s.ClassPath.java com/sun/org/apache/bcel/internal/util/SCCS/s.ClassQueue.java com/sun/org/apache/bcel/internal/util/SCCS/s.ClassStack.java com/sun/org/apache/bcel/internal/util/SCCS/s.ClassVector.java com/sun/org/apache/bcel/internal/util/SCCS/s.CodeHTML.java com/sun/org/apache/bcel/internal/util/SCCS/s.ConstantHTML.java com/sun/org/apache/bcel/internal/util/SCCS/s.MethodHTML.java com/sun/org/apache/bcel/internal/util/SCCS/s.package.html com/sun/org/apache/bcel/internal/util/InstructionFinder.java com/sun/org/apache/bcel/internal/util/AttributeHTML.java com/sun/org/apache/bcel/internal/util/ByteSequence.java com/sun/org/apache/bcel/internal/util/Class2HTML.java com/sun/org/apache/bcel/internal/util/ClassLoader.java com/sun/org/apache/bcel/internal/util/ClassPath.java com/sun/org/apache/bcel/internal/util/ClassQueue.java com/sun/org/apache/bcel/internal/util/ClassStack.java com/sun/org/apache/bcel/internal/util/ClassVector.java com/sun/org/apache/bcel/internal/util/CodeHTML.java com/sun/org/apache/bcel/internal/util/ConstantHTML.java com/sun/org/apache/bcel/internal/util/MethodHTML.java com/sun/org/apache/bcel/internal/util/package.html com/sun/org/apache/bcel/internal/verifier com/sun/org/apache/bcel/internal/verifier/SCCS com/sun/org/apache/bcel/internal/verifier/SCCS/s.VerifierFactoryListModel.java com/sun/org/apache/bcel/internal/verifier/SCCS/s.GraphicalVerifier.java com/sun/org/apache/bcel/internal/verifier/SCCS/s.NativeVerifier.java com/sun/org/apache/bcel/internal/verifier/SCCS/s.PassVerifier.java com/sun/org/apache/bcel/internal/verifier/SCCS/s.TransitiveHull.java com/sun/org/apache/bcel/internal/verifier/SCCS/s.VerificationResult.java com/sun/org/apache/bcel/internal/verifier/SCCS/s.Verifier.java com/sun/org/apache/bcel/internal/verifier/SCCS/s.VerifierAppFrame.java com/sun/org/apache/bcel/internal/verifier/SCCS/s.VerifierFactory.java com/sun/org/apache/bcel/internal/verifier/SCCS/s.VerifierFactoryObserver.java com/sun/org/apache/bcel/internal/verifier/SCCS/s.VerifyDialog.java com/sun/org/apache/bcel/internal/verifier/SCCS/s.package.html com/sun/org/apache/bcel/internal/verifier/exc com/sun/org/apache/bcel/internal/verifier/exc/SCCS com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.StaticCodeConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.AssertionViolatedException.java com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.ClassConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.CodeConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.InvalidMethodException.java com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.LinkingConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.LoadingException.java com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.LocalVariableInfoInconsistentException.java com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.StaticCodeInstructionConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.Utility.java com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.package.html com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.VerificationException.java com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.StaticCodeInstructionOperandConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.StructuralCodeConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/SCCS/s.VerifierConstraintViolatedException.java com/sun/org/apache/bcel/internal/verifier/exc/StaticCodeConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/AssertionViolatedException.java com/sun/org/apache/bcel/internal/verifier/exc/ClassConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/CodeConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/InvalidMethodException.java com/sun/org/apache/bcel/internal/verifier/exc/LinkingConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/LoadingException.java com/sun/org/apache/bcel/internal/verifier/exc/LocalVariableInfoInconsistentException.java com/sun/org/apache/bcel/internal/verifier/exc/StaticCodeInstructionConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/Utility.java com/sun/org/apache/bcel/internal/verifier/exc/package.html com/sun/org/apache/bcel/internal/verifier/exc/VerificationException.java com/sun/org/apache/bcel/internal/verifier/exc/StaticCodeInstructionOperandConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/StructuralCodeConstraintException.java com/sun/org/apache/bcel/internal/verifier/exc/VerifierConstraintViolatedException.java com/sun/org/apache/bcel/internal/verifier/statics com/sun/org/apache/bcel/internal/verifier/statics/SCCS com/sun/org/apache/bcel/internal/verifier/statics/SCCS/s.LocalVariableInfo.java com/sun/org/apache/bcel/internal/verifier/statics/SCCS/s.DOUBLE_Upper.java com/sun/org/apache/bcel/internal/verifier/statics/SCCS/s.IntList.java com/sun/org/apache/bcel/internal/verifier/statics/SCCS/s.LONG_Upper.java com/sun/org/apache/bcel/internal/verifier/statics/SCCS/s.LocalVariablesInfo.java com/sun/org/apache/bcel/internal/verifier/statics/SCCS/s.Pass1Verifier.java com/sun/org/apache/bcel/internal/verifier/statics/SCCS/s.Pass2Verifier.java com/sun/org/apache/bcel/internal/verifier/statics/SCCS/s.Pass3aVerifier.java com/sun/org/apache/bcel/internal/verifier/statics/SCCS/s.StringRepresentation.java com/sun/org/apache/bcel/internal/verifier/statics/SCCS/s.package.html com/sun/org/apache/bcel/internal/verifier/statics/LocalVariableInfo.java com/sun/org/apache/bcel/internal/verifier/statics/DOUBLE_Upper.java com/sun/org/apache/bcel/internal/verifier/statics/IntList.java com/sun/org/apache/bcel/internal/verifier/statics/LONG_Upper.java com/sun/org/apache/bcel/internal/verifier/statics/LocalVariablesInfo.java com/sun/org/apache/bcel/internal/verifier/statics/Pass1Verifier.java com/sun/org/apache/bcel/internal/verifier/statics/Pass2Verifier.java com/sun/org/apache/bcel/internal/verifier/statics/Pass3aVerifier.java com/sun/org/apache/bcel/internal/verifier/statics/StringRepresentation.java com/sun/org/apache/bcel/internal/verifier/statics/package.html com/sun/org/apache/bcel/internal/verifier/structurals com/sun/org/apache/bcel/internal/verifier/structurals/SCCS com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.ExceptionHandlers.java com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.ControlFlowGraph.java com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.ExceptionHandler.java com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.InstConstraintVisitor.java com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.ExecutionVisitor.java com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.Frame.java com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.GenericArray.java com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.InstructionContext.java com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.LocalVariables.java com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.OperandStack.java com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.Pass3bVerifier.java com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.Subroutine.java com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.Subroutines.java com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.package.html com/sun/org/apache/bcel/internal/verifier/structurals/SCCS/s.UninitializedObjectType.java com/sun/org/apache/bcel/internal/verifier/structurals/InstConstraintVisitor.java com/sun/org/apache/bcel/internal/verifier/structurals/ControlFlowGraph.java com/sun/org/apache/bcel/internal/verifier/structurals/ExceptionHandler.java com/sun/org/apache/bcel/internal/verifier/structurals/ExceptionHandlers.java com/sun/org/apache/bcel/internal/verifier/structurals/ExecutionVisitor.java com/sun/org/apache/bcel/internal/verifier/structurals/Frame.java com/sun/org/apache/bcel/internal/verifier/structurals/GenericArray.java com/sun/org/apache/bcel/internal/verifier/structurals/UninitializedObjectType.java com/sun/org/apache/bcel/internal/verifier/structurals/InstructionContext.java com/sun/org/apache/bcel/internal/verifier/structurals/LocalVariables.java com/sun/org/apache/bcel/internal/verifier/structurals/OperandStack.java com/sun/org/apache/bcel/internal/verifier/structurals/Pass3bVerifier.java com/sun/org/apache/bcel/internal/verifier/structurals/Subroutine.java com/sun/org/apache/bcel/internal/verifier/structurals/Subroutines.java com/sun/org/apache/bcel/internal/verifier/structurals/package.html com/sun/org/apache/bcel/internal/verifier/VerifierFactoryListModel.java com/sun/org/apache/bcel/internal/verifier/GraphicalVerifier.java com/sun/org/apache/bcel/internal/verifier/NativeVerifier.java com/sun/org/apache/bcel/internal/verifier/PassVerifier.java com/sun/org/apache/bcel/internal/verifier/TransitiveHull.java com/sun/org/apache/bcel/internal/verifier/VerificationResult.java com/sun/org/apache/bcel/internal/verifier/Verifier.java com/sun/org/apache/bcel/internal/verifier/VerifierAppFrame.java com/sun/org/apache/bcel/internal/verifier/VerifierFactory.java com/sun/org/apache/bcel/internal/verifier/VerifierFactoryObserver.java com/sun/org/apache/bcel/internal/verifier/VerifyDialog.java com/sun/org/apache/bcel/internal/verifier/package.html com/sun/org/apache/bcel/internal/ExceptionConstants.java com/sun/org/apache/bcel/internal/Constants.java com/sun/org/apache/bcel/internal/Repository.java com/sun/org/apache/bcel/internal/package.html com/sun/org/apache/html com/sun/org/apache/html/internal com/sun/org/apache/html/internal/dom com/sun/org/apache/html/internal/dom/SCCS com/sun/org/apache/html/internal/dom/SCCS/s.HTMLAnchorElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLAppletElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLAreaElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLBRElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLBaseElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLBaseFontElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLBodyElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLBuilder.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLButtonElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLCollectionImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLDListElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLDivElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLTableCaptionElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLDOMImplementationImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLDirectoryElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLDocumentImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLFieldSetElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLFontElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLFormControl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLFormElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLFrameElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLFrameSetElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLHRElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLHeadElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLHeadingElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.NameNodeListImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLHtmlElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLIFrameElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLImageElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLInputElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLIsIndexElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLLIElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLLabelElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLLegendElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLLinkElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLMapElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLMenuElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLMetaElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLModElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.ObjectFactory.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLOListElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLObjectElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLOptGroupElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLOptionElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLParagraphElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLParamElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLPreElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLQuoteElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLScriptElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLSelectElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLStyleElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLTableCellElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLTableColElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLTableElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLTableRowElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLTableSectionElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLTextAreaElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLTitleElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.HTMLUListElementImpl.java com/sun/org/apache/html/internal/dom/SCCS/s.SecuritySupport.java com/sun/org/apache/html/internal/dom/SCCS/s.SecuritySupport12.java com/sun/org/apache/html/internal/dom/HTMLBaseFontElementImpl.java com/sun/org/apache/html/internal/dom/HTMLAnchorElementImpl.java com/sun/org/apache/html/internal/dom/HTMLAppletElementImpl.java com/sun/org/apache/html/internal/dom/HTMLAreaElementImpl.java com/sun/org/apache/html/internal/dom/HTMLBRElementImpl.java com/sun/org/apache/html/internal/dom/HTMLBaseElementImpl.java com/sun/org/apache/html/internal/dom/HTMLTableCaptionElementImpl.java com/sun/org/apache/html/internal/dom/HTMLBodyElementImpl.java com/sun/org/apache/html/internal/dom/HTMLBuilder.java com/sun/org/apache/html/internal/dom/HTMLButtonElementImpl.java com/sun/org/apache/html/internal/dom/HTMLCollectionImpl.java com/sun/org/apache/html/internal/dom/HTMLDListElementImpl.java com/sun/org/apache/html/internal/dom/HTMLDOMImplementationImpl.java com/sun/org/apache/html/internal/dom/HTMLDirectoryElementImpl.java com/sun/org/apache/html/internal/dom/HTMLDivElementImpl.java com/sun/org/apache/html/internal/dom/HTMLDocumentImpl.java com/sun/org/apache/html/internal/dom/HTMLElementImpl.java com/sun/org/apache/html/internal/dom/HTMLFieldSetElementImpl.java com/sun/org/apache/html/internal/dom/HTMLFontElementImpl.java com/sun/org/apache/html/internal/dom/HTMLFormControl.java com/sun/org/apache/html/internal/dom/HTMLFormElementImpl.java com/sun/org/apache/html/internal/dom/HTMLFrameElementImpl.java com/sun/org/apache/html/internal/dom/HTMLFrameSetElementImpl.java com/sun/org/apache/html/internal/dom/HTMLHRElementImpl.java com/sun/org/apache/html/internal/dom/HTMLHeadElementImpl.java com/sun/org/apache/html/internal/dom/HTMLHeadingElementImpl.java com/sun/org/apache/html/internal/dom/HTMLHtmlElementImpl.java com/sun/org/apache/html/internal/dom/HTMLIFrameElementImpl.java com/sun/org/apache/html/internal/dom/HTMLImageElementImpl.java com/sun/org/apache/html/internal/dom/HTMLInputElementImpl.java com/sun/org/apache/html/internal/dom/HTMLIsIndexElementImpl.java com/sun/org/apache/html/internal/dom/HTMLLIElementImpl.java com/sun/org/apache/html/internal/dom/HTMLLabelElementImpl.java com/sun/org/apache/html/internal/dom/HTMLLegendElementImpl.java com/sun/org/apache/html/internal/dom/HTMLLinkElementImpl.java com/sun/org/apache/html/internal/dom/HTMLMapElementImpl.java com/sun/org/apache/html/internal/dom/HTMLMenuElementImpl.java com/sun/org/apache/html/internal/dom/HTMLMetaElementImpl.java com/sun/org/apache/html/internal/dom/HTMLModElementImpl.java com/sun/org/apache/html/internal/dom/HTMLOListElementImpl.java com/sun/org/apache/html/internal/dom/HTMLObjectElementImpl.java com/sun/org/apache/html/internal/dom/HTMLOptGroupElementImpl.java com/sun/org/apache/html/internal/dom/HTMLOptionElementImpl.java com/sun/org/apache/html/internal/dom/HTMLParagraphElementImpl.java com/sun/org/apache/html/internal/dom/HTMLParamElementImpl.java com/sun/org/apache/html/internal/dom/HTMLPreElementImpl.java com/sun/org/apache/html/internal/dom/HTMLQuoteElementImpl.java com/sun/org/apache/html/internal/dom/HTMLScriptElementImpl.java com/sun/org/apache/html/internal/dom/HTMLSelectElementImpl.java com/sun/org/apache/html/internal/dom/HTMLStyleElementImpl.java com/sun/org/apache/html/internal/dom/HTMLTableCellElementImpl.java com/sun/org/apache/html/internal/dom/HTMLTableColElementImpl.java com/sun/org/apache/html/internal/dom/HTMLTableElementImpl.java com/sun/org/apache/html/internal/dom/ObjectFactory.java com/sun/org/apache/html/internal/dom/HTMLTableRowElementImpl.java com/sun/org/apache/html/internal/dom/HTMLTableSectionElementImpl.java com/sun/org/apache/html/internal/dom/HTMLTextAreaElementImpl.java com/sun/org/apache/html/internal/dom/HTMLTitleElementImpl.java com/sun/org/apache/html/internal/dom/HTMLUListElementImpl.java com/sun/org/apache/html/internal/dom/NameNodeListImpl.java com/sun/org/apache/html/internal/dom/SecuritySupport.java com/sun/org/apache/html/internal/dom/SecuritySupport12.java com/sun/org/apache/regexp com/sun/org/apache/regexp/internal com/sun/org/apache/regexp/internal/SCCS com/sun/org/apache/regexp/internal/SCCS/s.RE.java com/sun/org/apache/regexp/internal/SCCS/s.REDebugCompiler.java com/sun/org/apache/regexp/internal/SCCS/s.CharacterArrayCharacterIterator.java com/sun/org/apache/regexp/internal/SCCS/s.CharacterIterator.java com/sun/org/apache/regexp/internal/SCCS/s.RECompiler.java com/sun/org/apache/regexp/internal/SCCS/s.RESyntaxException.java com/sun/org/apache/regexp/internal/SCCS/s.REDemo.java com/sun/org/apache/regexp/internal/SCCS/s.REProgram.java com/sun/org/apache/regexp/internal/SCCS/s.RETest.java com/sun/org/apache/regexp/internal/SCCS/s.REUtil.java com/sun/org/apache/regexp/internal/SCCS/s.ReaderCharacterIterator.java com/sun/org/apache/regexp/internal/SCCS/s.StreamCharacterIterator.java com/sun/org/apache/regexp/internal/SCCS/s.StringCharacterIterator.java com/sun/org/apache/regexp/internal/SCCS/s.recompile.java com/sun/org/apache/regexp/internal/RE.java com/sun/org/apache/regexp/internal/ReaderCharacterIterator.java com/sun/org/apache/regexp/internal/CharacterArrayCharacterIterator.java com/sun/org/apache/regexp/internal/CharacterIterator.java com/sun/org/apache/regexp/internal/RECompiler.java com/sun/org/apache/regexp/internal/REDebugCompiler.java com/sun/org/apache/regexp/internal/REDemo.java com/sun/org/apache/regexp/internal/REProgram.java com/sun/org/apache/regexp/internal/RESyntaxException.java com/sun/org/apache/regexp/internal/RETest.java com/sun/org/apache/regexp/internal/REUtil.java com/sun/org/apache/regexp/internal/StreamCharacterIterator.java com/sun/org/apache/regexp/internal/StringCharacterIterator.java com/sun/org/apache/regexp/internal/recompile.java com/sun/org/apache/wml com/sun/org/apache/wml/internal com/sun/org/apache/wml/internal/SCCS com/sun/org/apache/wml/internal/SCCS/s.WMLAccessElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLAElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLAnchorElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLBElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLBigElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLBrElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLCardElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLDOMImplementation.java com/sun/org/apache/wml/internal/SCCS/s.WMLDoElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLDocument.java com/sun/org/apache/wml/internal/SCCS/s.WMLElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLEmElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLFieldsetElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLGoElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLHeadElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLIElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLImgElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLInputElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLMetaElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLNoopElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLOneventElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLOptgroupElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLOptionElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLPElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLPostfieldElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLPrevElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLRefreshElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLSelectElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLSetvarElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLSmallElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLStrongElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLTableElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLTdElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLTemplateElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLTimerElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLTrElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLUElement.java com/sun/org/apache/wml/internal/SCCS/s.WMLWmlElement.java com/sun/org/apache/wml/internal/dom com/sun/org/apache/wml/internal/dom/SCCS com/sun/org/apache/wml/internal/dom/SCCS/s.WMLAccessElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLAElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLAnchorElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLBElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLBigElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLBrElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLCardElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLDOMImplementationImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLDoElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLDocumentImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLEmElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLGoElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLFieldsetElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLHeadElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLIElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLImgElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLInputElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLMetaElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLNoopElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLOneventElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLOptgroupElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLOptionElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLPElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLPostfieldElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLPrevElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLSelectElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLRefreshElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLSetvarElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLSmallElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLStrongElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLTableElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLTdElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLTemplateElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLTimerElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLTrElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLUElementImpl.java com/sun/org/apache/wml/internal/dom/SCCS/s.WMLWmlElementImpl.java com/sun/org/apache/wml/internal/dom/WMLAccessElementImpl.java com/sun/org/apache/wml/internal/dom/WMLAElementImpl.java com/sun/org/apache/wml/internal/dom/WMLAnchorElementImpl.java com/sun/org/apache/wml/internal/dom/WMLBElementImpl.java com/sun/org/apache/wml/internal/dom/WMLBigElementImpl.java com/sun/org/apache/wml/internal/dom/WMLBrElementImpl.java com/sun/org/apache/wml/internal/dom/WMLCardElementImpl.java com/sun/org/apache/wml/internal/dom/WMLDOMImplementationImpl.java com/sun/org/apache/wml/internal/dom/WMLDoElementImpl.java com/sun/org/apache/wml/internal/dom/WMLDocumentImpl.java com/sun/org/apache/wml/internal/dom/WMLElementImpl.java com/sun/org/apache/wml/internal/dom/WMLEmElementImpl.java com/sun/org/apache/wml/internal/dom/WMLFieldsetElementImpl.java com/sun/org/apache/wml/internal/dom/WMLGoElementImpl.java com/sun/org/apache/wml/internal/dom/WMLHeadElementImpl.java com/sun/org/apache/wml/internal/dom/WMLIElementImpl.java com/sun/org/apache/wml/internal/dom/WMLImgElementImpl.java com/sun/org/apache/wml/internal/dom/WMLInputElementImpl.java com/sun/org/apache/wml/internal/dom/WMLMetaElementImpl.java com/sun/org/apache/wml/internal/dom/WMLNoopElementImpl.java com/sun/org/apache/wml/internal/dom/WMLOneventElementImpl.java com/sun/org/apache/wml/internal/dom/WMLOptgroupElementImpl.java com/sun/org/apache/wml/internal/dom/WMLOptionElementImpl.java com/sun/org/apache/wml/internal/dom/WMLPElementImpl.java com/sun/org/apache/wml/internal/dom/WMLPostfieldElementImpl.java com/sun/org/apache/wml/internal/dom/WMLPrevElementImpl.java com/sun/org/apache/wml/internal/dom/WMLRefreshElementImpl.java com/sun/org/apache/wml/internal/dom/WMLSelectElementImpl.java com/sun/org/apache/wml/internal/dom/WMLTdElementImpl.java com/sun/org/apache/wml/internal/dom/WMLSetvarElementImpl.java com/sun/org/apache/wml/internal/dom/WMLSmallElementImpl.java com/sun/org/apache/wml/internal/dom/WMLStrongElementImpl.java com/sun/org/apache/wml/internal/dom/WMLTableElementImpl.java com/sun/org/apache/wml/internal/dom/WMLTemplateElementImpl.java com/sun/org/apache/wml/internal/dom/WMLTimerElementImpl.java com/sun/org/apache/wml/internal/dom/WMLTrElementImpl.java com/sun/org/apache/wml/internal/dom/WMLUElementImpl.java com/sun/org/apache/wml/internal/dom/WMLWmlElementImpl.java com/sun/org/apache/wml/internal/WMLAccessElement.java com/sun/org/apache/wml/internal/WMLAElement.java com/sun/org/apache/wml/internal/WMLAnchorElement.java com/sun/org/apache/wml/internal/WMLBElement.java com/sun/org/apache/wml/internal/WMLBigElement.java com/sun/org/apache/wml/internal/WMLBrElement.java com/sun/org/apache/wml/internal/WMLCardElement.java com/sun/org/apache/wml/internal/WMLDOMImplementation.java com/sun/org/apache/wml/internal/WMLDoElement.java com/sun/org/apache/wml/internal/WMLDocument.java com/sun/org/apache/wml/internal/WMLElement.java com/sun/org/apache/wml/internal/WMLEmElement.java com/sun/org/apache/wml/internal/WMLFieldsetElement.java com/sun/org/apache/wml/internal/WMLGoElement.java com/sun/org/apache/wml/internal/WMLHeadElement.java com/sun/org/apache/wml/internal/WMLIElement.java com/sun/org/apache/wml/internal/WMLImgElement.java com/sun/org/apache/wml/internal/WMLInputElement.java com/sun/org/apache/wml/internal/WMLMetaElement.java com/sun/org/apache/wml/internal/WMLNoopElement.java com/sun/org/apache/wml/internal/WMLOneventElement.java com/sun/org/apache/wml/internal/WMLOptgroupElement.java com/sun/org/apache/wml/internal/WMLOptionElement.java com/sun/org/apache/wml/internal/WMLPElement.java com/sun/org/apache/wml/internal/WMLPostfieldElement.java com/sun/org/apache/wml/internal/WMLPrevElement.java com/sun/org/apache/wml/internal/WMLRefreshElement.java com/sun/org/apache/wml/internal/WMLSelectElement.java com/sun/org/apache/wml/internal/WMLSetvarElement.java com/sun/org/apache/wml/internal/WMLSmallElement.java com/sun/org/apache/wml/internal/WMLStrongElement.java com/sun/org/apache/wml/internal/WMLTableElement.java com/sun/org/apache/wml/internal/WMLTdElement.java com/sun/org/apache/wml/internal/WMLTemplateElement.java com/sun/org/apache/wml/internal/WMLTimerElement.java com/sun/org/apache/wml/internal/WMLTrElement.java com/sun/org/apache/wml/internal/WMLUElement.java com/sun/org/apache/wml/internal/WMLWmlElement.java com/sun/org/apache/xalan com/sun/org/apache/xalan/internal com/sun/org/apache/xalan/internal/SCCS com/sun/org/apache/xalan/internal/SCCS/s.Version.java com/sun/org/apache/xalan/internal/client com/sun/org/apache/xalan/internal/client/SCCS com/sun/org/apache/xalan/internal/client/SCCS/s.XSLTProcessorApplet.java com/sun/org/apache/xalan/internal/client/SCCS/s.package.html com/sun/org/apache/xalan/internal/client/XSLTProcessorApplet.java com/sun/org/apache/xalan/internal/client/package.html com/sun/org/apache/xalan/internal/extensions com/sun/org/apache/xalan/internal/extensions/SCCS com/sun/org/apache/xalan/internal/extensions/SCCS/s.ExpressionContext.java com/sun/org/apache/xalan/internal/extensions/SCCS/s.package.html com/sun/org/apache/xalan/internal/extensions/ExpressionContext.java com/sun/org/apache/xalan/internal/extensions/package.html com/sun/org/apache/xalan/internal/lib com/sun/org/apache/xalan/internal/lib/SCCS com/sun/org/apache/xalan/internal/lib/SCCS/s.ExsltDatetime.java com/sun/org/apache/xalan/internal/lib/SCCS/s.ExsltBase.java com/sun/org/apache/xalan/internal/lib/SCCS/s.ExsltCommon.java com/sun/org/apache/xalan/internal/lib/SCCS/s.SecuritySupport12.java com/sun/org/apache/xalan/internal/lib/SCCS/s.ExsltDynamic.java com/sun/org/apache/xalan/internal/lib/SCCS/s.ExsltMath.java com/sun/org/apache/xalan/internal/lib/SCCS/s.ExsltSets.java com/sun/org/apache/xalan/internal/lib/SCCS/s.ExsltStrings.java com/sun/org/apache/xalan/internal/lib/SCCS/s.Extensions.java com/sun/org/apache/xalan/internal/lib/SCCS/s.ObjectFactory.java com/sun/org/apache/xalan/internal/lib/SCCS/s.SecuritySupport.java com/sun/org/apache/xalan/internal/lib/sql com/sun/org/apache/xalan/internal/lib/sql/SCCS com/sun/org/apache/xalan/internal/lib/ExsltCommon.java com/sun/org/apache/xalan/internal/lib/ExsltBase.java com/sun/org/apache/xalan/internal/lib/ExsltDatetime.java com/sun/org/apache/xalan/internal/lib/ExsltDynamic.java com/sun/org/apache/xalan/internal/lib/ExsltMath.java com/sun/org/apache/xalan/internal/lib/ExsltSets.java com/sun/org/apache/xalan/internal/lib/ExsltStrings.java com/sun/org/apache/xalan/internal/lib/Extensions.java com/sun/org/apache/xalan/internal/lib/ObjectFactory.java com/sun/org/apache/xalan/internal/lib/SecuritySupport.java com/sun/org/apache/xalan/internal/lib/SecuritySupport12.java com/sun/org/apache/xalan/internal/processor com/sun/org/apache/xalan/internal/processor/SCCS com/sun/org/apache/xalan/internal/res com/sun/org/apache/xalan/internal/res/SCCS com/sun/org/apache/xalan/internal/res/SCCS/s.XSLTErrorResources.java com/sun/org/apache/xalan/internal/res/SCCS/s.XSLMessages.java com/sun/org/apache/xalan/internal/res/SCCS/s.XSLTErrorResources_de.java com/sun/org/apache/xalan/internal/res/SCCS/s.XSLTErrorResources_en.java com/sun/org/apache/xalan/internal/res/SCCS/s.XSLTErrorResources_es.java com/sun/org/apache/xalan/internal/res/SCCS/s.XSLTErrorResources_fr.java com/sun/org/apache/xalan/internal/res/SCCS/s.XSLTErrorResources_it.java com/sun/org/apache/xalan/internal/res/SCCS/s.XSLTErrorResources_ja.java com/sun/org/apache/xalan/internal/res/SCCS/s.XSLTErrorResources_ko.java com/sun/org/apache/xalan/internal/res/SCCS/s.XSLTErrorResources_sv.java com/sun/org/apache/xalan/internal/res/SCCS/s.XSLTErrorResources_zh_CN.java com/sun/org/apache/xalan/internal/res/SCCS/s.XSLTErrorResources_zh_HK.java com/sun/org/apache/xalan/internal/res/SCCS/s.package.html com/sun/org/apache/xalan/internal/res/SCCS/s.XSLTErrorResources_zh_TW.java com/sun/org/apache/xalan/internal/res/SCCS/s.XSLTInfo.properties com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java com/sun/org/apache/xalan/internal/res/XSLMessages.java com/sun/org/apache/xalan/internal/res/XSLTErrorResources_de.java com/sun/org/apache/xalan/internal/res/XSLTErrorResources_en.java com/sun/org/apache/xalan/internal/res/XSLTErrorResources_es.java com/sun/org/apache/xalan/internal/res/XSLTErrorResources_fr.java com/sun/org/apache/xalan/internal/res/XSLTErrorResources_it.java com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ja.java com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ko.java com/sun/org/apache/xalan/internal/res/XSLTErrorResources_sv.java com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_CN.java com/sun/org/apache/xalan/internal/res/XSLTInfo.properties com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_HK.java com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_TW.java com/sun/org/apache/xalan/internal/res/package.html com/sun/org/apache/xalan/internal/serialize com/sun/org/apache/xalan/internal/serialize/SCCS com/sun/org/apache/xalan/internal/templates com/sun/org/apache/xalan/internal/templates/SCCS com/sun/org/apache/xalan/internal/templates/SCCS/s.Constants.java com/sun/org/apache/xalan/internal/templates/SCCS/s.package.html com/sun/org/apache/xalan/internal/templates/Constants.java com/sun/org/apache/xalan/internal/templates/package.html com/sun/org/apache/xalan/internal/trace com/sun/org/apache/xalan/internal/trace/SCCS com/sun/org/apache/xalan/internal/transformer com/sun/org/apache/xalan/internal/transformer/SCCS com/sun/org/apache/xalan/internal/xslt com/sun/org/apache/xalan/internal/xslt/SCCS com/sun/org/apache/xalan/internal/xslt/SCCS/s.SecuritySupport12.java com/sun/org/apache/xalan/internal/xslt/SCCS/s.EnvironmentCheck.java com/sun/org/apache/xalan/internal/xslt/SCCS/s.ObjectFactory.java com/sun/org/apache/xalan/internal/xslt/SCCS/s.Process.java com/sun/org/apache/xalan/internal/xslt/SCCS/s.SecuritySupport.java com/sun/org/apache/xalan/internal/xslt/SCCS/s.package.html com/sun/org/apache/xalan/internal/xslt/EnvironmentCheck.java com/sun/org/apache/xalan/internal/xslt/ObjectFactory.java com/sun/org/apache/xalan/internal/xslt/Process.java com/sun/org/apache/xalan/internal/xslt/SecuritySupport.java com/sun/org/apache/xalan/internal/xslt/SecuritySupport12.java com/sun/org/apache/xalan/internal/xslt/package.html com/sun/org/apache/xalan/internal/xsltc com/sun/org/apache/xalan/internal/xsltc/SCCS com/sun/org/apache/xalan/internal/xsltc/SCCS/s.DOMEnhancedForDTM.java com/sun/org/apache/xalan/internal/xsltc/SCCS/s.CollatorFactory.java com/sun/org/apache/xalan/internal/xsltc/SCCS/s.DOM.java com/sun/org/apache/xalan/internal/xsltc/SCCS/s.DOMCache.java com/sun/org/apache/xalan/internal/xsltc/SCCS/s.TransletException.java com/sun/org/apache/xalan/internal/xsltc/SCCS/s.NodeIterator.java com/sun/org/apache/xalan/internal/xsltc/SCCS/s.ProcessorVersion.java com/sun/org/apache/xalan/internal/xsltc/SCCS/s.StripFilter.java com/sun/org/apache/xalan/internal/xsltc/SCCS/s.Translet.java com/sun/org/apache/xalan/internal/xsltc/SCCS/s.javax.xml.transform.TransformerFactory com/sun/org/apache/xalan/internal/xsltc/cmdline com/sun/org/apache/xalan/internal/xsltc/cmdline/SCCS com/sun/org/apache/xalan/internal/xsltc/cmdline/SCCS/s.ObjectFactory.java com/sun/org/apache/xalan/internal/xsltc/cmdline/SCCS/s.Compile.java com/sun/org/apache/xalan/internal/xsltc/cmdline/SCCS/s.SecuritySupport12.java com/sun/org/apache/xalan/internal/xsltc/cmdline/SCCS/s.SecuritySupport.java com/sun/org/apache/xalan/internal/xsltc/cmdline/SCCS/s.Transform.java com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/SCCS com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/SCCS/s.GetOptsException.java com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/SCCS/s.GetOpt.java com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/SCCS/s.IllegalArgumentException.java com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/SCCS/s.MissingOptArgException.java com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOpt.java com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOptsException.java com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/IllegalArgumentException.java com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/MissingOptArgException.java com/sun/org/apache/xalan/internal/xsltc/cmdline/ObjectFactory.java com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.java com/sun/org/apache/xalan/internal/xsltc/cmdline/SecuritySupport.java com/sun/org/apache/xalan/internal/xsltc/cmdline/SecuritySupport12.java com/sun/org/apache/xalan/internal/xsltc/cmdline/Transform.java com/sun/org/apache/xalan/internal/xsltc/compiler com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.AttributeValueTemplate.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.AbsoluteLocationPath.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.AbsolutePathPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.AlternativePattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.AncestorPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ApplyImports.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ApplyTemplates.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ArgumentList.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Attribute.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.AttributeSet.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.AttributeValue.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.BinOpExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.BooleanCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.BooleanExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.CopyOf.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Copy.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.CallTemplate.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.CastCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.CastExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.CeilingCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Choose.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Closure.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Comment.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.CompilerException.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ConcatCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Constants.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ContainsCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.DecimalFormatting.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.CurrentCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ElementAvailableCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.DocumentCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.FilterParentPath.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.EqualityExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Fallback.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Expression.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.FilterExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.If.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.FilteredAbsoluteLocationPath.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.FloorCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.FlowList.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ForEach.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.FormatNumberCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.FunctionAvailableCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.FunctionCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.GenerateIdCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.IdKeyPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.IdPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Import.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.IllegalCharException.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Include.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ProcessingInstruction.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Instruction.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.IntExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Key.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.KeyCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.KeyPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.LangCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.LastCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.LiteralAttribute.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.LiteralElement.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.LiteralExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.LocalNameCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.LocationPathPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.LogicalExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Makefile.inc com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Message.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Mode.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.NameBase.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.NameCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.NamespaceAlias.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.NamespaceUriCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.NodeTest.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.NotCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Number.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.NumberCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ObjectFactory.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Otherwise.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Output.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Param.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ParameterRef.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ParentLocationPath.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ParentPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Parser.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Pattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.PositionCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.PositionCall.java.inuse com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Predicate.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.RelationalExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.QName.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.RealExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ProcessingInstructionPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.When.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.RelativeLocationPath.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.RelativePathPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.RoundCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.SecuritySupport.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.SecuritySupport12.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.SimpleAttributeValue.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Sort.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.SourceLoader.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.StartsWithCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Step.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.StepPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.StringCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.StringLengthCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Stylesheet.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.SymbolTable.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.SyntaxTreeNode.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Template.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.TestSeq.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Text.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.TopLevelElement.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.TransletOutput.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.UnaryOpExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.UnionPathExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.UnparsedEntityUriCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.UnresolvedRef.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.UnsupportedElement.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.UseAttributeSets.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.ValueOf.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Variable.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.VariableBase.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.VariableRef.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.VariableRefBase.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.Whitespace.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.WithParam.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.XPathLexer.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.XPathParser.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.XSLTC.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.XslAttribute.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.XslElement.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.sym.java com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.xpath.cup com/sun/org/apache/xalan/internal/xsltc/compiler/SCCS/s.xpath.lex com/sun/org/apache/xalan/internal/xsltc/compiler/util com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.AttributeSetMethodGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.BooleanType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ClassGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.CompareGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ErrorMessages.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ErrorMessages_ca.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ErrorMessages_cs.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ErrorMessages_de.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ErrorMessages_es.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ErrorMessages_fr.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ErrorMessages_it.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ErrorMessages_ja.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ErrorMessages_ko.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.NodeType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.RtMethodGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ErrorMessages_sk.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ErrorMessages_zh_CN.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ErrorMessages_zh_TW.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ErrorMsg.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.FilterGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.IntType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.MatchGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.MethodGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.MethodType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.MultiHashtable.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.NamedMethodGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.NodeCounterGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.NodeSetType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.NodeSortRecordFactGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.NodeSortRecordGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.Type.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.NumberType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ObjectFactory.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ObjectType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.RealType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ReferenceType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.ResultTreeType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.SecuritySupport12.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.SecuritySupport.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.SlotAllocator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.StringStack.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.StringType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.TestGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.TypeCheckError.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.Util.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SCCS/s.VoidType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectFactory.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/AttributeSetMethodGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/BooleanType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ClassGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/CompareGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ca.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_cs.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_de.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_es.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_fr.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_it.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ja.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ko.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/NumberType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sk.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_CN.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_TW.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/FilterGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/IntType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/MatchGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/MultiHashtable.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/NamedMethodGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeCounterGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSetType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSortRecordFactGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSortRecordGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ReferenceType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/RealType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/ResultTreeType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/RtMethodGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SecuritySupport.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SecuritySupport12.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/SlotAllocator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/StringStack.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/StringType.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/TestGenerator.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/Type.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/TypeCheckError.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/Util.java com/sun/org/apache/xalan/internal/xsltc/compiler/util/VoidType.java com/sun/org/apache/xalan/internal/xsltc/compiler/AbsoluteLocationPath.java com/sun/org/apache/xalan/internal/xsltc/compiler/AbsolutePathPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/AlternativePattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/AncestorPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyImports.java com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyTemplates.java com/sun/org/apache/xalan/internal/xsltc/compiler/ArgumentList.java com/sun/org/apache/xalan/internal/xsltc/compiler/Attribute.java com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeSet.java com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeValue.java com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeValueTemplate.java com/sun/org/apache/xalan/internal/xsltc/compiler/BinOpExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/BooleanCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/BooleanExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/ElementAvailableCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/CallTemplate.java com/sun/org/apache/xalan/internal/xsltc/compiler/CastCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/CastExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/CeilingCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/Choose.java com/sun/org/apache/xalan/internal/xsltc/compiler/Closure.java com/sun/org/apache/xalan/internal/xsltc/compiler/Comment.java com/sun/org/apache/xalan/internal/xsltc/compiler/CompilerException.java com/sun/org/apache/xalan/internal/xsltc/compiler/ConcatCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/Constants.java com/sun/org/apache/xalan/internal/xsltc/compiler/ContainsCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/Copy.java com/sun/org/apache/xalan/internal/xsltc/compiler/CopyOf.java com/sun/org/apache/xalan/internal/xsltc/compiler/CurrentCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/DecimalFormatting.java com/sun/org/apache/xalan/internal/xsltc/compiler/DocumentCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/EqualityExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/Expression.java com/sun/org/apache/xalan/internal/xsltc/compiler/If.java com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralAttribute.java com/sun/org/apache/xalan/internal/xsltc/compiler/Fallback.java com/sun/org/apache/xalan/internal/xsltc/compiler/FilterExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/FilterParentPath.java com/sun/org/apache/xalan/internal/xsltc/compiler/FilteredAbsoluteLocationPath.java com/sun/org/apache/xalan/internal/xsltc/compiler/FloorCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/FlowList.java com/sun/org/apache/xalan/internal/xsltc/compiler/ForEach.java com/sun/org/apache/xalan/internal/xsltc/compiler/FormatNumberCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionAvailableCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/GenerateIdCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/IdKeyPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/IdPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/Import.java com/sun/org/apache/xalan/internal/xsltc/compiler/Include.java com/sun/org/apache/xalan/internal/xsltc/compiler/IllegalCharException.java com/sun/org/apache/xalan/internal/xsltc/compiler/Instruction.java com/sun/org/apache/xalan/internal/xsltc/compiler/IntExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/Key.java com/sun/org/apache/xalan/internal/xsltc/compiler/KeyCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/KeyPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/LangCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/LastCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/LocationPathPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralElement.java com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/LocalNameCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/NamespaceUriCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/LogicalExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/Makefile.inc com/sun/org/apache/xalan/internal/xsltc/compiler/Message.java com/sun/org/apache/xalan/internal/xsltc/compiler/Mode.java com/sun/org/apache/xalan/internal/xsltc/compiler/NameBase.java com/sun/org/apache/xalan/internal/xsltc/compiler/NameCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/NamespaceAlias.java com/sun/org/apache/xalan/internal/xsltc/compiler/NodeTest.java com/sun/org/apache/xalan/internal/xsltc/compiler/Pattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java com/sun/org/apache/xalan/internal/xsltc/compiler/NotCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/Number.java com/sun/org/apache/xalan/internal/xsltc/compiler/NumberCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/ObjectFactory.java com/sun/org/apache/xalan/internal/xsltc/compiler/Otherwise.java com/sun/org/apache/xalan/internal/xsltc/compiler/Output.java com/sun/org/apache/xalan/internal/xsltc/compiler/Param.java com/sun/org/apache/xalan/internal/xsltc/compiler/ParameterRef.java com/sun/org/apache/xalan/internal/xsltc/compiler/ParentLocationPath.java com/sun/org/apache/xalan/internal/xsltc/compiler/ParentPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/PositionCall.java.inuse com/sun/org/apache/xalan/internal/xsltc/compiler/PositionCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/Predicate.java com/sun/org/apache/xalan/internal/xsltc/compiler/RealExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/QName.java com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstruction.java com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstructionPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SecuritySupport.java com/sun/org/apache/xalan/internal/xsltc/compiler/RoundCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/RelationalExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/RelativeLocationPath.java com/sun/org/apache/xalan/internal/xsltc/compiler/RelativePathPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/SimpleAttributeValue.java com/sun/org/apache/xalan/internal/xsltc/compiler/SecuritySupport12.java com/sun/org/apache/xalan/internal/xsltc/compiler/SourceLoader.java com/sun/org/apache/xalan/internal/xsltc/compiler/Sort.java com/sun/org/apache/xalan/internal/xsltc/compiler/TopLevelElement.java com/sun/org/apache/xalan/internal/xsltc/compiler/StartsWithCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/Step.java com/sun/org/apache/xalan/internal/xsltc/compiler/StepPattern.java com/sun/org/apache/xalan/internal/xsltc/compiler/StringCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/StringLengthCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/Stylesheet.java com/sun/org/apache/xalan/internal/xsltc/compiler/SymbolTable.java com/sun/org/apache/xalan/internal/xsltc/compiler/SyntaxTreeNode.java com/sun/org/apache/xalan/internal/xsltc/compiler/Template.java com/sun/org/apache/xalan/internal/xsltc/compiler/TestSeq.java com/sun/org/apache/xalan/internal/xsltc/compiler/Text.java com/sun/org/apache/xalan/internal/xsltc/compiler/UnparsedEntityUriCall.java com/sun/org/apache/xalan/internal/xsltc/compiler/TransletOutput.java com/sun/org/apache/xalan/internal/xsltc/compiler/UnaryOpExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/UnionPathExpr.java com/sun/org/apache/xalan/internal/xsltc/compiler/UnsupportedElement.java com/sun/org/apache/xalan/internal/xsltc/compiler/UnresolvedRef.java com/sun/org/apache/xalan/internal/xsltc/compiler/UseAttributeSets.java com/sun/org/apache/xalan/internal/xsltc/compiler/ValueOf.java com/sun/org/apache/xalan/internal/xsltc/compiler/Variable.java com/sun/org/apache/xalan/internal/xsltc/compiler/VariableBase.java com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRef.java com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRefBase.java com/sun/org/apache/xalan/internal/xsltc/compiler/When.java com/sun/org/apache/xalan/internal/xsltc/compiler/Whitespace.java com/sun/org/apache/xalan/internal/xsltc/compiler/WithParam.java com/sun/org/apache/xalan/internal/xsltc/compiler/XPathLexer.java com/sun/org/apache/xalan/internal/xsltc/compiler/XPathParser.java com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java com/sun/org/apache/xalan/internal/xsltc/compiler/XslAttribute.java com/sun/org/apache/xalan/internal/xsltc/compiler/XslElement.java com/sun/org/apache/xalan/internal/xsltc/compiler/sym.java com/sun/org/apache/xalan/internal/xsltc/compiler/xpath.cup com/sun/org/apache/xalan/internal/xsltc/compiler/xpath.lex com/sun/org/apache/xalan/internal/xsltc/dom com/sun/org/apache/xalan/internal/xsltc/dom/SCCS com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.AdaptiveResultTreeImpl.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.AbsoluteIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.CachedNodeListIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.AnyNodeCounter.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.Axis.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.BitArray.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.DocumentCache.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.ClonedNodeListIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.CollatorFactoryBase.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.CurrentNodeListFilter.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.CurrentNodeListIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.DOM.java.Palm com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.DOMAdapter.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.DOMBuilder.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.DOMWSFilter.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.ForwardPositionIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.DupFilterIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.EmptyFilter.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.ExtendedSAX.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.Filter.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.FilterIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.FilteredStepIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.MatchingIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.KeyIndex.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.LoadDocument.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.MultiDOM.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.NodeCounter.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.MultipleNodeCounter.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.NodeIteratorBase.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.NodeSortRecord.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.NodeSortRecordFactory.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.NthIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.ObjectFactory.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.SAXImpl.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.SecuritySupport.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.SecuritySupport12.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.SimpleResultTreeImpl.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.SingleNodeCounter.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.SingletonIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.SortSettings.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.SortingIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.StepIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.StripWhitespaceFilter.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.UnionIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SCCS/s.XSLTCDTMManager.java com/sun/org/apache/xalan/internal/xsltc/dom/AdaptiveResultTreeImpl.java com/sun/org/apache/xalan/internal/xsltc/dom/AbsoluteIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/CachedNodeListIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/AnyNodeCounter.java com/sun/org/apache/xalan/internal/xsltc/dom/Axis.java com/sun/org/apache/xalan/internal/xsltc/dom/BitArray.java com/sun/org/apache/xalan/internal/xsltc/dom/FilterIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/Filter.java com/sun/org/apache/xalan/internal/xsltc/dom/ClonedNodeListIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/CollatorFactoryBase.java com/sun/org/apache/xalan/internal/xsltc/dom/CurrentNodeListFilter.java com/sun/org/apache/xalan/internal/xsltc/dom/CurrentNodeListIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/DOM.java.Palm com/sun/org/apache/xalan/internal/xsltc/dom/DOMAdapter.java com/sun/org/apache/xalan/internal/xsltc/dom/DOMBuilder.java com/sun/org/apache/xalan/internal/xsltc/dom/DOMWSFilter.java com/sun/org/apache/xalan/internal/xsltc/dom/DocumentCache.java com/sun/org/apache/xalan/internal/xsltc/dom/DupFilterIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/EmptyFilter.java com/sun/org/apache/xalan/internal/xsltc/dom/ExtendedSAX.java com/sun/org/apache/xalan/internal/xsltc/dom/ForwardPositionIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/FilteredStepIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/MatchingIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/KeyIndex.java com/sun/org/apache/xalan/internal/xsltc/dom/LoadDocument.java com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM.java com/sun/org/apache/xalan/internal/xsltc/dom/NodeCounter.java com/sun/org/apache/xalan/internal/xsltc/dom/MultipleNodeCounter.java com/sun/org/apache/xalan/internal/xsltc/dom/NodeIteratorBase.java com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecord.java com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecordFactory.java com/sun/org/apache/xalan/internal/xsltc/dom/NthIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SAXImpl.java com/sun/org/apache/xalan/internal/xsltc/dom/ObjectFactory.java com/sun/org/apache/xalan/internal/xsltc/dom/SecuritySupport.java com/sun/org/apache/xalan/internal/xsltc/dom/SecuritySupport12.java com/sun/org/apache/xalan/internal/xsltc/dom/SimpleResultTreeImpl.java com/sun/org/apache/xalan/internal/xsltc/dom/SingleNodeCounter.java com/sun/org/apache/xalan/internal/xsltc/dom/SingletonIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/SortSettings.java com/sun/org/apache/xalan/internal/xsltc/dom/SortingIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/StepIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/StripWhitespaceFilter.java com/sun/org/apache/xalan/internal/xsltc/dom/UnionIterator.java com/sun/org/apache/xalan/internal/xsltc/dom/XSLTCDTMManager.java com/sun/org/apache/xalan/internal/xsltc/runtime com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.AbstractTranslet.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.AttributeList.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.Attributes.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.BasisLibrary.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.CallFunction.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.Constants.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.ErrorMessages.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.ErrorMessages_ca.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.ErrorMessages_cs.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.ErrorMessages_de.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.ErrorMessages_es.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.ErrorMessages_fr.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.ErrorMessages_it.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.ErrorMessages_ja.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.Node.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.SecuritySupport.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.ErrorMessages_ko.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.ErrorMessages_sk.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.ErrorMessages_zh_CN.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.ErrorMessages_zh_TW.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.Hashtable.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.MessageHandler.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.Operators.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.ObjectFactory.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.Parameter.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.SecuritySupport12.java com/sun/org/apache/xalan/internal/xsltc/runtime/SCCS/s.StringValueHandler.java com/sun/org/apache/xalan/internal/xsltc/runtime/output com/sun/org/apache/xalan/internal/xsltc/runtime/output/SCCS com/sun/org/apache/xalan/internal/xsltc/runtime/output/SCCS/s.StringOutputBuffer.java com/sun/org/apache/xalan/internal/xsltc/runtime/output/SCCS/s.OutputBuffer.java com/sun/org/apache/xalan/internal/xsltc/runtime/output/SCCS/s.TransletOutputHandlerFactory.java com/sun/org/apache/xalan/internal/xsltc/runtime/output/SCCS/s.WriterOutputBuffer.java com/sun/org/apache/xalan/internal/xsltc/runtime/output/StringOutputBuffer.java com/sun/org/apache/xalan/internal/xsltc/runtime/output/OutputBuffer.java com/sun/org/apache/xalan/internal/xsltc/runtime/output/TransletOutputHandlerFactory.java com/sun/org/apache/xalan/internal/xsltc/runtime/output/WriterOutputBuffer.java com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_CN.java com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet.java com/sun/org/apache/xalan/internal/xsltc/runtime/AttributeList.java com/sun/org/apache/xalan/internal/xsltc/runtime/Attributes.java com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java com/sun/org/apache/xalan/internal/xsltc/runtime/CallFunction.java com/sun/org/apache/xalan/internal/xsltc/runtime/Constants.java com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages.java com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ca.java com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_cs.java com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_de.java com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_es.java com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_fr.java com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_it.java com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ja.java com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ko.java com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sk.java com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_TW.java com/sun/org/apache/xalan/internal/xsltc/runtime/Hashtable.java com/sun/org/apache/xalan/internal/xsltc/runtime/MessageHandler.java com/sun/org/apache/xalan/internal/xsltc/runtime/Node.java com/sun/org/apache/xalan/internal/xsltc/runtime/ObjectFactory.java com/sun/org/apache/xalan/internal/xsltc/runtime/Operators.java com/sun/org/apache/xalan/internal/xsltc/runtime/Parameter.java com/sun/org/apache/xalan/internal/xsltc/runtime/SecuritySupport.java com/sun/org/apache/xalan/internal/xsltc/runtime/SecuritySupport12.java com/sun/org/apache/xalan/internal/xsltc/runtime/StringValueHandler.java com/sun/org/apache/xalan/internal/xsltc/trax com/sun/org/apache/xalan/internal/xsltc/trax/SCCS com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.ObjectFactory.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.DOM2SAX.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.DOM2TO.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.SecuritySupport12.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.OutputSettings.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.SAX2DOM.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.SecuritySupport.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.Util.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.SmartTransformerFactoryImpl.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.TemplatesHandlerImpl.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.TemplatesImpl.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.TrAXFilter.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.TransformerFactoryImpl.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.TransformerHandlerImpl.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.TransformerImpl.java com/sun/org/apache/xalan/internal/xsltc/trax/SCCS/s.XSLTCSource.java com/sun/org/apache/xalan/internal/xsltc/trax/ObjectFactory.java com/sun/org/apache/xalan/internal/xsltc/trax/DOM2SAX.java com/sun/org/apache/xalan/internal/xsltc/trax/DOM2TO.java com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java com/sun/org/apache/xalan/internal/xsltc/trax/OutputSettings.java com/sun/org/apache/xalan/internal/xsltc/trax/SAX2DOM.java com/sun/org/apache/xalan/internal/xsltc/trax/SecuritySupport.java com/sun/org/apache/xalan/internal/xsltc/trax/SecuritySupport12.java com/sun/org/apache/xalan/internal/xsltc/trax/XSLTCSource.java com/sun/org/apache/xalan/internal/xsltc/trax/SmartTransformerFactoryImpl.java com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java com/sun/org/apache/xalan/internal/xsltc/trax/TrAXFilter.java com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java com/sun/org/apache/xalan/internal/xsltc/trax/TransformerHandlerImpl.java com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java com/sun/org/apache/xalan/internal/xsltc/trax/Util.java com/sun/org/apache/xalan/internal/xsltc/util com/sun/org/apache/xalan/internal/xsltc/util/SCCS com/sun/org/apache/xalan/internal/xsltc/util/SCCS/s.JavaCupRedirect.java com/sun/org/apache/xalan/internal/xsltc/util/SCCS/s.IntegerArray.java com/sun/org/apache/xalan/internal/xsltc/util/JavaCupRedirect.java com/sun/org/apache/xalan/internal/xsltc/util/IntegerArray.java com/sun/org/apache/xalan/internal/xsltc/CollatorFactory.java com/sun/org/apache/xalan/internal/xsltc/DOM.java com/sun/org/apache/xalan/internal/xsltc/DOMCache.java com/sun/org/apache/xalan/internal/xsltc/DOMEnhancedForDTM.java com/sun/org/apache/xalan/internal/xsltc/NodeIterator.java com/sun/org/apache/xalan/internal/xsltc/ProcessorVersion.java com/sun/org/apache/xalan/internal/xsltc/StripFilter.java com/sun/org/apache/xalan/internal/xsltc/Translet.java com/sun/org/apache/xalan/internal/xsltc/TransletException.java com/sun/org/apache/xalan/internal/xsltc/javax.xml.transform.TransformerFactory com/sun/org/apache/xalan/internal/Version.java com/sun/org/apache/xerces com/sun/org/apache/xerces/internal com/sun/org/apache/xerces/internal/dom com/sun/org/apache/xerces/internal/dom/SCCS com/sun/org/apache/xerces/internal/dom/SCCS/s.CoreDOMImplementationImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.ASDOMImplementationImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.ASModelImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.AttrImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.AttrNSImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.AttributeMap.java com/sun/org/apache/xerces/internal/dom/SCCS/s.CDATASectionImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.CharacterDataImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.ChildNode.java com/sun/org/apache/xerces/internal/dom/SCCS/s.CommentImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.CoreDocumentImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DOMConfigurationImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DOMErrorImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DOMInputImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DOMXSImplementationSourceImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DOMImplementationImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DOMImplementationListImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DOMImplementationSourceImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DOMLocatorImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DOMMessageFormatter.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DOMNormalizer.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DOMOutputImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DOMStringListImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredAttrNSImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeepNodeListImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredAttrImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredCDATASectionImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredNode.java com/sun/org/apache/xerces/internal/dom/SCCS/s.PSVIDOMImplementationImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredCommentImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredDocumentImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredDocumentTypeImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredElementDefinitionImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredElementImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredElementNSImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredEntityImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredEntityReferenceImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredNotationImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredTextImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DocumentImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DeferredProcessingInstructionImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DocumentFragmentImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.DocumentTypeImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.ElementDefinitionImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.ElementImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.ElementNSImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.EntityImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.EntityReferenceImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.LCount.java com/sun/org/apache/xerces/internal/dom/SCCS/s.NamedNodeMapImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.NodeImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.NodeIteratorImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.NodeListCache.java com/sun/org/apache/xerces/internal/dom/SCCS/s.NotationImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.ObjectFactory.java com/sun/org/apache/xerces/internal/dom/SCCS/s.PSVIAttrNSImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.PSVIDocumentImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.ProcessingInstructionImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.PSVIElementNSImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.ParentNode.java com/sun/org/apache/xerces/internal/dom/SCCS/s.RangeExceptionImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.RangeImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.SecuritySupport.java com/sun/org/apache/xerces/internal/dom/SCCS/s.SecuritySupport12.java com/sun/org/apache/xerces/internal/dom/SCCS/s.TextImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.TreeWalkerImpl.java com/sun/org/apache/xerces/internal/dom/SCCS/s.org.apache.xerces.dom.DOMImplementationSourceImpl com/sun/org/apache/xerces/internal/dom/SCCS/s.org.w3c.dom.DOMImplementationSourceList com/sun/org/apache/xerces/internal/dom/events com/sun/org/apache/xerces/internal/dom/events/SCCS com/sun/org/apache/xerces/internal/dom/events/SCCS/s.MutationEventImpl.java com/sun/org/apache/xerces/internal/dom/events/SCCS/s.EventImpl.java com/sun/org/apache/xerces/internal/dom/events/MutationEventImpl.java com/sun/org/apache/xerces/internal/dom/events/EventImpl.java com/sun/org/apache/xerces/internal/dom/ASDOMImplementationImpl.java com/sun/org/apache/xerces/internal/dom/ASModelImpl.java com/sun/org/apache/xerces/internal/dom/AttrImpl.java com/sun/org/apache/xerces/internal/dom/AttrNSImpl.java com/sun/org/apache/xerces/internal/dom/AttributeMap.java com/sun/org/apache/xerces/internal/dom/CDATASectionImpl.java com/sun/org/apache/xerces/internal/dom/CharacterDataImpl.java com/sun/org/apache/xerces/internal/dom/ChildNode.java com/sun/org/apache/xerces/internal/dom/CommentImpl.java com/sun/org/apache/xerces/internal/dom/CoreDOMImplementationImpl.java com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl.java com/sun/org/apache/xerces/internal/dom/DOMConfigurationImpl.java com/sun/org/apache/xerces/internal/dom/DOMErrorImpl.java com/sun/org/apache/xerces/internal/dom/NamedNodeMapImpl.java com/sun/org/apache/xerces/internal/dom/EntityImpl.java com/sun/org/apache/xerces/internal/dom/DOMImplementationImpl.java com/sun/org/apache/xerces/internal/dom/DOMImplementationListImpl.java com/sun/org/apache/xerces/internal/dom/DOMImplementationSourceImpl.java com/sun/org/apache/xerces/internal/dom/DOMInputImpl.java com/sun/org/apache/xerces/internal/dom/DOMLocatorImpl.java com/sun/org/apache/xerces/internal/dom/DOMMessageFormatter.java com/sun/org/apache/xerces/internal/dom/DOMNormalizer.java com/sun/org/apache/xerces/internal/dom/DOMOutputImpl.java com/sun/org/apache/xerces/internal/dom/DOMStringListImpl.java com/sun/org/apache/xerces/internal/dom/DOMXSImplementationSourceImpl.java com/sun/org/apache/xerces/internal/dom/DeepNodeListImpl.java com/sun/org/apache/xerces/internal/dom/DeferredAttrImpl.java com/sun/org/apache/xerces/internal/dom/DeferredAttrNSImpl.java com/sun/org/apache/xerces/internal/dom/DeferredCDATASectionImpl.java com/sun/org/apache/xerces/internal/dom/DeferredEntityImpl.java com/sun/org/apache/xerces/internal/dom/DeferredCommentImpl.java com/sun/org/apache/xerces/internal/dom/DeferredDocumentImpl.java com/sun/org/apache/xerces/internal/dom/DeferredDocumentTypeImpl.java com/sun/org/apache/xerces/internal/dom/DeferredElementDefinitionImpl.java com/sun/org/apache/xerces/internal/dom/DeferredElementImpl.java com/sun/org/apache/xerces/internal/dom/DeferredElementNSImpl.java com/sun/org/apache/xerces/internal/dom/DeferredEntityReferenceImpl.java com/sun/org/apache/xerces/internal/dom/DeferredNode.java com/sun/org/apache/xerces/internal/dom/DeferredNotationImpl.java com/sun/org/apache/xerces/internal/dom/DeferredProcessingInstructionImpl.java com/sun/org/apache/xerces/internal/dom/DeferredTextImpl.java com/sun/org/apache/xerces/internal/dom/DocumentFragmentImpl.java com/sun/org/apache/xerces/internal/dom/DocumentImpl.java com/sun/org/apache/xerces/internal/dom/DocumentTypeImpl.java com/sun/org/apache/xerces/internal/dom/ElementDefinitionImpl.java com/sun/org/apache/xerces/internal/dom/ElementImpl.java com/sun/org/apache/xerces/internal/dom/ElementNSImpl.java com/sun/org/apache/xerces/internal/dom/LCount.java com/sun/org/apache/xerces/internal/dom/NodeImpl.java com/sun/org/apache/xerces/internal/dom/EntityReferenceImpl.java com/sun/org/apache/xerces/internal/dom/PSVIDOMImplementationImpl.java com/sun/org/apache/xerces/internal/dom/NodeIteratorImpl.java com/sun/org/apache/xerces/internal/dom/NodeListCache.java com/sun/org/apache/xerces/internal/dom/NotationImpl.java com/sun/org/apache/xerces/internal/dom/ObjectFactory.java com/sun/org/apache/xerces/internal/dom/PSVIAttrNSImpl.java com/sun/org/apache/xerces/internal/dom/PSVIDocumentImpl.java com/sun/org/apache/xerces/internal/dom/PSVIElementNSImpl.java com/sun/org/apache/xerces/internal/dom/ParentNode.java com/sun/org/apache/xerces/internal/dom/RangeImpl.java com/sun/org/apache/xerces/internal/dom/ProcessingInstructionImpl.java com/sun/org/apache/xerces/internal/dom/RangeExceptionImpl.java com/sun/org/apache/xerces/internal/dom/SecuritySupport.java com/sun/org/apache/xerces/internal/dom/SecuritySupport12.java com/sun/org/apache/xerces/internal/dom/TextImpl.java com/sun/org/apache/xerces/internal/dom/TreeWalkerImpl.java com/sun/org/apache/xerces/internal/dom/org.apache.xerces.dom.DOMImplementationSourceImpl com/sun/org/apache/xerces/internal/dom/org.w3c.dom.DOMImplementationSourceList com/sun/org/apache/xerces/internal/dom3 com/sun/org/apache/xerces/internal/dom3/as com/sun/org/apache/xerces/internal/dom3/as/SCCS com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.ASAttributeDeclaration.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.ASContentModel.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.ASDataType.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.ASElementDeclaration.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.ASEntityDeclaration.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.ASModel.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.ASNamedObjectMap.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.ASNotationDeclaration.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.ASObject.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.ASObjectList.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.CharacterDataEditAS.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.DOMASBuilder.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.DOMASException.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.DOMASWriter.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.DOMImplementationAS.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.DocumentAS.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.DocumentEditAS.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.ElementEditAS.java com/sun/org/apache/xerces/internal/dom3/as/SCCS/s.NodeEditAS.java com/sun/org/apache/xerces/internal/dom3/as/ASAttributeDeclaration.java com/sun/org/apache/xerces/internal/dom3/as/ASContentModel.java com/sun/org/apache/xerces/internal/dom3/as/ASDataType.java com/sun/org/apache/xerces/internal/dom3/as/ASElementDeclaration.java com/sun/org/apache/xerces/internal/dom3/as/ASEntityDeclaration.java com/sun/org/apache/xerces/internal/dom3/as/ASModel.java com/sun/org/apache/xerces/internal/dom3/as/ASNamedObjectMap.java com/sun/org/apache/xerces/internal/dom3/as/ASNotationDeclaration.java com/sun/org/apache/xerces/internal/dom3/as/ASObject.java com/sun/org/apache/xerces/internal/dom3/as/ASObjectList.java com/sun/org/apache/xerces/internal/dom3/as/CharacterDataEditAS.java com/sun/org/apache/xerces/internal/dom3/as/DOMASBuilder.java com/sun/org/apache/xerces/internal/dom3/as/DOMASException.java com/sun/org/apache/xerces/internal/dom3/as/DOMASWriter.java com/sun/org/apache/xerces/internal/dom3/as/DOMImplementationAS.java com/sun/org/apache/xerces/internal/dom3/as/DocumentAS.java com/sun/org/apache/xerces/internal/dom3/as/DocumentEditAS.java com/sun/org/apache/xerces/internal/dom3/as/ElementEditAS.java com/sun/org/apache/xerces/internal/dom3/as/NodeEditAS.java com/sun/org/apache/xerces/internal/impl com/sun/org/apache/xerces/internal/impl/SCCS com/sun/org/apache/xerces/internal/impl/SCCS/s.RevalidationHandler.java com/sun/org/apache/xerces/internal/impl/SCCS/s.Constants.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XML11NSDocumentScannerImpl.java com/sun/org/apache/xerces/internal/impl/SCCS/s.ExternalSubsetResolver.java com/sun/org/apache/xerces/internal/impl/SCCS/s.Version.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XML11DTDScannerImpl.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XML11DocumentScannerImpl.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XML11EntityScanner.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XMLDocumentFragmentScannerImpl.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XML11NamespaceBinder.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XMLDTDScannerImpl.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XMLEntityDescription.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XMLDocumentScannerImpl.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XMLEntityHandler.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XMLEntityManager.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XMLEntityScanner.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XMLErrorReporter.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XMLNSDocumentScannerImpl.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XMLNamespaceBinder.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XMLScanner.java com/sun/org/apache/xerces/internal/impl/SCCS/s.XMLVersionDetector.java com/sun/org/apache/xerces/internal/impl/dtd com/sun/org/apache/xerces/internal/impl/dtd/SCCS com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.DTDGrammarBucket.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.DTDGrammar.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XML11DTDProcessor.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XML11DTDValidator.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XML11NSDTDValidator.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XMLAttributeDecl.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XMLContentSpec.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XMLDTDDescription.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XMLDTDLoader.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XMLDTDProcessor.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XMLDTDValidator.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XMLDTDValidatorFilter.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XMLElementDecl.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XMLEntityDecl.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XMLNSDTDValidator.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XMLNotationDecl.java com/sun/org/apache/xerces/internal/impl/dtd/SCCS/s.XMLSimpleType.java com/sun/org/apache/xerces/internal/impl/dtd/models com/sun/org/apache/xerces/internal/impl/dtd/models/SCCS com/sun/org/apache/xerces/internal/impl/dtd/models/SCCS/s.CMStateSet.java com/sun/org/apache/xerces/internal/impl/dtd/models/SCCS/s.CMAny.java com/sun/org/apache/xerces/internal/impl/dtd/models/SCCS/s.CMBinOp.java com/sun/org/apache/xerces/internal/impl/dtd/models/SCCS/s.CMLeaf.java com/sun/org/apache/xerces/internal/impl/dtd/models/SCCS/s.CMNode.java com/sun/org/apache/xerces/internal/impl/dtd/models/SCCS/s.DFAContentModel.java com/sun/org/apache/xerces/internal/impl/dtd/models/SCCS/s.CMUniOp.java com/sun/org/apache/xerces/internal/impl/dtd/models/SCCS/s.ContentModelValidator.java com/sun/org/apache/xerces/internal/impl/dtd/models/SCCS/s.MixedContentModel.java com/sun/org/apache/xerces/internal/impl/dtd/models/SCCS/s.SimpleContentModel.java com/sun/org/apache/xerces/internal/impl/dtd/models/CMBinOp.java com/sun/org/apache/xerces/internal/impl/dtd/models/CMAny.java com/sun/org/apache/xerces/internal/impl/dtd/models/DFAContentModel.java com/sun/org/apache/xerces/internal/impl/dtd/models/CMLeaf.java com/sun/org/apache/xerces/internal/impl/dtd/models/CMNode.java com/sun/org/apache/xerces/internal/impl/dtd/models/CMStateSet.java com/sun/org/apache/xerces/internal/impl/dtd/models/CMUniOp.java com/sun/org/apache/xerces/internal/impl/dtd/models/ContentModelValidator.java com/sun/org/apache/xerces/internal/impl/dtd/models/MixedContentModel.java com/sun/org/apache/xerces/internal/impl/dtd/models/SimpleContentModel.java com/sun/org/apache/xerces/internal/impl/dtd/DTDGrammarBucket.java com/sun/org/apache/xerces/internal/impl/dtd/DTDGrammar.java com/sun/org/apache/xerces/internal/impl/dtd/XML11NSDTDValidator.java com/sun/org/apache/xerces/internal/impl/dtd/XML11DTDProcessor.java com/sun/org/apache/xerces/internal/impl/dtd/XML11DTDValidator.java com/sun/org/apache/xerces/internal/impl/dtd/XMLAttributeDecl.java com/sun/org/apache/xerces/internal/impl/dtd/XMLContentSpec.java com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDDescription.java com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDLoader.java com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDProcessor.java com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidator.java com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidatorFilter.java com/sun/org/apache/xerces/internal/impl/dtd/XMLElementDecl.java com/sun/org/apache/xerces/internal/impl/dtd/XMLEntityDecl.java com/sun/org/apache/xerces/internal/impl/dtd/XMLNSDTDValidator.java com/sun/org/apache/xerces/internal/impl/dtd/XMLNotationDecl.java com/sun/org/apache/xerces/internal/impl/dtd/XMLSimpleType.java com/sun/org/apache/xerces/internal/impl/dv com/sun/org/apache/xerces/internal/impl/dv/SCCS com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.DVFactoryException.java com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.DTDDVFactory.java com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.XSSimpleType.java com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.DatatypeException.java com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.DatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.ObjectFactory.java com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.InvalidDatatypeFacetException.java com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.InvalidDatatypeValueException.java com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.SchemaDVFactory.java com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.SecuritySupport.java com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.SecuritySupport12.java com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.ValidatedInfo.java com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.ValidationContext.java com/sun/org/apache/xerces/internal/impl/dv/SCCS/s.XSFacets.java com/sun/org/apache/xerces/internal/impl/dv/dtd com/sun/org/apache/xerces/internal/impl/dv/dtd/SCCS com/sun/org/apache/xerces/internal/impl/dv/dtd/SCCS/s.ENTITYDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/SCCS/s.DTDDVFactoryImpl.java com/sun/org/apache/xerces/internal/impl/dv/dtd/SCCS/s.IDREFDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/SCCS/s.IDDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/SCCS/s.XML11NMTOKENDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/SCCS/s.ListDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/SCCS/s.NMTOKENDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/SCCS/s.NOTATIONDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/SCCS/s.StringDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/SCCS/s.XML11DTDDVFactoryImpl.java com/sun/org/apache/xerces/internal/impl/dv/dtd/SCCS/s.XML11IDDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/SCCS/s.XML11IDREFDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/ENTITYDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/DTDDVFactoryImpl.java com/sun/org/apache/xerces/internal/impl/dv/dtd/NMTOKENDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/IDDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/IDREFDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/ListDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/NOTATIONDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/StringDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11DTDDVFactoryImpl.java com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11IDDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11IDREFDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11NMTOKENDatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/util com/sun/org/apache/xerces/internal/impl/dv/util/SCCS com/sun/org/apache/xerces/internal/impl/dv/util/SCCS/s.Base64.java com/sun/org/apache/xerces/internal/impl/dv/util/SCCS/s.HexBin.java com/sun/org/apache/xerces/internal/impl/dv/util/Base64.java com/sun/org/apache/xerces/internal/impl/dv/util/HexBin.java com/sun/org/apache/xerces/internal/impl/dv/xs com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.SchemaDateTimeException.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.AbstractDateTimeDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.AnySimpleDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.AnyURIDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.Base64BinaryDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.BaseDVFactory.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.BooleanDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.DateDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.DateTimeDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.DayDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.DecimalDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.DoubleDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.DurationDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.EntityDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.FloatDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.FullDVFactory.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.HexBinaryDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.IDDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.IDREFDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.IntegerDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.ListDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.MonthDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.MonthDayDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.QNameDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.SchemaDVFactoryImpl.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.TypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.StringDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.TimeDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.XSSimpleTypeDecl.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.UnionDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.YearMonthDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SCCS/s.YearDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/AbstractDateTimeDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/AnySimpleDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/AnyURIDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/Base64BinaryDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/BaseDVFactory.java com/sun/org/apache/xerces/internal/impl/dv/xs/BooleanDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/DateDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/DateTimeDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/DayDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/DecimalDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/DoubleDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/DurationDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/EntityDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/FloatDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/FullDVFactory.java com/sun/org/apache/xerces/internal/impl/dv/xs/HexBinaryDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/IDDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/TypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/xs/TimeDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/IDREFDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/IntegerDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/ListDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/MonthDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/MonthDayDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/QNameDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/SchemaDVFactoryImpl.java com/sun/org/apache/xerces/internal/impl/dv/xs/SchemaDateTimeException.java com/sun/org/apache/xerces/internal/impl/dv/xs/StringDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl.java com/sun/org/apache/xerces/internal/impl/dv/xs/UnionDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/YearMonthDV.java com/sun/org/apache/xerces/internal/impl/dv/xs/YearDV.java com/sun/org/apache/xerces/internal/impl/dv/DVFactoryException.java com/sun/org/apache/xerces/internal/impl/dv/DTDDVFactory.java com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java com/sun/org/apache/xerces/internal/impl/dv/DatatypeValidator.java com/sun/org/apache/xerces/internal/impl/dv/ObjectFactory.java com/sun/org/apache/xerces/internal/impl/dv/XSFacets.java com/sun/org/apache/xerces/internal/impl/dv/InvalidDatatypeFacetException.java com/sun/org/apache/xerces/internal/impl/dv/InvalidDatatypeValueException.java com/sun/org/apache/xerces/internal/impl/dv/SchemaDVFactory.java com/sun/org/apache/xerces/internal/impl/dv/SecuritySupport.java com/sun/org/apache/xerces/internal/impl/dv/SecuritySupport12.java com/sun/org/apache/xerces/internal/impl/dv/ValidatedInfo.java com/sun/org/apache/xerces/internal/impl/dv/ValidationContext.java com/sun/org/apache/xerces/internal/impl/dv/XSSimpleType.java com/sun/org/apache/xerces/internal/impl/io com/sun/org/apache/xerces/internal/impl/io/SCCS com/sun/org/apache/xerces/internal/impl/io/SCCS/s.ASCIIReader.java com/sun/org/apache/xerces/internal/impl/io/SCCS/s.UCSReader.java com/sun/org/apache/xerces/internal/impl/io/SCCS/s.UTF8Reader.java com/sun/org/apache/xerces/internal/impl/io/SCCS/s.MalformedByteSequenceException.java com/sun/org/apache/xerces/internal/impl/io/ASCIIReader.java com/sun/org/apache/xerces/internal/impl/io/UCSReader.java com/sun/org/apache/xerces/internal/impl/io/UTF8Reader.java com/sun/org/apache/xerces/internal/impl/io/MalformedByteSequenceException.java com/sun/org/apache/xerces/internal/impl/msg com/sun/org/apache/xerces/internal/impl/msg/SCCS com/sun/org/apache/xerces/internal/impl/msg/SCCS/s.DatatypeMessages.properties com/sun/org/apache/xerces/internal/impl/msg/SCCS/s.DOMMessages.properties com/sun/org/apache/xerces/internal/impl/msg/SCCS/s.XMLSerializerMessages.properties com/sun/org/apache/xerces/internal/impl/msg/SCCS/s.SAXMessages.properties com/sun/org/apache/xerces/internal/impl/msg/SCCS/s.XIncludeMessages.properties com/sun/org/apache/xerces/internal/impl/msg/SCCS/s.XMLMessageFormatter.java com/sun/org/apache/xerces/internal/impl/msg/SCCS/s.XMLMessages.properties com/sun/org/apache/xerces/internal/impl/msg/SCCS/s.XMLSchemaMessages.properties com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages.properties com/sun/org/apache/xerces/internal/impl/msg/DOMMessages.properties com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages.properties com/sun/org/apache/xerces/internal/impl/msg/SAXMessages.properties com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages.properties com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter.java com/sun/org/apache/xerces/internal/impl/msg/XMLMessages.properties com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages.properties com/sun/org/apache/xerces/internal/impl/validation com/sun/org/apache/xerces/internal/impl/validation/SCCS com/sun/org/apache/xerces/internal/impl/validation/SCCS/s.ValidationManager.java com/sun/org/apache/xerces/internal/impl/validation/SCCS/s.EntityState.java com/sun/org/apache/xerces/internal/impl/validation/SCCS/s.ValidationState.java com/sun/org/apache/xerces/internal/impl/validation/ValidationManager.java com/sun/org/apache/xerces/internal/impl/validation/EntityState.java com/sun/org/apache/xerces/internal/impl/validation/ValidationState.java com/sun/org/apache/xerces/internal/impl/xpath com/sun/org/apache/xerces/internal/impl/xpath/SCCS com/sun/org/apache/xerces/internal/impl/xpath/SCCS/s.XPathException.java com/sun/org/apache/xerces/internal/impl/xpath/SCCS/s.XPath.java com/sun/org/apache/xerces/internal/impl/xpath/regex com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.ParseException.java com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.BMPattern.java com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.Match.java com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.Op.java com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.ParserForXMLSchema.java com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.REUtil.java com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.RangeToken.java com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.RegexParser.java com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.RegularExpression.java com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.RegularExpression.orig com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.Token.java com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.message.properties com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.message_fr.properties com/sun/org/apache/xerces/internal/impl/xpath/regex/SCCS/s.message_ja.properties com/sun/org/apache/xerces/internal/impl/xpath/regex/ParseException.java com/sun/org/apache/xerces/internal/impl/xpath/regex/BMPattern.java com/sun/org/apache/xerces/internal/impl/xpath/regex/Match.java com/sun/org/apache/xerces/internal/impl/xpath/regex/Op.java com/sun/org/apache/xerces/internal/impl/xpath/regex/ParserForXMLSchema.java com/sun/org/apache/xerces/internal/impl/xpath/regex/REUtil.java com/sun/org/apache/xerces/internal/impl/xpath/regex/RangeToken.java com/sun/org/apache/xerces/internal/impl/xpath/regex/RegexParser.java com/sun/org/apache/xerces/internal/impl/xpath/regex/RegularExpression.java com/sun/org/apache/xerces/internal/impl/xpath/regex/RegularExpression.orig com/sun/org/apache/xerces/internal/impl/xpath/regex/Token.java com/sun/org/apache/xerces/internal/impl/xpath/regex/message.properties com/sun/org/apache/xerces/internal/impl/xpath/regex/message_fr.properties com/sun/org/apache/xerces/internal/impl/xpath/regex/message_ja.properties com/sun/org/apache/xerces/internal/impl/xpath/XPathException.java com/sun/org/apache/xerces/internal/impl/xpath/XPath.java com/sun/org/apache/xerces/internal/impl/xs com/sun/org/apache/xerces/internal/impl/xs/SCCS com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.SchemaNamespaceSupport.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.AttributePSVImpl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.ElementPSVImpl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.SchemaGrammar.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.SubstitutionGroupHandler.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.SchemaSymbols.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XMLSchemaException.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XMLSchemaLoader.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XMLSchemaValidator.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSAnnotationImpl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSAttributeDecl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSAttributeGroupDecl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSConstraints.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSAttributeUseImpl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSComplexTypeDecl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSDDescription.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSDeclarationPool.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSElementDecl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSGrammarBucket.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSGroupDecl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSImplementationImpl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSMessageFormatter.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSModelGroupImpl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSModelImpl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSNotationDecl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSParticleDecl.java com/sun/org/apache/xerces/internal/impl/xs/SCCS/s.XSWildcardDecl.java com/sun/org/apache/xerces/internal/impl/xs/dom com/sun/org/apache/xerces/internal/impl/xs/dom/SCCS com/sun/org/apache/xerces/internal/impl/xs/dom/SCCS/s.ElementNSImpl.java com/sun/org/apache/xerces/internal/impl/xs/dom/SCCS/s.DOMNodePool.java com/sun/org/apache/xerces/internal/impl/xs/dom/SCCS/s.DOMParser.java com/sun/org/apache/xerces/internal/impl/xs/dom/SCCS/s.DocumentImpl.java com/sun/org/apache/xerces/internal/impl/xs/dom/DOMNodePool.java com/sun/org/apache/xerces/internal/impl/xs/dom/DOMParser.java com/sun/org/apache/xerces/internal/impl/xs/dom/DocumentImpl.java com/sun/org/apache/xerces/internal/impl/xs/dom/ElementNSImpl.java com/sun/org/apache/xerces/internal/impl/xs/identity com/sun/org/apache/xerces/internal/impl/xs/identity/SCCS com/sun/org/apache/xerces/internal/impl/xs/identity/SCCS/s.FieldActivator.java com/sun/org/apache/xerces/internal/impl/xs/identity/SCCS/s.Field.java com/sun/org/apache/xerces/internal/impl/xs/identity/SCCS/s.IDValue.java com/sun/org/apache/xerces/internal/impl/xs/identity/SCCS/s.KeyRef.java com/sun/org/apache/xerces/internal/impl/xs/identity/SCCS/s.IdentityConstraint.java com/sun/org/apache/xerces/internal/impl/xs/identity/SCCS/s.Selector.java com/sun/org/apache/xerces/internal/impl/xs/identity/SCCS/s.UniqueOrKey.java com/sun/org/apache/xerces/internal/impl/xs/identity/SCCS/s.ValueStore.java com/sun/org/apache/xerces/internal/impl/xs/identity/SCCS/s.XPathMatcher.java com/sun/org/apache/xerces/internal/impl/xs/identity/FieldActivator.java com/sun/org/apache/xerces/internal/impl/xs/identity/Field.java com/sun/org/apache/xerces/internal/impl/xs/identity/IdentityConstraint.java com/sun/org/apache/xerces/internal/impl/xs/identity/IDValue.java com/sun/org/apache/xerces/internal/impl/xs/identity/Selector.java com/sun/org/apache/xerces/internal/impl/xs/identity/KeyRef.java com/sun/org/apache/xerces/internal/impl/xs/identity/UniqueOrKey.java com/sun/org/apache/xerces/internal/impl/xs/identity/ValueStore.java com/sun/org/apache/xerces/internal/impl/xs/identity/XPathMatcher.java com/sun/org/apache/xerces/internal/impl/xs/models com/sun/org/apache/xerces/internal/impl/xs/models/SCCS com/sun/org/apache/xerces/internal/impl/xs/models/SCCS/s.CMNodeFactory.java com/sun/org/apache/xerces/internal/impl/xs/models/SCCS/s.CMBuilder.java com/sun/org/apache/xerces/internal/impl/xs/models/SCCS/s.XSCMValidator.java com/sun/org/apache/xerces/internal/impl/xs/models/SCCS/s.XSAllCM.java com/sun/org/apache/xerces/internal/impl/xs/models/SCCS/s.XSCMBinOp.java com/sun/org/apache/xerces/internal/impl/xs/models/SCCS/s.XSCMLeaf.java com/sun/org/apache/xerces/internal/impl/xs/models/SCCS/s.XSCMUniOp.java com/sun/org/apache/xerces/internal/impl/xs/models/SCCS/s.XSDFACM.java com/sun/org/apache/xerces/internal/impl/xs/models/SCCS/s.XSEmptyCM.java com/sun/org/apache/xerces/internal/impl/xs/models/CMNodeFactory.java com/sun/org/apache/xerces/internal/impl/xs/models/CMBuilder.java com/sun/org/apache/xerces/internal/impl/xs/models/XSAllCM.java com/sun/org/apache/xerces/internal/impl/xs/models/XSCMBinOp.java com/sun/org/apache/xerces/internal/impl/xs/models/XSCMLeaf.java com/sun/org/apache/xerces/internal/impl/xs/models/XSCMUniOp.java com/sun/org/apache/xerces/internal/impl/xs/models/XSCMValidator.java com/sun/org/apache/xerces/internal/impl/xs/models/XSDFACM.java com/sun/org/apache/xerces/internal/impl/xs/models/XSEmptyCM.java com/sun/org/apache/xerces/internal/impl/xs/opti com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS/s.DefaultDocument.java com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS/s.AttrImpl.java com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS/s.SchemaParsingConfig.java com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS/s.DefaultElement.java com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS/s.DefaultNode.java com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS/s.DefaultText.java com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS/s.ElementImpl.java com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS/s.NodeImpl.java com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS/s.DefaultXMLDocumentHandler.java com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS/s.NamedNodeMapImpl.java com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS/s.SchemaDOM.java com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS/s.SchemaDOMParser.java com/sun/org/apache/xerces/internal/impl/xs/opti/SCCS/s.TextImpl.java com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultDocument.java com/sun/org/apache/xerces/internal/impl/xs/opti/AttrImpl.java com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultElement.java com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultNode.java com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultText.java com/sun/org/apache/xerces/internal/impl/xs/opti/ElementImpl.java com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOMParser.java com/sun/org/apache/xerces/internal/impl/xs/opti/NodeImpl.java com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultXMLDocumentHandler.java com/sun/org/apache/xerces/internal/impl/xs/opti/NamedNodeMapImpl.java com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOM.java com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java com/sun/org/apache/xerces/internal/impl/xs/opti/TextImpl.java com/sun/org/apache/xerces/internal/impl/xs/psvi com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.PSVIProvider.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.StringList.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSAnnotation.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSAttributeUse.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSAttributeDeclaration.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSAttributeGroupDefinition.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSComplexTypeDefinition.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSConstants.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSElementDeclaration.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSFacet.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSIDCDefinition.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSModel.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSModelGroup.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSObject.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSModelGroupDefinition.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSMultiValueFacet.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSNamedMap.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSNamespaceItem.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSNamespaceItemList.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSNotationDeclaration.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSObjectList.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSParticle.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSSimpleTypeDefinition.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSTerm.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSTypeDefinition.java com/sun/org/apache/xerces/internal/impl/xs/psvi/SCCS/s.XSWildcard.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSAttributeDeclaration.java com/sun/org/apache/xerces/internal/impl/xs/psvi/PSVIProvider.java com/sun/org/apache/xerces/internal/impl/xs/psvi/StringList.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSAnnotation.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSTerm.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSAttributeGroupDefinition.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSAttributeUse.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSComplexTypeDefinition.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSConstants.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSElementDeclaration.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSFacet.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSIDCDefinition.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSModel.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSModelGroup.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSNamedMap.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSMultiValueFacet.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSModelGroupDefinition.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSNamespaceItem.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSNamespaceItemList.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSNotationDeclaration.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSObject.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSObjectList.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSParticle.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSSimpleTypeDefinition.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSWildcard.java com/sun/org/apache/xerces/internal/impl/xs/psvi/XSTypeDefinition.java com/sun/org/apache/xerces/internal/impl/xs/traversers com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDAbstractParticleTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSAttributeChecker.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDAbstractIDConstraintTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDAbstractTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDAttributeGroupTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDAttributeTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDComplexTypeTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDElementTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDGroupTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDHandler.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDKeyrefTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDNotationTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDSimpleTypeTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDUniqueOrKeyTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDWildcardTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/SCCS/s.XSDocumentInfo.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAttributeChecker.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDKeyrefTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractParticleTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAttributeGroupTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAttributeTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDComplexTypeTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDElementTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDGroupTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDocumentInfo.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDNotationTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDSimpleTypeTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDUniqueOrKeyTraverser.java com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDWildcardTraverser.java com/sun/org/apache/xerces/internal/impl/xs/util com/sun/org/apache/xerces/internal/impl/xs/util/SCCS com/sun/org/apache/xerces/internal/impl/xs/util/SCCS/s.NSItemListImpl.java com/sun/org/apache/xerces/internal/impl/xs/util/SCCS/s.ShortListImpl.java com/sun/org/apache/xerces/internal/impl/xs/util/SCCS/s.SimpleLocator.java com/sun/org/apache/xerces/internal/impl/xs/util/SCCS/s.StringListImpl.java com/sun/org/apache/xerces/internal/impl/xs/util/SCCS/s.XInt.java com/sun/org/apache/xerces/internal/impl/xs/util/SCCS/s.XIntPool.java com/sun/org/apache/xerces/internal/impl/xs/util/SCCS/s.XSGrammarPool.java com/sun/org/apache/xerces/internal/impl/xs/util/SCCS/s.XSNamedMap4Types.java com/sun/org/apache/xerces/internal/impl/xs/util/SCCS/s.XSNamedMapImpl.java com/sun/org/apache/xerces/internal/impl/xs/util/SCCS/s.XSObjectListImpl.java com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMap4Types.java com/sun/org/apache/xerces/internal/impl/xs/util/NSItemListImpl.java com/sun/org/apache/xerces/internal/impl/xs/util/ShortListImpl.java com/sun/org/apache/xerces/internal/impl/xs/util/SimpleLocator.java com/sun/org/apache/xerces/internal/impl/xs/util/StringListImpl.java com/sun/org/apache/xerces/internal/impl/xs/util/XInt.java com/sun/org/apache/xerces/internal/impl/xs/util/XIntPool.java com/sun/org/apache/xerces/internal/impl/xs/util/XSGrammarPool.java com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMapImpl.java com/sun/org/apache/xerces/internal/impl/xs/util/XSObjectListImpl.java com/sun/org/apache/xerces/internal/impl/xs/SchemaNamespaceSupport.java com/sun/org/apache/xerces/internal/impl/xs/AttributePSVImpl.java com/sun/org/apache/xerces/internal/impl/xs/ElementPSVImpl.java com/sun/org/apache/xerces/internal/impl/xs/SchemaGrammar.java com/sun/org/apache/xerces/internal/impl/xs/SchemaSymbols.java com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaException.java com/sun/org/apache/xerces/internal/impl/xs/SubstitutionGroupHandler.java com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator.java com/sun/org/apache/xerces/internal/impl/xs/XSParticleDecl.java com/sun/org/apache/xerces/internal/impl/xs/XSAnnotationImpl.java com/sun/org/apache/xerces/internal/impl/xs/XSAttributeDecl.java com/sun/org/apache/xerces/internal/impl/xs/XSAttributeGroupDecl.java com/sun/org/apache/xerces/internal/impl/xs/XSAttributeUseImpl.java com/sun/org/apache/xerces/internal/impl/xs/XSComplexTypeDecl.java com/sun/org/apache/xerces/internal/impl/xs/XSConstraints.java com/sun/org/apache/xerces/internal/impl/xs/XSDDescription.java com/sun/org/apache/xerces/internal/impl/xs/XSDeclarationPool.java com/sun/org/apache/xerces/internal/impl/xs/XSElementDecl.java com/sun/org/apache/xerces/internal/impl/xs/XSGrammarBucket.java com/sun/org/apache/xerces/internal/impl/xs/XSGroupDecl.java com/sun/org/apache/xerces/internal/impl/xs/XSImplementationImpl.java com/sun/org/apache/xerces/internal/impl/xs/XSMessageFormatter.java com/sun/org/apache/xerces/internal/impl/xs/XSModelGroupImpl.java com/sun/org/apache/xerces/internal/impl/xs/XSModelImpl.java com/sun/org/apache/xerces/internal/impl/xs/XSNotationDecl.java com/sun/org/apache/xerces/internal/impl/xs/XSWildcardDecl.java com/sun/org/apache/xerces/internal/impl/Constants.java com/sun/org/apache/xerces/internal/impl/Version.java com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java com/sun/org/apache/xerces/internal/impl/ExternalSubsetResolver.java com/sun/org/apache/xerces/internal/impl/RevalidationHandler.java com/sun/org/apache/xerces/internal/impl/XML11DTDScannerImpl.java com/sun/org/apache/xerces/internal/impl/XML11DocumentScannerImpl.java com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java com/sun/org/apache/xerces/internal/impl/XML11NSDocumentScannerImpl.java com/sun/org/apache/xerces/internal/impl/XML11NamespaceBinder.java com/sun/org/apache/xerces/internal/impl/XMLDTDScannerImpl.java com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java com/sun/org/apache/xerces/internal/impl/XMLEntityDescription.java com/sun/org/apache/xerces/internal/impl/XMLEntityHandler.java com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java com/sun/org/apache/xerces/internal/impl/XMLErrorReporter.java com/sun/org/apache/xerces/internal/impl/XMLNSDocumentScannerImpl.java com/sun/org/apache/xerces/internal/impl/XMLNamespaceBinder.java com/sun/org/apache/xerces/internal/impl/XMLScanner.java com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.java com/sun/org/apache/xerces/internal/jaxp com/sun/org/apache/xerces/internal/jaxp/SCCS com/sun/org/apache/xerces/internal/jaxp/SCCS/s.XNI2SAX.java com/sun/org/apache/xerces/internal/jaxp/SCCS/s.DefaultValidationErrorHandler.java com/sun/org/apache/xerces/internal/jaxp/SCCS/s.DocumentBuilderFactoryImpl.java com/sun/org/apache/xerces/internal/jaxp/SCCS/s.DocumentBuilderImpl.java com/sun/org/apache/xerces/internal/jaxp/SCCS/s.JAXPConstants.java com/sun/org/apache/xerces/internal/jaxp/SCCS/s.JAXPValidatorComponent.java com/sun/org/apache/xerces/internal/jaxp/SCCS/s.SAXParserFactoryImpl.java com/sun/org/apache/xerces/internal/jaxp/SCCS/s.SAXParserImpl.java com/sun/org/apache/xerces/internal/jaxp/SCCS/s.javax.xml.parsers.DocumentBuilderFactory com/sun/org/apache/xerces/internal/jaxp/SCCS/s.javax.xml.parsers.SAXParserFactory com/sun/org/apache/xerces/internal/jaxp/datatype com/sun/org/apache/xerces/internal/jaxp/datatype/SCCS com/sun/org/apache/xerces/internal/jaxp/datatype/SCCS/s.XMLGregorianCalendarImpl.java com/sun/org/apache/xerces/internal/jaxp/datatype/SCCS/s.DatatypeFactoryImpl.java com/sun/org/apache/xerces/internal/jaxp/datatype/SCCS/s.DurationImpl.java com/sun/org/apache/xerces/internal/jaxp/datatype/XMLGregorianCalendarImpl.java com/sun/org/apache/xerces/internal/jaxp/datatype/DatatypeFactoryImpl.java com/sun/org/apache/xerces/internal/jaxp/datatype/DurationImpl.java com/sun/org/apache/xerces/internal/jaxp/validation com/sun/org/apache/xerces/internal/jaxp/validation/SCCS com/sun/org/apache/xerces/internal/jaxp/validation/SCCS/s.InsulatedValidatorComponent.java com/sun/org/apache/xerces/internal/jaxp/validation/SCCS/s.ErrorHandlerAdaptor.java com/sun/org/apache/xerces/internal/jaxp/validation/SCCS/s.ReadonlyGrammarPool.java com/sun/org/apache/xerces/internal/jaxp/validation/SCCS/s.Util.java com/sun/org/apache/xerces/internal/jaxp/validation/SCCS/s.ValidatorHandlerImpl.java com/sun/org/apache/xerces/internal/jaxp/validation/SCCS/s.ValidatorImpl.java com/sun/org/apache/xerces/internal/jaxp/validation/SCCS/s.WrappedSAXException.java com/sun/org/apache/xerces/internal/jaxp/validation/SCCS/s.XNI2SAXEx.java com/sun/org/apache/xerces/internal/jaxp/validation/SCCS/s.XercesConstants.java com/sun/org/apache/xerces/internal/jaxp/validation/SCCS/s.XercesSchema.java com/sun/org/apache/xerces/internal/jaxp/validation/SCCS/s.javax.xml.validation.SchemaFactory com/sun/org/apache/xerces/internal/jaxp/validation/xs com/sun/org/apache/xerces/internal/jaxp/validation/xs/SCCS com/sun/org/apache/xerces/internal/jaxp/validation/xs/SCCS/s.InsulatedSchemaValidator.java com/sun/org/apache/xerces/internal/jaxp/validation/xs/SCCS/s.SchemaFactoryImpl.java com/sun/org/apache/xerces/internal/jaxp/validation/xs/SCCS/s.SchemaImpl.java com/sun/org/apache/xerces/internal/jaxp/validation/xs/InsulatedSchemaValidator.java com/sun/org/apache/xerces/internal/jaxp/validation/xs/SchemaFactoryImpl.java com/sun/org/apache/xerces/internal/jaxp/validation/xs/SchemaImpl.java com/sun/org/apache/xerces/internal/jaxp/validation/InsulatedValidatorComponent.java com/sun/org/apache/xerces/internal/jaxp/validation/ErrorHandlerAdaptor.java com/sun/org/apache/xerces/internal/jaxp/validation/javax.xml.validation.SchemaFactory com/sun/org/apache/xerces/internal/jaxp/validation/ReadonlyGrammarPool.java com/sun/org/apache/xerces/internal/jaxp/validation/Util.java com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorImpl.java com/sun/org/apache/xerces/internal/jaxp/validation/WrappedSAXException.java com/sun/org/apache/xerces/internal/jaxp/validation/XNI2SAXEx.java com/sun/org/apache/xerces/internal/jaxp/validation/XercesConstants.java com/sun/org/apache/xerces/internal/jaxp/validation/XercesSchema.java com/sun/org/apache/xerces/internal/jaxp/javax.xml.parsers.DocumentBuilderFactory com/sun/org/apache/xerces/internal/jaxp/DefaultValidationErrorHandler.java com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderFactoryImpl.java com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java com/sun/org/apache/xerces/internal/jaxp/JAXPConstants.java com/sun/org/apache/xerces/internal/jaxp/JAXPValidatorComponent.java com/sun/org/apache/xerces/internal/jaxp/SAXParserFactoryImpl.java com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java com/sun/org/apache/xerces/internal/jaxp/XNI2SAX.java com/sun/org/apache/xerces/internal/jaxp/javax.xml.parsers.SAXParserFactory com/sun/org/apache/xerces/internal/parsers com/sun/org/apache/xerces/internal/parsers/SCCS com/sun/org/apache/xerces/internal/parsers/SCCS/s.AbstractXMLDocumentParser.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.AbstractDOMParser.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.AbstractSAXParser.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.IntegratedParserConfiguration.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.BasicParserConfiguration.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.CachingParserPool.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.DOMASBuilderImpl.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.DOMParser.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.DOMParserImpl.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.DTDConfiguration.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.DTDParser.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.JAXPConfiguration.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.org.apache.xerces.xni.parser.DTDConfiguration com/sun/org/apache/xerces/internal/parsers/SCCS/s.NonValidatingConfiguration.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.ObjectFactory.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.SAXParser.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.SecurityConfiguration.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.SecuritySupport.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.SecuritySupport12.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.StandardParserConfiguration.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.XIncludeParserConfiguration.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.XML11Configuration.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.XMLDocumentParser.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.XMLGrammarCachingConfiguration.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.XMLGrammarParser.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.XMLGrammarPreparser.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.XMLParser.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.XPointerParserConfiguration.java com/sun/org/apache/xerces/internal/parsers/SCCS/s.org.apache.xerces.xni.parser.XMLParserConfiguration com/sun/org/apache/xerces/internal/parsers/SCCS/s.org.apache.xerces.xni.parser.XML11Configuration com/sun/org/apache/xerces/internal/parsers/SCCS/s.org.xml.sax.driver com/sun/org/apache/xerces/internal/parsers/AbstractXMLDocumentParser.java com/sun/org/apache/xerces/internal/parsers/AbstractDOMParser.java com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser.java com/sun/org/apache/xerces/internal/parsers/IntegratedParserConfiguration.java com/sun/org/apache/xerces/internal/parsers/BasicParserConfiguration.java com/sun/org/apache/xerces/internal/parsers/CachingParserPool.java com/sun/org/apache/xerces/internal/parsers/DOMASBuilderImpl.java com/sun/org/apache/xerces/internal/parsers/DOMParser.java com/sun/org/apache/xerces/internal/parsers/DOMParserImpl.java com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java com/sun/org/apache/xerces/internal/parsers/DTDParser.java com/sun/org/apache/xerces/internal/parsers/JAXPConfiguration.java com/sun/org/apache/xerces/internal/parsers/ObjectFactory.java com/sun/org/apache/xerces/internal/parsers/NonValidatingConfiguration.java com/sun/org/apache/xerces/internal/parsers/SAXParser.java com/sun/org/apache/xerces/internal/parsers/SecurityConfiguration.java com/sun/org/apache/xerces/internal/parsers/SecuritySupport.java com/sun/org/apache/xerces/internal/parsers/SecuritySupport12.java com/sun/org/apache/xerces/internal/parsers/StandardParserConfiguration.java com/sun/org/apache/xerces/internal/parsers/XIncludeParserConfiguration.java com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java com/sun/org/apache/xerces/internal/parsers/XMLDocumentParser.java com/sun/org/apache/xerces/internal/parsers/XMLGrammarCachingConfiguration.java com/sun/org/apache/xerces/internal/parsers/XMLGrammarParser.java com/sun/org/apache/xerces/internal/parsers/XMLGrammarPreparser.java com/sun/org/apache/xerces/internal/parsers/XMLParser.java com/sun/org/apache/xerces/internal/parsers/XPointerParserConfiguration.java com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.DTDConfiguration com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.XMLParserConfiguration com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.XML11Configuration com/sun/org/apache/xerces/internal/parsers/org.xml.sax.driver com/sun/org/apache/xerces/internal/util com/sun/org/apache/xerces/internal/util/SCCS com/sun/org/apache/xerces/internal/util/SCCS/s.AugmentationsImpl.java com/sun/org/apache/xerces/internal/util/SCCS/s.AttributesProxy.java com/sun/org/apache/xerces/internal/util/SCCS/s.URI.java com/sun/org/apache/xerces/internal/util/SCCS/s.DOMEntityResolverWrapper.java com/sun/org/apache/xerces/internal/util/SCCS/s.DOMErrorHandlerWrapper.java com/sun/org/apache/xerces/internal/util/SCCS/s.DOMUtil.java com/sun/org/apache/xerces/internal/util/SCCS/s.DatatypeMessageFormatter.java com/sun/org/apache/xerces/internal/util/SCCS/s.DefaultErrorHandler.java com/sun/org/apache/xerces/internal/util/SCCS/s.DraconianErrorHandler.java com/sun/org/apache/xerces/internal/util/SCCS/s.EncodingMap.java com/sun/org/apache/xerces/internal/util/SCCS/s.EntityResolver2Wrapper.java com/sun/org/apache/xerces/internal/util/SCCS/s.EntityResolverWrapper.java com/sun/org/apache/xerces/internal/util/SCCS/s.ErrorHandlerProxy.java com/sun/org/apache/xerces/internal/util/SCCS/s.XMLAttributesImpl.java com/sun/org/apache/xerces/internal/util/SCCS/s.ErrorHandlerWrapper.java com/sun/org/apache/xerces/internal/util/SCCS/s.IntStack.java com/sun/org/apache/xerces/internal/util/SCCS/s.LocatorProxy.java com/sun/org/apache/xerces/internal/util/SCCS/s.LocatorWrapper.java com/sun/org/apache/xerces/internal/util/SCCS/s.MessageFormatter.java com/sun/org/apache/xerces/internal/util/SCCS/s.NamespaceSupport.java com/sun/org/apache/xerces/internal/util/SCCS/s.ParserConfigurationSettings.java com/sun/org/apache/xerces/internal/util/SCCS/s.SAX2XNI.java com/sun/org/apache/xerces/internal/util/SCCS/s.SAXMessageFormatter.java com/sun/org/apache/xerces/internal/util/SCCS/s.SecurityManager.java com/sun/org/apache/xerces/internal/util/SCCS/s.ShadowedSymbolTable.java com/sun/org/apache/xerces/internal/util/SCCS/s.SymbolHash.java com/sun/org/apache/xerces/internal/util/SCCS/s.SymbolTable.java com/sun/org/apache/xerces/internal/util/SCCS/s.SynchronizedSymbolTable.java com/sun/org/apache/xerces/internal/util/SCCS/s.TeeXMLDocumentFilterImpl.java com/sun/org/apache/xerces/internal/util/SCCS/s.TypeInfoImpl.java com/sun/org/apache/xerces/internal/util/SCCS/s.XML11Char.java com/sun/org/apache/xerces/internal/util/SCCS/s.XMLErrorCode.java com/sun/org/apache/xerces/internal/util/SCCS/s.XMLChar.java com/sun/org/apache/xerces/internal/util/SCCS/s.XMLDocumentFilterImpl.java com/sun/org/apache/xerces/internal/util/SCCS/s.XMLEntityDescriptionImpl.java com/sun/org/apache/xerces/internal/util/SCCS/s.XMLGrammarPoolImpl.java com/sun/org/apache/xerces/internal/util/SCCS/s.XMLInputSourceAdaptor.java com/sun/org/apache/xerces/internal/util/SCCS/s.XMLResourceIdentifierImpl.java com/sun/org/apache/xerces/internal/util/SCCS/s.XMLStringBuffer.java com/sun/org/apache/xerces/internal/util/SCCS/s.XMLSymbols.java com/sun/org/apache/xerces/internal/util/DOMEntityResolverWrapper.java com/sun/org/apache/xerces/internal/util/AttributesProxy.java com/sun/org/apache/xerces/internal/util/AugmentationsImpl.java com/sun/org/apache/xerces/internal/util/DatatypeMessageFormatter.java com/sun/org/apache/xerces/internal/util/DOMErrorHandlerWrapper.java com/sun/org/apache/xerces/internal/util/DOMUtil.java com/sun/org/apache/xerces/internal/util/DefaultErrorHandler.java com/sun/org/apache/xerces/internal/util/DraconianErrorHandler.java com/sun/org/apache/xerces/internal/util/EncodingMap.java com/sun/org/apache/xerces/internal/util/EntityResolver2Wrapper.java com/sun/org/apache/xerces/internal/util/EntityResolverWrapper.java com/sun/org/apache/xerces/internal/util/ErrorHandlerProxy.java com/sun/org/apache/xerces/internal/util/SAX2XNI.java com/sun/org/apache/xerces/internal/util/ShadowedSymbolTable.java com/sun/org/apache/xerces/internal/util/ErrorHandlerWrapper.java com/sun/org/apache/xerces/internal/util/IntStack.java com/sun/org/apache/xerces/internal/util/LocatorProxy.java com/sun/org/apache/xerces/internal/util/LocatorWrapper.java com/sun/org/apache/xerces/internal/util/MessageFormatter.java com/sun/org/apache/xerces/internal/util/NamespaceSupport.java com/sun/org/apache/xerces/internal/util/ParserConfigurationSettings.java com/sun/org/apache/xerces/internal/util/SecurityManager.java com/sun/org/apache/xerces/internal/util/SAXMessageFormatter.java com/sun/org/apache/xerces/internal/util/SynchronizedSymbolTable.java com/sun/org/apache/xerces/internal/util/SymbolHash.java com/sun/org/apache/xerces/internal/util/SymbolTable.java com/sun/org/apache/xerces/internal/util/URI.java com/sun/org/apache/xerces/internal/util/TeeXMLDocumentFilterImpl.java com/sun/org/apache/xerces/internal/util/TypeInfoImpl.java com/sun/org/apache/xerces/internal/util/XMLDocumentFilterImpl.java com/sun/org/apache/xerces/internal/util/XML11Char.java com/sun/org/apache/xerces/internal/util/XMLAttributesImpl.java com/sun/org/apache/xerces/internal/util/XMLChar.java com/sun/org/apache/xerces/internal/util/XMLEntityDescriptionImpl.java com/sun/org/apache/xerces/internal/util/XMLErrorCode.java com/sun/org/apache/xerces/internal/util/XMLGrammarPoolImpl.java com/sun/org/apache/xerces/internal/util/XMLInputSourceAdaptor.java com/sun/org/apache/xerces/internal/util/XMLResourceIdentifierImpl.java com/sun/org/apache/xerces/internal/util/XMLStringBuffer.java com/sun/org/apache/xerces/internal/util/XMLSymbols.java com/sun/org/apache/xerces/internal/xinclude com/sun/org/apache/xerces/internal/xinclude/SCCS com/sun/org/apache/xerces/internal/xinclude/SCCS/s.XPointerElementHandler.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.MultipleScopeNamespaceSupport.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.ObjectFactory.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.SecuritySupport.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.SecuritySupport12.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.XInclude11TextReader.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.XIncludeFatalError.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.XIncludeHandler.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.XIncludeInputSource.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.XIncludeMessageFormatter.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.XIncludeNamespaceSupport.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.XIncludeResourceError.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.XIncludeTextReader.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.XPointerFramework.java com/sun/org/apache/xerces/internal/xinclude/SCCS/s.XPointerSchema.java com/sun/org/apache/xerces/internal/xinclude/MultipleScopeNamespaceSupport.java com/sun/org/apache/xerces/internal/xinclude/ObjectFactory.java com/sun/org/apache/xerces/internal/xinclude/SecuritySupport.java com/sun/org/apache/xerces/internal/xinclude/SecuritySupport12.java com/sun/org/apache/xerces/internal/xinclude/XInclude11TextReader.java com/sun/org/apache/xerces/internal/xinclude/XIncludeFatalError.java com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler.java com/sun/org/apache/xerces/internal/xinclude/XIncludeInputSource.java com/sun/org/apache/xerces/internal/xinclude/XIncludeMessageFormatter.java com/sun/org/apache/xerces/internal/xinclude/XIncludeNamespaceSupport.java com/sun/org/apache/xerces/internal/xinclude/XIncludeResourceError.java com/sun/org/apache/xerces/internal/xinclude/XIncludeTextReader.java com/sun/org/apache/xerces/internal/xinclude/XPointerElementHandler.java com/sun/org/apache/xerces/internal/xinclude/XPointerFramework.java com/sun/org/apache/xerces/internal/xinclude/XPointerSchema.java com/sun/org/apache/xerces/internal/xni com/sun/org/apache/xerces/internal/xni/SCCS com/sun/org/apache/xerces/internal/xni/SCCS/s.Augmentations.java com/sun/org/apache/xerces/internal/xni/SCCS/s.NamespaceContext.java com/sun/org/apache/xerces/internal/xni/SCCS/s.QName.java com/sun/org/apache/xerces/internal/xni/SCCS/s.XMLAttributes.java com/sun/org/apache/xerces/internal/xni/SCCS/s.XMLDTDHandler.java com/sun/org/apache/xerces/internal/xni/SCCS/s.XMLDTDContentModelHandler.java com/sun/org/apache/xerces/internal/xni/SCCS/s.XMLDocumentFragmentHandler.java com/sun/org/apache/xerces/internal/xni/SCCS/s.XMLDocumentHandler.java com/sun/org/apache/xerces/internal/xni/SCCS/s.XMLLocator.java com/sun/org/apache/xerces/internal/xni/SCCS/s.XMLResourceIdentifier.java com/sun/org/apache/xerces/internal/xni/SCCS/s.XMLString.java com/sun/org/apache/xerces/internal/xni/SCCS/s.XNIException.java com/sun/org/apache/xerces/internal/xni/grammars com/sun/org/apache/xerces/internal/xni/grammars/SCCS com/sun/org/apache/xerces/internal/xni/grammars/SCCS/s.Grammar.java com/sun/org/apache/xerces/internal/xni/grammars/SCCS/s.XMLGrammarLoader.java com/sun/org/apache/xerces/internal/xni/grammars/SCCS/s.XMLDTDDescription.java com/sun/org/apache/xerces/internal/xni/grammars/SCCS/s.XMLGrammarDescription.java com/sun/org/apache/xerces/internal/xni/grammars/SCCS/s.XMLGrammarPool.java com/sun/org/apache/xerces/internal/xni/grammars/SCCS/s.XMLSchemaDescription.java com/sun/org/apache/xerces/internal/xni/grammars/SCCS/s.XSGrammar.java com/sun/org/apache/xerces/internal/xni/grammars/XMLDTDDescription.java com/sun/org/apache/xerces/internal/xni/grammars/Grammar.java com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarDescription.java com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarLoader.java com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarPool.java com/sun/org/apache/xerces/internal/xni/grammars/XMLSchemaDescription.java com/sun/org/apache/xerces/internal/xni/grammars/XSGrammar.java com/sun/org/apache/xerces/internal/xni/parser com/sun/org/apache/xerces/internal/xni/parser/SCCS com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLComponentManager.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLComponent.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLConfigurationException.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLDTDContentModelFilter.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLDTDContentModelSource.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLDTDFilter.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLDTDScanner.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLDTDSource.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLDocumentFilter.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLDocumentScanner.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLDocumentSource.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLEntityResolver.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLErrorHandler.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLInputSource.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLParseException.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLParserConfiguration.java com/sun/org/apache/xerces/internal/xni/parser/SCCS/s.XMLPullParserConfiguration.java com/sun/org/apache/xerces/internal/xni/parser/XMLComponentManager.java com/sun/org/apache/xerces/internal/xni/parser/XMLComponent.java com/sun/org/apache/xerces/internal/xni/parser/XMLConfigurationException.java com/sun/org/apache/xerces/internal/xni/parser/XMLDTDContentModelFilter.java com/sun/org/apache/xerces/internal/xni/parser/XMLDTDContentModelSource.java com/sun/org/apache/xerces/internal/xni/parser/XMLDTDFilter.java com/sun/org/apache/xerces/internal/xni/parser/XMLDTDScanner.java com/sun/org/apache/xerces/internal/xni/parser/XMLDTDSource.java com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentFilter.java com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentScanner.java com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentSource.java com/sun/org/apache/xerces/internal/xni/parser/XMLEntityResolver.java com/sun/org/apache/xerces/internal/xni/parser/XMLErrorHandler.java com/sun/org/apache/xerces/internal/xni/parser/XMLPullParserConfiguration.java com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java com/sun/org/apache/xerces/internal/xni/parser/XMLParseException.java com/sun/org/apache/xerces/internal/xni/parser/XMLParserConfiguration.java com/sun/org/apache/xerces/internal/xni/NamespaceContext.java com/sun/org/apache/xerces/internal/xni/Augmentations.java com/sun/org/apache/xerces/internal/xni/XMLAttributes.java com/sun/org/apache/xerces/internal/xni/QName.java com/sun/org/apache/xerces/internal/xni/XMLDTDContentModelHandler.java com/sun/org/apache/xerces/internal/xni/XMLDTDHandler.java com/sun/org/apache/xerces/internal/xni/XMLDocumentFragmentHandler.java com/sun/org/apache/xerces/internal/xni/XMLDocumentHandler.java com/sun/org/apache/xerces/internal/xni/XMLLocator.java com/sun/org/apache/xerces/internal/xni/XMLResourceIdentifier.java com/sun/org/apache/xerces/internal/xni/XMLString.java com/sun/org/apache/xerces/internal/xni/XNIException.java com/sun/org/apache/xerces/internal/xs com/sun/org/apache/xerces/internal/xs/SCCS com/sun/org/apache/xerces/internal/xs/SCCS/s.XSAttributeDeclaration.java com/sun/org/apache/xerces/internal/xs/SCCS/s.AttributePSVI.java com/sun/org/apache/xerces/internal/xs/SCCS/s.ElementPSVI.java com/sun/org/apache/xerces/internal/xs/SCCS/s.ItemPSVI.java com/sun/org/apache/xerces/internal/xs/SCCS/s.LSInputList.java com/sun/org/apache/xerces/internal/xs/SCCS/s.PSVIProvider.java com/sun/org/apache/xerces/internal/xs/SCCS/s.ShortList.java com/sun/org/apache/xerces/internal/xs/SCCS/s.StringList.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSAnnotation.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSModelGroupDefinition.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSAttributeGroupDefinition.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSAttributeUse.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSComplexTypeDefinition.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSConstants.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSElementDeclaration.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSException.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSFacet.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSIDCDefinition.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSImplementation.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSLoader.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSModel.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSModelGroup.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSNotationDeclaration.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSMultiValueFacet.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSNamedMap.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSNamespaceItem.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSNamespaceItemList.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSObject.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSObjectList.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSParticle.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSTerm.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSSimpleTypeDefinition.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSTypeDefinition.java com/sun/org/apache/xerces/internal/xs/SCCS/s.XSWildcard.java com/sun/org/apache/xerces/internal/xs/XSAttributeDeclaration.java com/sun/org/apache/xerces/internal/xs/AttributePSVI.java com/sun/org/apache/xerces/internal/xs/ElementPSVI.java com/sun/org/apache/xerces/internal/xs/ItemPSVI.java com/sun/org/apache/xerces/internal/xs/LSInputList.java com/sun/org/apache/xerces/internal/xs/PSVIProvider.java com/sun/org/apache/xerces/internal/xs/ShortList.java com/sun/org/apache/xerces/internal/xs/StringList.java com/sun/org/apache/xerces/internal/xs/XSAnnotation.java com/sun/org/apache/xerces/internal/xs/XSTerm.java com/sun/org/apache/xerces/internal/xs/XSAttributeGroupDefinition.java com/sun/org/apache/xerces/internal/xs/XSAttributeUse.java com/sun/org/apache/xerces/internal/xs/XSComplexTypeDefinition.java com/sun/org/apache/xerces/internal/xs/XSConstants.java com/sun/org/apache/xerces/internal/xs/XSElementDeclaration.java com/sun/org/apache/xerces/internal/xs/XSException.java com/sun/org/apache/xerces/internal/xs/XSFacet.java com/sun/org/apache/xerces/internal/xs/XSIDCDefinition.java com/sun/org/apache/xerces/internal/xs/XSImplementation.java com/sun/org/apache/xerces/internal/xs/XSLoader.java com/sun/org/apache/xerces/internal/xs/XSModel.java com/sun/org/apache/xerces/internal/xs/XSModelGroup.java com/sun/org/apache/xerces/internal/xs/XSModelGroupDefinition.java com/sun/org/apache/xerces/internal/xs/XSMultiValueFacet.java com/sun/org/apache/xerces/internal/xs/XSNamedMap.java com/sun/org/apache/xerces/internal/xs/XSNamespaceItem.java com/sun/org/apache/xerces/internal/xs/XSNamespaceItemList.java com/sun/org/apache/xerces/internal/xs/XSNotationDeclaration.java com/sun/org/apache/xerces/internal/xs/XSObject.java com/sun/org/apache/xerces/internal/xs/XSObjectList.java com/sun/org/apache/xerces/internal/xs/XSParticle.java com/sun/org/apache/xerces/internal/xs/XSSimpleTypeDefinition.java com/sun/org/apache/xerces/internal/xs/XSWildcard.java com/sun/org/apache/xerces/internal/xs/XSTypeDefinition.java com/sun/org/apache/xml com/sun/org/apache/xml/internal com/sun/org/apache/xml/internal/dtm com/sun/org/apache/xml/internal/dtm/SCCS com/sun/org/apache/xml/internal/dtm/SCCS/s.Axis.java com/sun/org/apache/xml/internal/dtm/SCCS/s.DTM.java com/sun/org/apache/xml/internal/dtm/SCCS/s.DTMException.java com/sun/org/apache/xml/internal/dtm/SCCS/s.DTMAxisIterator.java com/sun/org/apache/xml/internal/dtm/SCCS/s.DTMAxisTraverser.java com/sun/org/apache/xml/internal/dtm/SCCS/s.DTMConfigurationException.java com/sun/org/apache/xml/internal/dtm/SCCS/s.DTMDOMException.java com/sun/org/apache/xml/internal/dtm/SCCS/s.DTMFilter.java com/sun/org/apache/xml/internal/dtm/SCCS/s.DTMIterator.java com/sun/org/apache/xml/internal/dtm/SCCS/s.DTMManager.java com/sun/org/apache/xml/internal/dtm/SCCS/s.DTMWSFilter.java com/sun/org/apache/xml/internal/dtm/SCCS/s.FactoryFinder.java com/sun/org/apache/xml/internal/dtm/SCCS/s.ObjectFactory.java com/sun/org/apache/xml/internal/dtm/SCCS/s.SecuritySupport.java com/sun/org/apache/xml/internal/dtm/SCCS/s.SecuritySupport12.java com/sun/org/apache/xml/internal/dtm/ref com/sun/org/apache/xml/internal/dtm/ref/SCCS com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMAxisIterNodeList.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.ChunkedIntArray.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.CoroutineManager.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.CoroutineParser.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.CustomStringPool.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMSafeStringPool.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMAxisIteratorBase.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMChildIterNodeList.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMDefaultBase.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMDefaultBaseIterators.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMDefaultBaseTraversers.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMDocumentImpl.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMManagerDefault.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMNamedNodeMap.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMNodeIterator.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMNodeList.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMNodeListBase.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMNodeProxy.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.ExpandedNameTable.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMStringPool.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.DTMTreeWalker.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.EmptyIterator.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.IncrementalSAXSource.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.ExtendedType.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.IncrementalSAXSource_Filter.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.IncrementalSAXSource_Xerces.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.NodeLocator.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.ObjectFactory.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.SecuritySupport.java com/sun/org/apache/xml/internal/dtm/ref/SCCS/s.SecuritySupport12.java com/sun/org/apache/xml/internal/dtm/ref/dom2dtm com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/SCCS com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/SCCS/s.DOM2DTM.java com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/SCCS/s.DOM2DTMdefaultNamespaceDeclarationNode.java com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTM.java com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java com/sun/org/apache/xml/internal/dtm/ref/sax2dtm com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SCCS com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SCCS/s.SAX2RTFDTM.java com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SCCS/s.SAX2DTM.java com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SCCS/s.SAX2DTM2.java com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM.java com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2.java com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2RTFDTM.java com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIterNodeList.java com/sun/org/apache/xml/internal/dtm/ref/ChunkedIntArray.java com/sun/org/apache/xml/internal/dtm/ref/CoroutineManager.java com/sun/org/apache/xml/internal/dtm/ref/CoroutineParser.java com/sun/org/apache/xml/internal/dtm/ref/CustomStringPool.java com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIteratorBase.java com/sun/org/apache/xml/internal/dtm/ref/DTMChildIterNodeList.java com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBase.java com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators.java com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers.java com/sun/org/apache/xml/internal/dtm/ref/DTMDocumentImpl.java com/sun/org/apache/xml/internal/dtm/ref/SecuritySupport.java com/sun/org/apache/xml/internal/dtm/ref/NodeLocator.java com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.java com/sun/org/apache/xml/internal/dtm/ref/DTMNamedNodeMap.java com/sun/org/apache/xml/internal/dtm/ref/DTMNodeIterator.java com/sun/org/apache/xml/internal/dtm/ref/DTMNodeList.java com/sun/org/apache/xml/internal/dtm/ref/DTMNodeListBase.java com/sun/org/apache/xml/internal/dtm/ref/DTMNodeProxy.java com/sun/org/apache/xml/internal/dtm/ref/DTMSafeStringPool.java com/sun/org/apache/xml/internal/dtm/ref/DTMStringPool.java com/sun/org/apache/xml/internal/dtm/ref/DTMTreeWalker.java com/sun/org/apache/xml/internal/dtm/ref/EmptyIterator.java com/sun/org/apache/xml/internal/dtm/ref/ExpandedNameTable.java com/sun/org/apache/xml/internal/dtm/ref/ExtendedType.java com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource.java com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Filter.java com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Xerces.java com/sun/org/apache/xml/internal/dtm/ref/ObjectFactory.java com/sun/org/apache/xml/internal/dtm/ref/SecuritySupport12.java com/sun/org/apache/xml/internal/dtm/Axis.java com/sun/org/apache/xml/internal/dtm/DTM.java com/sun/org/apache/xml/internal/dtm/DTMException.java com/sun/org/apache/xml/internal/dtm/DTMAxisIterator.java com/sun/org/apache/xml/internal/dtm/DTMAxisTraverser.java com/sun/org/apache/xml/internal/dtm/DTMConfigurationException.java com/sun/org/apache/xml/internal/dtm/DTMDOMException.java com/sun/org/apache/xml/internal/dtm/DTMFilter.java com/sun/org/apache/xml/internal/dtm/DTMIterator.java com/sun/org/apache/xml/internal/dtm/DTMManager.java com/sun/org/apache/xml/internal/dtm/DTMWSFilter.java com/sun/org/apache/xml/internal/dtm/FactoryFinder.java com/sun/org/apache/xml/internal/dtm/ObjectFactory.java com/sun/org/apache/xml/internal/dtm/SecuritySupport.java com/sun/org/apache/xml/internal/dtm/SecuritySupport12.java com/sun/org/apache/xml/internal/res com/sun/org/apache/xml/internal/res/SCCS com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_ca.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_cs.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_de.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_en.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_es.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_fr.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_it.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_ja.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_ko.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_sk.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_sv.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_tr.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_zh_CN.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_zh_HK.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLErrorResources_zh_TW.java com/sun/org/apache/xml/internal/res/SCCS/s.XMLMessages.java com/sun/org/apache/xml/internal/res/XMLErrorResources_ca.java com/sun/org/apache/xml/internal/res/XMLErrorResources.java com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_CN.java com/sun/org/apache/xml/internal/res/XMLErrorResources_cs.java com/sun/org/apache/xml/internal/res/XMLErrorResources_de.java com/sun/org/apache/xml/internal/res/XMLErrorResources_en.java com/sun/org/apache/xml/internal/res/XMLErrorResources_es.java com/sun/org/apache/xml/internal/res/XMLErrorResources_fr.java com/sun/org/apache/xml/internal/res/XMLErrorResources_it.java com/sun/org/apache/xml/internal/res/XMLErrorResources_ja.java com/sun/org/apache/xml/internal/res/XMLErrorResources_ko.java com/sun/org/apache/xml/internal/res/XMLErrorResources_sk.java com/sun/org/apache/xml/internal/res/XMLErrorResources_sv.java com/sun/org/apache/xml/internal/res/XMLErrorResources_tr.java com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_HK.java com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_TW.java com/sun/org/apache/xml/internal/res/XMLMessages.java com/sun/org/apache/xml/internal/serialize com/sun/org/apache/xml/internal/serialize/SCCS com/sun/org/apache/xml/internal/serialize/SCCS/s.SerializerFactoryImpl.java com/sun/org/apache/xml/internal/serialize/SCCS/s.BaseMarkupSerializer.java com/sun/org/apache/xml/internal/serialize/SCCS/s.DOMSerializer.java com/sun/org/apache/xml/internal/serialize/SCCS/s.DOMSerializerImpl.java com/sun/org/apache/xml/internal/serialize/SCCS/s.ElementState.java com/sun/org/apache/xml/internal/serialize/SCCS/s.EncodingInfo.java com/sun/org/apache/xml/internal/serialize/SCCS/s.Encodings.java com/sun/org/apache/xml/internal/serialize/SCCS/s.HTMLEntities.res com/sun/org/apache/xml/internal/serialize/SCCS/s.HTMLSerializer.java com/sun/org/apache/xml/internal/serialize/SCCS/s.HTMLdtd.java com/sun/org/apache/xml/internal/serialize/SCCS/s.IndentPrinter.java com/sun/org/apache/xml/internal/serialize/SCCS/s.LineSeparator.java com/sun/org/apache/xml/internal/serialize/SCCS/s.Method.java com/sun/org/apache/xml/internal/serialize/SCCS/s.ObjectFactory.java com/sun/org/apache/xml/internal/serialize/SCCS/s.OutputFormat.java com/sun/org/apache/xml/internal/serialize/SCCS/s.Printer.java com/sun/org/apache/xml/internal/serialize/SCCS/s.SecuritySupport.java com/sun/org/apache/xml/internal/serialize/SCCS/s.SecuritySupport12.java com/sun/org/apache/xml/internal/serialize/SCCS/s.Serializer.java com/sun/org/apache/xml/internal/serialize/SCCS/s.SerializerFactory.java com/sun/org/apache/xml/internal/serialize/SCCS/s.TextSerializer.java com/sun/org/apache/xml/internal/serialize/SCCS/s.XHTMLSerializer.java com/sun/org/apache/xml/internal/serialize/SCCS/s.XML11Serializer.java com/sun/org/apache/xml/internal/serialize/SCCS/s.XMLSerializer.java com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java com/sun/org/apache/xml/internal/serialize/DOMSerializer.java com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java com/sun/org/apache/xml/internal/serialize/ElementState.java com/sun/org/apache/xml/internal/serialize/EncodingInfo.java com/sun/org/apache/xml/internal/serialize/Encodings.java com/sun/org/apache/xml/internal/serialize/HTMLEntities.res com/sun/org/apache/xml/internal/serialize/HTMLSerializer.java com/sun/org/apache/xml/internal/serialize/HTMLdtd.java com/sun/org/apache/xml/internal/serialize/IndentPrinter.java com/sun/org/apache/xml/internal/serialize/LineSeparator.java com/sun/org/apache/xml/internal/serialize/Method.java com/sun/org/apache/xml/internal/serialize/ObjectFactory.java com/sun/org/apache/xml/internal/serialize/OutputFormat.java com/sun/org/apache/xml/internal/serialize/Printer.java com/sun/org/apache/xml/internal/serialize/SecuritySupport.java com/sun/org/apache/xml/internal/serialize/Serializer.java com/sun/org/apache/xml/internal/serialize/SecuritySupport12.java com/sun/org/apache/xml/internal/serialize/SerializerFactory.java com/sun/org/apache/xml/internal/serialize/SerializerFactoryImpl.java com/sun/org/apache/xml/internal/serialize/TextSerializer.java com/sun/org/apache/xml/internal/serialize/XHTMLSerializer.java com/sun/org/apache/xml/internal/serialize/XML11Serializer.java com/sun/org/apache/xml/internal/serialize/XMLSerializer.java com/sun/org/apache/xml/internal/serializer com/sun/org/apache/xml/internal/serializer/SCCS com/sun/org/apache/xml/internal/serializer/SCCS/s.OutputPropertiesFactory.java com/sun/org/apache/xml/internal/serializer/SCCS/s.AttributesImplSerializer.java com/sun/org/apache/xml/internal/serializer/SCCS/s.CharInfo.java com/sun/org/apache/xml/internal/serializer/SCCS/s.DOMSerializer.java com/sun/org/apache/xml/internal/serializer/SCCS/s.ElemContext.java com/sun/org/apache/xml/internal/serializer/SCCS/s.ElemDesc.java com/sun/org/apache/xml/internal/serializer/SCCS/s.EmptySerializer.java com/sun/org/apache/xml/internal/serializer/SCCS/s.EncodingInfo.java com/sun/org/apache/xml/internal/serializer/SCCS/s.Encodings.java com/sun/org/apache/xml/internal/serializer/SCCS/s.Encodings.properties com/sun/org/apache/xml/internal/serializer/SCCS/s.ExtendedContentHandler.java com/sun/org/apache/xml/internal/serializer/SCCS/s.ExtendedLexicalHandler.java com/sun/org/apache/xml/internal/serializer/SCCS/s.HTMLEntities.properties com/sun/org/apache/xml/internal/serializer/SCCS/s.Method.java com/sun/org/apache/xml/internal/serializer/SCCS/s.NamespaceMappings.java com/sun/org/apache/xml/internal/serializer/SCCS/s.ObjectFactory.java com/sun/org/apache/xml/internal/serializer/SCCS/s.SerializerTraceWriter.java com/sun/org/apache/xml/internal/serializer/SCCS/s.OutputPropertyUtils.java com/sun/org/apache/xml/internal/serializer/SCCS/s.SecuritySupport.java com/sun/org/apache/xml/internal/serializer/SCCS/s.SecuritySupport12.java com/sun/org/apache/xml/internal/serializer/SCCS/s.SerializationHandler.java com/sun/org/apache/xml/internal/serializer/SCCS/s.Serializer.java com/sun/org/apache/xml/internal/serializer/SCCS/s.SerializerBase.java com/sun/org/apache/xml/internal/serializer/SCCS/s.SerializerConstants.java com/sun/org/apache/xml/internal/serializer/SCCS/s.SerializerFactory.java com/sun/org/apache/xml/internal/serializer/SCCS/s.SerializerTrace.java com/sun/org/apache/xml/internal/serializer/SCCS/s.ToHTMLSAXHandler.java com/sun/org/apache/xml/internal/serializer/SCCS/s.ToHTMLStream.java com/sun/org/apache/xml/internal/serializer/SCCS/s.ToSAXHandler.java com/sun/org/apache/xml/internal/serializer/SCCS/s.ToStream.java com/sun/org/apache/xml/internal/serializer/SCCS/s.Utils.java com/sun/org/apache/xml/internal/serializer/SCCS/s.ToTextSAXHandler.java com/sun/org/apache/xml/internal/serializer/SCCS/s.ToTextStream.java com/sun/org/apache/xml/internal/serializer/SCCS/s.ToUnknownStream.java com/sun/org/apache/xml/internal/serializer/SCCS/s.ToXMLSAXHandler.java com/sun/org/apache/xml/internal/serializer/SCCS/s.ToXMLStream.java com/sun/org/apache/xml/internal/serializer/SCCS/s.TransformStateSetter.java com/sun/org/apache/xml/internal/serializer/SCCS/s.WriterToASCI.java com/sun/org/apache/xml/internal/serializer/SCCS/s.WriterToUTF8.java com/sun/org/apache/xml/internal/serializer/SCCS/s.WriterToUTF8Buffered.java com/sun/org/apache/xml/internal/serializer/SCCS/s.XMLEntities.properties com/sun/org/apache/xml/internal/serializer/SCCS/s.XSLOutputAttributes.java com/sun/org/apache/xml/internal/serializer/SCCS/s.output_html.properties com/sun/org/apache/xml/internal/serializer/SCCS/s.output_text.properties com/sun/org/apache/xml/internal/serializer/SCCS/s.output_unknown.properties com/sun/org/apache/xml/internal/serializer/SCCS/s.output_xml.properties com/sun/org/apache/xml/internal/serializer/SCCS/s.package.html com/sun/org/apache/xml/internal/serializer/Method.java com/sun/org/apache/xml/internal/serializer/AttributesImplSerializer.java com/sun/org/apache/xml/internal/serializer/CharInfo.java com/sun/org/apache/xml/internal/serializer/DOMSerializer.java com/sun/org/apache/xml/internal/serializer/ElemContext.java com/sun/org/apache/xml/internal/serializer/ElemDesc.java com/sun/org/apache/xml/internal/serializer/EmptySerializer.java com/sun/org/apache/xml/internal/serializer/EncodingInfo.java com/sun/org/apache/xml/internal/serializer/Encodings.java com/sun/org/apache/xml/internal/serializer/Encodings.properties com/sun/org/apache/xml/internal/serializer/ExtendedContentHandler.java com/sun/org/apache/xml/internal/serializer/ExtendedLexicalHandler.java com/sun/org/apache/xml/internal/serializer/HTMLEntities.properties com/sun/org/apache/xml/internal/serializer/NamespaceMappings.java com/sun/org/apache/xml/internal/serializer/SerializerBase.java com/sun/org/apache/xml/internal/serializer/Serializer.java com/sun/org/apache/xml/internal/serializer/ObjectFactory.java com/sun/org/apache/xml/internal/serializer/OutputPropertiesFactory.java com/sun/org/apache/xml/internal/serializer/OutputPropertyUtils.java com/sun/org/apache/xml/internal/serializer/SecuritySupport.java com/sun/org/apache/xml/internal/serializer/SecuritySupport12.java com/sun/org/apache/xml/internal/serializer/SerializationHandler.java com/sun/org/apache/xml/internal/serializer/SerializerConstants.java com/sun/org/apache/xml/internal/serializer/SerializerFactory.java com/sun/org/apache/xml/internal/serializer/SerializerTrace.java com/sun/org/apache/xml/internal/serializer/SerializerTraceWriter.java com/sun/org/apache/xml/internal/serializer/ToHTMLSAXHandler.java com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java com/sun/org/apache/xml/internal/serializer/ToSAXHandler.java com/sun/org/apache/xml/internal/serializer/ToStream.java com/sun/org/apache/xml/internal/serializer/package.html com/sun/org/apache/xml/internal/serializer/ToTextSAXHandler.java com/sun/org/apache/xml/internal/serializer/ToTextStream.java com/sun/org/apache/xml/internal/serializer/ToUnknownStream.java com/sun/org/apache/xml/internal/serializer/ToXMLSAXHandler.java com/sun/org/apache/xml/internal/serializer/ToXMLStream.java com/sun/org/apache/xml/internal/serializer/TransformStateSetter.java com/sun/org/apache/xml/internal/serializer/Utils.java com/sun/org/apache/xml/internal/serializer/WriterToASCI.java com/sun/org/apache/xml/internal/serializer/WriterToUTF8.java com/sun/org/apache/xml/internal/serializer/WriterToUTF8Buffered.java com/sun/org/apache/xml/internal/serializer/XMLEntities.properties com/sun/org/apache/xml/internal/serializer/XSLOutputAttributes.java com/sun/org/apache/xml/internal/serializer/output_html.properties com/sun/org/apache/xml/internal/serializer/output_text.properties com/sun/org/apache/xml/internal/serializer/output_unknown.properties com/sun/org/apache/xml/internal/serializer/output_xml.properties com/sun/org/apache/xml/internal/utils com/sun/org/apache/xml/internal/utils/SCCS com/sun/org/apache/xml/internal/utils/SCCS/s.BoolStack.java com/sun/org/apache/xml/internal/utils/SCCS/s.AttList.java com/sun/org/apache/xml/internal/utils/SCCS/s.DefaultErrorHandler.java com/sun/org/apache/xml/internal/utils/SCCS/s.CharKey.java com/sun/org/apache/xml/internal/utils/SCCS/s.Constants.java com/sun/org/apache/xml/internal/utils/SCCS/s.DOM2Helper.java com/sun/org/apache/xml/internal/utils/SCCS/s.DOMBuilder.java com/sun/org/apache/xml/internal/utils/SCCS/s.DOMHelper.java com/sun/org/apache/xml/internal/utils/SCCS/s.DOMOrder.java com/sun/org/apache/xml/internal/utils/SCCS/s.FastStringBuffer.java com/sun/org/apache/xml/internal/utils/SCCS/s.ElemDesc.java com/sun/org/apache/xml/internal/utils/SCCS/s.ListingErrorHandler.java com/sun/org/apache/xml/internal/utils/SCCS/s.Hashtree2Node.java com/sun/org/apache/xml/internal/utils/SCCS/s.IntStack.java com/sun/org/apache/xml/internal/utils/SCCS/s.IntVector.java com/sun/org/apache/xml/internal/utils/SCCS/s.NamespaceSupport2.java com/sun/org/apache/xml/internal/utils/SCCS/s.NSInfo.java com/sun/org/apache/xml/internal/utils/SCCS/s.LocaleUtility.java com/sun/org/apache/xml/internal/utils/SCCS/s.MutableAttrListImpl.java com/sun/org/apache/xml/internal/utils/SCCS/s.NameSpace.java com/sun/org/apache/xml/internal/utils/SCCS/s.ObjectFactory.java com/sun/org/apache/xml/internal/utils/SCCS/s.NodeConsumer.java com/sun/org/apache/xml/internal/utils/SCCS/s.NodeVector.java com/sun/org/apache/xml/internal/utils/SCCS/s.PrefixResolverDefault.java com/sun/org/apache/xml/internal/utils/SCCS/s.ObjectPool.java com/sun/org/apache/xml/internal/utils/SCCS/s.ObjectStack.java com/sun/org/apache/xml/internal/utils/SCCS/s.ObjectVector.java com/sun/org/apache/xml/internal/utils/SCCS/s.PrefixResolver.java com/sun/org/apache/xml/internal/utils/SCCS/s.SAXSourceLocator.java com/sun/org/apache/xml/internal/utils/SCCS/s.QName.java com/sun/org/apache/xml/internal/utils/SCCS/s.RawCharacterHandler.java com/sun/org/apache/xml/internal/utils/SCCS/s.SecuritySupport.java com/sun/org/apache/xml/internal/utils/SCCS/s.StringToStringTableVector.java com/sun/org/apache/xml/internal/utils/SCCS/s.SecuritySupport12.java com/sun/org/apache/xml/internal/utils/SCCS/s.SerializableLocatorImpl.java com/sun/org/apache/xml/internal/utils/SCCS/s.StopParseException.java com/sun/org/apache/xml/internal/utils/SCCS/s.StringBufferPool.java com/sun/org/apache/xml/internal/utils/SCCS/s.StringComparable.java com/sun/org/apache/xml/internal/utils/SCCS/s.StringToIntTable.java com/sun/org/apache/xml/internal/utils/SCCS/s.StringToStringTable.java com/sun/org/apache/xml/internal/utils/SCCS/s.StylesheetPIHandler.java com/sun/org/apache/xml/internal/utils/SCCS/s.StringVector.java com/sun/org/apache/xml/internal/utils/SCCS/s.UnImplNode.java com/sun/org/apache/xml/internal/utils/SCCS/s.Trie.java com/sun/org/apache/xml/internal/utils/SCCS/s.SuballocatedByteVector.java com/sun/org/apache/xml/internal/utils/SCCS/s.SuballocatedIntVector.java com/sun/org/apache/xml/internal/utils/SCCS/s.SystemIDResolver.java com/sun/org/apache/xml/internal/utils/SCCS/s.ThreadControllerWrapper.java com/sun/org/apache/xml/internal/utils/SCCS/s.TreeWalker.java com/sun/org/apache/xml/internal/utils/SCCS/s.URI.java com/sun/org/apache/xml/internal/utils/SCCS/s.WrappedRuntimeException.java com/sun/org/apache/xml/internal/utils/SCCS/s.WrongParserException.java com/sun/org/apache/xml/internal/utils/SCCS/s.XMLChar.java com/sun/org/apache/xml/internal/utils/SCCS/s.XMLCharacterRecognizer.java com/sun/org/apache/xml/internal/utils/SCCS/s.XMLReaderManager.java com/sun/org/apache/xml/internal/utils/SCCS/s.XMLString.java com/sun/org/apache/xml/internal/utils/SCCS/s.XMLStringDefault.java com/sun/org/apache/xml/internal/utils/SCCS/s.XMLStringFactory.java com/sun/org/apache/xml/internal/utils/SCCS/s.XMLStringFactoryDefault.java com/sun/org/apache/xml/internal/utils/SCCS/s.package.html com/sun/org/apache/xml/internal/utils/res com/sun/org/apache/xml/internal/utils/res/SCCS com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResourceBundleBase.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResourceBundle.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_de.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_en.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_es.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_fr.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_it.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_ja_JP_A.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_ja_JP_HA.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_ja_JP_HI.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_ja_JP_I.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_ko.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_sv.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_zh_CN.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_zh_HK.java com/sun/org/apache/xml/internal/utils/res/SCCS/s.XResources_zh_TW.java com/sun/org/apache/xml/internal/utils/res/XResourceBundleBase.java com/sun/org/apache/xml/internal/utils/res/XResourceBundle.java com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_HA.java com/sun/org/apache/xml/internal/utils/res/XResources_de.java com/sun/org/apache/xml/internal/utils/res/XResources_en.java com/sun/org/apache/xml/internal/utils/res/XResources_es.java com/sun/org/apache/xml/internal/utils/res/XResources_fr.java com/sun/org/apache/xml/internal/utils/res/XResources_it.java com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_A.java com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_HI.java com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_I.java com/sun/org/apache/xml/internal/utils/res/XResources_ko.java com/sun/org/apache/xml/internal/utils/res/XResources_sv.java com/sun/org/apache/xml/internal/utils/res/XResources_zh_CN.java com/sun/org/apache/xml/internal/utils/res/XResources_zh_HK.java com/sun/org/apache/xml/internal/utils/res/XResources_zh_TW.java com/sun/org/apache/xml/internal/utils/synthetic com/sun/org/apache/xml/internal/utils/synthetic/SCCS com/sun/org/apache/xml/internal/utils/synthetic/SCCS/s.JavaUtils.java com/sun/org/apache/xml/internal/utils/synthetic/SCCS/s.Class.java com/sun/org/apache/xml/internal/utils/synthetic/SCCS/s.SynthesisException.java com/sun/org/apache/xml/internal/utils/synthetic/SCCS/s.TestDriver.java com/sun/org/apache/xml/internal/utils/synthetic/reflection com/sun/org/apache/xml/internal/utils/synthetic/reflection/SCCS com/sun/org/apache/xml/internal/utils/synthetic/reflection/SCCS/s.Constructor.java com/sun/org/apache/xml/internal/utils/synthetic/reflection/SCCS/s.EntryPoint.java com/sun/org/apache/xml/internal/utils/synthetic/reflection/SCCS/s.Field.java com/sun/org/apache/xml/internal/utils/synthetic/reflection/SCCS/s.Member.java com/sun/org/apache/xml/internal/utils/synthetic/reflection/SCCS/s.Method.java com/sun/org/apache/xml/internal/utils/synthetic/reflection/Constructor.java com/sun/org/apache/xml/internal/utils/synthetic/reflection/EntryPoint.java com/sun/org/apache/xml/internal/utils/synthetic/reflection/Field.java com/sun/org/apache/xml/internal/utils/synthetic/reflection/Member.java com/sun/org/apache/xml/internal/utils/synthetic/reflection/Method.java com/sun/org/apache/xml/internal/utils/synthetic/JavaUtils.java com/sun/org/apache/xml/internal/utils/synthetic/Class.java com/sun/org/apache/xml/internal/utils/synthetic/SynthesisException.java com/sun/org/apache/xml/internal/utils/synthetic/TestDriver.java com/sun/org/apache/xml/internal/utils/AttList.java com/sun/org/apache/xml/internal/utils/BoolStack.java com/sun/org/apache/xml/internal/utils/CharKey.java com/sun/org/apache/xml/internal/utils/Constants.java com/sun/org/apache/xml/internal/utils/DOM2Helper.java com/sun/org/apache/xml/internal/utils/DOMBuilder.java com/sun/org/apache/xml/internal/utils/DOMHelper.java com/sun/org/apache/xml/internal/utils/DOMOrder.java com/sun/org/apache/xml/internal/utils/ElemDesc.java com/sun/org/apache/xml/internal/utils/SerializableLocatorImpl.java com/sun/org/apache/xml/internal/utils/DefaultErrorHandler.java com/sun/org/apache/xml/internal/utils/FastStringBuffer.java com/sun/org/apache/xml/internal/utils/Hashtree2Node.java com/sun/org/apache/xml/internal/utils/IntStack.java com/sun/org/apache/xml/internal/utils/IntVector.java com/sun/org/apache/xml/internal/utils/ListingErrorHandler.java com/sun/org/apache/xml/internal/utils/LocaleUtility.java com/sun/org/apache/xml/internal/utils/MutableAttrListImpl.java com/sun/org/apache/xml/internal/utils/NSInfo.java com/sun/org/apache/xml/internal/utils/NameSpace.java com/sun/org/apache/xml/internal/utils/NamespaceSupport2.java com/sun/org/apache/xml/internal/utils/NodeConsumer.java com/sun/org/apache/xml/internal/utils/NodeVector.java com/sun/org/apache/xml/internal/utils/ObjectFactory.java com/sun/org/apache/xml/internal/utils/ObjectPool.java com/sun/org/apache/xml/internal/utils/ObjectStack.java com/sun/org/apache/xml/internal/utils/ObjectVector.java com/sun/org/apache/xml/internal/utils/PrefixResolver.java com/sun/org/apache/xml/internal/utils/PrefixResolverDefault.java com/sun/org/apache/xml/internal/utils/QName.java com/sun/org/apache/xml/internal/utils/RawCharacterHandler.java com/sun/org/apache/xml/internal/utils/SAXSourceLocator.java com/sun/org/apache/xml/internal/utils/SecuritySupport.java com/sun/org/apache/xml/internal/utils/StringVector.java com/sun/org/apache/xml/internal/utils/SecuritySupport12.java com/sun/org/apache/xml/internal/utils/StringToStringTable.java com/sun/org/apache/xml/internal/utils/StopParseException.java com/sun/org/apache/xml/internal/utils/StringBufferPool.java com/sun/org/apache/xml/internal/utils/StringComparable.java com/sun/org/apache/xml/internal/utils/StringToIntTable.java com/sun/org/apache/xml/internal/utils/XMLReaderManager.java com/sun/org/apache/xml/internal/utils/Trie.java com/sun/org/apache/xml/internal/utils/StringToStringTableVector.java com/sun/org/apache/xml/internal/utils/StylesheetPIHandler.java com/sun/org/apache/xml/internal/utils/SuballocatedByteVector.java com/sun/org/apache/xml/internal/utils/SuballocatedIntVector.java com/sun/org/apache/xml/internal/utils/SystemIDResolver.java com/sun/org/apache/xml/internal/utils/ThreadControllerWrapper.java com/sun/org/apache/xml/internal/utils/TreeWalker.java com/sun/org/apache/xml/internal/utils/URI.java com/sun/org/apache/xml/internal/utils/UnImplNode.java com/sun/org/apache/xml/internal/utils/XMLChar.java com/sun/org/apache/xml/internal/utils/XMLString.java com/sun/org/apache/xml/internal/utils/WrappedRuntimeException.java com/sun/org/apache/xml/internal/utils/WrongParserException.java com/sun/org/apache/xml/internal/utils/XMLStringFactoryDefault.java com/sun/org/apache/xml/internal/utils/XMLCharacterRecognizer.java com/sun/org/apache/xml/internal/utils/XMLStringDefault.java com/sun/org/apache/xml/internal/utils/XMLStringFactory.java com/sun/org/apache/xml/internal/utils/package.html com/sun/org/apache/xpath com/sun/org/apache/xpath/internal com/sun/org/apache/xpath/internal/SCCS com/sun/org/apache/xpath/internal/SCCS/s.Expression.java com/sun/org/apache/xpath/internal/SCCS/s.Arg.java com/sun/org/apache/xpath/internal/SCCS/s.ExtensionsProvider.java com/sun/org/apache/xpath/internal/SCCS/s.CachedXPathAPI.java com/sun/org/apache/xpath/internal/SCCS/s.ExpressionNode.java com/sun/org/apache/xpath/internal/SCCS/s.ExpressionOwner.java com/sun/org/apache/xpath/internal/SCCS/s.SourceTreeManager.java com/sun/org/apache/xpath/internal/SCCS/s.FoundIndex.java com/sun/org/apache/xpath/internal/SCCS/s.NodeSet.java com/sun/org/apache/xpath/internal/SCCS/s.NodeSetDTM.java com/sun/org/apache/xpath/internal/SCCS/s.SourceTree.java com/sun/org/apache/xpath/internal/SCCS/s.VariableStack.java com/sun/org/apache/xpath/internal/SCCS/s.XPathContext.java com/sun/org/apache/xpath/internal/SCCS/s.XPath.java com/sun/org/apache/xpath/internal/SCCS/s.WhitespaceStrippingElementMatcher.java com/sun/org/apache/xpath/internal/SCCS/s.XPathAPI.java com/sun/org/apache/xpath/internal/SCCS/s.XPathProcessorException.java com/sun/org/apache/xpath/internal/SCCS/s.XPathException.java com/sun/org/apache/xpath/internal/SCCS/s.XPathFactory.java com/sun/org/apache/xpath/internal/SCCS/s.XPathVisitable.java com/sun/org/apache/xpath/internal/SCCS/s.XPathVisitor.java com/sun/org/apache/xpath/internal/SCCS/s.package.html com/sun/org/apache/xpath/internal/axes com/sun/org/apache/xpath/internal/axes/SCCS com/sun/org/apache/xpath/internal/axes/SCCS/s.FilterExprIteratorSimple.java com/sun/org/apache/xpath/internal/axes/SCCS/s.AttributeIterator.java com/sun/org/apache/xpath/internal/axes/SCCS/s.AxesWalker.java com/sun/org/apache/xpath/internal/axes/SCCS/s.BasicTestIterator.java com/sun/org/apache/xpath/internal/axes/SCCS/s.ChildIterator.java com/sun/org/apache/xpath/internal/axes/SCCS/s.ChildTestIterator.java com/sun/org/apache/xpath/internal/axes/SCCS/s.ContextNodeList.java com/sun/org/apache/xpath/internal/axes/SCCS/s.DescendantIterator.java com/sun/org/apache/xpath/internal/axes/SCCS/s.FilterExprIterator.java com/sun/org/apache/xpath/internal/axes/SCCS/s.HasPositionalPredChecker.java com/sun/org/apache/xpath/internal/axes/SCCS/s.FilterExprWalker.java com/sun/org/apache/xpath/internal/axes/SCCS/s.IteratorPool.java com/sun/org/apache/xpath/internal/axes/SCCS/s.LocPathIterator.java com/sun/org/apache/xpath/internal/axes/SCCS/s.OneStepIteratorForward.java com/sun/org/apache/xpath/internal/axes/SCCS/s.MatchPatternIterator.java com/sun/org/apache/xpath/internal/axes/SCCS/s.NodeSequence.java com/sun/org/apache/xpath/internal/axes/SCCS/s.OneStepIterator.java com/sun/org/apache/xpath/internal/axes/SCCS/s.PredicatedNodeTest.java com/sun/org/apache/xpath/internal/axes/SCCS/s.PathComponent.java com/sun/org/apache/xpath/internal/axes/SCCS/s.ReverseAxesWalker.java com/sun/org/apache/xpath/internal/axes/SCCS/s.RTFIterator.java com/sun/org/apache/xpath/internal/axes/SCCS/s.SelfIteratorNoPredicate.java com/sun/org/apache/xpath/internal/axes/SCCS/s.SubContextList.java com/sun/org/apache/xpath/internal/axes/SCCS/s.UnionChildIterator.java com/sun/org/apache/xpath/internal/axes/SCCS/s.UnionPathIterator.java com/sun/org/apache/xpath/internal/axes/SCCS/s.WalkerFactory.java com/sun/org/apache/xpath/internal/axes/SCCS/s.WalkingIterator.java com/sun/org/apache/xpath/internal/axes/SCCS/s.package.html com/sun/org/apache/xpath/internal/axes/SCCS/s.WalkingIteratorSorted.java com/sun/org/apache/xpath/internal/axes/FilterExprIteratorSimple.java com/sun/org/apache/xpath/internal/axes/AttributeIterator.java com/sun/org/apache/xpath/internal/axes/AxesWalker.java com/sun/org/apache/xpath/internal/axes/BasicTestIterator.java com/sun/org/apache/xpath/internal/axes/ChildIterator.java com/sun/org/apache/xpath/internal/axes/ChildTestIterator.java com/sun/org/apache/xpath/internal/axes/ContextNodeList.java com/sun/org/apache/xpath/internal/axes/DescendantIterator.java com/sun/org/apache/xpath/internal/axes/FilterExprIterator.java com/sun/org/apache/xpath/internal/axes/HasPositionalPredChecker.java com/sun/org/apache/xpath/internal/axes/FilterExprWalker.java com/sun/org/apache/xpath/internal/axes/LocPathIterator.java com/sun/org/apache/xpath/internal/axes/IteratorPool.java com/sun/org/apache/xpath/internal/axes/MatchPatternIterator.java com/sun/org/apache/xpath/internal/axes/NodeSequence.java com/sun/org/apache/xpath/internal/axes/OneStepIterator.java com/sun/org/apache/xpath/internal/axes/OneStepIteratorForward.java com/sun/org/apache/xpath/internal/axes/PathComponent.java com/sun/org/apache/xpath/internal/axes/PredicatedNodeTest.java com/sun/org/apache/xpath/internal/axes/RTFIterator.java com/sun/org/apache/xpath/internal/axes/ReverseAxesWalker.java com/sun/org/apache/xpath/internal/axes/SelfIteratorNoPredicate.java com/sun/org/apache/xpath/internal/axes/SubContextList.java com/sun/org/apache/xpath/internal/axes/UnionChildIterator.java com/sun/org/apache/xpath/internal/axes/UnionPathIterator.java com/sun/org/apache/xpath/internal/axes/WalkerFactory.java com/sun/org/apache/xpath/internal/axes/WalkingIterator.java com/sun/org/apache/xpath/internal/axes/WalkingIteratorSorted.java com/sun/org/apache/xpath/internal/axes/package.html com/sun/org/apache/xpath/internal/compiler com/sun/org/apache/xpath/internal/compiler/SCCS com/sun/org/apache/xpath/internal/compiler/SCCS/s.FuncLoader.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.Compiler.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.FunctionTable.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.Keywords.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.Lexer.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.ObjectFactory.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.OpCodes.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.OpMap.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.OpMapVector.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.PsuedoNames.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.SecuritySupport.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.SecuritySupport12.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.XPathDumper.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.XPathParser.java com/sun/org/apache/xpath/internal/compiler/SCCS/s.package.html com/sun/org/apache/xpath/internal/compiler/FunctionTable.java com/sun/org/apache/xpath/internal/compiler/Compiler.java com/sun/org/apache/xpath/internal/compiler/FuncLoader.java com/sun/org/apache/xpath/internal/compiler/SecuritySupport.java com/sun/org/apache/xpath/internal/compiler/Keywords.java com/sun/org/apache/xpath/internal/compiler/Lexer.java com/sun/org/apache/xpath/internal/compiler/ObjectFactory.java com/sun/org/apache/xpath/internal/compiler/OpCodes.java com/sun/org/apache/xpath/internal/compiler/OpMap.java com/sun/org/apache/xpath/internal/compiler/OpMapVector.java com/sun/org/apache/xpath/internal/compiler/PsuedoNames.java com/sun/org/apache/xpath/internal/compiler/SecuritySupport12.java com/sun/org/apache/xpath/internal/compiler/XPathDumper.java com/sun/org/apache/xpath/internal/compiler/XPathParser.java com/sun/org/apache/xpath/internal/compiler/package.html com/sun/org/apache/xpath/internal/functions com/sun/org/apache/xpath/internal/functions/SCCS com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncDoclocation.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncBoolean.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncCeiling.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncConcat.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncContains.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncCount.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncCurrent.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncExtElementAvailable.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncExtFunction.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncExtFunctionAvailable.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncFalse.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncFloor.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncGenerateId.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncId.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncLang.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncNormalizeSpace.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncLast.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncLocalPart.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncNamespace.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncNumber.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncNot.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncSubstringAfter.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncPosition.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncQname.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncRound.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncStartsWith.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncString.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncStringLength.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncSubstring.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncSubstringBefore.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncSum.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncSystemProperty.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncTranslate.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncTrue.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FuncUnparsedEntityURI.java com/sun/org/apache/xpath/internal/functions/SCCS/s.Function.java com/sun/org/apache/xpath/internal/functions/SCCS/s.Function2Args.java com/sun/org/apache/xpath/internal/functions/SCCS/s.Function3Args.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FunctionDef1Arg.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FunctionMultiArgs.java com/sun/org/apache/xpath/internal/functions/SCCS/s.FunctionOneArg.java com/sun/org/apache/xpath/internal/functions/SCCS/s.ObjectFactory.java com/sun/org/apache/xpath/internal/functions/SCCS/s.SecuritySupport.java com/sun/org/apache/xpath/internal/functions/SCCS/s.SecuritySupport12.java com/sun/org/apache/xpath/internal/functions/SCCS/s.WrongNumberArgsException.java com/sun/org/apache/xpath/internal/functions/SCCS/s.package.html com/sun/org/apache/xpath/internal/functions/FuncDoclocation.java com/sun/org/apache/xpath/internal/functions/FuncBoolean.java com/sun/org/apache/xpath/internal/functions/FuncCeiling.java com/sun/org/apache/xpath/internal/functions/FuncConcat.java com/sun/org/apache/xpath/internal/functions/FuncContains.java com/sun/org/apache/xpath/internal/functions/FuncCount.java com/sun/org/apache/xpath/internal/functions/FuncCurrent.java com/sun/org/apache/xpath/internal/functions/FuncId.java com/sun/org/apache/xpath/internal/functions/FuncExtElementAvailable.java com/sun/org/apache/xpath/internal/functions/FuncExtFunction.java com/sun/org/apache/xpath/internal/functions/FuncExtFunctionAvailable.java com/sun/org/apache/xpath/internal/functions/FuncFalse.java com/sun/org/apache/xpath/internal/functions/FuncFloor.java com/sun/org/apache/xpath/internal/functions/FuncGenerateId.java com/sun/org/apache/xpath/internal/functions/FuncLang.java com/sun/org/apache/xpath/internal/functions/FuncLast.java com/sun/org/apache/xpath/internal/functions/FuncNot.java com/sun/org/apache/xpath/internal/functions/FuncLocalPart.java com/sun/org/apache/xpath/internal/functions/FuncNamespace.java com/sun/org/apache/xpath/internal/functions/FuncNormalizeSpace.java com/sun/org/apache/xpath/internal/functions/FuncNumber.java com/sun/org/apache/xpath/internal/functions/FuncPosition.java com/sun/org/apache/xpath/internal/functions/FuncQname.java com/sun/org/apache/xpath/internal/functions/FuncRound.java com/sun/org/apache/xpath/internal/functions/FuncStartsWith.java com/sun/org/apache/xpath/internal/functions/FuncString.java com/sun/org/apache/xpath/internal/functions/FuncStringLength.java com/sun/org/apache/xpath/internal/functions/FuncSubstring.java com/sun/org/apache/xpath/internal/functions/FuncSubstringAfter.java com/sun/org/apache/xpath/internal/functions/FuncSubstringBefore.java com/sun/org/apache/xpath/internal/functions/FuncSum.java com/sun/org/apache/xpath/internal/functions/FuncSystemProperty.java com/sun/org/apache/xpath/internal/functions/FuncTranslate.java com/sun/org/apache/xpath/internal/functions/FuncTrue.java com/sun/org/apache/xpath/internal/functions/FuncUnparsedEntityURI.java com/sun/org/apache/xpath/internal/functions/Function.java com/sun/org/apache/xpath/internal/functions/Function2Args.java com/sun/org/apache/xpath/internal/functions/Function3Args.java com/sun/org/apache/xpath/internal/functions/FunctionDef1Arg.java com/sun/org/apache/xpath/internal/functions/FunctionMultiArgs.java com/sun/org/apache/xpath/internal/functions/FunctionOneArg.java com/sun/org/apache/xpath/internal/functions/ObjectFactory.java com/sun/org/apache/xpath/internal/functions/SecuritySupport.java com/sun/org/apache/xpath/internal/functions/SecuritySupport12.java com/sun/org/apache/xpath/internal/functions/WrongNumberArgsException.java com/sun/org/apache/xpath/internal/functions/package.html com/sun/org/apache/xpath/internal/jaxp com/sun/org/apache/xpath/internal/jaxp/SCCS com/sun/org/apache/xpath/internal/jaxp/SCCS/s.JAXPExtensionsProvider.java com/sun/org/apache/xpath/internal/jaxp/SCCS/s.JAXPPrefixResolver.java com/sun/org/apache/xpath/internal/jaxp/SCCS/s.JAXPVariableStack.java com/sun/org/apache/xpath/internal/jaxp/SCCS/s.XPathExpressionImpl.java com/sun/org/apache/xpath/internal/jaxp/SCCS/s.XPathFactoryImpl.java com/sun/org/apache/xpath/internal/jaxp/SCCS/s.XPathImpl.java com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.java com/sun/org/apache/xpath/internal/jaxp/JAXPPrefixResolver.java com/sun/org/apache/xpath/internal/jaxp/JAXPVariableStack.java com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java com/sun/org/apache/xpath/internal/objects com/sun/org/apache/xpath/internal/objects/SCCS com/sun/org/apache/xpath/internal/objects/SCCS/s.XBooleanStatic.java com/sun/org/apache/xpath/internal/objects/SCCS/s.XBoolean.java com/sun/org/apache/xpath/internal/objects/SCCS/s.XRTreeFragSelectWrapper.java com/sun/org/apache/xpath/internal/objects/SCCS/s.XMLStringFactoryImpl.java com/sun/org/apache/xpath/internal/objects/SCCS/s.XNodeSet.java com/sun/org/apache/xpath/internal/objects/SCCS/s.XNodeSetForDOM.java com/sun/org/apache/xpath/internal/objects/SCCS/s.XNull.java com/sun/org/apache/xpath/internal/objects/SCCS/s.XNumber.java com/sun/org/apache/xpath/internal/objects/SCCS/s.XObject.java com/sun/org/apache/xpath/internal/objects/SCCS/s.XObjectFactory.java com/sun/org/apache/xpath/internal/objects/SCCS/s.XRTreeFrag.java com/sun/org/apache/xpath/internal/objects/SCCS/s.XStringForChars.java com/sun/org/apache/xpath/internal/objects/SCCS/s.XString.java com/sun/org/apache/xpath/internal/objects/SCCS/s.XStringForFSB.java com/sun/org/apache/xpath/internal/objects/SCCS/s.package.html com/sun/org/apache/xpath/internal/objects/XBooleanStatic.java com/sun/org/apache/xpath/internal/objects/XBoolean.java com/sun/org/apache/xpath/internal/objects/XMLStringFactoryImpl.java com/sun/org/apache/xpath/internal/objects/XNodeSet.java com/sun/org/apache/xpath/internal/objects/XNodeSetForDOM.java com/sun/org/apache/xpath/internal/objects/XNull.java com/sun/org/apache/xpath/internal/objects/XNumber.java com/sun/org/apache/xpath/internal/objects/XObject.java com/sun/org/apache/xpath/internal/objects/XObjectFactory.java com/sun/org/apache/xpath/internal/objects/XRTreeFrag.java com/sun/org/apache/xpath/internal/objects/XRTreeFragSelectWrapper.java com/sun/org/apache/xpath/internal/objects/XString.java com/sun/org/apache/xpath/internal/objects/XStringForChars.java com/sun/org/apache/xpath/internal/objects/XStringForFSB.java com/sun/org/apache/xpath/internal/objects/package.html com/sun/org/apache/xpath/internal/operations com/sun/org/apache/xpath/internal/operations/SCCS com/sun/org/apache/xpath/internal/operations/SCCS/s.Equals.java com/sun/org/apache/xpath/internal/operations/SCCS/s.And.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Bool.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Div.java com/sun/org/apache/xpath/internal/operations/SCCS/s.NotEquals.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Gt.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Gte.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Lt.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Lte.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Minus.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Mod.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Mult.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Neg.java com/sun/org/apache/xpath/internal/operations/SCCS/s.UnaryOperation.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Number.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Operation.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Or.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Plus.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Quo.java com/sun/org/apache/xpath/internal/operations/SCCS/s.String.java com/sun/org/apache/xpath/internal/operations/SCCS/s.Variable.java com/sun/org/apache/xpath/internal/operations/SCCS/s.VariableSafeAbsRef.java com/sun/org/apache/xpath/internal/operations/SCCS/s.package.html com/sun/org/apache/xpath/internal/operations/NotEquals.java com/sun/org/apache/xpath/internal/operations/And.java com/sun/org/apache/xpath/internal/operations/Bool.java com/sun/org/apache/xpath/internal/operations/Div.java com/sun/org/apache/xpath/internal/operations/Equals.java com/sun/org/apache/xpath/internal/operations/Gt.java com/sun/org/apache/xpath/internal/operations/Gte.java com/sun/org/apache/xpath/internal/operations/Lt.java com/sun/org/apache/xpath/internal/operations/Lte.java com/sun/org/apache/xpath/internal/operations/Minus.java com/sun/org/apache/xpath/internal/operations/Mod.java com/sun/org/apache/xpath/internal/operations/Mult.java com/sun/org/apache/xpath/internal/operations/Neg.java com/sun/org/apache/xpath/internal/operations/UnaryOperation.java com/sun/org/apache/xpath/internal/operations/Number.java com/sun/org/apache/xpath/internal/operations/Operation.java com/sun/org/apache/xpath/internal/operations/Or.java com/sun/org/apache/xpath/internal/operations/Plus.java com/sun/org/apache/xpath/internal/operations/Quo.java com/sun/org/apache/xpath/internal/operations/String.java com/sun/org/apache/xpath/internal/operations/Variable.java com/sun/org/apache/xpath/internal/operations/VariableSafeAbsRef.java com/sun/org/apache/xpath/internal/operations/package.html com/sun/org/apache/xpath/internal/patterns com/sun/org/apache/xpath/internal/patterns/SCCS com/sun/org/apache/xpath/internal/patterns/SCCS/s.ContextMatchStepPattern.java com/sun/org/apache/xpath/internal/patterns/SCCS/s.FunctionPattern.java com/sun/org/apache/xpath/internal/patterns/SCCS/s.NodeTest.java com/sun/org/apache/xpath/internal/patterns/SCCS/s.NodeTestFilter.java com/sun/org/apache/xpath/internal/patterns/SCCS/s.StepPattern.java com/sun/org/apache/xpath/internal/patterns/SCCS/s.UnionPattern.java com/sun/org/apache/xpath/internal/patterns/SCCS/s.package.html com/sun/org/apache/xpath/internal/patterns/ContextMatchStepPattern.java com/sun/org/apache/xpath/internal/patterns/FunctionPattern.java com/sun/org/apache/xpath/internal/patterns/NodeTest.java com/sun/org/apache/xpath/internal/patterns/NodeTestFilter.java com/sun/org/apache/xpath/internal/patterns/StepPattern.java com/sun/org/apache/xpath/internal/patterns/UnionPattern.java com/sun/org/apache/xpath/internal/patterns/package.html com/sun/org/apache/xpath/internal/res com/sun/org/apache/xpath/internal/res/SCCS com/sun/org/apache/xpath/internal/res/SCCS/s.XPATHErrorResources_de.java com/sun/org/apache/xpath/internal/res/SCCS/s.XPATHErrorResources.java com/sun/org/apache/xpath/internal/res/SCCS/s.XPATHErrorResources_en.java com/sun/org/apache/xpath/internal/res/SCCS/s.XPATHErrorResources_es.java com/sun/org/apache/xpath/internal/res/SCCS/s.XPATHErrorResources_fr.java com/sun/org/apache/xpath/internal/res/SCCS/s.XPATHErrorResources_it.java com/sun/org/apache/xpath/internal/res/SCCS/s.XPATHErrorResources_ja.java com/sun/org/apache/xpath/internal/res/SCCS/s.XPATHErrorResources_ko.java com/sun/org/apache/xpath/internal/res/SCCS/s.XPATHErrorResources_sv.java com/sun/org/apache/xpath/internal/res/SCCS/s.XPATHErrorResources_zh_CN.java com/sun/org/apache/xpath/internal/res/SCCS/s.XPATHMessages.java com/sun/org/apache/xpath/internal/res/SCCS/s.XPATHErrorResources_zh_HK.java com/sun/org/apache/xpath/internal/res/SCCS/s.XPATHErrorResources_zh_TW.java com/sun/org/apache/xpath/internal/res/SCCS/s.package.html com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_CN.java com/sun/org/apache/xpath/internal/res/XPATHErrorResources.java com/sun/org/apache/xpath/internal/res/XPATHErrorResources_de.java com/sun/org/apache/xpath/internal/res/XPATHErrorResources_en.java com/sun/org/apache/xpath/internal/res/XPATHErrorResources_es.java com/sun/org/apache/xpath/internal/res/XPATHErrorResources_fr.java com/sun/org/apache/xpath/internal/res/XPATHErrorResources_it.java com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ja.java com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ko.java com/sun/org/apache/xpath/internal/res/XPATHErrorResources_sv.java com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_HK.java com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_TW.java com/sun/org/apache/xpath/internal/res/XPATHMessages.java com/sun/org/apache/xpath/internal/res/package.html com/sun/org/apache/xpath/internal/CachedXPathAPI.java com/sun/org/apache/xpath/internal/Arg.java com/sun/org/apache/xpath/internal/ExpressionNode.java com/sun/org/apache/xpath/internal/Expression.java com/sun/org/apache/xpath/internal/XPathProcessorException.java com/sun/org/apache/xpath/internal/ExpressionOwner.java com/sun/org/apache/xpath/internal/ExtensionsProvider.java com/sun/org/apache/xpath/internal/FoundIndex.java com/sun/org/apache/xpath/internal/NodeSet.java com/sun/org/apache/xpath/internal/NodeSetDTM.java com/sun/org/apache/xpath/internal/SourceTree.java com/sun/org/apache/xpath/internal/SourceTreeManager.java com/sun/org/apache/xpath/internal/VariableStack.java com/sun/org/apache/xpath/internal/XPath.java com/sun/org/apache/xpath/internal/XPathAPI.java com/sun/org/apache/xpath/internal/WhitespaceStrippingElementMatcher.java com/sun/org/apache/xpath/internal/XPathContext.java com/sun/org/apache/xpath/internal/XPathException.java com/sun/org/apache/xpath/internal/XPathFactory.java com/sun/org/apache/xpath/internal/XPathVisitable.java com/sun/org/apache/xpath/internal/XPathVisitor.java com/sun/org/apache/xpath/internal/package.html com/sun/org/omg com/sun/org/omg/CORBA com/sun/org/omg/CORBA/SCCS com/sun/org/omg/CORBA/SCCS/s.AttributeDescriptionHelper.java com/sun/org/omg/CORBA/SCCS/s.AttrDescriptionSeqHelper.java com/sun/org/omg/CORBA/SCCS/s.AttributeDescription.java com/sun/org/omg/CORBA/SCCS/s.ContextIdentifierHelper.java com/sun/org/omg/CORBA/SCCS/s.AttributeMode.java com/sun/org/omg/CORBA/SCCS/s.AttributeModeHelper.java com/sun/org/omg/CORBA/SCCS/s.ContextIdSeqHelper.java com/sun/org/omg/CORBA/SCCS/s.ExceptionDescriptionHelper.java com/sun/org/omg/CORBA/SCCS/s.DefinitionKindHelper.java com/sun/org/omg/CORBA/SCCS/s.ExcDescriptionSeqHelper.java com/sun/org/omg/CORBA/SCCS/s.ExceptionDescription.java com/sun/org/omg/CORBA/SCCS/s.InitializerHelper.java com/sun/org/omg/CORBA/SCCS/s.Initializer.java com/sun/org/omg/CORBA/SCCS/s.IDLTypeHelper.java com/sun/org/omg/CORBA/SCCS/s.IDLTypeOperations.java com/sun/org/omg/CORBA/SCCS/s.IRObjectOperations.java com/sun/org/omg/CORBA/SCCS/s.IdentifierHelper.java com/sun/org/omg/CORBA/SCCS/s.OpDescriptionSeqHelper.java com/sun/org/omg/CORBA/SCCS/s.InitializerSeqHelper.java com/sun/org/omg/CORBA/SCCS/s.OperationDescriptionHelper.java com/sun/org/omg/CORBA/SCCS/s.OperationDescription.java com/sun/org/omg/CORBA/SCCS/s.ParDescriptionSeqHelper.java com/sun/org/omg/CORBA/SCCS/s.OperationMode.java com/sun/org/omg/CORBA/SCCS/s.OperationModeHelper.java com/sun/org/omg/CORBA/SCCS/s.ParameterDescription.java com/sun/org/omg/CORBA/SCCS/s.ParameterMode.java com/sun/org/omg/CORBA/SCCS/s.RepositoryIdSeqHelper.java com/sun/org/omg/CORBA/SCCS/s.ParameterDescriptionHelper.java com/sun/org/omg/CORBA/SCCS/s.ParameterModeHelper.java com/sun/org/omg/CORBA/SCCS/s.Repository.java com/sun/org/omg/CORBA/SCCS/s.RepositoryHelper.java com/sun/org/omg/CORBA/SCCS/s.RepositoryIdHelper.java com/sun/org/omg/CORBA/SCCS/s.StructMemberSeqHelper.java com/sun/org/omg/CORBA/SCCS/s.StructMemberHelper.java com/sun/org/omg/CORBA/SCCS/s.ValueMemberHelper.java com/sun/org/omg/CORBA/SCCS/s.ValueMemberSeqHelper.java com/sun/org/omg/CORBA/SCCS/s.VersionSpecHelper.java com/sun/org/omg/CORBA/SCCS/s.VisibilityHelper.java com/sun/org/omg/CORBA/SCCS/s._IDLTypeStub.java com/sun/org/omg/CORBA/ValueDefPackage com/sun/org/omg/CORBA/ValueDefPackage/SCCS com/sun/org/omg/CORBA/ValueDefPackage/SCCS/s.FullValueDescriptionHelper.java com/sun/org/omg/CORBA/ValueDefPackage/SCCS/s.FullValueDescription.java com/sun/org/omg/CORBA/ValueDefPackage/FullValueDescriptionHelper.java com/sun/org/omg/CORBA/ValueDefPackage/FullValueDescription.java com/sun/org/omg/CORBA/portable com/sun/org/omg/CORBA/portable/SCCS com/sun/org/omg/CORBA/portable/SCCS/s.ValueHelper.java com/sun/org/omg/CORBA/portable/ValueHelper.java com/sun/org/omg/CORBA/AttrDescriptionSeqHelper.java com/sun/org/omg/CORBA/AttributeDescription.java com/sun/org/omg/CORBA/AttributeDescriptionHelper.java com/sun/org/omg/CORBA/AttributeMode.java com/sun/org/omg/CORBA/AttributeModeHelper.java com/sun/org/omg/CORBA/ContextIdSeqHelper.java com/sun/org/omg/CORBA/ContextIdentifierHelper.java com/sun/org/omg/CORBA/DefinitionKindHelper.java com/sun/org/omg/CORBA/ExcDescriptionSeqHelper.java com/sun/org/omg/CORBA/ExceptionDescription.java com/sun/org/omg/CORBA/ExceptionDescriptionHelper.java com/sun/org/omg/CORBA/Repository.java com/sun/org/omg/CORBA/IDLTypeHelper.java com/sun/org/omg/CORBA/IDLTypeOperations.java com/sun/org/omg/CORBA/IRObjectOperations.java com/sun/org/omg/CORBA/IdentifierHelper.java com/sun/org/omg/CORBA/Initializer.java com/sun/org/omg/CORBA/InitializerHelper.java com/sun/org/omg/CORBA/InitializerSeqHelper.java com/sun/org/omg/CORBA/OpDescriptionSeqHelper.java com/sun/org/omg/CORBA/OperationDescription.java com/sun/org/omg/CORBA/OperationDescriptionHelper.java com/sun/org/omg/CORBA/OperationMode.java com/sun/org/omg/CORBA/OperationModeHelper.java com/sun/org/omg/CORBA/ParDescriptionSeqHelper.java com/sun/org/omg/CORBA/ParameterDescription.java com/sun/org/omg/CORBA/ParameterDescriptionHelper.java com/sun/org/omg/CORBA/ParameterMode.java com/sun/org/omg/CORBA/ParameterModeHelper.java com/sun/org/omg/CORBA/RepositoryHelper.java com/sun/org/omg/CORBA/RepositoryIdHelper.java com/sun/org/omg/CORBA/RepositoryIdSeqHelper.java com/sun/org/omg/CORBA/StructMemberHelper.java com/sun/org/omg/CORBA/StructMemberSeqHelper.java com/sun/org/omg/CORBA/ValueMemberHelper.java com/sun/org/omg/CORBA/ValueMemberSeqHelper.java com/sun/org/omg/CORBA/VersionSpecHelper.java com/sun/org/omg/CORBA/VisibilityHelper.java com/sun/org/omg/CORBA/_IDLTypeStub.java com/sun/org/omg/SendingContext com/sun/org/omg/SendingContext/CodeBasePackage com/sun/org/omg/SendingContext/CodeBasePackage/SCCS com/sun/org/omg/SendingContext/CodeBasePackage/SCCS/s.ValueDescSeqHelper.java com/sun/org/omg/SendingContext/CodeBasePackage/SCCS/s.URLHelper.java com/sun/org/omg/SendingContext/CodeBasePackage/SCCS/s.URLSeqHelper.java com/sun/org/omg/SendingContext/CodeBasePackage/URLSeqHelper.java com/sun/org/omg/SendingContext/CodeBasePackage/URLHelper.java com/sun/org/omg/SendingContext/CodeBasePackage/ValueDescSeqHelper.java com/sun/org/omg/SendingContext/SCCS com/sun/org/omg/SendingContext/SCCS/s.CodeBaseHelper.java com/sun/org/omg/SendingContext/SCCS/s.CodeBase.java com/sun/org/omg/SendingContext/SCCS/s.CodeBaseOperations.java com/sun/org/omg/SendingContext/SCCS/s._CodeBaseImplBase.java com/sun/org/omg/SendingContext/SCCS/s._CodeBaseStub.java com/sun/org/omg/SendingContext/CodeBaseHelper.java com/sun/org/omg/SendingContext/CodeBase.java com/sun/org/omg/SendingContext/CodeBaseOperations.java com/sun/org/omg/SendingContext/_CodeBaseImplBase.java com/sun/org/omg/SendingContext/_CodeBaseStub.java com/sun/rmi com/sun/rmi/rmid com/sun/rmi/rmid/SCCS com/sun/rmi/rmid/SCCS/s.ExecOptionPermission.java com/sun/rmi/rmid/SCCS/s.ExecPermission.java com/sun/rmi/rmid/ExecOptionPermission.java com/sun/rmi/rmid/ExecPermission.java com/sun/rmi/ssl com/sun/rmi/ssl/SCCS com/sun/rowset com/sun/rowset/SCCS com/sun/rowset/SCCS/s.FilteredRowSetImpl.java com/sun/rowset/SCCS/s.CachedRowSetImpl.java com/sun/rowset/SCCS/s.JdbcRowSetImpl.java com/sun/rowset/SCCS/s.JoinRowSetImpl.java com/sun/rowset/SCCS/s.WebRowSetImpl.java com/sun/rowset/SCCS/s.package.html com/sun/rowset/internal com/sun/rowset/internal/SCCS com/sun/rowset/internal/SCCS/s.InsertRow.java com/sun/rowset/internal/SCCS/s.BaseRow.java com/sun/rowset/internal/SCCS/s.CachedRowSetReader.java com/sun/rowset/internal/SCCS/s.CachedRowSetWriter.java com/sun/rowset/internal/SCCS/s.Row.java com/sun/rowset/internal/SCCS/s.SyncResolverImpl.java com/sun/rowset/internal/SCCS/s.WebRowSetXmlReader.java com/sun/rowset/internal/SCCS/s.WebRowSetXmlWriter.java com/sun/rowset/internal/SCCS/s.XmlErrorHandler.java com/sun/rowset/internal/SCCS/s.XmlReaderContentHandler.java com/sun/rowset/internal/SCCS/s.XmlResolver.java com/sun/rowset/internal/CachedRowSetReader.java com/sun/rowset/internal/BaseRow.java com/sun/rowset/internal/XmlReaderContentHandler.java com/sun/rowset/internal/CachedRowSetWriter.java com/sun/rowset/internal/InsertRow.java com/sun/rowset/internal/Row.java com/sun/rowset/internal/SyncResolverImpl.java com/sun/rowset/internal/WebRowSetXmlReader.java com/sun/rowset/internal/WebRowSetXmlWriter.java com/sun/rowset/internal/XmlErrorHandler.java com/sun/rowset/internal/XmlResolver.java com/sun/rowset/providers com/sun/rowset/providers/SCCS com/sun/rowset/providers/SCCS/s.RIOptimisticProvider.java com/sun/rowset/providers/SCCS/s.RIXMLProvider.java com/sun/rowset/providers/SCCS/s.package.html com/sun/rowset/providers/RIOptimisticProvider.java com/sun/rowset/providers/RIXMLProvider.java com/sun/rowset/providers/package.html com/sun/rowset/CachedRowSetImpl.java com/sun/rowset/FilteredRowSetImpl.java com/sun/rowset/JdbcRowSetImpl.java com/sun/rowset/JoinRowSetImpl.java com/sun/rowset/WebRowSetImpl.java com/sun/rowset/package.html com/sun/security com/sun/security/auth com/sun/security/auth/SCCS com/sun/security/auth/SCCS/s.NTSidPrimaryGroupPrincipal.java com/sun/security/auth/SCCS/s.NTDomainPrincipal.java com/sun/security/auth/SCCS/s.NTNumericCredential.java com/sun/security/auth/SCCS/s.NTSid.java com/sun/security/auth/SCCS/s.NTSidDomainPrincipal.java com/sun/security/auth/SCCS/s.NTSidGroupPrincipal.java com/sun/security/auth/SCCS/s.SolarisNumericGroupPrincipal.java com/sun/security/auth/SCCS/s.NTSidUserPrincipal.java com/sun/security/auth/SCCS/s.NTUserPrincipal.java com/sun/security/auth/SCCS/s.PolicyFile.java com/sun/security/auth/SCCS/s.PolicyParser.java com/sun/security/auth/SCCS/s.PrincipalComparator.java com/sun/security/auth/SCCS/s.SubjectCodeSource.java com/sun/security/auth/SCCS/s.SolarisPrincipal.java com/sun/security/auth/SCCS/s.SolarisNumericUserPrincipal.java com/sun/security/auth/SCCS/s.UnixNumericGroupPrincipal.java com/sun/security/auth/SCCS/s.UnixNumericUserPrincipal.java com/sun/security/auth/SCCS/s.UnixPrincipal.java com/sun/security/auth/SCCS/s.X500Principal.java com/sun/security/auth/SCCS/s.jaas-overview.html com/sun/security/auth/callback com/sun/security/auth/callback/SCCS com/sun/security/auth/callback/SCCS/s.DialogCallbackHandler.java com/sun/security/auth/callback/SCCS/s.TextCallbackHandler.java com/sun/security/auth/callback/DialogCallbackHandler.java com/sun/security/auth/callback/TextCallbackHandler.java com/sun/security/auth/login com/sun/security/auth/login/SCCS com/sun/security/auth/login/SCCS/s.ConfigFile.java com/sun/security/auth/login/ConfigFile.java com/sun/security/auth/module com/sun/security/auth/module/SCCS com/sun/security/auth/module/SCCS/s.JndiLoginModule.java com/sun/security/auth/module/SCCS/s.Crypt.java com/sun/security/auth/module/SCCS/s.KeyStoreLoginModule.java com/sun/security/auth/module/SCCS/s.Krb5LoginModule.java com/sun/security/auth/module/SCCS/s.NTLoginModule.java com/sun/security/auth/module/SCCS/s.NTSystem.java com/sun/security/auth/module/SCCS/s.SolarisLoginModule.java com/sun/security/auth/module/SCCS/s.SolarisSystem.java com/sun/security/auth/module/SCCS/s.UnixLoginModule.java com/sun/security/auth/module/SCCS/s.UnixSystem.java com/sun/security/auth/module/Crypt.java com/sun/security/auth/module/NTLoginModule.java com/sun/security/auth/module/JndiLoginModule.java com/sun/security/auth/module/KeyStoreLoginModule.java com/sun/security/auth/module/Krb5LoginModule.java com/sun/security/auth/module/NTSystem.java com/sun/security/auth/module/SolarisLoginModule.java com/sun/security/auth/module/SolarisSystem.java com/sun/security/auth/module/UnixLoginModule.java com/sun/security/auth/module/UnixSystem.java com/sun/security/auth/NTNumericCredential.java com/sun/security/auth/NTDomainPrincipal.java com/sun/security/auth/NTSid.java com/sun/security/auth/NTSidUserPrincipal.java com/sun/security/auth/NTSidDomainPrincipal.java com/sun/security/auth/NTSidGroupPrincipal.java com/sun/security/auth/NTSidPrimaryGroupPrincipal.java com/sun/security/auth/NTUserPrincipal.java com/sun/security/auth/PolicyFile.java com/sun/security/auth/PolicyParser.java com/sun/security/auth/PrincipalComparator.java com/sun/security/auth/UnixPrincipal.java com/sun/security/auth/SolarisPrincipal.java com/sun/security/auth/SolarisNumericGroupPrincipal.java com/sun/security/auth/SolarisNumericUserPrincipal.java com/sun/security/auth/SubjectCodeSource.java com/sun/security/auth/UnixNumericGroupPrincipal.java com/sun/security/auth/UnixNumericUserPrincipal.java com/sun/security/auth/X500Principal.java com/sun/security/auth/jaas-overview.html com/sun/security/jgss com/sun/security/jgss/SCCS com/sun/security/jgss/SCCS/s.jgss-overview.html com/sun/security/jgss/SCCS/s.GSSUtil.java com/sun/security/jgss/jgss-overview.html com/sun/security/jgss/GSSUtil.java com/sun/security/sasl com/sun/security/sasl/SCCS com/sun/security/sasl/SCCS/s.ClientFactoryImpl.java com/sun/security/sasl/SCCS/s.CramMD5Base.java com/sun/security/sasl/SCCS/s.CramMD5Client.java com/sun/security/sasl/SCCS/s.CramMD5Server.java com/sun/security/sasl/SCCS/s.ExternalClient.java com/sun/security/sasl/SCCS/s.PlainClient.java com/sun/security/sasl/SCCS/s.Provider.java com/sun/security/sasl/SCCS/s.ServerFactoryImpl.java com/sun/security/sasl/digest com/sun/security/sasl/digest/SCCS com/sun/security/sasl/digest/SCCS/s.DigestMD5Base.java com/sun/security/sasl/digest/SCCS/s.DigestMD5Client.java com/sun/security/sasl/digest/SCCS/s.DigestMD5Server.java com/sun/security/sasl/digest/SCCS/s.FactoryImpl.java com/sun/security/sasl/digest/SCCS/s.SecurityCtx.java com/sun/security/sasl/digest/DigestMD5Client.java com/sun/security/sasl/digest/DigestMD5Base.java com/sun/security/sasl/digest/DigestMD5Server.java com/sun/security/sasl/digest/FactoryImpl.java com/sun/security/sasl/digest/SecurityCtx.java com/sun/security/sasl/gsskerb com/sun/security/sasl/gsskerb/SCCS com/sun/security/sasl/gsskerb/SCCS/s.GssKrb5Client.java com/sun/security/sasl/gsskerb/SCCS/s.FactoryImpl.java com/sun/security/sasl/gsskerb/SCCS/s.GssKrb5Base.java com/sun/security/sasl/gsskerb/SCCS/s.GssKrb5Server.java com/sun/security/sasl/gsskerb/FactoryImpl.java com/sun/security/sasl/gsskerb/GssKrb5Base.java com/sun/security/sasl/gsskerb/GssKrb5Client.java com/sun/security/sasl/gsskerb/GssKrb5Server.java com/sun/security/sasl/util com/sun/security/sasl/util/SCCS com/sun/security/sasl/util/SCCS/s.AbstractSaslImpl.java com/sun/security/sasl/util/SCCS/s.PolicyUtils.java com/sun/security/sasl/util/AbstractSaslImpl.java com/sun/security/sasl/util/PolicyUtils.java com/sun/security/sasl/ClientFactoryImpl.java com/sun/security/sasl/CramMD5Base.java com/sun/security/sasl/CramMD5Client.java com/sun/security/sasl/CramMD5Server.java com/sun/security/sasl/ExternalClient.java com/sun/security/sasl/PlainClient.java com/sun/security/sasl/Provider.java com/sun/security/sasl/ServerFactoryImpl.java com/sun/swing com/sun/swing/internal com/sun/swing/internal/plaf com/sun/swing/internal/plaf/basic com/sun/swing/internal/plaf/basic/resources com/sun/swing/internal/plaf/basic/resources/SCCS com/sun/swing/internal/plaf/basic/resources/SCCS/s.basic_de.properties com/sun/swing/internal/plaf/basic/resources/SCCS/s.basic.properties com/sun/swing/internal/plaf/basic/resources/SCCS/s.basic_es.properties com/sun/swing/internal/plaf/basic/resources/SCCS/s.basic_fr.properties com/sun/swing/internal/plaf/basic/resources/SCCS/s.basic_it.properties com/sun/swing/internal/plaf/basic/resources/SCCS/s.basic_ja.properties com/sun/swing/internal/plaf/basic/resources/SCCS/s.basic_ko.properties com/sun/swing/internal/plaf/basic/resources/SCCS/s.basic_sv.properties com/sun/swing/internal/plaf/basic/resources/SCCS/s.basic_zh_CN.properties com/sun/swing/internal/plaf/basic/resources/SCCS/s.basic_zh_TW.properties com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties com/sun/swing/internal/plaf/basic/resources/basic.properties com/sun/swing/internal/plaf/basic/resources/basic_de.properties com/sun/swing/internal/plaf/basic/resources/basic_es.properties com/sun/swing/internal/plaf/basic/resources/basic_fr.properties com/sun/swing/internal/plaf/basic/resources/basic_it.properties com/sun/swing/internal/plaf/basic/resources/basic_ja.properties com/sun/swing/internal/plaf/basic/resources/basic_ko.properties com/sun/swing/internal/plaf/basic/resources/basic_sv.properties com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties com/sun/swing/internal/plaf/metal com/sun/swing/internal/plaf/metal/resources com/sun/swing/internal/plaf/metal/resources/SCCS com/sun/swing/internal/plaf/metal/resources/SCCS/s.metal_de.properties com/sun/swing/internal/plaf/metal/resources/SCCS/s.metal.properties com/sun/swing/internal/plaf/metal/resources/SCCS/s.metal_es.properties com/sun/swing/internal/plaf/metal/resources/SCCS/s.metal_fr.properties com/sun/swing/internal/plaf/metal/resources/SCCS/s.metal_it.properties com/sun/swing/internal/plaf/metal/resources/SCCS/s.metal_ja.properties com/sun/swing/internal/plaf/metal/resources/SCCS/s.metal_ko.properties com/sun/swing/internal/plaf/metal/resources/SCCS/s.metal_sv.properties com/sun/swing/internal/plaf/metal/resources/SCCS/s.metal_zh_CN.properties com/sun/swing/internal/plaf/metal/resources/SCCS/s.metal_zh_TW.properties com/sun/swing/internal/plaf/metal/resources/metal_zh_CN.properties com/sun/swing/internal/plaf/metal/resources/metal.properties com/sun/swing/internal/plaf/metal/resources/metal_de.properties com/sun/swing/internal/plaf/metal/resources/metal_es.properties com/sun/swing/internal/plaf/metal/resources/metal_fr.properties com/sun/swing/internal/plaf/metal/resources/metal_it.properties com/sun/swing/internal/plaf/metal/resources/metal_ja.properties com/sun/swing/internal/plaf/metal/resources/metal_ko.properties com/sun/swing/internal/plaf/metal/resources/metal_sv.properties com/sun/swing/internal/plaf/metal/resources/metal_zh_TW.properties com/sun/swing/internal/plaf/synth com/sun/swing/internal/plaf/synth/resources com/sun/swing/internal/plaf/synth/resources/SCCS com/sun/swing/internal/plaf/synth/resources/SCCS/s.synth_de.properties com/sun/swing/internal/plaf/synth/resources/SCCS/s.synth.properties com/sun/swing/internal/plaf/synth/resources/SCCS/s.synth_es.properties com/sun/swing/internal/plaf/synth/resources/SCCS/s.synth_fr.properties com/sun/swing/internal/plaf/synth/resources/SCCS/s.synth_it.properties com/sun/swing/internal/plaf/synth/resources/SCCS/s.synth_ja.properties com/sun/swing/internal/plaf/synth/resources/SCCS/s.synth_ko.properties com/sun/swing/internal/plaf/synth/resources/SCCS/s.synth_sv.properties com/sun/swing/internal/plaf/synth/resources/SCCS/s.synth_zh_CN.properties com/sun/swing/internal/plaf/synth/resources/SCCS/s.synth_zh_TW.properties com/sun/swing/internal/plaf/synth/resources/synth_zh_CN.properties com/sun/swing/internal/plaf/synth/resources/synth.properties com/sun/swing/internal/plaf/synth/resources/synth_de.properties com/sun/swing/internal/plaf/synth/resources/synth_es.properties com/sun/swing/internal/plaf/synth/resources/synth_fr.properties com/sun/swing/internal/plaf/synth/resources/synth_it.properties com/sun/swing/internal/plaf/synth/resources/synth_ja.properties com/sun/swing/internal/plaf/synth/resources/synth_ko.properties com/sun/swing/internal/plaf/synth/resources/synth_sv.properties com/sun/swing/internal/plaf/synth/resources/synth_zh_TW.properties com/sun/tools com/sun/tools/apt com/sun/tools/apt/SCCS com/sun/tools/apt/SCCS/s.Main.java com/sun/tools/apt/comp com/sun/tools/apt/comp/SCCS com/sun/tools/apt/comp/SCCS/s.BootstrapAPF.java com/sun/tools/apt/comp/SCCS/s.Apt.java com/sun/tools/apt/comp/SCCS/s.AnnotationProcessingError.java com/sun/tools/apt/comp/SCCS/s.PrintAP.java com/sun/tools/apt/comp/SCCS/s.UsageMessageNeededException.java com/sun/tools/apt/comp/BootstrapAPF.java com/sun/tools/apt/comp/Apt.java com/sun/tools/apt/comp/AnnotationProcessingError.java com/sun/tools/apt/comp/PrintAP.java com/sun/tools/apt/comp/UsageMessageNeededException.java com/sun/tools/apt/main com/sun/tools/apt/main/SCCS com/sun/tools/apt/main/SCCS/s.CommandLine.java com/sun/tools/apt/main/SCCS/s.JavaCompiler.java com/sun/tools/apt/main/SCCS/s.Main.java com/sun/tools/apt/main/CommandLine.java com/sun/tools/apt/main/JavaCompiler.java com/sun/tools/apt/main/Main.java com/sun/tools/apt/mirror com/sun/tools/apt/mirror/SCCS com/sun/tools/apt/mirror/SCCS/s.AptEnv.java com/sun/tools/apt/mirror/apt com/sun/tools/apt/mirror/apt/SCCS com/sun/tools/apt/mirror/apt/SCCS/s.AnnotationProcessorEnvironmentImpl.java com/sun/tools/apt/mirror/apt/SCCS/s.FilerImpl.java com/sun/tools/apt/mirror/apt/SCCS/s.MessagerImpl.java com/sun/tools/apt/mirror/apt/SCCS/s.RoundCompleteEventImpl.java com/sun/tools/apt/mirror/apt/SCCS/s.RoundStateImpl.java com/sun/tools/apt/mirror/apt/MessagerImpl.java com/sun/tools/apt/mirror/apt/FilerImpl.java com/sun/tools/apt/mirror/apt/AnnotationProcessorEnvironmentImpl.java com/sun/tools/apt/mirror/apt/RoundCompleteEventImpl.java com/sun/tools/apt/mirror/apt/RoundStateImpl.java com/sun/tools/apt/mirror/declaration com/sun/tools/apt/mirror/declaration/SCCS com/sun/tools/apt/mirror/declaration/SCCS/s.AnnotationMirrorImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.AnnotationProxyMaker.java com/sun/tools/apt/mirror/declaration/SCCS/s.AnnotationValueImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.AnnotationTypeDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.AnnotationTypeElementDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.ClassDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.Constants.java com/sun/tools/apt/mirror/declaration/SCCS/s.ConstructorDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.DeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.DeclarationMaker.java com/sun/tools/apt/mirror/declaration/SCCS/s.EnumConstantDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.EnumDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.ExecutableDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.FieldDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.InterfaceDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.MemberDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.MethodDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.PackageDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.ParameterDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.TypeDeclarationImpl.java com/sun/tools/apt/mirror/declaration/SCCS/s.TypeParameterDeclarationImpl.java com/sun/tools/apt/mirror/declaration/AnnotationTypeDeclarationImpl.java com/sun/tools/apt/mirror/declaration/AnnotationMirrorImpl.java com/sun/tools/apt/mirror/declaration/AnnotationProxyMaker.java com/sun/tools/apt/mirror/declaration/DeclarationImpl.java com/sun/tools/apt/mirror/declaration/Constants.java com/sun/tools/apt/mirror/declaration/AnnotationTypeElementDeclarationImpl.java com/sun/tools/apt/mirror/declaration/AnnotationValueImpl.java com/sun/tools/apt/mirror/declaration/ClassDeclarationImpl.java com/sun/tools/apt/mirror/declaration/ConstructorDeclarationImpl.java com/sun/tools/apt/mirror/declaration/DeclarationMaker.java com/sun/tools/apt/mirror/declaration/EnumConstantDeclarationImpl.java com/sun/tools/apt/mirror/declaration/EnumDeclarationImpl.java com/sun/tools/apt/mirror/declaration/ExecutableDeclarationImpl.java com/sun/tools/apt/mirror/declaration/FieldDeclarationImpl.java com/sun/tools/apt/mirror/declaration/InterfaceDeclarationImpl.java com/sun/tools/apt/mirror/declaration/MemberDeclarationImpl.java com/sun/tools/apt/mirror/declaration/MethodDeclarationImpl.java com/sun/tools/apt/mirror/declaration/PackageDeclarationImpl.java com/sun/tools/apt/mirror/declaration/ParameterDeclarationImpl.java com/sun/tools/apt/mirror/declaration/TypeDeclarationImpl.java com/sun/tools/apt/mirror/declaration/TypeParameterDeclarationImpl.java com/sun/tools/apt/mirror/type com/sun/tools/apt/mirror/type/SCCS com/sun/tools/apt/mirror/type/SCCS/s.AnnotationTypeImpl.java com/sun/tools/apt/mirror/type/SCCS/s.ArrayTypeImpl.java com/sun/tools/apt/mirror/type/SCCS/s.ClassTypeImpl.java com/sun/tools/apt/mirror/type/SCCS/s.DeclaredTypeImpl.java com/sun/tools/apt/mirror/type/SCCS/s.EnumTypeImpl.java com/sun/tools/apt/mirror/type/SCCS/s.InterfaceTypeImpl.java com/sun/tools/apt/mirror/type/SCCS/s.PrimitiveTypeImpl.java com/sun/tools/apt/mirror/type/SCCS/s.TypeMaker.java com/sun/tools/apt/mirror/type/SCCS/s.TypeMirrorImpl.java com/sun/tools/apt/mirror/type/SCCS/s.TypeVariableImpl.java com/sun/tools/apt/mirror/type/SCCS/s.VoidTypeImpl.java com/sun/tools/apt/mirror/type/SCCS/s.WildcardTypeImpl.java com/sun/tools/apt/mirror/type/AnnotationTypeImpl.java com/sun/tools/apt/mirror/type/ArrayTypeImpl.java com/sun/tools/apt/mirror/type/ClassTypeImpl.java com/sun/tools/apt/mirror/type/DeclaredTypeImpl.java com/sun/tools/apt/mirror/type/EnumTypeImpl.java com/sun/tools/apt/mirror/type/InterfaceTypeImpl.java com/sun/tools/apt/mirror/type/PrimitiveTypeImpl.java com/sun/tools/apt/mirror/type/TypeMaker.java com/sun/tools/apt/mirror/type/TypeMirrorImpl.java com/sun/tools/apt/mirror/type/TypeVariableImpl.java com/sun/tools/apt/mirror/type/VoidTypeImpl.java com/sun/tools/apt/mirror/type/WildcardTypeImpl.java com/sun/tools/apt/mirror/util com/sun/tools/apt/mirror/util/SCCS com/sun/tools/apt/mirror/util/SCCS/s.SourcePositionImpl.java com/sun/tools/apt/mirror/util/SCCS/s.DeclarationsImpl.java com/sun/tools/apt/mirror/util/SCCS/s.TypesImpl.java com/sun/tools/apt/mirror/util/DeclarationsImpl.java com/sun/tools/apt/mirror/util/SourcePositionImpl.java com/sun/tools/apt/mirror/util/TypesImpl.java com/sun/tools/apt/mirror/AptEnv.java com/sun/tools/apt/resources com/sun/tools/apt/resources/SCCS com/sun/tools/apt/resources/SCCS/s.apt.properties com/sun/tools/apt/resources/SCCS/s.apt_ja.properties com/sun/tools/apt/resources/apt_ja.properties com/sun/tools/apt/resources/apt.properties com/sun/tools/apt/util com/sun/tools/apt/util/SCCS com/sun/tools/apt/util/SCCS/s.Bark.java com/sun/tools/apt/util/Bark.java com/sun/tools/apt/Main.java com/sun/tools/corba com/sun/tools/corba/se com/sun/tools/corba/se/idl com/sun/tools/corba/se/idl/SCCS com/sun/tools/corba/se/idl/SCCS/s.AttributeEntry.java com/sun/tools/corba/se/idl/SCCS/s.Arguments.java com/sun/tools/corba/se/idl/SCCS/s.DefaultSymtabFactory.java com/sun/tools/corba/se/idl/SCCS/s.AttributeGen.java com/sun/tools/corba/se/idl/SCCS/s.Comment.java com/sun/tools/corba/se/idl/SCCS/s.Compile.java com/sun/tools/corba/se/idl/SCCS/s.ConstEntry.java com/sun/tools/corba/se/idl/SCCS/s.ConstGen.java com/sun/tools/corba/se/idl/SCCS/s.EnumEntry.java com/sun/tools/corba/se/idl/SCCS/s.EnumGen.java com/sun/tools/corba/se/idl/SCCS/s.ExceptionEntry.java com/sun/tools/corba/se/idl/SCCS/s.ExceptionGen.java com/sun/tools/corba/se/idl/SCCS/s.Factories.java com/sun/tools/corba/se/idl/SCCS/s.ForwardEntry.java com/sun/tools/corba/se/idl/SCCS/s.ForwardGen.java com/sun/tools/corba/se/idl/SCCS/s.GenFactory.java com/sun/tools/corba/se/idl/SCCS/s.ResourceBundleUtil.java com/sun/tools/corba/se/idl/SCCS/s.ForwardValueEntry.java com/sun/tools/corba/se/idl/SCCS/s.ForwardValueGen.java com/sun/tools/corba/se/idl/SCCS/s.GenFileStream.java com/sun/tools/corba/se/idl/SCCS/s.Generator.java com/sun/tools/corba/se/idl/SCCS/s.IDLID.java com/sun/tools/corba/se/idl/SCCS/s.IncludeEntry.java com/sun/tools/corba/se/idl/SCCS/s.IncludeGen.java com/sun/tools/corba/se/idl/SCCS/s.InterfaceEntry.java com/sun/tools/corba/se/idl/SCCS/s.InterfaceGen.java com/sun/tools/corba/se/idl/SCCS/s.InterfaceState.java com/sun/tools/corba/se/idl/SCCS/s.InterfaceType.java com/sun/tools/corba/se/idl/SCCS/s.InvalidArgument.java com/sun/tools/corba/se/idl/SCCS/s.InvalidCharacter.java com/sun/tools/corba/se/idl/SCCS/s.MethodEntry.java com/sun/tools/corba/se/idl/SCCS/s.MethodGen.java com/sun/tools/corba/se/idl/SCCS/s.ModuleEntry.java com/sun/tools/corba/se/idl/SCCS/s.ModuleGen.java com/sun/tools/corba/se/idl/SCCS/s.NativeEntry.java com/sun/tools/corba/se/idl/SCCS/s.NativeGen.java com/sun/tools/corba/se/idl/SCCS/s.NoPragma.java com/sun/tools/corba/se/idl/SCCS/s.Noop.java com/sun/tools/corba/se/idl/SCCS/s.ParameterEntry.java com/sun/tools/corba/se/idl/SCCS/s.ParameterGen.java com/sun/tools/corba/se/idl/SCCS/s.ParseException.java com/sun/tools/corba/se/idl/SCCS/s.Parser.java com/sun/tools/corba/se/idl/SCCS/s.PragmaEntry.java com/sun/tools/corba/se/idl/SCCS/s.PragmaGen.java com/sun/tools/corba/se/idl/SCCS/s.PragmaHandler.java com/sun/tools/corba/se/idl/SCCS/s.Preprocessor.java com/sun/tools/corba/se/idl/SCCS/s.PrimitiveEntry.java com/sun/tools/corba/se/idl/SCCS/s.PrimitiveGen.java com/sun/tools/corba/se/idl/SCCS/s.RepositoryID.java com/sun/tools/corba/se/idl/SCCS/s.Scanner.java com/sun/tools/corba/se/idl/SCCS/s.SequenceGen.java com/sun/tools/corba/se/idl/SCCS/s.ValueRepositoryId.java com/sun/tools/corba/se/idl/SCCS/s.SequenceEntry.java com/sun/tools/corba/se/idl/SCCS/s.StringEntry.java com/sun/tools/corba/se/idl/SCCS/s.StringGen.java com/sun/tools/corba/se/idl/SCCS/s.StructEntry.java com/sun/tools/corba/se/idl/SCCS/s.StructGen.java com/sun/tools/corba/se/idl/SCCS/s.SymtabEntry.java com/sun/tools/corba/se/idl/SCCS/s.SymtabFactory.java com/sun/tools/corba/se/idl/SCCS/s.Token.java com/sun/tools/corba/se/idl/SCCS/s.TokenBuffer.java com/sun/tools/corba/se/idl/SCCS/s.TypedefEntry.java com/sun/tools/corba/se/idl/SCCS/s.TypedefGen.java com/sun/tools/corba/se/idl/SCCS/s.UnionBranch.java com/sun/tools/corba/se/idl/SCCS/s.UnionEntry.java com/sun/tools/corba/se/idl/SCCS/s.UnionGen.java com/sun/tools/corba/se/idl/SCCS/s.Util.java com/sun/tools/corba/se/idl/SCCS/s.ValueBoxEntry.java com/sun/tools/corba/se/idl/SCCS/s.ValueBoxGen.java com/sun/tools/corba/se/idl/SCCS/s.ValueEntry.java com/sun/tools/corba/se/idl/SCCS/s.ValueGen.java com/sun/tools/corba/se/idl/SCCS/s.follow.set com/sun/tools/corba/se/idl/SCCS/s.first.set com/sun/tools/corba/se/idl/SCCS/s.grammar.idl com/sun/tools/corba/se/idl/SCCS/s.grammar3.idl com/sun/tools/corba/se/idl/SCCS/s.idl.prp com/sun/tools/corba/se/idl/SCCS/s.idl_ja.prp com/sun/tools/corba/se/idl/SCCS/s.ir.idl com/sun/tools/corba/se/idl/SCCS/s.keywords com/sun/tools/corba/se/idl/SCCS/s.orb.idl com/sun/tools/corba/se/idl/constExpr com/sun/tools/corba/se/idl/constExpr/SCCS com/sun/tools/corba/se/idl/constExpr/SCCS/s.BinaryExpr.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.And.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.DefaultExprFactory.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.BooleanAnd.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.BooleanNot.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.BooleanOr.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.ExprFactory.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.Divide.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.Equal.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.EvaluationException.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.Expression.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.GreaterEqual.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.GreaterThan.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.LessEqual.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.LessThan.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.Minus.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.Modulo.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.Negative.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.Not.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.NotEqual.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.Or.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.Plus.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.Positive.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.ShiftLeft.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.ShiftRight.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.Terminal.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.Times.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.UnaryExpr.java com/sun/tools/corba/se/idl/constExpr/SCCS/s.Xor.java com/sun/tools/corba/se/idl/constExpr/BinaryExpr.java com/sun/tools/corba/se/idl/constExpr/And.java com/sun/tools/corba/se/idl/constExpr/DefaultExprFactory.java com/sun/tools/corba/se/idl/constExpr/BooleanAnd.java com/sun/tools/corba/se/idl/constExpr/BooleanNot.java com/sun/tools/corba/se/idl/constExpr/BooleanOr.java com/sun/tools/corba/se/idl/constExpr/ExprFactory.java com/sun/tools/corba/se/idl/constExpr/Divide.java com/sun/tools/corba/se/idl/constExpr/Equal.java com/sun/tools/corba/se/idl/constExpr/Or.java com/sun/tools/corba/se/idl/constExpr/EvaluationException.java com/sun/tools/corba/se/idl/constExpr/Expression.java com/sun/tools/corba/se/idl/constExpr/GreaterEqual.java com/sun/tools/corba/se/idl/constExpr/GreaterThan.java com/sun/tools/corba/se/idl/constExpr/LessEqual.java com/sun/tools/corba/se/idl/constExpr/LessThan.java com/sun/tools/corba/se/idl/constExpr/Minus.java com/sun/tools/corba/se/idl/constExpr/Modulo.java com/sun/tools/corba/se/idl/constExpr/Negative.java com/sun/tools/corba/se/idl/constExpr/Not.java com/sun/tools/corba/se/idl/constExpr/NotEqual.java com/sun/tools/corba/se/idl/constExpr/Plus.java com/sun/tools/corba/se/idl/constExpr/Positive.java com/sun/tools/corba/se/idl/constExpr/ShiftLeft.java com/sun/tools/corba/se/idl/constExpr/ShiftRight.java com/sun/tools/corba/se/idl/constExpr/Terminal.java com/sun/tools/corba/se/idl/constExpr/Times.java com/sun/tools/corba/se/idl/constExpr/UnaryExpr.java com/sun/tools/corba/se/idl/constExpr/Xor.java com/sun/tools/corba/se/idl/som com/sun/tools/corba/se/idl/som/cff com/sun/tools/corba/se/idl/som/cff/SCCS com/sun/tools/corba/se/idl/som/cff/SCCS/s.FileLocator.java com/sun/tools/corba/se/idl/som/cff/SCCS/s.Messages.java com/sun/tools/corba/se/idl/som/cff/FileLocator.java com/sun/tools/corba/se/idl/som/cff/Messages.java com/sun/tools/corba/se/idl/som/idlemit com/sun/tools/corba/se/idl/som/idlemit/SCCS com/sun/tools/corba/se/idl/som/idlemit/SCCS/s.MetaPragma.java com/sun/tools/corba/se/idl/som/idlemit/MetaPragma.java com/sun/tools/corba/se/idl/toJavaPortable com/sun/tools/corba/se/idl/toJavaPortable/SCCS com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.AttributeGen24.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.Arguments.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.AttributeGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.DefaultFactory.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.AuxGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.Compile.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.ConstGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.ForwardValueGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.EnumGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.ExceptionGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.Factories.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.GenFactory.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.Helper.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.Helper24.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.Holder.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.InterfaceGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.JavaGenerator.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.Skeleton.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.MethodGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.MethodGen24.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.MethodGenClone24.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.ModuleGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.NameModifier.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.NameModifierImpl.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.NativeGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.PrimitiveGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.SequenceGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.StringGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.StructGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.Stub.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.TCOffsets.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.TypedefGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.UnionGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.Util.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.ValueBoxGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.ValueBoxGen24.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.ValueFactory.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.ValueGen.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.ValueGen24.java com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.toJavaPortable.prp com/sun/tools/corba/se/idl/toJavaPortable/SCCS/s.toJavaPortable_ja.prp com/sun/tools/corba/se/idl/toJavaPortable/AttributeGen.java com/sun/tools/corba/se/idl/toJavaPortable/Arguments.java com/sun/tools/corba/se/idl/toJavaPortable/AttributeGen24.java com/sun/tools/corba/se/idl/toJavaPortable/AuxGen.java com/sun/tools/corba/se/idl/toJavaPortable/Compile.java com/sun/tools/corba/se/idl/toJavaPortable/ConstGen.java com/sun/tools/corba/se/idl/toJavaPortable/DefaultFactory.java com/sun/tools/corba/se/idl/toJavaPortable/EnumGen.java com/sun/tools/corba/se/idl/toJavaPortable/ExceptionGen.java com/sun/tools/corba/se/idl/toJavaPortable/Factories.java com/sun/tools/corba/se/idl/toJavaPortable/ForwardValueGen.java com/sun/tools/corba/se/idl/toJavaPortable/GenFactory.java com/sun/tools/corba/se/idl/toJavaPortable/Helper.java com/sun/tools/corba/se/idl/toJavaPortable/Helper24.java com/sun/tools/corba/se/idl/toJavaPortable/Holder.java com/sun/tools/corba/se/idl/toJavaPortable/InterfaceGen.java com/sun/tools/corba/se/idl/toJavaPortable/JavaGenerator.java com/sun/tools/corba/se/idl/toJavaPortable/MethodGen.java com/sun/tools/corba/se/idl/toJavaPortable/Stub.java com/sun/tools/corba/se/idl/toJavaPortable/MethodGen24.java com/sun/tools/corba/se/idl/toJavaPortable/MethodGenClone24.java com/sun/tools/corba/se/idl/toJavaPortable/ModuleGen.java com/sun/tools/corba/se/idl/toJavaPortable/NameModifier.java com/sun/tools/corba/se/idl/toJavaPortable/NameModifierImpl.java com/sun/tools/corba/se/idl/toJavaPortable/NativeGen.java com/sun/tools/corba/se/idl/toJavaPortable/PrimitiveGen.java com/sun/tools/corba/se/idl/toJavaPortable/SequenceGen.java com/sun/tools/corba/se/idl/toJavaPortable/Skeleton.java com/sun/tools/corba/se/idl/toJavaPortable/StringGen.java com/sun/tools/corba/se/idl/toJavaPortable/StructGen.java com/sun/tools/corba/se/idl/toJavaPortable/TCOffsets.java com/sun/tools/corba/se/idl/toJavaPortable/TypedefGen.java com/sun/tools/corba/se/idl/toJavaPortable/UnionGen.java com/sun/tools/corba/se/idl/toJavaPortable/Util.java com/sun/tools/corba/se/idl/toJavaPortable/ValueBoxGen.java com/sun/tools/corba/se/idl/toJavaPortable/ValueBoxGen24.java com/sun/tools/corba/se/idl/toJavaPortable/ValueGen.java com/sun/tools/corba/se/idl/toJavaPortable/ValueFactory.java com/sun/tools/corba/se/idl/toJavaPortable/ValueGen24.java com/sun/tools/corba/se/idl/toJavaPortable/toJavaPortable.prp com/sun/tools/corba/se/idl/toJavaPortable/toJavaPortable_ja.prp com/sun/tools/corba/se/idl/AttributeEntry.java com/sun/tools/corba/se/idl/Arguments.java com/sun/tools/corba/se/idl/DefaultSymtabFactory.java com/sun/tools/corba/se/idl/AttributeGen.java com/sun/tools/corba/se/idl/Comment.java com/sun/tools/corba/se/idl/Compile.java com/sun/tools/corba/se/idl/ConstEntry.java com/sun/tools/corba/se/idl/ConstGen.java com/sun/tools/corba/se/idl/EnumEntry.java com/sun/tools/corba/se/idl/EnumGen.java com/sun/tools/corba/se/idl/ExceptionEntry.java com/sun/tools/corba/se/idl/ExceptionGen.java com/sun/tools/corba/se/idl/Factories.java com/sun/tools/corba/se/idl/ForwardEntry.java com/sun/tools/corba/se/idl/IncludeEntry.java com/sun/tools/corba/se/idl/IDLID.java com/sun/tools/corba/se/idl/ForwardGen.java com/sun/tools/corba/se/idl/ForwardValueEntry.java com/sun/tools/corba/se/idl/ForwardValueGen.java com/sun/tools/corba/se/idl/GenFactory.java com/sun/tools/corba/se/idl/GenFileStream.java com/sun/tools/corba/se/idl/Generator.java com/sun/tools/corba/se/idl/InterfaceEntry.java com/sun/tools/corba/se/idl/IncludeGen.java com/sun/tools/corba/se/idl/idl.prp com/sun/tools/corba/se/idl/InterfaceGen.java com/sun/tools/corba/se/idl/InterfaceState.java com/sun/tools/corba/se/idl/InterfaceType.java com/sun/tools/corba/se/idl/InvalidArgument.java com/sun/tools/corba/se/idl/InvalidCharacter.java com/sun/tools/corba/se/idl/MethodEntry.java com/sun/tools/corba/se/idl/MethodGen.java com/sun/tools/corba/se/idl/ModuleEntry.java com/sun/tools/corba/se/idl/ModuleGen.java com/sun/tools/corba/se/idl/NativeEntry.java com/sun/tools/corba/se/idl/NativeGen.java com/sun/tools/corba/se/idl/NoPragma.java com/sun/tools/corba/se/idl/Noop.java com/sun/tools/corba/se/idl/ParameterEntry.java com/sun/tools/corba/se/idl/ParameterGen.java com/sun/tools/corba/se/idl/ParseException.java com/sun/tools/corba/se/idl/Parser.java com/sun/tools/corba/se/idl/PragmaEntry.java com/sun/tools/corba/se/idl/PragmaGen.java com/sun/tools/corba/se/idl/PragmaHandler.java com/sun/tools/corba/se/idl/Preprocessor.java com/sun/tools/corba/se/idl/PrimitiveEntry.java com/sun/tools/corba/se/idl/PrimitiveGen.java com/sun/tools/corba/se/idl/RepositoryID.java com/sun/tools/corba/se/idl/ResourceBundleUtil.java com/sun/tools/corba/se/idl/Scanner.java com/sun/tools/corba/se/idl/SequenceEntry.java com/sun/tools/corba/se/idl/SequenceGen.java com/sun/tools/corba/se/idl/StringEntry.java com/sun/tools/corba/se/idl/StringGen.java com/sun/tools/corba/se/idl/StructEntry.java com/sun/tools/corba/se/idl/StructGen.java com/sun/tools/corba/se/idl/SymtabEntry.java com/sun/tools/corba/se/idl/SymtabFactory.java com/sun/tools/corba/se/idl/Token.java com/sun/tools/corba/se/idl/TokenBuffer.java com/sun/tools/corba/se/idl/TypedefEntry.java com/sun/tools/corba/se/idl/TypedefGen.java com/sun/tools/corba/se/idl/UnionBranch.java com/sun/tools/corba/se/idl/UnionEntry.java com/sun/tools/corba/se/idl/UnionGen.java com/sun/tools/corba/se/idl/Util.java com/sun/tools/corba/se/idl/ValueBoxEntry.java com/sun/tools/corba/se/idl/ValueBoxGen.java com/sun/tools/corba/se/idl/ValueEntry.java com/sun/tools/corba/se/idl/ValueGen.java com/sun/tools/corba/se/idl/ValueRepositoryId.java com/sun/tools/corba/se/idl/first.set com/sun/tools/corba/se/idl/follow.set com/sun/tools/corba/se/idl/grammar.idl com/sun/tools/corba/se/idl/grammar3.idl com/sun/tools/corba/se/idl/idl_ja.prp com/sun/tools/corba/se/idl/ir.idl com/sun/tools/corba/se/idl/keywords com/sun/tools/corba/se/idl/orb.idl com/sun/tools/corba/se/logutil com/sun/tools/corba/se/logutil/SCCS com/sun/tools/corba/se/logutil/SCCS/s.IndentingPrintWriter.java com/sun/tools/corba/se/logutil/SCCS/s.Makefile com/sun/tools/corba/se/logutil/SCCS/s.StringUtil.java com/sun/tools/corba/se/logutil/lib com/sun/tools/corba/se/logutil/lib/SCCS com/sun/tools/corba/se/logutil/lib/SCCS/s.jschemelogutil.jar com/sun/tools/corba/se/logutil/lib/SCCS/s.jscheme.jar com/sun/tools/corba/se/logutil/lib/jschemelogutil.jar com/sun/tools/corba/se/logutil/lib/jscheme.jar com/sun/tools/corba/se/logutil/scripts com/sun/tools/corba/se/logutil/scripts/SCCS com/sun/tools/corba/se/logutil/scripts/SCCS/s.mc.scm com/sun/tools/corba/se/logutil/scripts/SCCS/s.mc com/sun/tools/corba/se/logutil/scripts/SCCS/s.run com/sun/tools/corba/se/logutil/scripts/mc.scm com/sun/tools/corba/se/logutil/scripts/mc com/sun/tools/corba/se/logutil/scripts/run com/sun/tools/corba/se/logutil/IndentingPrintWriter.java com/sun/tools/corba/se/logutil/Makefile com/sun/tools/corba/se/logutil/StringUtil.java com/sun/tools/doclets com/sun/tools/doclets/SCCS com/sun/tools/doclets/SCCS/s.Taglet.java com/sun/tools/doclets/SCCS/s.package.html com/sun/tools/doclets/formats com/sun/tools/doclets/formats/html com/sun/tools/doclets/formats/html/SCCS com/sun/tools/doclets/formats/html/SCCS/s.AnnotationTypeOptionalMemberWriterImpl.java com/sun/tools/doclets/formats/html/SCCS/s.AbstractExecutableMemberWriter.java com/sun/tools/doclets/formats/html/SCCS/s.AbstractIndexWriter.java com/sun/tools/doclets/formats/html/SCCS/s.AbstractMemberWriter.java com/sun/tools/doclets/formats/html/SCCS/s.AbstractPackageIndexWriter.java com/sun/tools/doclets/formats/html/SCCS/s.AbstractTreeWriter.java com/sun/tools/doclets/formats/html/SCCS/s.AllClassesFrameWriter.java com/sun/tools/doclets/formats/html/SCCS/s.HtmlDocletWriter.java com/sun/tools/doclets/formats/html/SCCS/s.HelpWriter.java com/sun/tools/doclets/formats/html/SCCS/s.AnnotationTypeRequiredMemberWriterImpl.java com/sun/tools/doclets/formats/html/SCCS/s.AnnotationTypeWriterImpl.java com/sun/tools/doclets/formats/html/SCCS/s.ClassUseWriter.java com/sun/tools/doclets/formats/html/SCCS/s.ClassWriterImpl.java com/sun/tools/doclets/formats/html/SCCS/s.ConfigurationImpl.java com/sun/tools/doclets/formats/html/SCCS/s.ConstantsSummaryWriterImpl.java com/sun/tools/doclets/formats/html/SCCS/s.ConstructorWriterImpl.java com/sun/tools/doclets/formats/html/SCCS/s.DeprecatedListWriter.java com/sun/tools/doclets/formats/html/SCCS/s.EnumConstantWriterImpl.java com/sun/tools/doclets/formats/html/SCCS/s.FieldWriterImpl.java com/sun/tools/doclets/formats/html/SCCS/s.FrameOutputWriter.java com/sun/tools/doclets/formats/html/SCCS/s.HtmlDoclet.java com/sun/tools/doclets/formats/html/SCCS/s.HtmlSerialFieldWriter.java com/sun/tools/doclets/formats/html/SCCS/s.HtmlSerialMethodWriter.java com/sun/tools/doclets/formats/html/SCCS/s.LinkFactoryImpl.java com/sun/tools/doclets/formats/html/SCCS/s.LinkInfoImpl.java com/sun/tools/doclets/formats/html/SCCS/s.LinkOutputImpl.java com/sun/tools/doclets/formats/html/SCCS/s.MethodWriterImpl.java com/sun/tools/doclets/formats/html/SCCS/s.NestedClassWriterImpl.java com/sun/tools/doclets/formats/html/SCCS/s.PackageFrameWriter.java com/sun/tools/doclets/formats/html/SCCS/s.PackageIndexFrameWriter.java com/sun/tools/doclets/formats/html/SCCS/s.PackageIndexWriter.java com/sun/tools/doclets/formats/html/SCCS/s.PackageTreeWriter.java com/sun/tools/doclets/formats/html/SCCS/s.PackageUseWriter.java com/sun/tools/doclets/formats/html/SCCS/s.PackageWriterImpl.java com/sun/tools/doclets/formats/html/SCCS/s.SerializedFormWriterImpl.java com/sun/tools/doclets/formats/html/SCCS/s.SingleIndexWriter.java com/sun/tools/doclets/formats/html/SCCS/s.SplitIndexWriter.java com/sun/tools/doclets/formats/html/SCCS/s.StylesheetWriter.java com/sun/tools/doclets/formats/html/SCCS/s.SubWriterHolderWriter.java com/sun/tools/doclets/formats/html/SCCS/s.TagletOutputImpl.java com/sun/tools/doclets/formats/html/SCCS/s.TagletWriterImpl.java com/sun/tools/doclets/formats/html/SCCS/s.TreeWriter.java com/sun/tools/doclets/formats/html/SCCS/s.WriterFactoryImpl.java com/sun/tools/doclets/formats/html/SCCS/s.package.html com/sun/tools/doclets/formats/html/markup com/sun/tools/doclets/formats/html/markup/SCCS com/sun/tools/doclets/formats/html/markup/SCCS/s.HtmlDocWriter.java com/sun/tools/doclets/formats/html/markup/SCCS/s.HtmlWriter.java com/sun/tools/doclets/formats/html/markup/SCCS/s.package.html com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java com/sun/tools/doclets/formats/html/markup/HtmlWriter.java com/sun/tools/doclets/formats/html/markup/package.html com/sun/tools/doclets/formats/html/resources com/sun/tools/doclets/formats/html/resources/SCCS com/sun/tools/doclets/formats/html/resources/SCCS/s.standard_ja.properties com/sun/tools/doclets/formats/html/resources/SCCS/s.standard.properties com/sun/tools/doclets/formats/html/resources/standard_ja.properties com/sun/tools/doclets/formats/html/resources/standard.properties com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java com/sun/tools/doclets/formats/html/AbstractIndexWriter.java com/sun/tools/doclets/formats/html/AbstractMemberWriter.java com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java com/sun/tools/doclets/formats/html/AbstractTreeWriter.java com/sun/tools/doclets/formats/html/AllClassesFrameWriter.java com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java com/sun/tools/doclets/formats/html/ClassUseWriter.java com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java com/sun/tools/doclets/formats/html/ClassWriterImpl.java com/sun/tools/doclets/formats/html/ConfigurationImpl.java com/sun/tools/doclets/formats/html/MethodWriterImpl.java com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java com/sun/tools/doclets/formats/html/DeprecatedListWriter.java com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java com/sun/tools/doclets/formats/html/FieldWriterImpl.java com/sun/tools/doclets/formats/html/FrameOutputWriter.java com/sun/tools/doclets/formats/html/HelpWriter.java com/sun/tools/doclets/formats/html/HtmlDoclet.java com/sun/tools/doclets/formats/html/HtmlDocletWriter.java com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java com/sun/tools/doclets/formats/html/LinkFactoryImpl.java com/sun/tools/doclets/formats/html/LinkInfoImpl.java com/sun/tools/doclets/formats/html/LinkOutputImpl.java com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java com/sun/tools/doclets/formats/html/PackageFrameWriter.java com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java com/sun/tools/doclets/formats/html/PackageIndexWriter.java com/sun/tools/doclets/formats/html/PackageTreeWriter.java com/sun/tools/doclets/formats/html/PackageUseWriter.java com/sun/tools/doclets/formats/html/PackageWriterImpl.java com/sun/tools/doclets/formats/html/SingleIndexWriter.java com/sun/tools/doclets/formats/html/SplitIndexWriter.java com/sun/tools/doclets/formats/html/StylesheetWriter.java com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java com/sun/tools/doclets/formats/html/TagletOutputImpl.java com/sun/tools/doclets/formats/html/TagletWriterImpl.java com/sun/tools/doclets/formats/html/TreeWriter.java com/sun/tools/doclets/formats/html/WriterFactoryImpl.java com/sun/tools/doclets/formats/html/package.html com/sun/tools/doclets/internal com/sun/tools/doclets/internal/toolkit com/sun/tools/doclets/internal/toolkit/SCCS com/sun/tools/doclets/internal/toolkit/SCCS/s.AnnotationTypeWriter.java com/sun/tools/doclets/internal/toolkit/SCCS/s.AbstractDoclet.java com/sun/tools/doclets/internal/toolkit/SCCS/s.MethodWriter.java com/sun/tools/doclets/internal/toolkit/SCCS/s.AnnotationTypeOptionalMemberWriter.java com/sun/tools/doclets/internal/toolkit/SCCS/s.AnnotationTypeRequiredMemberWriter.java com/sun/tools/doclets/internal/toolkit/SCCS/s.ClassWriter.java com/sun/tools/doclets/internal/toolkit/SCCS/s.Configuration.java com/sun/tools/doclets/internal/toolkit/SCCS/s.ConstantsSummaryWriter.java com/sun/tools/doclets/internal/toolkit/SCCS/s.ConstructorWriter.java com/sun/tools/doclets/internal/toolkit/SCCS/s.EnumConstantWriter.java com/sun/tools/doclets/internal/toolkit/SCCS/s.FieldWriter.java com/sun/tools/doclets/internal/toolkit/SCCS/s.MemberSummaryWriter.java com/sun/tools/doclets/internal/toolkit/SCCS/s.NestedClassWriter.java com/sun/tools/doclets/internal/toolkit/SCCS/s.PackageSummaryWriter.java com/sun/tools/doclets/internal/toolkit/SCCS/s.SerializedFormWriter.java com/sun/tools/doclets/internal/toolkit/SCCS/s.WriterFactory.java com/sun/tools/doclets/internal/toolkit/SCCS/s.package.html com/sun/tools/doclets/internal/toolkit/builders com/sun/tools/doclets/internal/toolkit/builders/SCCS com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.AbstractMemberBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.AbstractBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.AnnotationTypeBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.BuilderFactory.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.ClassBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.AnnotationTypeOptionalMemberBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.AnnotationTypeRequiredMemberBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.ConstantsSummaryBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.ConstructorBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.EnumConstantBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.FieldBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.LayoutParser.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.PackageSummaryBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.MemberSummaryBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.MethodBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.SerializedFormBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SCCS/s.package.html com/sun/tools/doclets/internal/toolkit/builders/AbstractMemberBuilder.java com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java com/sun/tools/doclets/internal/toolkit/builders/BuilderFactory.java com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java com/sun/tools/doclets/internal/toolkit/builders/package.html com/sun/tools/doclets/internal/toolkit/resources com/sun/tools/doclets/internal/toolkit/resources/SCCS com/sun/tools/doclets/internal/toolkit/resources/SCCS/s.doclets.properties com/sun/tools/doclets/internal/toolkit/resources/SCCS/s.doclet.xml com/sun/tools/doclets/internal/toolkit/resources/SCCS/s.doclets_ja.properties com/sun/tools/doclets/internal/toolkit/resources/SCCS/s.inherit.gif com/sun/tools/doclets/internal/toolkit/resources/doclets.properties com/sun/tools/doclets/internal/toolkit/resources/doclet.xml com/sun/tools/doclets/internal/toolkit/resources/doclets_ja.properties com/sun/tools/doclets/internal/toolkit/resources/inherit.gif com/sun/tools/doclets/internal/toolkit/taglets com/sun/tools/doclets/internal/toolkit/taglets/SCCS com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.BaseExecutableMemberTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.BaseInlineTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.BaseTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.CodeTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.DeprecatedTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.DocRootTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.InheritDocTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.InheritableTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.LegacyTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.LiteralTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.ParamTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.ReturnTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.SeeTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.SimpleTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.Taglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.TagletOutput.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.TagletManager.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.TagletWriter.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.ThrowsTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.ValueTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SCCS/s.package.html com/sun/tools/doclets/internal/toolkit/taglets/Taglet.java com/sun/tools/doclets/internal/toolkit/taglets/BaseExecutableMemberTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/BaseInlineTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/BaseTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/CodeTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/DeprecatedTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/DocRootTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/InheritDocTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/InheritableTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/LegacyTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/LiteralTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/ParamTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/ReturnTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SeeTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/SimpleTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/TagletManager.java com/sun/tools/doclets/internal/toolkit/taglets/TagletOutput.java com/sun/tools/doclets/internal/toolkit/taglets/TagletWriter.java com/sun/tools/doclets/internal/toolkit/taglets/ThrowsTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/ValueTaglet.java com/sun/tools/doclets/internal/toolkit/taglets/package.html com/sun/tools/doclets/internal/toolkit/util com/sun/tools/doclets/internal/toolkit/util/SCCS com/sun/tools/doclets/internal/toolkit/util/SCCS/s.CommentedMethodFinder.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.ClassDocCatalog.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.ClassTree.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.ClassUseMapper.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.DeprecatedAPIListBuilder.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.DirectoryManager.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.DocFinder.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.DocletAbortException.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.DocletConstants.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.Extern.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.Group.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.ImplementedMethods.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.IndexBuilder.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.MessageRetriever.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.SourceToHTMLConverter.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.MetaKeywords.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.MethodFinder.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.PackageListWriter.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.SourcePath.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.TaggedMethodFinder.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.TextTag.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.Util.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.VisibleMemberMap.java com/sun/tools/doclets/internal/toolkit/util/SCCS/s.package.html com/sun/tools/doclets/internal/toolkit/util/links com/sun/tools/doclets/internal/toolkit/util/links/SCCS com/sun/tools/doclets/internal/toolkit/util/links/SCCS/s.LinkFactory.java com/sun/tools/doclets/internal/toolkit/util/links/SCCS/s.LinkInfo.java com/sun/tools/doclets/internal/toolkit/util/links/SCCS/s.LinkOutput.java com/sun/tools/doclets/internal/toolkit/util/links/SCCS/s.package.html com/sun/tools/doclets/internal/toolkit/util/links/LinkFactory.java com/sun/tools/doclets/internal/toolkit/util/links/LinkInfo.java com/sun/tools/doclets/internal/toolkit/util/links/LinkOutput.java com/sun/tools/doclets/internal/toolkit/util/links/package.html com/sun/tools/doclets/internal/toolkit/util/CommentedMethodFinder.java com/sun/tools/doclets/internal/toolkit/util/ClassDocCatalog.java com/sun/tools/doclets/internal/toolkit/util/ClassTree.java com/sun/tools/doclets/internal/toolkit/util/ClassUseMapper.java com/sun/tools/doclets/internal/toolkit/util/IndexBuilder.java com/sun/tools/doclets/internal/toolkit/util/Extern.java com/sun/tools/doclets/internal/toolkit/util/DeprecatedAPIListBuilder.java com/sun/tools/doclets/internal/toolkit/util/DirectoryManager.java com/sun/tools/doclets/internal/toolkit/util/DocFinder.java com/sun/tools/doclets/internal/toolkit/util/DocletAbortException.java com/sun/tools/doclets/internal/toolkit/util/DocletConstants.java com/sun/tools/doclets/internal/toolkit/util/Group.java com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java com/sun/tools/doclets/internal/toolkit/util/ImplementedMethods.java com/sun/tools/doclets/internal/toolkit/util/MessageRetriever.java com/sun/tools/doclets/internal/toolkit/util/MetaKeywords.java com/sun/tools/doclets/internal/toolkit/util/MethodFinder.java com/sun/tools/doclets/internal/toolkit/util/PackageListWriter.java com/sun/tools/doclets/internal/toolkit/util/SourcePath.java com/sun/tools/doclets/internal/toolkit/util/TaggedMethodFinder.java com/sun/tools/doclets/internal/toolkit/util/TextTag.java com/sun/tools/doclets/internal/toolkit/util/Util.java com/sun/tools/doclets/internal/toolkit/util/VisibleMemberMap.java com/sun/tools/doclets/internal/toolkit/util/package.html com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java com/sun/tools/doclets/internal/toolkit/AbstractDoclet.java com/sun/tools/doclets/internal/toolkit/package.html com/sun/tools/doclets/internal/toolkit/AnnotationTypeOptionalMemberWriter.java com/sun/tools/doclets/internal/toolkit/AnnotationTypeRequiredMemberWriter.java com/sun/tools/doclets/internal/toolkit/ClassWriter.java com/sun/tools/doclets/internal/toolkit/Configuration.java com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java com/sun/tools/doclets/internal/toolkit/ConstructorWriter.java com/sun/tools/doclets/internal/toolkit/EnumConstantWriter.java com/sun/tools/doclets/internal/toolkit/FieldWriter.java com/sun/tools/doclets/internal/toolkit/MethodWriter.java com/sun/tools/doclets/internal/toolkit/MemberSummaryWriter.java com/sun/tools/doclets/internal/toolkit/NestedClassWriter.java com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java com/sun/tools/doclets/internal/toolkit/WriterFactory.java com/sun/tools/doclets/standard com/sun/tools/doclets/standard/SCCS com/sun/tools/doclets/standard/SCCS/s.Standard.java com/sun/tools/doclets/standard/Standard.java com/sun/tools/doclets/package.html com/sun/tools/doclets/Taglet.java com/sun/tools/example com/sun/tools/example/SCCS com/sun/tools/example/SCCS/s.README com/sun/tools/example/debug com/sun/tools/example/debug/bdi com/sun/tools/example/debug/bdi/SCCS com/sun/tools/example/debug/bdi/SCCS/s.AmbiguousMethodException.java com/sun/tools/example/debug/bdi/SCCS/s.AccessWatchpointSpec.java com/sun/tools/example/debug/bdi/SCCS/s.BreakpointSpec.java com/sun/tools/example/debug/bdi/SCCS/s.ChildSession.java com/sun/tools/example/debug/bdi/SCCS/s.EvaluationException.java com/sun/tools/example/debug/bdi/SCCS/s.EventRequestSpec.java com/sun/tools/example/debug/bdi/SCCS/s.EventRequestSpecList.java com/sun/tools/example/debug/bdi/SCCS/s.ExceptionSpec.java com/sun/tools/example/debug/bdi/SCCS/s.ExecutionManager.java com/sun/tools/example/debug/bdi/SCCS/s.InputListener.java com/sun/tools/example/debug/bdi/SCCS/s.Session.java com/sun/tools/example/debug/bdi/SCCS/s.SourceNameReferenceTypeSpec.java com/sun/tools/example/debug/bdi/SCCS/s.FrameIndexOutOfBoundsException.java com/sun/tools/example/debug/bdi/SCCS/s.JDIEventSource.java com/sun/tools/example/debug/bdi/SCCS/s.LineBreakpointSpec.java com/sun/tools/example/debug/bdi/SCCS/s.LineNotFoundException.java com/sun/tools/example/debug/bdi/SCCS/s.MalformedMemberNameException.java com/sun/tools/example/debug/bdi/SCCS/s.MethodBreakpointSpec.java com/sun/tools/example/debug/bdi/SCCS/s.MethodNotFoundException.java com/sun/tools/example/debug/bdi/SCCS/s.ModificationWatchpointSpec.java com/sun/tools/example/debug/bdi/SCCS/s.NoSessionException.java com/sun/tools/example/debug/bdi/SCCS/s.NoThreadException.java com/sun/tools/example/debug/bdi/SCCS/s.OutputListener.java com/sun/tools/example/debug/bdi/SCCS/s.ParseException.java com/sun/tools/example/debug/bdi/SCCS/s.PatternReferenceTypeSpec.java com/sun/tools/example/debug/bdi/SCCS/s.ReferenceTypeSpec.java com/sun/tools/example/debug/bdi/SCCS/s.SessionListener.java com/sun/tools/example/debug/bdi/SCCS/s.SpecEvent.java com/sun/tools/example/debug/bdi/SCCS/s.ThreadGroupIterator.java com/sun/tools/example/debug/bdi/SCCS/s.SpecErrorEvent.java com/sun/tools/example/debug/bdi/SCCS/s.SpecListener.java com/sun/tools/example/debug/bdi/SCCS/s.VMLaunchFailureException.java com/sun/tools/example/debug/bdi/SCCS/s.ThreadInfo.java com/sun/tools/example/debug/bdi/SCCS/s.ThreadIterator.java com/sun/tools/example/debug/bdi/SCCS/s.Utils.java com/sun/tools/example/debug/bdi/SCCS/s.VMNotInterruptedException.java com/sun/tools/example/debug/bdi/SCCS/s.WatchpointSpec.java com/sun/tools/example/debug/bdi/AmbiguousMethodException.java com/sun/tools/example/debug/bdi/AccessWatchpointSpec.java com/sun/tools/example/debug/bdi/EvaluationException.java com/sun/tools/example/debug/bdi/BreakpointSpec.java com/sun/tools/example/debug/bdi/ChildSession.java com/sun/tools/example/debug/bdi/FrameIndexOutOfBoundsException.java com/sun/tools/example/debug/bdi/EventRequestSpec.java com/sun/tools/example/debug/bdi/EventRequestSpecList.java com/sun/tools/example/debug/bdi/ExceptionSpec.java com/sun/tools/example/debug/bdi/ExecutionManager.java com/sun/tools/example/debug/bdi/LineBreakpointSpec.java com/sun/tools/example/debug/bdi/InputListener.java com/sun/tools/example/debug/bdi/JDIEventSource.java com/sun/tools/example/debug/bdi/MalformedMemberNameException.java com/sun/tools/example/debug/bdi/LineNotFoundException.java com/sun/tools/example/debug/bdi/MethodNotFoundException.java com/sun/tools/example/debug/bdi/MethodBreakpointSpec.java com/sun/tools/example/debug/bdi/ThreadGroupIterator.java com/sun/tools/example/debug/bdi/ModificationWatchpointSpec.java com/sun/tools/example/debug/bdi/NoSessionException.java com/sun/tools/example/debug/bdi/NoThreadException.java com/sun/tools/example/debug/bdi/OutputListener.java com/sun/tools/example/debug/bdi/ParseException.java com/sun/tools/example/debug/bdi/PatternReferenceTypeSpec.java com/sun/tools/example/debug/bdi/ReferenceTypeSpec.java com/sun/tools/example/debug/bdi/Session.java com/sun/tools/example/debug/bdi/SessionListener.java com/sun/tools/example/debug/bdi/SourceNameReferenceTypeSpec.java com/sun/tools/example/debug/bdi/SpecErrorEvent.java com/sun/tools/example/debug/bdi/SpecEvent.java com/sun/tools/example/debug/bdi/SpecListener.java com/sun/tools/example/debug/bdi/ThreadIterator.java com/sun/tools/example/debug/bdi/ThreadInfo.java com/sun/tools/example/debug/bdi/WatchpointSpec.java com/sun/tools/example/debug/bdi/Utils.java com/sun/tools/example/debug/bdi/VMLaunchFailureException.java com/sun/tools/example/debug/bdi/VMNotInterruptedException.java com/sun/tools/example/debug/event com/sun/tools/example/debug/event/SCCS com/sun/tools/example/debug/event/SCCS/s.AccessWatchpointEventSet.java com/sun/tools/example/debug/event/SCCS/s.AbstractEventSet.java com/sun/tools/example/debug/event/SCCS/s.LocationTriggerEventSet.java com/sun/tools/example/debug/event/SCCS/s.ClassPrepareEventSet.java com/sun/tools/example/debug/event/SCCS/s.ClassUnloadEventSet.java com/sun/tools/example/debug/event/SCCS/s.ExceptionEventSet.java com/sun/tools/example/debug/event/SCCS/s.JDIAdapter.java com/sun/tools/example/debug/event/SCCS/s.JDIListener.java com/sun/tools/example/debug/event/SCCS/s.LocatableEventSet.java com/sun/tools/example/debug/event/SCCS/s.ModificationWatchpointEventSet.java com/sun/tools/example/debug/event/SCCS/s.ThreadDeathEventSet.java com/sun/tools/example/debug/event/SCCS/s.ThreadStartEventSet.java com/sun/tools/example/debug/event/SCCS/s.VMDeathEventSet.java com/sun/tools/example/debug/event/SCCS/s.VMDisconnectEventSet.java com/sun/tools/example/debug/event/SCCS/s.VMStartEventSet.java com/sun/tools/example/debug/event/SCCS/s.WatchpointEventSet.java com/sun/tools/example/debug/event/AccessWatchpointEventSet.java com/sun/tools/example/debug/event/AbstractEventSet.java com/sun/tools/example/debug/event/LocationTriggerEventSet.java com/sun/tools/example/debug/event/ClassPrepareEventSet.java com/sun/tools/example/debug/event/ClassUnloadEventSet.java com/sun/tools/example/debug/event/ExceptionEventSet.java com/sun/tools/example/debug/event/JDIAdapter.java com/sun/tools/example/debug/event/JDIListener.java com/sun/tools/example/debug/event/LocatableEventSet.java com/sun/tools/example/debug/event/ModificationWatchpointEventSet.java com/sun/tools/example/debug/event/ThreadDeathEventSet.java com/sun/tools/example/debug/event/ThreadStartEventSet.java com/sun/tools/example/debug/event/VMDeathEventSet.java com/sun/tools/example/debug/event/VMDisconnectEventSet.java com/sun/tools/example/debug/event/VMStartEventSet.java com/sun/tools/example/debug/event/WatchpointEventSet.java com/sun/tools/example/debug/expr com/sun/tools/example/debug/expr/SCCS com/sun/tools/example/debug/expr/SCCS/s.Expr.jj com/sun/tools/example/debug/expr/SCCS/s.ASCII_UCodeESC_CharStream.java com/sun/tools/example/debug/expr/SCCS/s.LValue.java com/sun/tools/example/debug/expr/SCCS/s.ExpressionParser.java com/sun/tools/example/debug/expr/SCCS/s.ExpressionParserConstants.java com/sun/tools/example/debug/expr/SCCS/s.ExpressionParserTokenManager.java com/sun/tools/example/debug/expr/SCCS/s.ParseException.java com/sun/tools/example/debug/expr/SCCS/s.Token.java com/sun/tools/example/debug/expr/SCCS/s.TokenMgrError.java com/sun/tools/example/debug/expr/Expr.jj com/sun/tools/example/debug/expr/ASCII_UCodeESC_CharStream.java com/sun/tools/example/debug/expr/LValue.java com/sun/tools/example/debug/expr/TokenMgrError.java com/sun/tools/example/debug/expr/Token.java com/sun/tools/example/debug/expr/ExpressionParser.java com/sun/tools/example/debug/expr/ExpressionParserConstants.java com/sun/tools/example/debug/expr/ExpressionParserTokenManager.java com/sun/tools/example/debug/expr/ParseException.java com/sun/tools/example/debug/gui com/sun/tools/example/debug/gui/SCCS com/sun/tools/example/debug/gui/SCCS/s.CommandInterpreter.java com/sun/tools/example/debug/gui/SCCS/s.ApplicationTool.java com/sun/tools/example/debug/gui/SCCS/s.ClassManager.java com/sun/tools/example/debug/gui/SCCS/s.ClassTreeTool.java com/sun/tools/example/debug/gui/SCCS/s.CurrentFrameChangedEvent.java com/sun/tools/example/debug/gui/SCCS/s.CommandTool.java com/sun/tools/example/debug/gui/SCCS/s.ContextListener.java com/sun/tools/example/debug/gui/SCCS/s.ContextManager.java com/sun/tools/example/debug/gui/SCCS/s.JDBFileFilter.java com/sun/tools/example/debug/gui/SCCS/s.Environment.java com/sun/tools/example/debug/gui/SCCS/s.GUI.java com/sun/tools/example/debug/gui/SCCS/s.Icons.java com/sun/tools/example/debug/gui/SCCS/s.SourcepathChangedEvent.java com/sun/tools/example/debug/gui/SCCS/s.JDBMenuBar.java com/sun/tools/example/debug/gui/SCCS/s.JDBToolBar.java com/sun/tools/example/debug/gui/SCCS/s.LaunchTool.java com/sun/tools/example/debug/gui/SCCS/s.MonitorListModel.java com/sun/tools/example/debug/gui/SCCS/s.MonitorTool.java com/sun/tools/example/debug/gui/SCCS/s.OutputSink.java com/sun/tools/example/debug/gui/SCCS/s.SearchPath.java com/sun/tools/example/debug/gui/SCCS/s.SourceListener.java com/sun/tools/example/debug/gui/SCCS/s.SingleLeafTreeSelectionModel.java com/sun/tools/example/debug/gui/SCCS/s.SourceManager.java com/sun/tools/example/debug/gui/SCCS/s.SourceModel.java com/sun/tools/example/debug/gui/SCCS/s.SourceTool.java com/sun/tools/example/debug/gui/SCCS/s.SourceTreeTool.java com/sun/tools/example/debug/gui/SCCS/s.StackTraceTool.java com/sun/tools/example/debug/gui/SCCS/s.ThreadTreeTool.java com/sun/tools/example/debug/gui/SCCS/s.TypeScript.java com/sun/tools/example/debug/gui/SCCS/s.TypeScriptOutputListener.java com/sun/tools/example/debug/gui/SCCS/s.TypeScriptWriter.java com/sun/tools/example/debug/gui/CurrentFrameChangedEvent.java com/sun/tools/example/debug/gui/ApplicationTool.java com/sun/tools/example/debug/gui/ClassManager.java com/sun/tools/example/debug/gui/ClassTreeTool.java com/sun/tools/example/debug/gui/CommandInterpreter.java com/sun/tools/example/debug/gui/CommandTool.java com/sun/tools/example/debug/gui/ContextListener.java com/sun/tools/example/debug/gui/ContextManager.java com/sun/tools/example/debug/gui/Environment.java com/sun/tools/example/debug/gui/GUI.java com/sun/tools/example/debug/gui/Icons.java com/sun/tools/example/debug/gui/JDBFileFilter.java com/sun/tools/example/debug/gui/JDBMenuBar.java com/sun/tools/example/debug/gui/JDBToolBar.java com/sun/tools/example/debug/gui/LaunchTool.java com/sun/tools/example/debug/gui/SourceListener.java com/sun/tools/example/debug/gui/OutputSink.java com/sun/tools/example/debug/gui/MonitorListModel.java com/sun/tools/example/debug/gui/MonitorTool.java com/sun/tools/example/debug/gui/SearchPath.java com/sun/tools/example/debug/gui/SingleLeafTreeSelectionModel.java com/sun/tools/example/debug/gui/SourceManager.java com/sun/tools/example/debug/gui/SourceModel.java com/sun/tools/example/debug/gui/SourceTool.java com/sun/tools/example/debug/gui/SourceTreeTool.java com/sun/tools/example/debug/gui/SourcepathChangedEvent.java com/sun/tools/example/debug/gui/StackTraceTool.java com/sun/tools/example/debug/gui/ThreadTreeTool.java com/sun/tools/example/debug/gui/TypeScript.java com/sun/tools/example/debug/gui/TypeScriptOutputListener.java com/sun/tools/example/debug/gui/TypeScriptWriter.java com/sun/tools/example/debug/tty com/sun/tools/example/debug/tty/SCCS com/sun/tools/example/debug/tty/SCCS/s.AmbiguousMethodException.java com/sun/tools/example/debug/tty/SCCS/s.AccessWatchpointSpec.java com/sun/tools/example/debug/tty/SCCS/s.LineNotFoundException.java com/sun/tools/example/debug/tty/SCCS/s.BreakpointSpec.java com/sun/tools/example/debug/tty/SCCS/s.Commands.java com/sun/tools/example/debug/tty/SCCS/s.Env.java com/sun/tools/example/debug/tty/SCCS/s.EventHandler.java com/sun/tools/example/debug/tty/SCCS/s.EventNotifier.java com/sun/tools/example/debug/tty/SCCS/s.EventRequestSpec.java com/sun/tools/example/debug/tty/SCCS/s.EventRequestSpecList.java com/sun/tools/example/debug/tty/SCCS/s.ExceptionSpec.java com/sun/tools/example/debug/tty/SCCS/s.TTY.java com/sun/tools/example/debug/tty/SCCS/s.MalformedMemberNameException.java com/sun/tools/example/debug/tty/SCCS/s.MessageOutput.java com/sun/tools/example/debug/tty/SCCS/s.ThreadGroupIterator.java com/sun/tools/example/debug/tty/SCCS/s.ModificationWatchpointSpec.java com/sun/tools/example/debug/tty/SCCS/s.PatternReferenceTypeSpec.java com/sun/tools/example/debug/tty/SCCS/s.ReferenceTypeSpec.java com/sun/tools/example/debug/tty/SCCS/s.SourceMapper.java com/sun/tools/example/debug/tty/SCCS/s.TTYResources.java com/sun/tools/example/debug/tty/SCCS/s.TTYResources_ja.java com/sun/tools/example/debug/tty/SCCS/s.ThreadIterator.java com/sun/tools/example/debug/tty/SCCS/s.ThreadInfo.java com/sun/tools/example/debug/tty/SCCS/s.VMConnection.java com/sun/tools/example/debug/tty/SCCS/s.WatchpointSpec.java com/sun/tools/example/debug/tty/SCCS/s.VMNotConnectedException.java com/sun/tools/example/debug/tty/AmbiguousMethodException.java com/sun/tools/example/debug/tty/AccessWatchpointSpec.java com/sun/tools/example/debug/tty/EventRequestSpecList.java com/sun/tools/example/debug/tty/BreakpointSpec.java com/sun/tools/example/debug/tty/Commands.java com/sun/tools/example/debug/tty/Env.java com/sun/tools/example/debug/tty/EventHandler.java com/sun/tools/example/debug/tty/EventNotifier.java com/sun/tools/example/debug/tty/EventRequestSpec.java com/sun/tools/example/debug/tty/LineNotFoundException.java com/sun/tools/example/debug/tty/ExceptionSpec.java com/sun/tools/example/debug/tty/TTY.java com/sun/tools/example/debug/tty/MalformedMemberNameException.java com/sun/tools/example/debug/tty/MessageOutput.java com/sun/tools/example/debug/tty/VMNotConnectedException.java com/sun/tools/example/debug/tty/ModificationWatchpointSpec.java com/sun/tools/example/debug/tty/PatternReferenceTypeSpec.java com/sun/tools/example/debug/tty/ReferenceTypeSpec.java com/sun/tools/example/debug/tty/SourceMapper.java com/sun/tools/example/debug/tty/TTYResources.java com/sun/tools/example/debug/tty/TTYResources_ja.java com/sun/tools/example/debug/tty/ThreadGroupIterator.java com/sun/tools/example/debug/tty/ThreadInfo.java com/sun/tools/example/debug/tty/ThreadIterator.java com/sun/tools/example/debug/tty/VMConnection.java com/sun/tools/example/debug/tty/WatchpointSpec.java com/sun/tools/example/doc com/sun/tools/example/doc/SCCS com/sun/tools/example/doc/SCCS/s.index.html com/sun/tools/example/doc/SCCS/s.javadt.html com/sun/tools/example/doc/SCCS/s.jdb.html com/sun/tools/example/doc/SCCS/s.trace.html com/sun/tools/example/doc/index.html com/sun/tools/example/doc/javadt.html com/sun/tools/example/doc/jdb.html com/sun/tools/example/doc/trace.html com/sun/tools/example/trace com/sun/tools/example/trace/SCCS com/sun/tools/example/trace/SCCS/s.StreamRedirectThread.java com/sun/tools/example/trace/SCCS/s.EventThread.java com/sun/tools/example/trace/SCCS/s.Trace.java com/sun/tools/example/trace/StreamRedirectThread.java com/sun/tools/example/trace/EventThread.java com/sun/tools/example/trace/Trace.java com/sun/tools/example/README com/sun/tools/extcheck com/sun/tools/extcheck/SCCS com/sun/tools/extcheck/SCCS/s.ExtCheck.java com/sun/tools/extcheck/SCCS/s.Main.java com/sun/tools/extcheck/ExtCheck.java com/sun/tools/extcheck/Main.java com/sun/tools/javac com/sun/tools/javac/SCCS com/sun/tools/javac/SCCS/s.Main.java com/sun/tools/javac/code com/sun/tools/javac/code/SCCS com/sun/tools/javac/code/SCCS/s.Attribute.java com/sun/tools/javac/code/SCCS/s.BoundKind.java com/sun/tools/javac/code/SCCS/s.Flags.java com/sun/tools/javac/code/SCCS/s.Kinds.java com/sun/tools/javac/code/SCCS/s.Scope.java com/sun/tools/javac/code/SCCS/s.Source.java com/sun/tools/javac/code/SCCS/s.Symbol.java com/sun/tools/javac/code/SCCS/s.Symtab.java com/sun/tools/javac/code/SCCS/s.Type.java com/sun/tools/javac/code/SCCS/s.TypeTags.java com/sun/tools/javac/code/SCCS/s.Types.java com/sun/tools/javac/code/Attribute.java com/sun/tools/javac/code/BoundKind.java com/sun/tools/javac/code/Flags.java com/sun/tools/javac/code/Kinds.java com/sun/tools/javac/code/Scope.java com/sun/tools/javac/code/Source.java com/sun/tools/javac/code/Symbol.java com/sun/tools/javac/code/Symtab.java com/sun/tools/javac/code/Type.java com/sun/tools/javac/code/TypeTags.java com/sun/tools/javac/code/Types.java com/sun/tools/javac/comp com/sun/tools/javac/comp/SCCS com/sun/tools/javac/comp/SCCS/s.AttrContext.java com/sun/tools/javac/comp/SCCS/s.Annotate.java com/sun/tools/javac/comp/SCCS/s.Attr.java com/sun/tools/javac/comp/SCCS/s.AttrContextEnv.java com/sun/tools/javac/comp/SCCS/s.Check.java com/sun/tools/javac/comp/SCCS/s.ConstFold.java com/sun/tools/javac/comp/SCCS/s.Enter.java com/sun/tools/javac/comp/SCCS/s.Env.java com/sun/tools/javac/comp/SCCS/s.Flow.java com/sun/tools/javac/comp/SCCS/s.Infer.java com/sun/tools/javac/comp/SCCS/s.Lower.java com/sun/tools/javac/comp/SCCS/s.MemberEnter.java com/sun/tools/javac/comp/SCCS/s.Resolve.java com/sun/tools/javac/comp/SCCS/s.Todo.java com/sun/tools/javac/comp/SCCS/s.TransTypes.java com/sun/tools/javac/comp/AttrContext.java com/sun/tools/javac/comp/Annotate.java com/sun/tools/javac/comp/Attr.java com/sun/tools/javac/comp/AttrContextEnv.java com/sun/tools/javac/comp/Check.java com/sun/tools/javac/comp/ConstFold.java com/sun/tools/javac/comp/Enter.java com/sun/tools/javac/comp/Env.java com/sun/tools/javac/comp/Flow.java com/sun/tools/javac/comp/Infer.java com/sun/tools/javac/comp/Lower.java com/sun/tools/javac/comp/MemberEnter.java com/sun/tools/javac/comp/Resolve.java com/sun/tools/javac/comp/Todo.java com/sun/tools/javac/comp/TransTypes.java com/sun/tools/javac/jvm com/sun/tools/javac/jvm/SCCS com/sun/tools/javac/jvm/SCCS/s.UninitializedType.java com/sun/tools/javac/jvm/SCCS/s.ByteCodes.java com/sun/tools/javac/jvm/SCCS/s.CRTFlags.java com/sun/tools/javac/jvm/SCCS/s.CRTable.java com/sun/tools/javac/jvm/SCCS/s.ClassFile.java com/sun/tools/javac/jvm/SCCS/s.ClassReader.java com/sun/tools/javac/jvm/SCCS/s.ClassWriter.java com/sun/tools/javac/jvm/SCCS/s.Code.java com/sun/tools/javac/jvm/SCCS/s.Gen.java com/sun/tools/javac/jvm/SCCS/s.Items.java com/sun/tools/javac/jvm/SCCS/s.Pool.java com/sun/tools/javac/jvm/SCCS/s.Target.java com/sun/tools/javac/jvm/ClassReader.java com/sun/tools/javac/jvm/ByteCodes.java com/sun/tools/javac/jvm/CRTFlags.java com/sun/tools/javac/jvm/CRTable.java com/sun/tools/javac/jvm/ClassFile.java com/sun/tools/javac/jvm/ClassWriter.java com/sun/tools/javac/jvm/Code.java com/sun/tools/javac/jvm/Gen.java com/sun/tools/javac/jvm/Items.java com/sun/tools/javac/jvm/Pool.java com/sun/tools/javac/jvm/Target.java com/sun/tools/javac/jvm/UninitializedType.java com/sun/tools/javac/main com/sun/tools/javac/main/SCCS com/sun/tools/javac/main/SCCS/s.CommandLine.java com/sun/tools/javac/main/SCCS/s.JavaCompiler.java com/sun/tools/javac/main/SCCS/s.Main.java com/sun/tools/javac/main/CommandLine.java com/sun/tools/javac/main/JavaCompiler.java com/sun/tools/javac/main/Main.java com/sun/tools/javac/parser com/sun/tools/javac/parser/SCCS com/sun/tools/javac/parser/SCCS/s.Keywords.java com/sun/tools/javac/parser/SCCS/s.Parser.java com/sun/tools/javac/parser/SCCS/s.Scanner.java com/sun/tools/javac/parser/SCCS/s.Tokens.java com/sun/tools/javac/parser/SCCS/s.EndPosParser.java com/sun/tools/javac/parser/Keywords.java com/sun/tools/javac/parser/Parser.java com/sun/tools/javac/parser/Scanner.java com/sun/tools/javac/parser/Tokens.java com/sun/tools/javac/parser/EndPosParser.java com/sun/tools/javac/resources com/sun/tools/javac/resources/SCCS com/sun/tools/javac/resources/SCCS/s.compiler_ja.properties com/sun/tools/javac/resources/SCCS/s.compiler.properties com/sun/tools/javac/resources/SCCS/s.javac.properties com/sun/tools/javac/resources/SCCS/s.javac_ja.properties com/sun/tools/javac/resources/compiler_ja.properties com/sun/tools/javac/resources/compiler.properties com/sun/tools/javac/resources/javac.properties com/sun/tools/javac/resources/javac_ja.properties com/sun/tools/javac/tree com/sun/tools/javac/tree/SCCS com/sun/tools/javac/tree/SCCS/s.TreeMaker.java com/sun/tools/javac/tree/SCCS/s.Pretty.java com/sun/tools/javac/tree/SCCS/s.Tree.java com/sun/tools/javac/tree/SCCS/s.TreeInfo.java com/sun/tools/javac/tree/SCCS/s.TreeScanner.java com/sun/tools/javac/tree/SCCS/s.TreeTranslator.java com/sun/tools/javac/tree/TreeInfo.java com/sun/tools/javac/tree/Pretty.java com/sun/tools/javac/tree/Tree.java com/sun/tools/javac/tree/TreeMaker.java com/sun/tools/javac/tree/TreeScanner.java com/sun/tools/javac/tree/TreeTranslator.java com/sun/tools/javac/util com/sun/tools/javac/util/SCCS com/sun/tools/javac/util/SCCS/s.ByteBuffer.java com/sun/tools/javac/util/SCCS/s.Abort.java com/sun/tools/javac/util/SCCS/s.Bits.java com/sun/tools/javac/util/SCCS/s.LayoutCharacters.java com/sun/tools/javac/util/SCCS/s.Context.java com/sun/tools/javac/util/SCCS/s.Convert.java com/sun/tools/javac/util/SCCS/s.Diagnostic.java com/sun/tools/javac/util/SCCS/s.FatalError.java com/sun/tools/javac/util/SCCS/s.FileEntry.java com/sun/tools/javac/util/SCCS/s.ListBuffer.java com/sun/tools/javac/util/SCCS/s.List.java com/sun/tools/javac/util/SCCS/s.Log.java com/sun/tools/javac/util/SCCS/s.Name.java com/sun/tools/javac/util/SCCS/s.Options.java com/sun/tools/javac/util/SCCS/s.Pair.java com/sun/tools/javac/util/SCCS/s.Paths.java com/sun/tools/javac/util/SCCS/s.Position.java com/sun/tools/javac/util/SCCS/s.Warner.java com/sun/tools/javac/util/SCCS/s.MandatoryWarningHandler.java com/sun/tools/javac/util/ByteBuffer.java com/sun/tools/javac/util/Abort.java com/sun/tools/javac/util/Bits.java com/sun/tools/javac/util/LayoutCharacters.java com/sun/tools/javac/util/Context.java com/sun/tools/javac/util/Convert.java com/sun/tools/javac/util/Diagnostic.java com/sun/tools/javac/util/FatalError.java com/sun/tools/javac/util/FileEntry.java com/sun/tools/javac/util/List.java com/sun/tools/javac/util/ListBuffer.java com/sun/tools/javac/util/Log.java com/sun/tools/javac/util/Name.java com/sun/tools/javac/util/Options.java com/sun/tools/javac/util/Pair.java com/sun/tools/javac/util/Paths.java com/sun/tools/javac/util/Position.java com/sun/tools/javac/util/Warner.java com/sun/tools/javac/util/MandatoryWarningHandler.java com/sun/tools/javac/Main.java com/sun/tools/javadoc com/sun/tools/javadoc/SCCS com/sun/tools/javadoc/SCCS/s.AnnotationDescImpl.java com/sun/tools/javadoc/SCCS/s.AbstractTypeImpl.java com/sun/tools/javadoc/SCCS/s.JavadocClassReader.java com/sun/tools/javadoc/SCCS/s.AnnotationTypeDocImpl.java com/sun/tools/javadoc/SCCS/s.AnnotationTypeElementDocImpl.java com/sun/tools/javadoc/SCCS/s.AnnotationValueImpl.java com/sun/tools/javadoc/SCCS/s.ClassDocImpl.java com/sun/tools/javadoc/SCCS/s.Comment.java com/sun/tools/javadoc/SCCS/s.ConstructorDocImpl.java com/sun/tools/javadoc/SCCS/s.DocEnv.java com/sun/tools/javadoc/SCCS/s.DocImpl.java com/sun/tools/javadoc/SCCS/s.DocLocale.java com/sun/tools/javadoc/SCCS/s.DocletInvoker.java com/sun/tools/javadoc/SCCS/s.ExecutableMemberDocImpl.java com/sun/tools/javadoc/SCCS/s.FieldDocImpl.java com/sun/tools/javadoc/SCCS/s.JavadocMemberEnter.java com/sun/tools/javadoc/SCCS/s.JavadocEnter.java com/sun/tools/javadoc/SCCS/s.MemberDocImpl.java com/sun/tools/javadoc/SCCS/s.JavadocTodo.java com/sun/tools/javadoc/SCCS/s.JavadocTool.java com/sun/tools/javadoc/SCCS/s.Main.java com/sun/tools/javadoc/SCCS/s.MethodDocImpl.java com/sun/tools/javadoc/SCCS/s.Messager.java com/sun/tools/javadoc/SCCS/s.ParameterizedTypeImpl.java com/sun/tools/javadoc/SCCS/s.ModifierFilter.java com/sun/tools/javadoc/SCCS/s.PackageDocImpl.java com/sun/tools/javadoc/SCCS/s.ParamTagImpl.java com/sun/tools/javadoc/SCCS/s.ParameterImpl.java com/sun/tools/javadoc/SCCS/s.PrimitiveType.java com/sun/tools/javadoc/SCCS/s.ProgramElementDocImpl.java com/sun/tools/javadoc/SCCS/s.RootDocImpl.java com/sun/tools/javadoc/SCCS/s.SeeTagImpl.java com/sun/tools/javadoc/SCCS/s.SerialFieldTagImpl.java com/sun/tools/javadoc/SCCS/s.SerializedForm.java com/sun/tools/javadoc/SCCS/s.SourcePositionImpl.java com/sun/tools/javadoc/SCCS/s.Start.java com/sun/tools/javadoc/SCCS/s.TagImpl.java com/sun/tools/javadoc/SCCS/s.ThrowsTagImpl.java com/sun/tools/javadoc/SCCS/s.TypeMaker.java com/sun/tools/javadoc/SCCS/s.TypeVariableImpl.java com/sun/tools/javadoc/SCCS/s.WildcardTypeImpl.java com/sun/tools/javadoc/SCCS/s.DocCommentScanner.java com/sun/tools/javadoc/resources com/sun/tools/javadoc/resources/SCCS com/sun/tools/javadoc/resources/SCCS/s.javadoc.properties com/sun/tools/javadoc/resources/SCCS/s.javadoc_ja.properties com/sun/tools/javadoc/resources/javadoc_ja.properties com/sun/tools/javadoc/resources/javadoc.properties com/sun/tools/javadoc/AnnotationTypeDocImpl.java com/sun/tools/javadoc/AbstractTypeImpl.java com/sun/tools/javadoc/AnnotationDescImpl.java com/sun/tools/javadoc/DocEnv.java com/sun/tools/javadoc/AnnotationTypeElementDocImpl.java com/sun/tools/javadoc/AnnotationValueImpl.java com/sun/tools/javadoc/ClassDocImpl.java com/sun/tools/javadoc/Comment.java com/sun/tools/javadoc/ConstructorDocImpl.java com/sun/tools/javadoc/DocImpl.java com/sun/tools/javadoc/DocLocale.java com/sun/tools/javadoc/DocletInvoker.java com/sun/tools/javadoc/MemberDocImpl.java com/sun/tools/javadoc/Main.java com/sun/tools/javadoc/ExecutableMemberDocImpl.java com/sun/tools/javadoc/FieldDocImpl.java com/sun/tools/javadoc/JavadocClassReader.java com/sun/tools/javadoc/JavadocEnter.java com/sun/tools/javadoc/JavadocMemberEnter.java com/sun/tools/javadoc/JavadocTodo.java com/sun/tools/javadoc/JavadocTool.java com/sun/tools/javadoc/MethodDocImpl.java com/sun/tools/javadoc/Messager.java com/sun/tools/javadoc/ParameterizedTypeImpl.java com/sun/tools/javadoc/ModifierFilter.java com/sun/tools/javadoc/PackageDocImpl.java com/sun/tools/javadoc/ParamTagImpl.java com/sun/tools/javadoc/ParameterImpl.java com/sun/tools/javadoc/ProgramElementDocImpl.java com/sun/tools/javadoc/PrimitiveType.java com/sun/tools/javadoc/RootDocImpl.java com/sun/tools/javadoc/SeeTagImpl.java com/sun/tools/javadoc/Start.java com/sun/tools/javadoc/SerialFieldTagImpl.java com/sun/tools/javadoc/SerializedForm.java com/sun/tools/javadoc/SourcePositionImpl.java com/sun/tools/javadoc/TagImpl.java com/sun/tools/javadoc/ThrowsTagImpl.java com/sun/tools/javadoc/TypeMaker.java com/sun/tools/javadoc/TypeVariableImpl.java com/sun/tools/javadoc/WildcardTypeImpl.java com/sun/tools/javadoc/DocCommentScanner.java com/sun/tools/javah com/sun/tools/javah/SCCS com/sun/tools/javah/SCCS/s.MainDoclet.java com/sun/tools/javah/SCCS/s.Gen.java com/sun/tools/javah/SCCS/s.JNI.java com/sun/tools/javah/SCCS/s.LLNI.java com/sun/tools/javah/SCCS/s.Main.java com/sun/tools/javah/SCCS/s.TypeSignature.java com/sun/tools/javah/SCCS/s.Mangle.java com/sun/tools/javah/SCCS/s.Util.java com/sun/tools/javah/oldjavah com/sun/tools/javah/oldjavah/SCCS com/sun/tools/javah/oldjavah/SCCS/s.Mangle.java com/sun/tools/javah/oldjavah/SCCS/s.Gen.java com/sun/tools/javah/oldjavah/SCCS/s.JNI.java com/sun/tools/javah/oldjavah/SCCS/s.LLNI.java com/sun/tools/javah/oldjavah/SCCS/s.Main.java com/sun/tools/javah/oldjavah/SCCS/s.JavahEnvironment.java com/sun/tools/javah/oldjavah/SCCS/s.OldHeaders.java com/sun/tools/javah/oldjavah/SCCS/s.OldStubs.java com/sun/tools/javah/oldjavah/SCCS/s.Util.java com/sun/tools/javah/oldjavah/resources com/sun/tools/javah/oldjavah/resources/SCCS com/sun/tools/javah/oldjavah/resources/SCCS/s.Linux_sparc.properties com/sun/tools/javah/oldjavah/resources/SCCS/s.Linux_ppc.properties com/sun/tools/javah/oldjavah/resources/SCCS/s.SunOS_sparc.properties com/sun/tools/javah/oldjavah/resources/SCCS/s.SunOS_sparcv9.properties com/sun/tools/javah/oldjavah/resources/SCCS/s.l10n.properties com/sun/tools/javah/oldjavah/resources/SCCS/s.l10n_ja.properties com/sun/tools/javah/oldjavah/resources/SCCS/s.win32_x86.properties com/sun/tools/javah/oldjavah/resources/SunOS_sparcv9.properties com/sun/tools/javah/oldjavah/resources/Linux_ppc.properties com/sun/tools/javah/oldjavah/resources/Linux_sparc.properties com/sun/tools/javah/oldjavah/resources/SunOS_sparc.properties com/sun/tools/javah/oldjavah/resources/win32_x86.properties com/sun/tools/javah/oldjavah/resources/l10n.properties com/sun/tools/javah/oldjavah/resources/l10n_ja.properties com/sun/tools/javah/oldjavah/OldHeaders.java com/sun/tools/javah/oldjavah/Gen.java com/sun/tools/javah/oldjavah/JNI.java com/sun/tools/javah/oldjavah/LLNI.java com/sun/tools/javah/oldjavah/Main.java com/sun/tools/javah/oldjavah/JavahEnvironment.java com/sun/tools/javah/oldjavah/Mangle.java com/sun/tools/javah/oldjavah/OldStubs.java com/sun/tools/javah/oldjavah/Util.java com/sun/tools/javah/resources com/sun/tools/javah/resources/SCCS com/sun/tools/javah/resources/SCCS/s.Linux_sparc.properties com/sun/tools/javah/resources/SCCS/s.Linux_ppc.properties com/sun/tools/javah/resources/SCCS/s.SunOS_sparc.properties com/sun/tools/javah/resources/SCCS/s.SunOS_sparcv9.properties com/sun/tools/javah/resources/SCCS/s.l10n.properties com/sun/tools/javah/resources/SCCS/s.l10n_ja.properties com/sun/tools/javah/resources/SCCS/s.win32_x86.properties com/sun/tools/javah/resources/SunOS_sparcv9.properties com/sun/tools/javah/resources/Linux_ppc.properties com/sun/tools/javah/resources/Linux_sparc.properties com/sun/tools/javah/resources/SunOS_sparc.properties com/sun/tools/javah/resources/win32_x86.properties com/sun/tools/javah/resources/l10n.properties com/sun/tools/javah/resources/l10n_ja.properties com/sun/tools/javah/MainDoclet.java com/sun/tools/javah/Gen.java com/sun/tools/javah/JNI.java com/sun/tools/javah/LLNI.java com/sun/tools/javah/Main.java com/sun/tools/javah/TypeSignature.java com/sun/tools/javah/Mangle.java com/sun/tools/javah/Util.java com/sun/tools/jdi com/sun/tools/jdi/META-INF com/sun/tools/jdi/META-INF/services com/sun/tools/jdi/META-INF/services/SCCS com/sun/tools/jdi/META-INF/services/SCCS/s.com.sun.jdi.connect.Connector com/sun/tools/jdi/META-INF/services/SCCS/s.com.sun.jdi.connect.spi.TransportService com/sun/tools/jdi/META-INF/services/com.sun.jdi.connect.Connector com/sun/tools/jdi/META-INF/services/com.sun.jdi.connect.spi.TransportService com/sun/tools/jdi/SCCS com/sun/tools/jdi/SCCS/s.ArrayReferenceImpl.java com/sun/tools/jdi/SCCS/s.AbstractLauncher.java com/sun/tools/jdi/SCCS/s.ClassLoaderReferenceImpl.java com/sun/tools/jdi/SCCS/s.ArrayTypeImpl.java com/sun/tools/jdi/SCCS/s.BaseLineInfo.java com/sun/tools/jdi/SCCS/s.BooleanTypeImpl.java com/sun/tools/jdi/SCCS/s.BooleanValueImpl.java com/sun/tools/jdi/SCCS/s.ByteTypeImpl.java com/sun/tools/jdi/SCCS/s.ByteValueImpl.java com/sun/tools/jdi/SCCS/s.CharTypeImpl.java com/sun/tools/jdi/SCCS/s.CharValueImpl.java com/sun/tools/jdi/SCCS/s.ClassObjectReferenceImpl.java com/sun/tools/jdi/SCCS/s.ClassTypeImpl.java com/sun/tools/jdi/SCCS/s.Packet.java com/sun/tools/jdi/SCCS/s.PrimitiveTypeImpl.java com/sun/tools/jdi/SCCS/s.CommandSender.java com/sun/tools/jdi/SCCS/s.ConcreteMethodImpl.java com/sun/tools/jdi/SCCS/s.ConnectorImpl.java com/sun/tools/jdi/SCCS/s.DoubleTypeImpl.java com/sun/tools/jdi/SCCS/s.DoubleValueImpl.java com/sun/tools/jdi/SCCS/s.EventQueueImpl.java com/sun/tools/jdi/SCCS/s.EventRequestManagerImpl.java com/sun/tools/jdi/SCCS/s.EventSetImpl.java com/sun/tools/jdi/SCCS/s.FieldImpl.java com/sun/tools/jdi/SCCS/s.FloatTypeImpl.java com/sun/tools/jdi/SCCS/s.FloatValueImpl.java com/sun/tools/jdi/SCCS/s.GenericAttachingConnector.java com/sun/tools/jdi/SCCS/s.GenericListeningConnector.java com/sun/tools/jdi/SCCS/s.IntegerTypeImpl.java com/sun/tools/jdi/SCCS/s.IntegerValueImpl.java com/sun/tools/jdi/SCCS/s.InterfaceTypeImpl.java com/sun/tools/jdi/SCCS/s.InternalEventHandler.java com/sun/tools/jdi/SCCS/s.JDWPException.java com/sun/tools/jdi/SCCS/s.JNITypeParser.java com/sun/tools/jdi/SCCS/s.LineInfo.java com/sun/tools/jdi/SCCS/s.LinkedHashMap.java com/sun/tools/jdi/SCCS/s.LocalVariableImpl.java com/sun/tools/jdi/SCCS/s.LocationImpl.java com/sun/tools/jdi/SCCS/s.LockObject.java com/sun/tools/jdi/SCCS/s.LongTypeImpl.java com/sun/tools/jdi/SCCS/s.LongValueImpl.java com/sun/tools/jdi/SCCS/s.MethodImpl.java com/sun/tools/jdi/SCCS/s.MirrorImpl.java com/sun/tools/jdi/SCCS/s.NonConcreteMethodImpl.java com/sun/tools/jdi/SCCS/s.ObjectReferenceImpl.java com/sun/tools/jdi/SCCS/s.ObsoleteMethodImpl.java com/sun/tools/jdi/SCCS/s.PacketStream.java com/sun/tools/jdi/SCCS/s.RawCommandLineLauncher.java com/sun/tools/jdi/SCCS/s.PrimitiveValueImpl.java com/sun/tools/jdi/SCCS/s.SharedMemoryTransportService.java com/sun/tools/jdi/SCCS/s.ReferenceTypeImpl.java com/sun/tools/jdi/SCCS/s.SDE.java com/sun/tools/jdi/SCCS/s.TargetVM.java com/sun/tools/jdi/SCCS/s.SharedMemoryAttachingConnector.java com/sun/tools/jdi/SCCS/s.SharedMemoryListeningConnector.java com/sun/tools/jdi/SCCS/s.ShortTypeImpl.java com/sun/tools/jdi/SCCS/s.ShortValueImpl.java com/sun/tools/jdi/SCCS/s.SocketAttachingConnector.java com/sun/tools/jdi/SCCS/s.SocketListeningConnector.java com/sun/tools/jdi/SCCS/s.VirtualMachineManagerImpl.java com/sun/tools/jdi/SCCS/s.SocketTransportService.java com/sun/tools/jdi/SCCS/s.StackFrameImpl.java com/sun/tools/jdi/SCCS/s.StratumLineInfo.java com/sun/tools/jdi/SCCS/s.StringReferenceImpl.java com/sun/tools/jdi/SCCS/s.SunCommandLineLauncher.java com/sun/tools/jdi/SCCS/s.ThreadAction.java com/sun/tools/jdi/SCCS/s.ThreadListener.java com/sun/tools/jdi/SCCS/s.ThreadGroupReferenceImpl.java com/sun/tools/jdi/SCCS/s.ThreadReferenceImpl.java com/sun/tools/jdi/SCCS/s.TypeComponentImpl.java com/sun/tools/jdi/SCCS/s.TypeImpl.java com/sun/tools/jdi/SCCS/s.VMAction.java com/sun/tools/jdi/SCCS/s.VMListener.java com/sun/tools/jdi/SCCS/s.VMModifiers.java com/sun/tools/jdi/SCCS/s.VMState.java com/sun/tools/jdi/SCCS/s.ValueContainer.java com/sun/tools/jdi/SCCS/s.ValueImpl.java com/sun/tools/jdi/SCCS/s.VirtualMachineImpl.java com/sun/tools/jdi/SCCS/s.VirtualMachineManagerService.java com/sun/tools/jdi/SCCS/s.VoidTypeImpl.java com/sun/tools/jdi/SCCS/s.VoidValueImpl.java com/sun/tools/jdi/resources com/sun/tools/jdi/resources/SCCS com/sun/tools/jdi/resources/SCCS/s.jdi.properties com/sun/tools/jdi/resources/SCCS/s.jdi_ja.properties com/sun/tools/jdi/resources/jdi_ja.properties com/sun/tools/jdi/resources/jdi.properties com/sun/tools/jdi/ClassLoaderReferenceImpl.java com/sun/tools/jdi/AbstractLauncher.java com/sun/tools/jdi/ArrayReferenceImpl.java com/sun/tools/jdi/ArrayTypeImpl.java com/sun/tools/jdi/BaseLineInfo.java com/sun/tools/jdi/BooleanTypeImpl.java com/sun/tools/jdi/BooleanValueImpl.java com/sun/tools/jdi/ByteTypeImpl.java com/sun/tools/jdi/ByteValueImpl.java com/sun/tools/jdi/CharTypeImpl.java com/sun/tools/jdi/CharValueImpl.java com/sun/tools/jdi/Packet.java com/sun/tools/jdi/ClassObjectReferenceImpl.java com/sun/tools/jdi/PrimitiveTypeImpl.java com/sun/tools/jdi/ClassTypeImpl.java com/sun/tools/jdi/CommandSender.java com/sun/tools/jdi/ConcreteMethodImpl.java com/sun/tools/jdi/ConnectorImpl.java com/sun/tools/jdi/DoubleTypeImpl.java com/sun/tools/jdi/DoubleValueImpl.java com/sun/tools/jdi/EventQueueImpl.java com/sun/tools/jdi/EventRequestManagerImpl.java com/sun/tools/jdi/EventSetImpl.java com/sun/tools/jdi/FieldImpl.java com/sun/tools/jdi/FloatTypeImpl.java com/sun/tools/jdi/FloatValueImpl.java com/sun/tools/jdi/GenericAttachingConnector.java com/sun/tools/jdi/GenericListeningConnector.java com/sun/tools/jdi/IntegerTypeImpl.java com/sun/tools/jdi/IntegerValueImpl.java com/sun/tools/jdi/InterfaceTypeImpl.java com/sun/tools/jdi/InternalEventHandler.java com/sun/tools/jdi/JDWPException.java com/sun/tools/jdi/JNITypeParser.java com/sun/tools/jdi/LineInfo.java com/sun/tools/jdi/LinkedHashMap.java com/sun/tools/jdi/LocalVariableImpl.java com/sun/tools/jdi/LocationImpl.java com/sun/tools/jdi/LockObject.java com/sun/tools/jdi/LongTypeImpl.java com/sun/tools/jdi/LongValueImpl.java com/sun/tools/jdi/MethodImpl.java com/sun/tools/jdi/MirrorImpl.java com/sun/tools/jdi/NonConcreteMethodImpl.java com/sun/tools/jdi/ObjectReferenceImpl.java com/sun/tools/jdi/ObsoleteMethodImpl.java com/sun/tools/jdi/PacketStream.java com/sun/tools/jdi/RawCommandLineLauncher.java com/sun/tools/jdi/PrimitiveValueImpl.java com/sun/tools/jdi/ReferenceTypeImpl.java com/sun/tools/jdi/SDE.java com/sun/tools/jdi/ShortTypeImpl.java com/sun/tools/jdi/StackFrameImpl.java com/sun/tools/jdi/SharedMemoryAttachingConnector.java com/sun/tools/jdi/SharedMemoryListeningConnector.java com/sun/tools/jdi/SharedMemoryTransportService.java com/sun/tools/jdi/ShortValueImpl.java com/sun/tools/jdi/SocketAttachingConnector.java com/sun/tools/jdi/SocketListeningConnector.java com/sun/tools/jdi/SocketTransportService.java com/sun/tools/jdi/TargetVM.java com/sun/tools/jdi/ThreadReferenceImpl.java com/sun/tools/jdi/StratumLineInfo.java com/sun/tools/jdi/StringReferenceImpl.java com/sun/tools/jdi/SunCommandLineLauncher.java com/sun/tools/jdi/ThreadAction.java com/sun/tools/jdi/ThreadListener.java com/sun/tools/jdi/ThreadGroupReferenceImpl.java com/sun/tools/jdi/TypeComponentImpl.java com/sun/tools/jdi/TypeImpl.java com/sun/tools/jdi/VMAction.java com/sun/tools/jdi/VMListener.java com/sun/tools/jdi/VMModifiers.java com/sun/tools/jdi/VMState.java com/sun/tools/jdi/ValueContainer.java com/sun/tools/jdi/ValueImpl.java com/sun/tools/jdi/VirtualMachineImpl.java com/sun/tools/jdi/VirtualMachineManagerImpl.java com/sun/tools/jdi/VoidTypeImpl.java com/sun/tools/jdi/VirtualMachineManagerService.java com/sun/tools/jdi/VoidValueImpl.java com/sun/tools/jdwpgen com/sun/tools/jdwpgen/SCCS com/sun/tools/jdwpgen/SCCS/s.AbstractSimpleTypeNode.java com/sun/tools/jdwpgen/SCCS/s.AbstractCommandNode.java com/sun/tools/jdwpgen/SCCS/s.AbstractGroupNode.java com/sun/tools/jdwpgen/SCCS/s.AbstractNamedNode.java com/sun/tools/jdwpgen/SCCS/s.AbstractSimpleNode.java com/sun/tools/jdwpgen/SCCS/s.ClassLoaderObjectTypeNode.java com/sun/tools/jdwpgen/SCCS/s.AbstractTypeListNode.java com/sun/tools/jdwpgen/SCCS/s.AbstractTypeNode.java com/sun/tools/jdwpgen/SCCS/s.AltNode.java com/sun/tools/jdwpgen/SCCS/s.ArrayObjectTypeNode.java com/sun/tools/jdwpgen/SCCS/s.ArrayRegionTypeNode.java com/sun/tools/jdwpgen/SCCS/s.ArrayTypeNode.java com/sun/tools/jdwpgen/SCCS/s.BooleanTypeNode.java com/sun/tools/jdwpgen/SCCS/s.ByteTypeNode.java com/sun/tools/jdwpgen/SCCS/s.ThreadGroupObjectTypeNode.java com/sun/tools/jdwpgen/SCCS/s.ClassObjectTypeNode.java com/sun/tools/jdwpgen/SCCS/s.ClassTypeNode.java com/sun/tools/jdwpgen/SCCS/s.CommandNode.java com/sun/tools/jdwpgen/SCCS/s.CommandSetNode.java com/sun/tools/jdwpgen/SCCS/s.CommentNode.java com/sun/tools/jdwpgen/SCCS/s.ConstantNode.java com/sun/tools/jdwpgen/SCCS/s.ConstantSetNode.java com/sun/tools/jdwpgen/SCCS/s.Context.java com/sun/tools/jdwpgen/SCCS/s.ErrorNode.java com/sun/tools/jdwpgen/SCCS/s.ErrorSetNode.java com/sun/tools/jdwpgen/SCCS/s.EventNode.java com/sun/tools/jdwpgen/SCCS/s.FieldTypeNode.java com/sun/tools/jdwpgen/SCCS/s.FrameTypeNode.java com/sun/tools/jdwpgen/SCCS/s.GroupNode.java com/sun/tools/jdwpgen/SCCS/s.IntTypeNode.java com/sun/tools/jdwpgen/SCCS/s.Main.java com/sun/tools/jdwpgen/SCCS/s.InterfaceTypeNode.java com/sun/tools/jdwpgen/SCCS/s.LocationTypeNode.java com/sun/tools/jdwpgen/SCCS/s.LongTypeNode.java com/sun/tools/jdwpgen/SCCS/s.MethodTypeNode.java com/sun/tools/jdwpgen/SCCS/s.NameNode.java com/sun/tools/jdwpgen/SCCS/s.NameValueNode.java com/sun/tools/jdwpgen/SCCS/s.Node.java com/sun/tools/jdwpgen/SCCS/s.ObjectTypeNode.java com/sun/tools/jdwpgen/SCCS/s.OutNode.java com/sun/tools/jdwpgen/SCCS/s.Parse.java com/sun/tools/jdwpgen/SCCS/s.ReferenceIDTypeNode.java com/sun/tools/jdwpgen/SCCS/s.ReferenceTypeNode.java com/sun/tools/jdwpgen/SCCS/s.RepeatNode.java com/sun/tools/jdwpgen/SCCS/s.ReplyNode.java com/sun/tools/jdwpgen/SCCS/s.RootNode.java com/sun/tools/jdwpgen/SCCS/s.jdwp.spec com/sun/tools/jdwpgen/SCCS/s.SelectNode.java com/sun/tools/jdwpgen/SCCS/s.TypeNode.java com/sun/tools/jdwpgen/SCCS/s.StringObjectTypeNode.java com/sun/tools/jdwpgen/SCCS/s.StringTypeNode.java com/sun/tools/jdwpgen/SCCS/s.TaggedObjectTypeNode.java com/sun/tools/jdwpgen/SCCS/s.UntaggedValueTypeNode.java com/sun/tools/jdwpgen/SCCS/s.ThreadObjectTypeNode.java com/sun/tools/jdwpgen/SCCS/s.ValueTypeNode.java com/sun/tools/jdwpgen/AbstractCommandNode.java com/sun/tools/jdwpgen/AbstractGroupNode.java com/sun/tools/jdwpgen/AbstractNamedNode.java com/sun/tools/jdwpgen/AbstractSimpleNode.java com/sun/tools/jdwpgen/AbstractSimpleTypeNode.java com/sun/tools/jdwpgen/AbstractTypeListNode.java com/sun/tools/jdwpgen/AbstractTypeNode.java com/sun/tools/jdwpgen/AltNode.java com/sun/tools/jdwpgen/ArrayObjectTypeNode.java com/sun/tools/jdwpgen/ArrayRegionTypeNode.java com/sun/tools/jdwpgen/ArrayTypeNode.java com/sun/tools/jdwpgen/BooleanTypeNode.java com/sun/tools/jdwpgen/ByteTypeNode.java com/sun/tools/jdwpgen/MethodTypeNode.java com/sun/tools/jdwpgen/Main.java com/sun/tools/jdwpgen/ClassLoaderObjectTypeNode.java com/sun/tools/jdwpgen/ClassObjectTypeNode.java com/sun/tools/jdwpgen/ClassTypeNode.java com/sun/tools/jdwpgen/CommandNode.java com/sun/tools/jdwpgen/CommandSetNode.java com/sun/tools/jdwpgen/CommentNode.java com/sun/tools/jdwpgen/ConstantNode.java com/sun/tools/jdwpgen/ConstantSetNode.java com/sun/tools/jdwpgen/Context.java com/sun/tools/jdwpgen/ErrorNode.java com/sun/tools/jdwpgen/ErrorSetNode.java com/sun/tools/jdwpgen/EventNode.java com/sun/tools/jdwpgen/FieldTypeNode.java com/sun/tools/jdwpgen/FrameTypeNode.java com/sun/tools/jdwpgen/GroupNode.java com/sun/tools/jdwpgen/IntTypeNode.java com/sun/tools/jdwpgen/InterfaceTypeNode.java com/sun/tools/jdwpgen/NameNode.java com/sun/tools/jdwpgen/LocationTypeNode.java com/sun/tools/jdwpgen/LongTypeNode.java com/sun/tools/jdwpgen/NameValueNode.java com/sun/tools/jdwpgen/ObjectTypeNode.java com/sun/tools/jdwpgen/Node.java com/sun/tools/jdwpgen/ReferenceTypeNode.java com/sun/tools/jdwpgen/OutNode.java com/sun/tools/jdwpgen/Parse.java com/sun/tools/jdwpgen/jdwp.spec com/sun/tools/jdwpgen/ReferenceIDTypeNode.java com/sun/tools/jdwpgen/RepeatNode.java com/sun/tools/jdwpgen/ReplyNode.java com/sun/tools/jdwpgen/RootNode.java com/sun/tools/jdwpgen/SelectNode.java com/sun/tools/jdwpgen/StringObjectTypeNode.java com/sun/tools/jdwpgen/StringTypeNode.java com/sun/tools/jdwpgen/TaggedObjectTypeNode.java com/sun/tools/jdwpgen/ThreadGroupObjectTypeNode.java com/sun/tools/jdwpgen/ThreadObjectTypeNode.java com/sun/tools/jdwpgen/TypeNode.java com/sun/tools/jdwpgen/UntaggedValueTypeNode.java com/sun/tools/jdwpgen/ValueTypeNode.java com/sun/tools/extractor com/sun/tools/extractor/SCCS com/sun/tools/extractor/SCCS/s.KeyedInputStream.java com/sun/tools/extractor/SCCS/s.Extractor.java com/sun/tools/extractor/SCCS/s.Installer.java com/sun/tools/extractor/SCCS/s.Maker.java com/sun/tools/extractor/SCCS/s.manifest com/sun/tools/extractor/KeyedInputStream.java com/sun/tools/extractor/Extractor.java com/sun/tools/extractor/Installer.java com/sun/tools/extractor/Maker.java com/sun/tools/extractor/manifest com/sun/demo com/sun/demo/jvmti com/sun/demo/jvmti/hprof com/sun/demo/jvmti/hprof/SCCS com/sun/demo/jvmti/hprof/SCCS/s.Tracker.java com/sun/demo/jvmti/hprof/Tracker.java java java/applet java/applet/SCCS java/applet/SCCS/s.AppletContext.java java/applet/SCCS/s.Applet.java java/applet/SCCS/s.AppletStub.java java/applet/SCCS/s.AudioClip.java java/applet/SCCS/s.package.html java/applet/AppletContext.java java/applet/Applet.java java/applet/AppletStub.java java/applet/AudioClip.java java/applet/package.html java/awt java/awt/SCCS java/awt/SCCS/s.AWTException.java java/awt/SCCS/s.AWTError.java java/awt/SCCS/s.AWTEvent.java java/awt/SCCS/s.AWTEventMulticaster.java java/awt/SCCS/s.AWTKeyStroke.java java/awt/SCCS/s.AWTPermission.java java/awt/SCCS/s.ActiveEvent.java java/awt/SCCS/s.Adjustable.java java/awt/SCCS/s.AlphaComposite.java java/awt/SCCS/s.AttributeValue.java java/awt/SCCS/s.BasicStroke.java java/awt/SCCS/s.BorderLayout.java java/awt/SCCS/s.BufferCapabilities.java java/awt/SCCS/s.Button.java java/awt/SCCS/s.Canvas.java java/awt/SCCS/s.Dimension.java java/awt/SCCS/s.Dialog.java java/awt/SCCS/s.CardLayout.java java/awt/SCCS/s.Checkbox.java java/awt/SCCS/s.CheckboxGroup.java java/awt/SCCS/s.CheckboxMenuItem.java java/awt/SCCS/s.Choice.java java/awt/SCCS/s.Color.java java/awt/SCCS/s.ColorPaintContext.java java/awt/SCCS/s.Component.java java/awt/SCCS/s.ComponentOrientation.java java/awt/SCCS/s.Composite.java java/awt/SCCS/s.CompositeContext.java java/awt/SCCS/s.Conditional.java java/awt/SCCS/s.Container.java java/awt/SCCS/s.Cursor.java java/awt/SCCS/s.ContainerOrderFocusTraversalPolicy.java java/awt/SCCS/s.DefaultFocusTraversalPolicy.java java/awt/SCCS/s.DefaultKeyboardFocusManager.java java/awt/SCCS/s.EventDispatchThread.java java/awt/SCCS/s.DisplayMode.java java/awt/SCCS/s.Event.java java/awt/SCCS/s.FocusTraversalPolicy.java java/awt/SCCS/s.EventQueue.java java/awt/SCCS/s.FileDialog.java java/awt/SCCS/s.FlowLayout.java java/awt/SCCS/s.FontMetrics.java java/awt/SCCS/s.Font.java java/awt/SCCS/s.FontFormatException.java java/awt/SCCS/s.Frame.java java/awt/SCCS/s.GradientPaint.java java/awt/SCCS/s.GradientPaintContext.java java/awt/SCCS/s.Graphics.java java/awt/SCCS/s.ItemSelectable.java java/awt/SCCS/s.Image.java java/awt/SCCS/s.Graphics2D.java java/awt/SCCS/s.GraphicsCallback.java java/awt/SCCS/s.GraphicsConfigTemplate.java java/awt/SCCS/s.GraphicsConfiguration.java java/awt/SCCS/s.GraphicsDevice.java java/awt/SCCS/s.GraphicsEnvironment.java java/awt/SCCS/s.GridBagConstraints.java java/awt/SCCS/s.GridBagLayout.java java/awt/SCCS/s.GridLayout.java java/awt/SCCS/s.HeadlessException.java java/awt/SCCS/s.IllegalComponentStateException.java java/awt/SCCS/s.Insets.java java/awt/SCCS/s.ImageCapabilities.java java/awt/SCCS/s.Label.java java/awt/SCCS/s.ScrollPaneAdjustable.java java/awt/SCCS/s.JobAttributes.java java/awt/SCCS/s.KeyEventDispatcher.java java/awt/SCCS/s.KeyEventPostProcessor.java java/awt/SCCS/s.KeyboardFocusManager.java java/awt/SCCS/s.LayoutManager.java java/awt/SCCS/s.LayoutManager2.java java/awt/SCCS/s.List.java java/awt/SCCS/s.MediaTracker.java java/awt/SCCS/s.Menu.java java/awt/SCCS/s.MenuBar.java java/awt/SCCS/s.MenuComponent.java java/awt/SCCS/s.MenuContainer.java java/awt/SCCS/s.MenuItem.java java/awt/SCCS/s.MenuShortcut.java java/awt/SCCS/s.MouseInfo.java java/awt/SCCS/s.PageAttributes.java java/awt/SCCS/s.Paint.java java/awt/SCCS/s.PaintContext.java java/awt/SCCS/s.Panel.java java/awt/SCCS/s.Point.java java/awt/SCCS/s.PointerInfo.java java/awt/SCCS/s.Polygon.java java/awt/SCCS/s.PopupMenu.java java/awt/SCCS/s.PrintGraphics.java java/awt/SCCS/s.PrintJob.java java/awt/SCCS/s.Rectangle.java java/awt/SCCS/s.RenderingHints.java java/awt/SCCS/s.Robot.java java/awt/SCCS/s.ScrollPane.java java/awt/SCCS/s.SequencedEvent.java java/awt/SCCS/s.Scrollbar.java java/awt/SCCS/s.SentEvent.java java/awt/SCCS/s.Shape.java java/awt/SCCS/s.Stroke.java java/awt/SCCS/s.SystemColor.java java/awt/SCCS/s.TextArea.java java/awt/SCCS/s.TextComponent.java java/awt/SCCS/s.TextField.java java/awt/SCCS/s.TexturePaint.java java/awt/SCCS/s.TexturePaintContext.java java/awt/SCCS/s.Toolkit.java java/awt/SCCS/s.Transparency.java java/awt/SCCS/s.Window.java java/awt/SCCS/s.package.html java/awt/color java/awt/color/SCCS java/awt/color/SCCS/s.ICC_ColorSpace.java java/awt/color/SCCS/s.CMMException.java java/awt/color/SCCS/s.ColorSpace.java java/awt/color/SCCS/s.ProfileDataException.java java/awt/color/SCCS/s.ICC_Profile.java java/awt/color/SCCS/s.ICC_ProfileGray.java java/awt/color/SCCS/s.ICC_ProfileRGB.java java/awt/color/SCCS/s.package.html java/awt/color/ICC_ProfileGray.java java/awt/color/CMMException.java java/awt/color/ColorSpace.java java/awt/color/ICC_ColorSpace.java java/awt/color/ICC_Profile.java java/awt/color/ProfileDataException.java java/awt/color/ICC_ProfileRGB.java java/awt/color/package.html java/awt/datatransfer java/awt/datatransfer/SCCS java/awt/datatransfer/SCCS/s.ClipboardOwner.java java/awt/datatransfer/SCCS/s.Clipboard.java java/awt/datatransfer/SCCS/s.MimeTypeParameterList.java java/awt/datatransfer/SCCS/s.DataFlavor.java java/awt/datatransfer/SCCS/s.FlavorEvent.java java/awt/datatransfer/SCCS/s.FlavorListener.java java/awt/datatransfer/SCCS/s.FlavorMap.java java/awt/datatransfer/SCCS/s.FlavorTable.java java/awt/datatransfer/SCCS/s.MimeType.java java/awt/datatransfer/SCCS/s.MimeTypeParseException.java java/awt/datatransfer/SCCS/s.StringSelection.java java/awt/datatransfer/SCCS/s.SystemFlavorMap.java java/awt/datatransfer/SCCS/s.Transferable.java java/awt/datatransfer/SCCS/s.package.html java/awt/datatransfer/SCCS/s.UnsupportedFlavorException.java java/awt/datatransfer/ClipboardOwner.java java/awt/datatransfer/Clipboard.java java/awt/datatransfer/MimeTypeParameterList.java java/awt/datatransfer/DataFlavor.java java/awt/datatransfer/FlavorEvent.java java/awt/datatransfer/FlavorListener.java java/awt/datatransfer/FlavorMap.java java/awt/datatransfer/FlavorTable.java java/awt/datatransfer/MimeType.java java/awt/datatransfer/UnsupportedFlavorException.java java/awt/datatransfer/MimeTypeParseException.java java/awt/datatransfer/StringSelection.java java/awt/datatransfer/SystemFlavorMap.java java/awt/datatransfer/Transferable.java java/awt/datatransfer/package.html java/awt/dnd java/awt/dnd/SCCS java/awt/dnd/SCCS/s.DnDEventMulticaster.java java/awt/dnd/SCCS/s.Autoscroll.java java/awt/dnd/SCCS/s.DnDConstants.java java/awt/dnd/SCCS/s.DragGestureListener.java java/awt/dnd/SCCS/s.DragGestureEvent.java java/awt/dnd/SCCS/s.DragGestureRecognizer.java java/awt/dnd/SCCS/s.DragSource.java java/awt/dnd/SCCS/s.DragSourceAdapter.java java/awt/dnd/SCCS/s.DragSourceContext.java java/awt/dnd/SCCS/s.DragSourceDragEvent.java java/awt/dnd/SCCS/s.DragSourceDropEvent.java java/awt/dnd/SCCS/s.DragSourceEvent.java java/awt/dnd/SCCS/s.DragSourceListener.java java/awt/dnd/SCCS/s.InvalidDnDOperationException.java java/awt/dnd/SCCS/s.DragSourceMotionListener.java java/awt/dnd/SCCS/s.DropTarget.java java/awt/dnd/SCCS/s.DropTargetAdapter.java java/awt/dnd/SCCS/s.DropTargetContext.java java/awt/dnd/SCCS/s.DropTargetDragEvent.java java/awt/dnd/SCCS/s.DropTargetDropEvent.java java/awt/dnd/SCCS/s.DropTargetEvent.java java/awt/dnd/SCCS/s.DropTargetListener.java java/awt/dnd/SCCS/s.MouseDragGestureRecognizer.java java/awt/dnd/SCCS/s.SerializationTester.java java/awt/dnd/SCCS/s.package.html java/awt/dnd/peer java/awt/dnd/peer/SCCS java/awt/dnd/peer/SCCS/s.DragSourceContextPeer.java java/awt/dnd/peer/SCCS/s.DropTargetContextPeer.java java/awt/dnd/peer/SCCS/s.DropTargetPeer.java java/awt/dnd/peer/SCCS/s.package.html java/awt/dnd/peer/DragSourceContextPeer.java java/awt/dnd/peer/DropTargetContextPeer.java java/awt/dnd/peer/DropTargetPeer.java java/awt/dnd/peer/package.html java/awt/dnd/DnDConstants.java java/awt/dnd/Autoscroll.java java/awt/dnd/DragSourceMotionListener.java java/awt/dnd/DnDEventMulticaster.java java/awt/dnd/DragGestureEvent.java java/awt/dnd/DragGestureListener.java java/awt/dnd/DragGestureRecognizer.java java/awt/dnd/DragSource.java java/awt/dnd/DragSourceAdapter.java java/awt/dnd/DragSourceContext.java java/awt/dnd/DragSourceDragEvent.java java/awt/dnd/DragSourceDropEvent.java java/awt/dnd/DragSourceEvent.java java/awt/dnd/DragSourceListener.java java/awt/dnd/DropTargetAdapter.java java/awt/dnd/DropTarget.java java/awt/dnd/DropTargetDragEvent.java java/awt/dnd/DropTargetContext.java java/awt/dnd/InvalidDnDOperationException.java java/awt/dnd/DropTargetDropEvent.java java/awt/dnd/DropTargetEvent.java java/awt/dnd/DropTargetListener.java java/awt/dnd/MouseDragGestureRecognizer.java java/awt/dnd/SerializationTester.java java/awt/dnd/package.html java/awt/doc-files java/awt/doc-files/SCCS java/awt/doc-files/SCCS/s.AWTThreadIssues.html java/awt/doc-files/SCCS/s.BorderLayout-1.gif java/awt/doc-files/SCCS/s.Button-1.gif java/awt/doc-files/SCCS/s.Checkbox-1.gif java/awt/doc-files/SCCS/s.CheckboxGroup-1.gif java/awt/doc-files/SCCS/s.Choice-1.gif java/awt/doc-files/SCCS/s.FlowLayout-1.gif java/awt/doc-files/SCCS/s.FocusCycle.gif java/awt/doc-files/SCCS/s.FocusSpec.html java/awt/doc-files/SCCS/s.FontMetrics-1.gif java/awt/doc-files/SCCS/s.GridBagLayout-1.gif java/awt/doc-files/SCCS/s.GridBagLayout-2.gif java/awt/doc-files/SCCS/s.GridLayout-1.gif java/awt/doc-files/SCCS/s.GridLayout-2.gif java/awt/doc-files/SCCS/s.Label-1.gif java/awt/doc-files/SCCS/s.List-1.gif java/awt/doc-files/SCCS/s.MenuBar-1.gif java/awt/doc-files/SCCS/s.MultiScreen.gif java/awt/doc-files/SCCS/s.Scrollbar-1.gif java/awt/doc-files/SCCS/s.Scrollbar-2.gif java/awt/doc-files/SCCS/s.TextArea-1.gif java/awt/doc-files/SCCS/s.TextField-1.gif java/awt/doc-files/AWTThreadIssues.html java/awt/doc-files/BorderLayout-1.gif java/awt/doc-files/Button-1.gif java/awt/doc-files/Checkbox-1.gif java/awt/doc-files/CheckboxGroup-1.gif java/awt/doc-files/Choice-1.gif java/awt/doc-files/FlowLayout-1.gif java/awt/doc-files/FocusCycle.gif java/awt/doc-files/FocusSpec.html java/awt/doc-files/FontMetrics-1.gif java/awt/doc-files/GridBagLayout-1.gif java/awt/doc-files/GridBagLayout-2.gif java/awt/doc-files/GridLayout-1.gif java/awt/doc-files/GridLayout-2.gif java/awt/doc-files/Label-1.gif java/awt/doc-files/List-1.gif java/awt/doc-files/MenuBar-1.gif java/awt/doc-files/MultiScreen.gif java/awt/doc-files/Scrollbar-1.gif java/awt/doc-files/Scrollbar-2.gif java/awt/doc-files/TextArea-1.gif java/awt/doc-files/TextField-1.gif java/awt/event java/awt/event/SCCS java/awt/event/SCCS/s.AWTEventListenerProxy.java java/awt/event/SCCS/s.AWTEventListener.java java/awt/event/SCCS/s.ActionListener.java java/awt/event/SCCS/s.ActionEvent.java java/awt/event/SCCS/s.AdjustmentEvent.java java/awt/event/SCCS/s.AdjustmentListener.java java/awt/event/SCCS/s.ComponentAdapter.java java/awt/event/SCCS/s.ComponentEvent.java java/awt/event/SCCS/s.ComponentListener.java java/awt/event/SCCS/s.ContainerAdapter.java java/awt/event/SCCS/s.ContainerEvent.java java/awt/event/SCCS/s.ContainerListener.java java/awt/event/SCCS/s.FocusAdapter.java java/awt/event/SCCS/s.KeyEvent.java java/awt/event/SCCS/s.MouseListener.java java/awt/event/SCCS/s.FocusEvent.java java/awt/event/SCCS/s.FocusListener.java java/awt/event/SCCS/s.HierarchyBoundsAdapter.java java/awt/event/SCCS/s.HierarchyBoundsListener.java java/awt/event/SCCS/s.HierarchyEvent.java java/awt/event/SCCS/s.HierarchyListener.java java/awt/event/SCCS/s.InputEvent.java java/awt/event/SCCS/s.InputMethodEvent.java java/awt/event/SCCS/s.InputMethodListener.java java/awt/event/SCCS/s.InvocationEvent.java java/awt/event/SCCS/s.ItemEvent.java java/awt/event/SCCS/s.ItemListener.java java/awt/event/SCCS/s.KeyAdapter.java java/awt/event/SCCS/s.KeyListener.java java/awt/event/SCCS/s.MouseAdapter.java java/awt/event/SCCS/s.MouseEvent.java java/awt/event/SCCS/s.MouseMotionAdapter.java java/awt/event/SCCS/s.MouseMotionListener.java java/awt/event/SCCS/s.MouseWheelEvent.java java/awt/event/SCCS/s.MouseWheelListener.java java/awt/event/SCCS/s.NativeLibLoader.java java/awt/event/SCCS/s.PaintEvent.java java/awt/event/SCCS/s.TextEvent.java java/awt/event/SCCS/s.TextListener.java java/awt/event/SCCS/s.WindowAdapter.java java/awt/event/SCCS/s.WindowEvent.java java/awt/event/SCCS/s.WindowFocusListener.java java/awt/event/SCCS/s.WindowListener.java java/awt/event/SCCS/s.WindowStateListener.java java/awt/event/SCCS/s.package.html java/awt/event/AWTEventListenerProxy.java java/awt/event/AWTEventListener.java java/awt/event/ActionEvent.java java/awt/event/ActionListener.java java/awt/event/AdjustmentEvent.java java/awt/event/AdjustmentListener.java java/awt/event/ComponentAdapter.java java/awt/event/ComponentEvent.java java/awt/event/ComponentListener.java java/awt/event/ContainerAdapter.java java/awt/event/ContainerEvent.java java/awt/event/ContainerListener.java java/awt/event/FocusAdapter.java java/awt/event/FocusEvent.java java/awt/event/FocusListener.java java/awt/event/HierarchyBoundsAdapter.java java/awt/event/HierarchyBoundsListener.java java/awt/event/HierarchyEvent.java java/awt/event/HierarchyListener.java java/awt/event/InputEvent.java java/awt/event/InputMethodEvent.java java/awt/event/InputMethodListener.java java/awt/event/InvocationEvent.java java/awt/event/ItemEvent.java java/awt/event/ItemListener.java java/awt/event/KeyAdapter.java java/awt/event/KeyEvent.java java/awt/event/KeyListener.java java/awt/event/MouseAdapter.java java/awt/event/MouseEvent.java java/awt/event/MouseListener.java java/awt/event/MouseMotionAdapter.java java/awt/event/MouseMotionListener.java java/awt/event/MouseWheelEvent.java java/awt/event/MouseWheelListener.java java/awt/event/NativeLibLoader.java java/awt/event/PaintEvent.java java/awt/event/TextEvent.java java/awt/event/TextListener.java java/awt/event/WindowAdapter.java java/awt/event/WindowEvent.java java/awt/event/WindowFocusListener.java java/awt/event/WindowListener.java java/awt/event/WindowStateListener.java java/awt/event/package.html java/awt/font java/awt/font/SCCS java/awt/font/SCCS/s.GlyphJustificationInfo.java java/awt/font/SCCS/s.CharArrayIterator.java java/awt/font/SCCS/s.FontRenderContext.java java/awt/font/SCCS/s.ImageGraphicAttribute.java java/awt/font/SCCS/s.GlyphMetrics.java java/awt/font/SCCS/s.GlyphVector.java java/awt/font/SCCS/s.GraphicAttribute.java java/awt/font/SCCS/s.ShapeGraphicAttribute.java java/awt/font/SCCS/s.LineBreakMeasurer.java java/awt/font/SCCS/s.LineMetrics.java java/awt/font/SCCS/s.MultipleMaster.java java/awt/font/SCCS/s.NumericShaper.java java/awt/font/SCCS/s.OpenType.java java/awt/font/SCCS/s.StyledParagraph.java java/awt/font/SCCS/s.TextLine.java java/awt/font/SCCS/s.TextAttribute.java java/awt/font/SCCS/s.TextHitInfo.java java/awt/font/SCCS/s.TextJustifier.java java/awt/font/SCCS/s.TextLayout.java java/awt/font/SCCS/s.TextMeasurer.java java/awt/font/SCCS/s.TransformAttribute.java java/awt/font/SCCS/s.package.html java/awt/font/GlyphJustificationInfo.java java/awt/font/CharArrayIterator.java java/awt/font/FontRenderContext.java java/awt/font/ImageGraphicAttribute.java java/awt/font/GlyphMetrics.java java/awt/font/GlyphVector.java java/awt/font/GraphicAttribute.java java/awt/font/LineBreakMeasurer.java java/awt/font/LineMetrics.java java/awt/font/MultipleMaster.java java/awt/font/NumericShaper.java java/awt/font/OpenType.java java/awt/font/ShapeGraphicAttribute.java java/awt/font/StyledParagraph.java java/awt/font/TextAttribute.java java/awt/font/TextHitInfo.java java/awt/font/TextJustifier.java java/awt/font/TextLayout.java java/awt/font/TextLine.java java/awt/font/TextMeasurer.java java/awt/font/TransformAttribute.java java/awt/font/package.html java/awt/geom java/awt/geom/SCCS java/awt/geom/SCCS/s.FlatteningPathIterator.java java/awt/geom/SCCS/s.AffineTransform.java java/awt/geom/SCCS/s.Arc2D.java java/awt/geom/SCCS/s.ArcIterator.java java/awt/geom/SCCS/s.Area.java java/awt/geom/SCCS/s.CubicCurve2D.java java/awt/geom/SCCS/s.CubicIterator.java java/awt/geom/SCCS/s.Dimension2D.java java/awt/geom/SCCS/s.Ellipse2D.java java/awt/geom/SCCS/s.EllipseIterator.java java/awt/geom/SCCS/s.GeneralPathIterator.java java/awt/geom/SCCS/s.GeneralPath.java java/awt/geom/SCCS/s.RectangularShape.java java/awt/geom/SCCS/s.IllegalPathStateException.java java/awt/geom/SCCS/s.Line2D.java java/awt/geom/SCCS/s.LineIterator.java java/awt/geom/SCCS/s.PathIterator.java java/awt/geom/SCCS/s.Point2D.java java/awt/geom/SCCS/s.NoninvertibleTransformException.java java/awt/geom/SCCS/s.QuadCurve2D.java java/awt/geom/SCCS/s.QuadIterator.java java/awt/geom/SCCS/s.RectIterator.java java/awt/geom/SCCS/s.Rectangle2D.java java/awt/geom/SCCS/s.RoundRectIterator.java java/awt/geom/SCCS/s.RoundRectangle2D.java java/awt/geom/SCCS/s.package.html java/awt/geom/FlatteningPathIterator.java java/awt/geom/AffineTransform.java java/awt/geom/Arc2D.java java/awt/geom/ArcIterator.java java/awt/geom/Area.java java/awt/geom/CubicCurve2D.java java/awt/geom/CubicIterator.java java/awt/geom/Dimension2D.java java/awt/geom/Ellipse2D.java java/awt/geom/EllipseIterator.java java/awt/geom/GeneralPathIterator.java java/awt/geom/GeneralPath.java java/awt/geom/LineIterator.java java/awt/geom/Line2D.java java/awt/geom/IllegalPathStateException.java java/awt/geom/PathIterator.java java/awt/geom/Point2D.java java/awt/geom/NoninvertibleTransformException.java java/awt/geom/QuadCurve2D.java java/awt/geom/QuadIterator.java java/awt/geom/RectIterator.java java/awt/geom/Rectangle2D.java java/awt/geom/RectangularShape.java java/awt/geom/RoundRectIterator.java java/awt/geom/RoundRectangle2D.java java/awt/geom/package.html java/awt/im java/awt/im/SCCS java/awt/im/SCCS/s.InputMethodHighlight.java java/awt/im/SCCS/s.InputContext.java java/awt/im/SCCS/s.InputMethodRequests.java java/awt/im/SCCS/s.InputSubset.java java/awt/im/SCCS/s.package.html java/awt/im/spi java/awt/im/spi/SCCS java/awt/im/spi/SCCS/s.InputMethodContext.java java/awt/im/spi/SCCS/s.InputMethod.java java/awt/im/spi/SCCS/s.InputMethodDescriptor.java java/awt/im/spi/SCCS/s.package.html java/awt/im/spi/InputMethodContext.java java/awt/im/spi/InputMethod.java java/awt/im/spi/InputMethodDescriptor.java java/awt/im/spi/package.html java/awt/im/InputMethodHighlight.java java/awt/im/InputContext.java java/awt/im/InputMethodRequests.java java/awt/im/InputSubset.java java/awt/im/package.html java/awt/image java/awt/image/SCCS java/awt/image/SCCS/s.AreaAveragingScaleFilter.java java/awt/image/SCCS/s.AffineTransformOp.java java/awt/image/SCCS/s.MultiPixelPackedSampleModel.java java/awt/image/SCCS/s.BandCombineOp.java java/awt/image/SCCS/s.BandedSampleModel.java java/awt/image/SCCS/s.BufferStrategy.java java/awt/image/SCCS/s.BufferedImage.java java/awt/image/SCCS/s.BufferedImageFilter.java java/awt/image/SCCS/s.BufferedImageOp.java java/awt/image/SCCS/s.ByteLookupTable.java java/awt/image/SCCS/s.ColorConvertOp.java java/awt/image/SCCS/s.ColorModel.java java/awt/image/SCCS/s.ComponentColorModel.java java/awt/image/SCCS/s.ComponentSampleModel.java java/awt/image/SCCS/s.ConvolveOp.java java/awt/image/SCCS/s.CropImageFilter.java java/awt/image/SCCS/s.DataBuffer.java java/awt/image/SCCS/s.DataBufferByte.java java/awt/image/SCCS/s.DataBufferDouble.java java/awt/image/SCCS/s.DataBufferFloat.java java/awt/image/SCCS/s.DataBufferInt.java java/awt/image/SCCS/s.DataBufferShort.java java/awt/image/SCCS/s.DataBufferUShort.java java/awt/image/SCCS/s.DirectColorModel.java java/awt/image/SCCS/s.FilteredImageSource.java java/awt/image/SCCS/s.ImageConsumer.java java/awt/image/SCCS/s.ImageFilter.java java/awt/image/SCCS/s.ImageObserver.java java/awt/image/SCCS/s.ImageProducer.java java/awt/image/SCCS/s.ImagingOpException.java java/awt/image/SCCS/s.IndexColorModel.java java/awt/image/SCCS/s.Kernel.java java/awt/image/SCCS/s.LookupOp.java java/awt/image/SCCS/s.LookupTable.java java/awt/image/SCCS/s.MemoryImageSource.java java/awt/image/SCCS/s.PackedColorModel.java java/awt/image/SCCS/s.PixelGrabber.java java/awt/image/SCCS/s.RGBImageFilter.java java/awt/image/SCCS/s.RenderedImage.java java/awt/image/SCCS/s.RasterOp.java java/awt/image/SCCS/s.PixelInterleavedSampleModel.java java/awt/image/SCCS/s.Raster.java java/awt/image/SCCS/s.RasterFormatException.java java/awt/image/SCCS/s.SinglePixelPackedSampleModel.java java/awt/image/SCCS/s.ReplicateScaleFilter.java java/awt/image/SCCS/s.RescaleOp.java java/awt/image/SCCS/s.SampleModel.java java/awt/image/SCCS/s.ShortLookupTable.java java/awt/image/SCCS/s.VolatileImage.java java/awt/image/SCCS/s.TileObserver.java java/awt/image/SCCS/s.WritableRenderedImage.java java/awt/image/SCCS/s.WritableRaster.java java/awt/image/SCCS/s.package.html java/awt/image/renderable java/awt/image/renderable/SCCS java/awt/image/renderable/SCCS/s.package.html java/awt/image/renderable/SCCS/s.ContextualRenderedImageFactory.java java/awt/image/renderable/SCCS/s.ParameterBlock.java java/awt/image/renderable/SCCS/s.RenderContext.java java/awt/image/renderable/SCCS/s.RenderableImage.java java/awt/image/renderable/SCCS/s.RenderableImageOp.java java/awt/image/renderable/SCCS/s.RenderableImageProducer.java java/awt/image/renderable/SCCS/s.RenderedImageFactory.java java/awt/image/renderable/ContextualRenderedImageFactory.java java/awt/image/renderable/ParameterBlock.java java/awt/image/renderable/RenderContext.java java/awt/image/renderable/RenderableImage.java java/awt/image/renderable/RenderableImageOp.java java/awt/image/renderable/RenderableImageProducer.java java/awt/image/renderable/RenderedImageFactory.java java/awt/image/renderable/package.html java/awt/image/AreaAveragingScaleFilter.java java/awt/image/AffineTransformOp.java java/awt/image/BandedSampleModel.java java/awt/image/BandCombineOp.java java/awt/image/BufferedImageFilter.java java/awt/image/BufferStrategy.java java/awt/image/BufferedImage.java java/awt/image/BufferedImageOp.java java/awt/image/ByteLookupTable.java java/awt/image/ColorConvertOp.java java/awt/image/ColorModel.java java/awt/image/ComponentColorModel.java java/awt/image/ConvolveOp.java java/awt/image/Raster.java java/awt/image/RenderedImage.java java/awt/image/ComponentSampleModel.java java/awt/image/CropImageFilter.java java/awt/image/DataBuffer.java java/awt/image/DataBufferByte.java java/awt/image/DataBufferDouble.java java/awt/image/DataBufferFloat.java java/awt/image/DataBufferInt.java java/awt/image/DataBufferShort.java java/awt/image/DataBufferUShort.java java/awt/image/DirectColorModel.java java/awt/image/FilteredImageSource.java java/awt/image/ImageConsumer.java java/awt/image/ImageFilter.java java/awt/image/ImageObserver.java java/awt/image/ImageProducer.java java/awt/image/ImagingOpException.java java/awt/image/Kernel.java java/awt/image/IndexColorModel.java java/awt/image/LookupOp.java java/awt/image/LookupTable.java java/awt/image/MemoryImageSource.java java/awt/image/MultiPixelPackedSampleModel.java java/awt/image/PackedColorModel.java java/awt/image/PixelGrabber.java java/awt/image/PixelInterleavedSampleModel.java java/awt/image/RGBImageFilter.java java/awt/image/RasterOp.java java/awt/image/RasterFormatException.java java/awt/image/WritableRenderedImage.java java/awt/image/ReplicateScaleFilter.java java/awt/image/RescaleOp.java java/awt/image/SampleModel.java java/awt/image/ShortLookupTable.java java/awt/image/TileObserver.java java/awt/image/package.html java/awt/image/SinglePixelPackedSampleModel.java java/awt/image/VolatileImage.java java/awt/image/WritableRaster.java java/awt/peer java/awt/peer/SCCS java/awt/peer/SCCS/s.CheckboxMenuItemPeer.java java/awt/peer/SCCS/s.ButtonPeer.java java/awt/peer/SCCS/s.CanvasPeer.java java/awt/peer/SCCS/s.ComponentPeer.java java/awt/peer/SCCS/s.CheckboxPeer.java java/awt/peer/SCCS/s.ChoicePeer.java java/awt/peer/SCCS/s.KeyboardFocusManagerPeer.java java/awt/peer/SCCS/s.ContainerPeer.java java/awt/peer/SCCS/s.DialogPeer.java java/awt/peer/SCCS/s.FileDialogPeer.java java/awt/peer/SCCS/s.FontPeer.java java/awt/peer/SCCS/s.FramePeer.java java/awt/peer/SCCS/s.MenuComponentPeer.java java/awt/peer/SCCS/s.LabelPeer.java java/awt/peer/SCCS/s.LightweightPeer.java java/awt/peer/SCCS/s.ListPeer.java java/awt/peer/SCCS/s.MenuBarPeer.java java/awt/peer/SCCS/s.MouseInfoPeer.java java/awt/peer/SCCS/s.MenuItemPeer.java java/awt/peer/SCCS/s.MenuPeer.java java/awt/peer/SCCS/s.TextComponentPeer.java java/awt/peer/SCCS/s.PanelPeer.java java/awt/peer/SCCS/s.PopupMenuPeer.java java/awt/peer/SCCS/s.RobotPeer.java java/awt/peer/SCCS/s.ScrollPanePeer.java java/awt/peer/SCCS/s.ScrollbarPeer.java java/awt/peer/SCCS/s.TextAreaPeer.java java/awt/peer/SCCS/s.TextFieldPeer.java java/awt/peer/SCCS/s.WindowPeer.java java/awt/peer/SCCS/s.package.html java/awt/peer/CheckboxPeer.java java/awt/peer/ButtonPeer.java java/awt/peer/CanvasPeer.java java/awt/peer/CheckboxMenuItemPeer.java java/awt/peer/ChoicePeer.java java/awt/peer/ComponentPeer.java java/awt/peer/ContainerPeer.java java/awt/peer/DialogPeer.java java/awt/peer/FileDialogPeer.java java/awt/peer/FontPeer.java java/awt/peer/FramePeer.java java/awt/peer/KeyboardFocusManagerPeer.java java/awt/peer/LabelPeer.java java/awt/peer/LightweightPeer.java java/awt/peer/ListPeer.java java/awt/peer/MenuBarPeer.java java/awt/peer/MenuComponentPeer.java java/awt/peer/MenuItemPeer.java java/awt/peer/MenuPeer.java java/awt/peer/MouseInfoPeer.java java/awt/peer/PanelPeer.java java/awt/peer/PopupMenuPeer.java java/awt/peer/RobotPeer.java java/awt/peer/ScrollPanePeer.java java/awt/peer/ScrollbarPeer.java java/awt/peer/TextAreaPeer.java java/awt/peer/TextComponentPeer.java java/awt/peer/TextFieldPeer.java java/awt/peer/WindowPeer.java java/awt/peer/package.html java/awt/print java/awt/print/SCCS java/awt/print/SCCS/s.PageFormat.java java/awt/print/SCCS/s.Book.java java/awt/print/SCCS/s.Printable.java java/awt/print/SCCS/s.Pageable.java java/awt/print/SCCS/s.Paper.java java/awt/print/SCCS/s.PrinterAbortException.java java/awt/print/SCCS/s.PrinterException.java java/awt/print/SCCS/s.PrinterGraphics.java java/awt/print/SCCS/s.PrinterIOException.java java/awt/print/SCCS/s.PrinterJob.java java/awt/print/SCCS/s.package.html java/awt/print/PageFormat.java java/awt/print/Book.java java/awt/print/PrinterException.java java/awt/print/Pageable.java java/awt/print/Paper.java java/awt/print/Printable.java java/awt/print/PrinterAbortException.java java/awt/print/PrinterGraphics.java java/awt/print/PrinterIOException.java java/awt/print/PrinterJob.java java/awt/print/package.html java/awt/AWTException.java java/awt/AWTError.java java/awt/AWTEvent.java java/awt/AWTEventMulticaster.java java/awt/AWTKeyStroke.java java/awt/AWTPermission.java java/awt/ActiveEvent.java java/awt/Adjustable.java java/awt/AlphaComposite.java java/awt/DefaultFocusTraversalPolicy.java java/awt/AttributeValue.java java/awt/BasicStroke.java java/awt/BorderLayout.java java/awt/BufferCapabilities.java java/awt/Button.java java/awt/Canvas.java java/awt/CardLayout.java java/awt/Checkbox.java java/awt/CheckboxGroup.java java/awt/CheckboxMenuItem.java java/awt/Choice.java java/awt/Color.java java/awt/ColorPaintContext.java java/awt/Component.java java/awt/ComponentOrientation.java java/awt/Composite.java java/awt/CompositeContext.java java/awt/Conditional.java java/awt/Container.java java/awt/Cursor.java java/awt/ContainerOrderFocusTraversalPolicy.java java/awt/Dialog.java java/awt/Dimension.java java/awt/DefaultKeyboardFocusManager.java java/awt/DisplayMode.java java/awt/Event.java java/awt/EventDispatchThread.java java/awt/EventQueue.java java/awt/FileDialog.java java/awt/FlowLayout.java java/awt/FocusTraversalPolicy.java java/awt/Font.java java/awt/FontFormatException.java java/awt/FontMetrics.java java/awt/Frame.java java/awt/Image.java java/awt/KeyEventPostProcessor.java java/awt/GradientPaint.java java/awt/GradientPaintContext.java java/awt/Graphics.java java/awt/Graphics2D.java java/awt/GraphicsCallback.java java/awt/GraphicsConfigTemplate.java java/awt/GraphicsConfiguration.java java/awt/GraphicsDevice.java java/awt/GraphicsEnvironment.java java/awt/GridBagConstraints.java java/awt/GridBagLayout.java java/awt/GridLayout.java java/awt/HeadlessException.java java/awt/IllegalComponentStateException.java java/awt/ImageCapabilities.java java/awt/Insets.java java/awt/Label.java java/awt/ItemSelectable.java java/awt/JobAttributes.java java/awt/KeyEventDispatcher.java java/awt/KeyboardFocusManager.java java/awt/LayoutManager.java java/awt/LayoutManager2.java java/awt/List.java java/awt/MediaTracker.java java/awt/Menu.java java/awt/MenuBar.java java/awt/MenuComponent.java java/awt/MenuContainer.java java/awt/MenuItem.java java/awt/MenuShortcut.java java/awt/MouseInfo.java java/awt/PageAttributes.java java/awt/Paint.java java/awt/PaintContext.java java/awt/Panel.java java/awt/Point.java java/awt/PointerInfo.java java/awt/Polygon.java java/awt/PopupMenu.java java/awt/PrintGraphics.java java/awt/PrintJob.java java/awt/Rectangle.java java/awt/RenderingHints.java java/awt/Robot.java java/awt/ScrollPane.java java/awt/ScrollPaneAdjustable.java java/awt/Scrollbar.java java/awt/SentEvent.java java/awt/SequencedEvent.java java/awt/Shape.java java/awt/Stroke.java java/awt/SystemColor.java java/awt/TextArea.java java/awt/TextComponent.java java/awt/TextField.java java/awt/TexturePaint.java java/awt/TexturePaintContext.java java/awt/Toolkit.java java/awt/Transparency.java java/awt/Window.java java/awt/package.html java/beans java/beans/SCCS java/beans/SCCS/s.DefaultPersistenceDelegate.java java/beans/SCCS/s.AppletInitializer.java java/beans/SCCS/s.BeanDescriptor.java java/beans/SCCS/s.BeanInfo.java java/beans/SCCS/s.Beans.java java/beans/SCCS/s.Customizer.java java/beans/SCCS/s.EventSetDescriptor.java java/beans/SCCS/s.DesignMode.java java/beans/SCCS/s.Encoder.java java/beans/SCCS/s.EventHandler.java java/beans/SCCS/s.ExceptionListener.java java/beans/SCCS/s.Expression.java java/beans/SCCS/s.FeatureDescriptor.java java/beans/SCCS/s.Introspector.java java/beans/SCCS/s.package.html java/beans/SCCS/s.MetaData.java java/beans/SCCS/s.IndexedPropertyChangeEvent.java java/beans/SCCS/s.IndexedPropertyDescriptor.java java/beans/SCCS/s.IntrospectionException.java java/beans/SCCS/s.MethodDescriptor.java java/beans/SCCS/s.NameGenerator.java java/beans/SCCS/s.ParameterDescriptor.java java/beans/SCCS/s.PersistenceDelegate.java java/beans/SCCS/s.PropertyChangeEvent.java java/beans/SCCS/s.PropertyChangeListener.java java/beans/SCCS/s.PropertyChangeListenerProxy.java java/beans/SCCS/s.PropertyChangeSupport.java java/beans/SCCS/s.PropertyDescriptor.java java/beans/SCCS/s.Statement.java java/beans/SCCS/s.PropertyEditor.java java/beans/SCCS/s.PropertyEditorManager.java java/beans/SCCS/s.PropertyEditorSupport.java java/beans/SCCS/s.PropertyVetoException.java java/beans/SCCS/s.ReflectionUtils.java java/beans/SCCS/s.SimpleBeanInfo.java java/beans/SCCS/s.VetoableChangeListener.java java/beans/SCCS/s.VetoableChangeListenerProxy.java java/beans/SCCS/s.VetoableChangeSupport.java java/beans/SCCS/s.Visibility.java java/beans/SCCS/s.XMLDecoder.java java/beans/SCCS/s.XMLEncoder.java java/beans/beancontext java/beans/beancontext/SCCS java/beans/beancontext/SCCS/s.BeanContextChild.java java/beans/beancontext/SCCS/s.BeanContext.java java/beans/beancontext/SCCS/s.package.html java/beans/beancontext/SCCS/s.BeanContextChildComponentProxy.java java/beans/beancontext/SCCS/s.BeanContextChildSupport.java java/beans/beancontext/SCCS/s.BeanContextContainerProxy.java java/beans/beancontext/SCCS/s.BeanContextEvent.java java/beans/beancontext/SCCS/s.BeanContextMembershipEvent.java java/beans/beancontext/SCCS/s.BeanContextMembershipListener.java java/beans/beancontext/SCCS/s.BeanContextProxy.java java/beans/beancontext/SCCS/s.BeanContextServiceAvailableEvent.java java/beans/beancontext/SCCS/s.BeanContextServiceProvider.java java/beans/beancontext/SCCS/s.BeanContextServiceProviderBeanInfo.java java/beans/beancontext/SCCS/s.BeanContextServiceRevokedEvent.java java/beans/beancontext/SCCS/s.BeanContextServiceRevokedListener.java java/beans/beancontext/SCCS/s.BeanContextServices.java java/beans/beancontext/SCCS/s.BeanContextServicesListener.java java/beans/beancontext/SCCS/s.BeanContextServicesSupport.java java/beans/beancontext/SCCS/s.BeanContextSupport.java java/beans/beancontext/BeanContextChild.java java/beans/beancontext/BeanContext.java java/beans/beancontext/BeanContextServiceProviderBeanInfo.java java/beans/beancontext/BeanContextChildComponentProxy.java java/beans/beancontext/BeanContextChildSupport.java java/beans/beancontext/BeanContextContainerProxy.java java/beans/beancontext/BeanContextEvent.java java/beans/beancontext/BeanContextMembershipEvent.java java/beans/beancontext/BeanContextMembershipListener.java java/beans/beancontext/BeanContextProxy.java java/beans/beancontext/BeanContextServiceAvailableEvent.java java/beans/beancontext/BeanContextServiceProvider.java java/beans/beancontext/BeanContextServiceRevokedListener.java java/beans/beancontext/BeanContextServiceRevokedEvent.java java/beans/beancontext/BeanContextServicesListener.java java/beans/beancontext/BeanContextServices.java java/beans/beancontext/BeanContextServicesSupport.java java/beans/beancontext/BeanContextSupport.java java/beans/beancontext/package.html java/beans/DefaultPersistenceDelegate.java java/beans/AppletInitializer.java java/beans/BeanDescriptor.java java/beans/BeanInfo.java java/beans/Beans.java java/beans/Customizer.java java/beans/EventHandler.java java/beans/DesignMode.java java/beans/Encoder.java java/beans/EventSetDescriptor.java java/beans/ExceptionListener.java java/beans/Expression.java java/beans/FeatureDescriptor.java java/beans/PropertyChangeListenerProxy.java java/beans/IndexedPropertyChangeEvent.java java/beans/IndexedPropertyDescriptor.java java/beans/IntrospectionException.java java/beans/Introspector.java java/beans/MetaData.java java/beans/MethodDescriptor.java java/beans/NameGenerator.java java/beans/ParameterDescriptor.java java/beans/PersistenceDelegate.java java/beans/PropertyChangeEvent.java java/beans/PropertyChangeListener.java java/beans/VetoableChangeListenerProxy.java java/beans/PropertyChangeSupport.java java/beans/PropertyDescriptor.java java/beans/PropertyEditor.java java/beans/PropertyEditorManager.java java/beans/PropertyEditorSupport.java java/beans/PropertyVetoException.java java/beans/ReflectionUtils.java java/beans/SimpleBeanInfo.java java/beans/Statement.java java/beans/VetoableChangeListener.java java/beans/VetoableChangeSupport.java java/beans/Visibility.java java/beans/XMLDecoder.java java/beans/XMLEncoder.java java/beans/package.html java/io java/io/SCCS java/io/SCCS/s.Bits.java java/io/SCCS/s.CharConversionException.java java/io/SCCS/s.CharArrayReader.java java/io/SCCS/s.BufferedInputStream.java java/io/SCCS/s.BufferedOutputStream.java java/io/SCCS/s.BufferedReader.java java/io/SCCS/s.BufferedWriter.java java/io/SCCS/s.ByteArrayInputStream.java java/io/SCCS/s.ByteArrayOutputStream.java java/io/SCCS/s.CharArrayWriter.java java/io/SCCS/s.DataInputStream.java java/io/SCCS/s.Closeable.java java/io/SCCS/s.DataInput.java java/io/SCCS/s.DataOutputStream.java java/io/SCCS/s.DataOutput.java java/io/SCCS/s.ExpiringCache.java java/io/SCCS/s.EOFException.java java/io/SCCS/s.FileNotFoundException.java java/io/SCCS/s.Externalizable.java java/io/SCCS/s.File.java java/io/SCCS/s.FileFilter.java java/io/SCCS/s.FileInputStream.java java/io/SCCS/s.FileOutputStream.java java/io/SCCS/s.FilePermission.java java/io/SCCS/s.FileReader.java java/io/SCCS/s.FileSystem.java java/io/SCCS/s.FileWriter.java java/io/SCCS/s.FilenameFilter.java java/io/SCCS/s.FilterInputStream.java java/io/SCCS/s.FilterOutputStream.java java/io/SCCS/s.UnsupportedEncodingException.java java/io/SCCS/s.FilterReader.java java/io/SCCS/s.FilterWriter.java java/io/SCCS/s.Flushable.java java/io/SCCS/s.IOException.java java/io/SCCS/s.InputStream.java java/io/SCCS/s.InputStreamReader.java java/io/SCCS/s.InterruptedIOException.java java/io/SCCS/s.InvalidClassException.java java/io/SCCS/s.InvalidObjectException.java java/io/SCCS/s.LineNumberInputStream.java java/io/SCCS/s.LineNumberReader.java java/io/SCCS/s.NotActiveException.java java/io/SCCS/s.NotSerializableException.java java/io/SCCS/s.ObjectInput.java java/io/SCCS/s.ObjectInputStream.java java/io/SCCS/s.ObjectInputValidation.java java/io/SCCS/s.ObjectOutput.java java/io/SCCS/s.ObjectOutputStream.java java/io/SCCS/s.ObjectStreamClass.java java/io/SCCS/s.ObjectStreamConstants.java java/io/SCCS/s.ObjectStreamException.java java/io/SCCS/s.ObjectStreamField.java java/io/SCCS/s.OptionalDataException.java java/io/SCCS/s.OutputStream.java java/io/SCCS/s.OutputStreamWriter.java java/io/SCCS/s.PipedInputStream.java java/io/SCCS/s.PipedOutputStream.java java/io/SCCS/s.PipedReader.java java/io/SCCS/s.PipedWriter.java java/io/SCCS/s.PrintStream.java java/io/SCCS/s.PrintWriter.java java/io/SCCS/s.PushbackInputStream.java java/io/SCCS/s.PushbackReader.java java/io/SCCS/s.RandomAccessFile.java java/io/SCCS/s.Reader.java java/io/SCCS/s.SequenceInputStream.java java/io/SCCS/s.Serializable.java java/io/SCCS/s.SerializablePermission.java java/io/SCCS/s.StreamCorruptedException.java java/io/SCCS/s.StreamTokenizer.java java/io/SCCS/s.StringBufferInputStream.java java/io/SCCS/s.StringReader.java java/io/SCCS/s.StringWriter.java java/io/SCCS/s.SyncFailedException.java java/io/SCCS/s.UTFDataFormatException.java java/io/SCCS/s.WriteAbortedException.java java/io/SCCS/s.Writer.java java/io/SCCS/s.package.html java/io/BufferedReader.java java/io/Bits.java java/io/CharConversionException.java java/io/BufferedInputStream.java java/io/BufferedOutputStream.java java/io/BufferedWriter.java java/io/ByteArrayInputStream.java java/io/ByteArrayOutputStream.java java/io/CharArrayReader.java java/io/CharArrayWriter.java java/io/DataInputStream.java java/io/Closeable.java java/io/DataInput.java java/io/DataOutput.java java/io/NotSerializableException.java java/io/DataOutputStream.java java/io/EOFException.java java/io/ExpiringCache.java java/io/Externalizable.java java/io/File.java java/io/FileFilter.java java/io/FileInputStream.java java/io/FileNotFoundException.java java/io/FileOutputStream.java java/io/FilePermission.java java/io/FileReader.java java/io/FileSystem.java java/io/FileWriter.java java/io/FilenameFilter.java java/io/FilterInputStream.java java/io/FilterOutputStream.java java/io/FilterReader.java java/io/FilterWriter.java java/io/Flushable.java java/io/IOException.java java/io/InputStream.java java/io/InputStreamReader.java java/io/InterruptedIOException.java java/io/InvalidClassException.java java/io/InvalidObjectException.java java/io/LineNumberInputStream.java java/io/LineNumberReader.java java/io/NotActiveException.java java/io/ObjectInputStream.java java/io/ObjectInput.java java/io/UnsupportedEncodingException.java java/io/ObjectInputValidation.java java/io/ObjectOutput.java java/io/Reader.java java/io/ObjectOutputStream.java java/io/ObjectStreamClass.java java/io/ObjectStreamConstants.java java/io/ObjectStreamException.java java/io/ObjectStreamField.java java/io/OptionalDataException.java java/io/OutputStream.java java/io/OutputStreamWriter.java java/io/PipedInputStream.java java/io/PipedOutputStream.java java/io/PipedReader.java java/io/PipedWriter.java java/io/PrintStream.java java/io/PrintWriter.java java/io/PushbackInputStream.java java/io/PushbackReader.java java/io/RandomAccessFile.java java/io/SequenceInputStream.java java/io/Serializable.java java/io/SerializablePermission.java java/io/StreamCorruptedException.java java/io/StreamTokenizer.java java/io/StringBufferInputStream.java java/io/StringReader.java java/io/StringWriter.java java/io/SyncFailedException.java java/io/UTFDataFormatException.java java/io/WriteAbortedException.java java/io/Writer.java java/io/package.html java/lang java/lang/SCCS java/lang/SCCS/s.AbstractStringBuilder.java java/lang/SCCS/s.AbstractMethodError.java java/lang/SCCS/s.ArithmeticException.java java/lang/SCCS/s.Appendable.java java/lang/SCCS/s.Boolean.java java/lang/SCCS/s.ArrayIndexOutOfBoundsException.java java/lang/SCCS/s.ArrayStoreException.java java/lang/SCCS/s.AssertionError.java java/lang/SCCS/s.AssertionStatusDirectives.java java/lang/SCCS/s.Byte.java java/lang/SCCS/s.CharSequence.java java/lang/SCCS/s.Character.java java/lang/SCCS/s.Class.java java/lang/SCCS/s.IllegalAccessError.java java/lang/SCCS/s.ClassLoader.java java/lang/SCCS/s.ClassCastException.java java/lang/SCCS/s.ClassCircularityError.java java/lang/SCCS/s.ClassFormatError.java java/lang/SCCS/s.CloneNotSupportedException.java java/lang/SCCS/s.ClassNotFoundException.java java/lang/SCCS/s.Cloneable.java java/lang/SCCS/s.Comparable.java java/lang/SCCS/s.Compiler.java java/lang/SCCS/s.Deprecated.java java/lang/SCCS/s.Enum.java java/lang/SCCS/s.ConditionalSpecialCasing.java java/lang/SCCS/s.Double.java java/lang/SCCS/s.Error.java java/lang/SCCS/s.Exception.java java/lang/SCCS/s.EnumConstantNotPresentException.java java/lang/SCCS/s.Number.java java/lang/SCCS/s.Float.java java/lang/SCCS/s.ExceptionInInitializerError.java java/lang/SCCS/s.IllegalAccessException.java java/lang/SCCS/s.IllegalArgumentException.java java/lang/SCCS/s.IllegalMonitorStateException.java java/lang/SCCS/s.IllegalStateException.java java/lang/SCCS/s.IllegalThreadStateException.java java/lang/SCCS/s.IncompatibleClassChangeError.java java/lang/SCCS/s.IndexOutOfBoundsException.java java/lang/SCCS/s.InheritableThreadLocal.java java/lang/SCCS/s.InstantiationError.java java/lang/SCCS/s.Integer.java java/lang/SCCS/s.Long.java java/lang/SCCS/s.Math.java java/lang/SCCS/s.InstantiationException.java java/lang/SCCS/s.InternalError.java java/lang/SCCS/s.InterruptedException.java java/lang/SCCS/s.Iterable.java java/lang/SCCS/s.LinkageError.java java/lang/SCCS/s.StringIndexOutOfBoundsException.java java/lang/SCCS/s.NegativeArraySizeException.java java/lang/SCCS/s.NoClassDefFoundError.java java/lang/SCCS/s.NoSuchFieldError.java java/lang/SCCS/s.NoSuchFieldException.java java/lang/SCCS/s.NoSuchMethodError.java java/lang/SCCS/s.NoSuchMethodException.java java/lang/SCCS/s.NullPointerException.java java/lang/SCCS/s.NumberFormatException.java java/lang/SCCS/s.Object.java java/lang/SCCS/s.OutOfMemoryError.java java/lang/SCCS/s.Override.java java/lang/SCCS/s.Package.java java/lang/SCCS/s.Process.java java/lang/SCCS/s.ProcessBuilder.java java/lang/SCCS/s.Readable.java java/lang/SCCS/s.Runnable.java java/lang/SCCS/s.Runtime.java java/lang/SCCS/s.RuntimeException.java java/lang/SCCS/s.RuntimePermission.java java/lang/SCCS/s.SecurityException.java java/lang/SCCS/s.SecurityManager.java java/lang/SCCS/s.Short.java java/lang/SCCS/s.Shutdown.java java/lang/SCCS/s.StackOverflowError.java java/lang/SCCS/s.StackTraceElement.java java/lang/SCCS/s.String.java java/lang/SCCS/s.StrictMath.java java/lang/SCCS/s.StringBuffer.java java/lang/SCCS/s.StringBuilder.java java/lang/SCCS/s.StringCoding.java java/lang/SCCS/s.TypeNotPresentException.java java/lang/SCCS/s.SuppressWarnings.java java/lang/SCCS/s.System.java java/lang/SCCS/s.Thread.java java/lang/SCCS/s.ThreadDeath.java java/lang/SCCS/s.ThreadGroup.java java/lang/SCCS/s.ThreadLocal.java java/lang/SCCS/s.Throwable.java java/lang/SCCS/s.UnsatisfiedLinkError.java java/lang/SCCS/s.UnknownError.java java/lang/SCCS/s.UnsupportedClassVersionError.java java/lang/SCCS/s.Void.java java/lang/SCCS/s.VerifyError.java java/lang/SCCS/s.UnsupportedOperationException.java java/lang/SCCS/s.VirtualMachineError.java java/lang/SCCS/s.package.html java/lang/annotation java/lang/annotation/SCCS java/lang/annotation/SCCS/s.Annotation.java java/lang/annotation/SCCS/s.Documented.java java/lang/annotation/SCCS/s.Target.java java/lang/annotation/SCCS/s.AnnotationFormatError.java java/lang/annotation/SCCS/s.AnnotationTypeMismatchException.java java/lang/annotation/SCCS/s.ElementType.java java/lang/annotation/SCCS/s.IncompleteAnnotationException.java java/lang/annotation/SCCS/s.Inherited.java java/lang/annotation/SCCS/s.Retention.java java/lang/annotation/SCCS/s.RetentionPolicy.java java/lang/annotation/SCCS/s.package.html java/lang/annotation/Annotation.java java/lang/annotation/Documented.java java/lang/annotation/Target.java java/lang/annotation/AnnotationFormatError.java java/lang/annotation/AnnotationTypeMismatchException.java java/lang/annotation/ElementType.java java/lang/annotation/IncompleteAnnotationException.java java/lang/annotation/Inherited.java java/lang/annotation/Retention.java java/lang/annotation/RetentionPolicy.java java/lang/annotation/package.html java/lang/doc-files java/lang/doc-files/SCCS java/lang/doc-files/SCCS/s.capchi.gif java/lang/doc-files/SCCS/s.capiota.gif java/lang/doc-files/SCCS/s.capsigma.gif java/lang/doc-files/SCCS/s.captheta.gif java/lang/doc-files/SCCS/s.capupsil.gif java/lang/doc-files/SCCS/s.chi.gif java/lang/doc-files/SCCS/s.iota.gif java/lang/doc-files/SCCS/s.sigma1.gif java/lang/doc-files/SCCS/s.theta.gif java/lang/doc-files/SCCS/s.javalang.doc.anc21.gif java/lang/doc-files/SCCS/s.javalang.doc.anc38.gif java/lang/doc-files/SCCS/s.javalang.doc.anc40.gif java/lang/doc-files/SCCS/s.javalang.doc.anc41.gif java/lang/doc-files/SCCS/s.upsilon.gif java/lang/doc-files/capsigma.gif java/lang/doc-files/capchi.gif java/lang/doc-files/capiota.gif java/lang/doc-files/javalang.doc.anc21.gif java/lang/doc-files/captheta.gif java/lang/doc-files/capupsil.gif java/lang/doc-files/chi.gif java/lang/doc-files/iota.gif java/lang/doc-files/javalang.doc.anc38.gif java/lang/doc-files/javalang.doc.anc40.gif java/lang/doc-files/javalang.doc.anc41.gif java/lang/doc-files/sigma1.gif java/lang/doc-files/theta.gif java/lang/doc-files/upsilon.gif java/lang/instrument java/lang/instrument/SCCS java/lang/instrument/SCCS/s.ClassFileTransformer.java java/lang/instrument/SCCS/s.ClassDefinition.java java/lang/instrument/SCCS/s.IllegalClassFormatException.java java/lang/instrument/SCCS/s.Instrumentation.java java/lang/instrument/SCCS/s.UnmodifiableClassException.java java/lang/instrument/SCCS/s.package.html java/lang/instrument/ClassFileTransformer.java java/lang/instrument/ClassDefinition.java java/lang/instrument/IllegalClassFormatException.java java/lang/instrument/Instrumentation.java java/lang/instrument/UnmodifiableClassException.java java/lang/instrument/package.html java/lang/management java/lang/management/SCCS java/lang/management/SCCS/s.GarbageCollectorMXBean.java java/lang/management/SCCS/s.ClassLoadingMXBean.java java/lang/management/SCCS/s.CompilationMXBean.java java/lang/management/SCCS/s.ManagementFactory.java java/lang/management/SCCS/s.ManagementPermission.java java/lang/management/SCCS/s.MemoryMXBean.java java/lang/management/SCCS/s.MemoryManagerMXBean.java java/lang/management/SCCS/s.MemoryNotificationInfo.java java/lang/management/SCCS/s.MemoryPoolMXBean.java java/lang/management/SCCS/s.MemoryType.java java/lang/management/SCCS/s.MemoryUsage.java java/lang/management/SCCS/s.OperatingSystemMXBean.java java/lang/management/SCCS/s.RuntimeMXBean.java java/lang/management/SCCS/s.ThreadInfo.java java/lang/management/SCCS/s.ThreadMXBean.java java/lang/management/SCCS/s.package.html java/lang/management/GarbageCollectorMXBean.java java/lang/management/ClassLoadingMXBean.java java/lang/management/CompilationMXBean.java java/lang/management/ThreadMXBean.java java/lang/management/ManagementFactory.java java/lang/management/ManagementPermission.java java/lang/management/MemoryMXBean.java java/lang/management/MemoryManagerMXBean.java java/lang/management/MemoryNotificationInfo.java java/lang/management/MemoryPoolMXBean.java java/lang/management/MemoryType.java java/lang/management/MemoryUsage.java java/lang/management/OperatingSystemMXBean.java java/lang/management/RuntimeMXBean.java java/lang/management/ThreadInfo.java java/lang/management/package.html java/lang/ref java/lang/ref/SCCS java/lang/ref/SCCS/s.FinalReference.java java/lang/ref/SCCS/s.Finalizer.java java/lang/ref/SCCS/s.PhantomReference.java java/lang/ref/SCCS/s.Reference.java java/lang/ref/SCCS/s.ReferenceQueue.java java/lang/ref/SCCS/s.SoftReference.java java/lang/ref/SCCS/s.WeakReference.java java/lang/ref/SCCS/s.package.html java/lang/ref/PhantomReference.java java/lang/ref/FinalReference.java java/lang/ref/Finalizer.java java/lang/ref/Reference.java java/lang/ref/ReferenceQueue.java java/lang/ref/SoftReference.java java/lang/ref/WeakReference.java java/lang/ref/package.html java/lang/reflect java/lang/reflect/SCCS java/lang/reflect/SCCS/s.GenericDeclaration.java java/lang/reflect/SCCS/s.AccessibleObject.java java/lang/reflect/SCCS/s.AnnotatedElement.java java/lang/reflect/SCCS/s.Array.java java/lang/reflect/SCCS/s.Constructor.java java/lang/reflect/SCCS/s.Field.java java/lang/reflect/SCCS/s.GenericArrayType.java java/lang/reflect/SCCS/s.MalformedParameterizedTypeException.java java/lang/reflect/SCCS/s.GenericSignatureFormatError.java java/lang/reflect/SCCS/s.InvocationHandler.java java/lang/reflect/SCCS/s.InvocationTargetException.java java/lang/reflect/SCCS/s.ReflectAccess.java java/lang/reflect/SCCS/s.Member.java java/lang/reflect/SCCS/s.Method.java java/lang/reflect/SCCS/s.Modifier.java java/lang/reflect/SCCS/s.Proxy.java java/lang/reflect/SCCS/s.Type.java java/lang/reflect/SCCS/s.ParameterizedType.java java/lang/reflect/SCCS/s.UndeclaredThrowableException.java java/lang/reflect/SCCS/s.ReflectPermission.java java/lang/reflect/SCCS/s.TypeVariable.java java/lang/reflect/SCCS/s.WildcardType.java java/lang/reflect/SCCS/s.package.html java/lang/reflect/AccessibleObject.java java/lang/reflect/AnnotatedElement.java java/lang/reflect/Array.java java/lang/reflect/Constructor.java java/lang/reflect/Field.java java/lang/reflect/GenericArrayType.java java/lang/reflect/GenericDeclaration.java java/lang/reflect/InvocationHandler.java java/lang/reflect/Member.java java/lang/reflect/GenericSignatureFormatError.java java/lang/reflect/InvocationTargetException.java java/lang/reflect/MalformedParameterizedTypeException.java java/lang/reflect/Method.java java/lang/reflect/Modifier.java java/lang/reflect/ParameterizedType.java java/lang/reflect/Proxy.java java/lang/reflect/ReflectAccess.java java/lang/reflect/ReflectPermission.java java/lang/reflect/Type.java java/lang/reflect/TypeVariable.java java/lang/reflect/WildcardType.java java/lang/reflect/package.html java/lang/reflect/UndeclaredThrowableException.java java/lang/ArrayIndexOutOfBoundsException.java java/lang/AbstractMethodError.java java/lang/AbstractStringBuilder.java java/lang/Appendable.java java/lang/ArithmeticException.java java/lang/AssertionStatusDirectives.java java/lang/ArrayStoreException.java java/lang/AssertionError.java java/lang/Boolean.java java/lang/Byte.java java/lang/ClassCircularityError.java java/lang/CharSequence.java java/lang/Character.java java/lang/Class.java java/lang/ClassCastException.java java/lang/ClassNotFoundException.java java/lang/ClassFormatError.java java/lang/ClassLoader.java java/lang/Double.java java/lang/CloneNotSupportedException.java java/lang/Cloneable.java java/lang/Comparable.java java/lang/Compiler.java java/lang/ConditionalSpecialCasing.java java/lang/Deprecated.java java/lang/Enum.java java/lang/Error.java java/lang/Exception.java java/lang/Float.java java/lang/InstantiationError.java java/lang/EnumConstantNotPresentException.java java/lang/ExceptionInInitializerError.java java/lang/IllegalAccessException.java java/lang/IllegalAccessError.java java/lang/Long.java java/lang/IllegalArgumentException.java java/lang/IllegalMonitorStateException.java java/lang/IllegalStateException.java java/lang/IllegalThreadStateException.java java/lang/IncompatibleClassChangeError.java java/lang/IndexOutOfBoundsException.java java/lang/InheritableThreadLocal.java java/lang/Override.java java/lang/Number.java java/lang/InstantiationException.java java/lang/Integer.java java/lang/InternalError.java java/lang/InterruptedException.java java/lang/Iterable.java java/lang/LinkageError.java java/lang/Math.java java/lang/NegativeArraySizeException.java java/lang/NoClassDefFoundError.java java/lang/NoSuchFieldError.java java/lang/NoSuchFieldException.java java/lang/NoSuchMethodError.java java/lang/NoSuchMethodException.java java/lang/NullPointerException.java java/lang/Object.java java/lang/Shutdown.java java/lang/Short.java java/lang/NumberFormatException.java java/lang/OutOfMemoryError.java java/lang/Package.java java/lang/Process.java java/lang/ProcessBuilder.java java/lang/Readable.java java/lang/Runnable.java java/lang/Runtime.java java/lang/RuntimeException.java java/lang/RuntimePermission.java java/lang/SecurityException.java java/lang/SecurityManager.java java/lang/StackOverflowError.java java/lang/StackTraceElement.java java/lang/StrictMath.java java/lang/String.java java/lang/System.java java/lang/TypeNotPresentException.java java/lang/StringBuffer.java java/lang/StringBuilder.java java/lang/StringCoding.java java/lang/StringIndexOutOfBoundsException.java java/lang/SuppressWarnings.java java/lang/Thread.java java/lang/ThreadDeath.java java/lang/ThreadGroup.java java/lang/ThreadLocal.java java/lang/Throwable.java java/lang/UnsatisfiedLinkError.java java/lang/UnknownError.java java/lang/VirtualMachineError.java java/lang/UnsupportedClassVersionError.java java/lang/UnsupportedOperationException.java java/lang/VerifyError.java java/lang/package.html java/lang/Void.java java/math java/math/SCCS java/math/SCCS/s.MutableBigInteger.java java/math/SCCS/s.BigDecimal.java java/math/SCCS/s.BigInteger.java java/math/SCCS/s.BitSieve.java java/math/SCCS/s.MathContext.java java/math/SCCS/s.RoundingMode.java java/math/SCCS/s.package.html java/math/SCCS/s.SignedMutableBigInteger.java java/math/MathContext.java java/math/BigDecimal.java java/math/BigInteger.java java/math/BitSieve.java java/math/SignedMutableBigInteger.java java/math/MutableBigInteger.java java/math/RoundingMode.java java/math/package.html java/net java/net/SCCS java/net/SCCS/s.ContentHandlerFactory.java java/net/SCCS/s.Authenticator.java java/net/SCCS/s.BindException.java java/net/SCCS/s.CacheRequest.java java/net/SCCS/s.CacheResponse.java java/net/SCCS/s.ConnectException.java java/net/SCCS/s.ContentHandler.java java/net/SCCS/s.DatagramSocketImpl.java java/net/SCCS/s.CookieHandler.java java/net/SCCS/s.DatagramPacket.java java/net/SCCS/s.DatagramSocket.java java/net/SCCS/s.URI.java java/net/SCCS/s.URLStreamHandler.java java/net/SCCS/s.DatagramSocketImplFactory.java java/net/SCCS/s.FileNameMap.java java/net/SCCS/s.HttpRetryException.java java/net/SCCS/s.HttpURLConnection.java java/net/SCCS/s.Inet4Address.java java/net/SCCS/s.Inet4AddressImpl.java java/net/SCCS/s.Inet6Address.java java/net/SCCS/s.Inet6AddressImpl.java java/net/SCCS/s.InetAddress.java java/net/SCCS/s.InetAddressImpl.java java/net/SCCS/s.InetSocketAddress.java java/net/SCCS/s.JarURLConnection.java java/net/SCCS/s.MalformedURLException.java java/net/SCCS/s.MulticastSocket.java java/net/SCCS/s.NetPermission.java java/net/SCCS/s.NetworkInterface.java java/net/SCCS/s.NoRouteToHostException.java java/net/SCCS/s.PasswordAuthentication.java java/net/SCCS/s.PlainDatagramSocketImpl.java java/net/SCCS/s.PlainSocketImpl.java java/net/SCCS/s.PortUnreachableException.java java/net/SCCS/s.ProtocolException.java java/net/SCCS/s.Proxy.java java/net/SCCS/s.ProxySelector.java java/net/SCCS/s.ResponseCache.java java/net/SCCS/s.SecureCacheResponse.java java/net/SCCS/s.ServerSocket.java java/net/SCCS/s.Socket.java java/net/SCCS/s.SocketAddress.java java/net/SCCS/s.SocketException.java java/net/SCCS/s.SocketImpl.java java/net/SCCS/s.SocketImplFactory.java java/net/SCCS/s.URL.java java/net/SCCS/s.SocketInputStream.java java/net/SCCS/s.SocketOptions.java java/net/SCCS/s.SocketOutputStream.java java/net/SCCS/s.SocketPermission.java java/net/SCCS/s.SocketTimeoutException.java java/net/SCCS/s.SocksConsts.java java/net/SCCS/s.SocksSocketImpl.java java/net/SCCS/s.URLDecoder.java java/net/SCCS/s.URISyntaxException.java java/net/SCCS/s.URLClassLoader.java java/net/SCCS/s.URLConnection.java java/net/SCCS/s.URLEncoder.java java/net/SCCS/s.UnknownServiceException.java java/net/SCCS/s.URLStreamHandlerFactory.java java/net/SCCS/s.UnknownHostException.java java/net/SCCS/s.package.html java/net/ConnectException.java java/net/Authenticator.java java/net/BindException.java java/net/CacheRequest.java java/net/CacheResponse.java java/net/ContentHandlerFactory.java java/net/ContentHandler.java java/net/DatagramSocketImplFactory.java java/net/CookieHandler.java java/net/DatagramPacket.java java/net/DatagramSocket.java java/net/DatagramSocketImpl.java java/net/HttpRetryException.java java/net/FileNameMap.java java/net/ProxySelector.java java/net/Proxy.java java/net/HttpURLConnection.java java/net/Inet4Address.java java/net/Inet4AddressImpl.java java/net/Inet6Address.java java/net/Inet6AddressImpl.java java/net/InetAddress.java java/net/InetAddressImpl.java java/net/InetSocketAddress.java java/net/JarURLConnection.java java/net/MalformedURLException.java java/net/MulticastSocket.java java/net/NetPermission.java java/net/NetworkInterface.java java/net/NoRouteToHostException.java java/net/PasswordAuthentication.java java/net/PlainSocketImpl.java java/net/PlainDatagramSocketImpl.java java/net/PortUnreachableException.java java/net/ProtocolException.java java/net/SecureCacheResponse.java java/net/ResponseCache.java java/net/SocketException.java java/net/ServerSocket.java java/net/Socket.java java/net/SocketAddress.java java/net/SocketImplFactory.java java/net/SocketImpl.java java/net/SocketInputStream.java java/net/SocketOptions.java java/net/SocketOutputStream.java java/net/SocketPermission.java java/net/SocketTimeoutException.java java/net/SocksConsts.java java/net/SocksSocketImpl.java java/net/URI.java java/net/URISyntaxException.java java/net/URL.java java/net/URLClassLoader.java java/net/URLConnection.java java/net/URLDecoder.java java/net/URLEncoder.java java/net/URLStreamHandler.java java/net/URLStreamHandlerFactory.java java/net/UnknownHostException.java java/net/UnknownServiceException.java java/net/package.html java/nio java/nio/SCCS java/nio/SCCS/s.Buffer.java java/nio/SCCS/s.Bits.java java/nio/SCCS/s.ByteBufferAs-X-Buffer.java java/nio/SCCS/s.ByteOrder.java java/nio/SCCS/s.Direct-X-Buffer-bin.java java/nio/SCCS/s.Direct-X-Buffer.java java/nio/SCCS/s.Heap-X-Buffer.java java/nio/SCCS/s.MappedByteBuffer.java java/nio/SCCS/s.StringCharBuffer.java java/nio/SCCS/s.X-Buffer-bin.java java/nio/SCCS/s.X-Buffer.java java/nio/SCCS/s.exceptions java/nio/SCCS/s.package.html java/nio/channels java/nio/channels/SCCS java/nio/channels/SCCS/s.DatagramChannel.java java/nio/channels/SCCS/s.ByteChannel.java java/nio/channels/SCCS/s.Channel.java java/nio/channels/SCCS/s.Channels.java java/nio/channels/SCCS/s.GatheringByteChannel.java java/nio/channels/SCCS/s.FileChannel.java java/nio/channels/SCCS/s.FileLock.java java/nio/channels/SCCS/s.InterruptibleChannel.java java/nio/channels/SCCS/s.Pipe.java java/nio/channels/SCCS/s.ReadableByteChannel.java java/nio/channels/SCCS/s.ScatteringByteChannel.java java/nio/channels/SCCS/s.SelectableChannel.java java/nio/channels/SCCS/s.SelectionKey.java java/nio/channels/SCCS/s.Selector.java java/nio/channels/SCCS/s.exceptions java/nio/channels/SCCS/s.ServerSocketChannel.java java/nio/channels/SCCS/s.SocketChannel.java java/nio/channels/SCCS/s.WritableByteChannel.java java/nio/channels/SCCS/s.package.html java/nio/channels/spi java/nio/channels/spi/SCCS java/nio/channels/spi/SCCS/s.AbstractInterruptibleChannel.java java/nio/channels/spi/SCCS/s.AbstractSelectableChannel.java java/nio/channels/spi/SCCS/s.AbstractSelectionKey.java java/nio/channels/spi/SCCS/s.AbstractSelector.java java/nio/channels/spi/SCCS/s.SelectorProvider.java java/nio/channels/spi/SCCS/s.package.html java/nio/channels/spi/AbstractInterruptibleChannel.java java/nio/channels/spi/AbstractSelectableChannel.java java/nio/channels/spi/AbstractSelectionKey.java java/nio/channels/spi/AbstractSelector.java java/nio/channels/spi/SelectorProvider.java java/nio/channels/spi/package.html java/nio/channels/DatagramChannel.java java/nio/channels/ByteChannel.java java/nio/channels/Channel.java java/nio/channels/Channels.java java/nio/channels/GatheringByteChannel.java java/nio/channels/FileChannel.java java/nio/channels/FileLock.java java/nio/channels/InterruptibleChannel.java java/nio/channels/Pipe.java java/nio/channels/ReadableByteChannel.java java/nio/channels/ScatteringByteChannel.java java/nio/channels/SelectableChannel.java java/nio/channels/SelectionKey.java java/nio/channels/Selector.java java/nio/channels/ServerSocketChannel.java java/nio/channels/SocketChannel.java java/nio/channels/WritableByteChannel.java java/nio/channels/exceptions java/nio/channels/package.html java/nio/charset java/nio/charset/SCCS java/nio/charset/SCCS/s.CoderMalfunctionError.java java/nio/charset/SCCS/s.Charset-X-Coder.java java/nio/charset/SCCS/s.Charset.java java/nio/charset/SCCS/s.CodingErrorAction.java java/nio/charset/SCCS/s.CoderResult.java java/nio/charset/SCCS/s.UnmappableCharacterException.java java/nio/charset/SCCS/s.MalformedInputException.java java/nio/charset/SCCS/s.exceptions java/nio/charset/SCCS/s.package.html java/nio/charset/spi java/nio/charset/spi/SCCS java/nio/charset/spi/SCCS/s.CharsetProvider.java java/nio/charset/spi/SCCS/s.package.html java/nio/charset/spi/CharsetProvider.java java/nio/charset/spi/package.html java/nio/charset/CoderMalfunctionError.java java/nio/charset/Charset-X-Coder.java java/nio/charset/Charset.java java/nio/charset/MalformedInputException.java java/nio/charset/CoderResult.java java/nio/charset/CodingErrorAction.java java/nio/charset/exceptions java/nio/charset/UnmappableCharacterException.java java/nio/charset/package.html java/nio/ByteOrder.java java/nio/Bits.java java/nio/Buffer.java java/nio/ByteBufferAs-X-Buffer.java java/nio/Direct-X-Buffer-bin.java java/nio/Direct-X-Buffer.java java/nio/Heap-X-Buffer.java java/nio/MappedByteBuffer.java java/nio/StringCharBuffer.java java/nio/X-Buffer-bin.java java/nio/X-Buffer.java java/nio/exceptions java/nio/package.html java/rmi java/rmi/SCCS java/rmi/SCCS/s.AlreadyBoundException.java java/rmi/SCCS/s.AccessException.java java/rmi/SCCS/s.ConnectIOException.java java/rmi/SCCS/s.ConnectException.java java/rmi/SCCS/s.NoSuchObjectException.java java/rmi/SCCS/s.MarshalException.java java/rmi/SCCS/s.MarshalledObject.java java/rmi/SCCS/s.Naming.java java/rmi/SCCS/s.NotBoundException.java java/rmi/SCCS/s.RMISecurityException.java java/rmi/SCCS/s.RMISecurityManager.java java/rmi/SCCS/s.Remote.java java/rmi/SCCS/s.RemoteException.java java/rmi/SCCS/s.ServerError.java java/rmi/SCCS/s.package.html java/rmi/SCCS/s.ServerException.java java/rmi/SCCS/s.ServerRuntimeException.java java/rmi/SCCS/s.StubNotFoundException.java java/rmi/SCCS/s.UnexpectedException.java java/rmi/SCCS/s.UnknownHostException.java java/rmi/SCCS/s.UnmarshalException.java java/rmi/activation java/rmi/activation/SCCS java/rmi/activation/SCCS/s.ActivationDesc.java java/rmi/activation/SCCS/s.Activatable.java java/rmi/activation/SCCS/s.ActivateFailedException.java java/rmi/activation/SCCS/s.ActivationException.java java/rmi/activation/SCCS/s.ActivationGroup.java java/rmi/activation/SCCS/s.ActivationGroupDesc.java java/rmi/activation/SCCS/s.ActivationGroupID.java java/rmi/activation/SCCS/s.ActivationID.java java/rmi/activation/SCCS/s.ActivationInstantiator.java java/rmi/activation/SCCS/s.ActivationMonitor.java java/rmi/activation/SCCS/s.ActivationSystem.java java/rmi/activation/SCCS/s.Activator.java java/rmi/activation/SCCS/s.package.html java/rmi/activation/SCCS/s.UnknownGroupException.java java/rmi/activation/SCCS/s.UnknownObjectException.java java/rmi/activation/Activatable.java java/rmi/activation/ActivationDesc.java java/rmi/activation/Activator.java java/rmi/activation/ActivateFailedException.java java/rmi/activation/ActivationException.java java/rmi/activation/ActivationGroup.java java/rmi/activation/ActivationGroupDesc.java java/rmi/activation/ActivationGroupID.java java/rmi/activation/ActivationID.java java/rmi/activation/ActivationInstantiator.java java/rmi/activation/ActivationMonitor.java java/rmi/activation/ActivationSystem.java java/rmi/activation/UnknownGroupException.java java/rmi/activation/UnknownObjectException.java java/rmi/activation/package.html java/rmi/dgc java/rmi/dgc/SCCS java/rmi/dgc/SCCS/s.Lease.java java/rmi/dgc/SCCS/s.DGC.java java/rmi/dgc/SCCS/s.VMID.java java/rmi/dgc/SCCS/s.package.html java/rmi/dgc/package.html java/rmi/dgc/DGC.java java/rmi/dgc/Lease.java java/rmi/dgc/VMID.java java/rmi/registry java/rmi/registry/SCCS java/rmi/registry/SCCS/s.LocateRegistry.java java/rmi/registry/SCCS/s.Registry.java java/rmi/registry/SCCS/s.RegistryHandler.java java/rmi/registry/SCCS/s.package.html java/rmi/registry/RegistryHandler.java java/rmi/registry/LocateRegistry.java java/rmi/registry/Registry.java java/rmi/registry/package.html java/rmi/server java/rmi/server/SCCS java/rmi/server/SCCS/s.RMIClassLoaderSpi.java java/rmi/server/SCCS/s.ExportException.java java/rmi/server/SCCS/s.LoaderHandler.java java/rmi/server/SCCS/s.LogStream.java java/rmi/server/SCCS/s.ObjID.java java/rmi/server/SCCS/s.Operation.java java/rmi/server/SCCS/s.RMIClassLoader.java java/rmi/server/SCCS/s.RMIClientSocketFactory.java java/rmi/server/SCCS/s.RMIFailureHandler.java java/rmi/server/SCCS/s.RMIServerSocketFactory.java java/rmi/server/SCCS/s.RMISocketFactory.java java/rmi/server/SCCS/s.RemoteCall.java java/rmi/server/SCCS/s.RemoteObject.java java/rmi/server/SCCS/s.RemoteRef.java java/rmi/server/SCCS/s.ServerNotActiveException.java java/rmi/server/SCCS/s.RemoteObjectInvocationHandler.java java/rmi/server/SCCS/s.RemoteServer.java java/rmi/server/SCCS/s.RemoteStub.java java/rmi/server/SCCS/s.ServerCloneException.java java/rmi/server/SCCS/s.ServerRef.java java/rmi/server/SCCS/s.Skeleton.java java/rmi/server/SCCS/s.UID.java java/rmi/server/SCCS/s.Unreferenced.java java/rmi/server/SCCS/s.SkeletonMismatchException.java java/rmi/server/SCCS/s.SkeletonNotFoundException.java java/rmi/server/SCCS/s.SocketSecurityException.java java/rmi/server/SCCS/s.UnicastRemoteObject.java java/rmi/server/SCCS/s.package.html java/rmi/server/RMIClientSocketFactory.java java/rmi/server/ExportException.java java/rmi/server/LoaderHandler.java java/rmi/server/LogStream.java java/rmi/server/ObjID.java java/rmi/server/Operation.java java/rmi/server/RMIClassLoader.java java/rmi/server/RMIClassLoaderSpi.java java/rmi/server/RemoteObjectInvocationHandler.java java/rmi/server/RMIFailureHandler.java java/rmi/server/RMIServerSocketFactory.java java/rmi/server/RMISocketFactory.java java/rmi/server/RemoteCall.java java/rmi/server/RemoteObject.java java/rmi/server/Unreferenced.java java/rmi/server/UID.java java/rmi/server/RemoteRef.java java/rmi/server/RemoteServer.java java/rmi/server/RemoteStub.java java/rmi/server/ServerCloneException.java java/rmi/server/ServerNotActiveException.java java/rmi/server/ServerRef.java java/rmi/server/Skeleton.java java/rmi/server/SkeletonMismatchException.java java/rmi/server/SkeletonNotFoundException.java java/rmi/server/SocketSecurityException.java java/rmi/server/UnicastRemoteObject.java java/rmi/server/package.html java/rmi/AlreadyBoundException.java java/rmi/AccessException.java java/rmi/ServerError.java java/rmi/ConnectException.java java/rmi/ConnectIOException.java java/rmi/MarshalException.java java/rmi/MarshalledObject.java java/rmi/Naming.java java/rmi/NoSuchObjectException.java java/rmi/NotBoundException.java java/rmi/RMISecurityException.java java/rmi/RMISecurityManager.java java/rmi/Remote.java java/rmi/ServerRuntimeException.java java/rmi/RemoteException.java java/rmi/ServerException.java java/rmi/StubNotFoundException.java java/rmi/UnexpectedException.java java/rmi/UnknownHostException.java java/rmi/UnmarshalException.java java/rmi/package.html java/security java/security/SCCS java/security/SCCS/s.AccessControlException.java java/security/SCCS/s.AccessControlContext.java java/security/SCCS/s.AccessController.java java/security/SCCS/s.AlgorithmParameters.java java/security/SCCS/s.DigestException.java java/security/SCCS/s.AlgorithmParameterGenerator.java java/security/SCCS/s.AlgorithmParameterGeneratorSpi.java java/security/SCCS/s.AlgorithmParametersSpi.java java/security/SCCS/s.AllPermission.java java/security/SCCS/s.AuthProvider.java java/security/SCCS/s.BasicPermission.java java/security/SCCS/s.Certificate.java java/security/SCCS/s.CodeSigner.java java/security/SCCS/s.CodeSource.java java/security/SCCS/s.GeneralSecurityException.java java/security/SCCS/s.DigestInputStream.java java/security/SCCS/s.DigestOutputStream.java java/security/SCCS/s.DomainCombiner.java java/security/SCCS/s.GuardedObject.java java/security/SCCS/s.Guard.java java/security/SCCS/s.IdentityScope.java java/security/SCCS/s.Identity.java java/security/SCCS/s.Key.java java/security/SCCS/s.InvalidAlgorithmParameterException.java java/security/SCCS/s.InvalidKeyException.java java/security/SCCS/s.InvalidParameterException.java java/security/SCCS/s.KeyException.java java/security/SCCS/s.KeyFactory.java java/security/SCCS/s.PrivilegedActionException.java java/security/SCCS/s.KeyFactorySpi.java java/security/SCCS/s.KeyManagementException.java java/security/SCCS/s.KeyPair.java java/security/SCCS/s.KeyPairGenerator.java java/security/SCCS/s.KeyPairGeneratorSpi.java java/security/SCCS/s.KeyRep.java java/security/SCCS/s.KeyStore.java java/security/SCCS/s.KeyStoreException.java java/security/SCCS/s.KeyStoreSpi.java java/security/SCCS/s.MessageDigest.java java/security/SCCS/s.MessageDigestSpi.java java/security/SCCS/s.NoSuchAlgorithmException.java java/security/SCCS/s.NoSuchProviderException.java java/security/SCCS/s.Permission.java java/security/SCCS/s.PermissionCollection.java java/security/SCCS/s.Permissions.java java/security/SCCS/s.Policy.java java/security/SCCS/s.Principal.java java/security/SCCS/s.PrivateKey.java java/security/SCCS/s.PrivilegedAction.java java/security/SCCS/s.UnresolvedPermissionCollection.java java/security/SCCS/s.PrivilegedExceptionAction.java java/security/SCCS/s.ProtectionDomain.java java/security/SCCS/s.Provider.java java/security/SCCS/s.ProviderException.java java/security/SCCS/s.PublicKey.java java/security/SCCS/s.SecureClassLoader.java java/security/SCCS/s.SecureRandom.java java/security/SCCS/s.SecureRandomSpi.java java/security/SCCS/s.Security.java java/security/SCCS/s.SecurityPermission.java java/security/SCCS/s.Signature.java java/security/SCCS/s.SignatureException.java java/security/SCCS/s.SignatureSpi.java java/security/SCCS/s.SignedObject.java java/security/SCCS/s.Signer.java java/security/SCCS/s.Timestamp.java java/security/SCCS/s.UnrecoverableEntryException.java java/security/SCCS/s.UnrecoverableKeyException.java java/security/SCCS/s.UnresolvedPermission.java java/security/SCCS/s.package.html java/security/acl java/security/acl/SCCS java/security/acl/SCCS/s.AclEntry.java java/security/acl/SCCS/s.Acl.java java/security/acl/SCCS/s.AclNotFoundException.java java/security/acl/SCCS/s.Group.java java/security/acl/SCCS/s.LastOwnerException.java java/security/acl/SCCS/s.NotOwnerException.java java/security/acl/SCCS/s.Owner.java java/security/acl/SCCS/s.Permission.java java/security/acl/SCCS/s.package.html java/security/acl/AclEntry.java java/security/acl/Acl.java java/security/acl/AclNotFoundException.java java/security/acl/Group.java java/security/acl/LastOwnerException.java java/security/acl/NotOwnerException.java java/security/acl/Owner.java java/security/acl/Permission.java java/security/acl/package.html java/security/cert java/security/cert/SCCS java/security/cert/SCCS/s.CRLException.java java/security/cert/SCCS/s.CRL.java java/security/cert/SCCS/s.CertPathBuilder.java java/security/cert/SCCS/s.CRLSelector.java java/security/cert/SCCS/s.CertPath.java java/security/cert/SCCS/s.CertificateEncodingException.java java/security/cert/SCCS/s.CertPathBuilderException.java java/security/cert/SCCS/s.CertPathBuilderResult.java java/security/cert/SCCS/s.CertPathBuilderSpi.java java/security/cert/SCCS/s.CertPathHelperImpl.java java/security/cert/SCCS/s.CertPathParameters.java java/security/cert/SCCS/s.CertPathValidator.java java/security/cert/SCCS/s.CertPathValidatorException.java java/security/cert/SCCS/s.CertPathValidatorResult.java java/security/cert/SCCS/s.CertPathValidatorSpi.java java/security/cert/SCCS/s.CertSelector.java java/security/cert/SCCS/s.CertStore.java java/security/cert/SCCS/s.CertStoreException.java java/security/cert/SCCS/s.CertStoreParameters.java java/security/cert/SCCS/s.CertStoreSpi.java java/security/cert/SCCS/s.Certificate.java java/security/cert/SCCS/s.CertificateExpiredException.java java/security/cert/SCCS/s.CertificateException.java java/security/cert/SCCS/s.CertificateFactorySpi.java java/security/cert/SCCS/s.CertificateFactory.java java/security/cert/SCCS/s.X509CRLSelector.java java/security/cert/SCCS/s.X509CRL.java java/security/cert/SCCS/s.CertificateNotYetValidException.java java/security/cert/SCCS/s.PolicyNode.java java/security/cert/SCCS/s.CertificateParsingException.java java/security/cert/SCCS/s.CollectionCertStoreParameters.java java/security/cert/SCCS/s.LDAPCertStoreParameters.java java/security/cert/SCCS/s.PKIXBuilderParameters.java java/security/cert/SCCS/s.PKIXCertPathBuilderResult.java java/security/cert/SCCS/s.PKIXCertPathChecker.java java/security/cert/SCCS/s.PKIXCertPathValidatorResult.java java/security/cert/SCCS/s.PKIXParameters.java java/security/cert/SCCS/s.PolicyQualifierInfo.java java/security/cert/SCCS/s.TrustAnchor.java java/security/cert/SCCS/s.X509CRLEntry.java java/security/cert/SCCS/s.X509CertSelector.java java/security/cert/SCCS/s.X509Certificate.java java/security/cert/SCCS/s.package.html java/security/cert/SCCS/s.X509Extension.java java/security/cert/CRLException.java java/security/cert/CRL.java java/security/cert/CertPathBuilder.java java/security/cert/CRLSelector.java java/security/cert/CertPath.java java/security/cert/CertPathBuilderException.java java/security/cert/CertPathBuilderResult.java java/security/cert/CertPathBuilderSpi.java java/security/cert/CertPathHelperImpl.java java/security/cert/CertPathParameters.java java/security/cert/CertPathValidator.java java/security/cert/CertPathValidatorException.java java/security/cert/CertPathValidatorResult.java java/security/cert/TrustAnchor.java java/security/cert/PolicyNode.java java/security/cert/CertPathValidatorSpi.java java/security/cert/CertSelector.java java/security/cert/CertStore.java java/security/cert/CertStoreException.java java/security/cert/CertStoreParameters.java java/security/cert/CertStoreSpi.java java/security/cert/Certificate.java java/security/cert/CertificateEncodingException.java java/security/cert/CertificateException.java java/security/cert/CertificateExpiredException.java java/security/cert/CertificateFactory.java java/security/cert/CertificateFactorySpi.java java/security/cert/CertificateNotYetValidException.java java/security/cert/CertificateParsingException.java java/security/cert/CollectionCertStoreParameters.java java/security/cert/LDAPCertStoreParameters.java java/security/cert/PKIXBuilderParameters.java java/security/cert/PKIXCertPathBuilderResult.java java/security/cert/PKIXCertPathChecker.java java/security/cert/PKIXCertPathValidatorResult.java java/security/cert/PKIXParameters.java java/security/cert/PolicyQualifierInfo.java java/security/cert/X509CRL.java java/security/cert/X509CRLEntry.java java/security/cert/X509CRLSelector.java java/security/cert/X509CertSelector.java java/security/cert/X509Certificate.java java/security/cert/X509Extension.java java/security/cert/package.html java/security/interfaces java/security/interfaces/SCCS java/security/interfaces/SCCS/s.DSAParams.java java/security/interfaces/SCCS/s.DSAKey.java java/security/interfaces/SCCS/s.RSAMultiPrimePrivateCrtKey.java java/security/interfaces/SCCS/s.DSAKeyPairGenerator.java java/security/interfaces/SCCS/s.DSAPrivateKey.java java/security/interfaces/SCCS/s.DSAPublicKey.java java/security/interfaces/SCCS/s.ECKey.java java/security/interfaces/SCCS/s.ECPrivateKey.java java/security/interfaces/SCCS/s.ECPublicKey.java java/security/interfaces/SCCS/s.RSAKey.java java/security/interfaces/SCCS/s.RSAPrivateCrtKey.java java/security/interfaces/SCCS/s.RSAPrivateKey.java java/security/interfaces/SCCS/s.RSAPublicKey.java java/security/interfaces/SCCS/s.package.html java/security/interfaces/DSAParams.java java/security/interfaces/DSAKey.java java/security/interfaces/DSAKeyPairGenerator.java java/security/interfaces/DSAPrivateKey.java java/security/interfaces/DSAPublicKey.java java/security/interfaces/ECKey.java java/security/interfaces/ECPrivateKey.java java/security/interfaces/ECPublicKey.java java/security/interfaces/RSAKey.java java/security/interfaces/RSAMultiPrimePrivateCrtKey.java java/security/interfaces/RSAPrivateCrtKey.java java/security/interfaces/RSAPrivateKey.java java/security/interfaces/RSAPublicKey.java java/security/interfaces/package.html java/security/spec java/security/spec/SCCS java/security/spec/SCCS/s.InvalidParameterSpecException.java java/security/spec/SCCS/s.AlgorithmParameterSpec.java java/security/spec/SCCS/s.DSAParameterSpec.java java/security/spec/SCCS/s.DSAPrivateKeySpec.java java/security/spec/SCCS/s.DSAPublicKeySpec.java java/security/spec/SCCS/s.ECField.java java/security/spec/SCCS/s.ECFieldF2m.java java/security/spec/SCCS/s.ECFieldFp.java java/security/spec/SCCS/s.ECGenParameterSpec.java java/security/spec/SCCS/s.ECParameterSpec.java java/security/spec/SCCS/s.ECPoint.java java/security/spec/SCCS/s.ECPrivateKeySpec.java java/security/spec/SCCS/s.ECPublicKeySpec.java java/security/spec/SCCS/s.EllipticCurve.java java/security/spec/SCCS/s.EncodedKeySpec.java java/security/spec/SCCS/s.InvalidKeySpecException.java java/security/spec/SCCS/s.PSSParameterSpec.java java/security/spec/SCCS/s.KeySpec.java java/security/spec/SCCS/s.RSAKeyGenParameterSpec.java java/security/spec/SCCS/s.MGF1ParameterSpec.java java/security/spec/SCCS/s.PKCS8EncodedKeySpec.java java/security/spec/SCCS/s.package.html java/security/spec/SCCS/s.RSAMultiPrimePrivateCrtKeySpec.java java/security/spec/SCCS/s.RSAOtherPrimeInfo.java java/security/spec/SCCS/s.RSAPrivateCrtKeySpec.java java/security/spec/SCCS/s.RSAPrivateKeySpec.java java/security/spec/SCCS/s.RSAPublicKeySpec.java java/security/spec/SCCS/s.X509EncodedKeySpec.java java/security/spec/AlgorithmParameterSpec.java java/security/spec/DSAParameterSpec.java java/security/spec/DSAPrivateKeySpec.java java/security/spec/DSAPublicKeySpec.java java/security/spec/ECField.java java/security/spec/ECFieldF2m.java java/security/spec/ECFieldFp.java java/security/spec/ECGenParameterSpec.java java/security/spec/ECParameterSpec.java java/security/spec/ECPoint.java java/security/spec/ECPrivateKeySpec.java java/security/spec/ECPublicKeySpec.java java/security/spec/EllipticCurve.java java/security/spec/EncodedKeySpec.java java/security/spec/MGF1ParameterSpec.java java/security/spec/KeySpec.java java/security/spec/InvalidKeySpecException.java java/security/spec/InvalidParameterSpecException.java java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java java/security/spec/PKCS8EncodedKeySpec.java java/security/spec/PSSParameterSpec.java java/security/spec/RSAKeyGenParameterSpec.java java/security/spec/RSAPrivateCrtKeySpec.java java/security/spec/RSAOtherPrimeInfo.java java/security/spec/RSAPrivateKeySpec.java java/security/spec/RSAPublicKeySpec.java java/security/spec/X509EncodedKeySpec.java java/security/spec/package.html java/security/AlgorithmParameterGenerator.java java/security/AccessControlContext.java java/security/AccessControlException.java java/security/AccessController.java java/security/Guard.java java/security/AlgorithmParameterGeneratorSpi.java java/security/AlgorithmParameters.java java/security/AlgorithmParametersSpi.java java/security/AllPermission.java java/security/AuthProvider.java java/security/BasicPermission.java java/security/InvalidKeyException.java java/security/Certificate.java java/security/CodeSigner.java java/security/CodeSource.java java/security/DigestException.java java/security/DigestInputStream.java java/security/DigestOutputStream.java java/security/DomainCombiner.java java/security/GeneralSecurityException.java java/security/GuardedObject.java java/security/Identity.java java/security/IdentityScope.java java/security/Key.java java/security/KeyFactorySpi.java java/security/InvalidAlgorithmParameterException.java java/security/InvalidParameterException.java java/security/KeyException.java java/security/KeyFactory.java java/security/NoSuchAlgorithmException.java java/security/KeyManagementException.java java/security/KeyPair.java java/security/KeyPairGenerator.java java/security/KeyPairGeneratorSpi.java java/security/KeyRep.java java/security/KeyStore.java java/security/KeyStoreException.java java/security/KeyStoreSpi.java java/security/MessageDigest.java java/security/MessageDigestSpi.java java/security/PrivilegedAction.java java/security/Policy.java java/security/NoSuchProviderException.java java/security/Permission.java java/security/PermissionCollection.java java/security/Permissions.java java/security/Principal.java java/security/PrivateKey.java java/security/UnresolvedPermission.java java/security/PrivilegedActionException.java java/security/PrivilegedExceptionAction.java java/security/ProtectionDomain.java java/security/Provider.java java/security/ProviderException.java java/security/PublicKey.java java/security/SecureClassLoader.java java/security/SecureRandom.java java/security/SecureRandomSpi.java java/security/Security.java java/security/SecurityPermission.java java/security/Signature.java java/security/SignatureException.java java/security/SignatureSpi.java java/security/SignedObject.java java/security/Signer.java java/security/Timestamp.java java/security/UnrecoverableEntryException.java java/security/UnrecoverableKeyException.java java/security/UnresolvedPermissionCollection.java java/security/package.html java/sql java/sql/SCCS java/sql/SCCS/s.Array.java java/sql/SCCS/s.Blob.java java/sql/SCCS/s.Clob.java java/sql/SCCS/s.DataTruncation.java java/sql/SCCS/s.BatchUpdateException.java java/sql/SCCS/s.CallableStatement.java java/sql/SCCS/s.Connection.java java/sql/SCCS/s.DatabaseMetaData.java java/sql/SCCS/s.Date.java java/sql/SCCS/s.Driver.java java/sql/SCCS/s.DriverManager.java java/sql/SCCS/s.DriverPropertyInfo.java java/sql/SCCS/s.ParameterMetaData.java java/sql/SCCS/s.PreparedStatement.java java/sql/SCCS/s.Ref.java java/sql/SCCS/s.ResultSet.java java/sql/SCCS/s.SQLData.java java/sql/SCCS/s.ResultSetMetaData.java java/sql/SCCS/s.SQLException.java java/sql/SCCS/s.SQLInput.java java/sql/SCCS/s.SQLOutput.java java/sql/SCCS/s.SQLPermission.java java/sql/SCCS/s.SQLWarning.java java/sql/SCCS/s.Savepoint.java java/sql/SCCS/s.Statement.java java/sql/SCCS/s.Struct.java java/sql/SCCS/s.Time.java java/sql/SCCS/s.Timestamp.java java/sql/SCCS/s.Types.java java/sql/SCCS/s.package.html java/sql/Array.java java/sql/Blob.java java/sql/Clob.java java/sql/DataTruncation.java java/sql/BatchUpdateException.java java/sql/CallableStatement.java java/sql/Connection.java java/sql/DatabaseMetaData.java java/sql/Date.java java/sql/Driver.java java/sql/DriverManager.java java/sql/DriverPropertyInfo.java java/sql/ParameterMetaData.java java/sql/PreparedStatement.java java/sql/Ref.java java/sql/ResultSet.java java/sql/ResultSetMetaData.java java/sql/Struct.java java/sql/SQLData.java java/sql/SQLException.java java/sql/SQLInput.java java/sql/SQLOutput.java java/sql/SQLPermission.java java/sql/SQLWarning.java java/sql/Savepoint.java java/sql/Statement.java java/sql/Time.java java/sql/Timestamp.java java/sql/Types.java java/sql/package.html java/text java/text/SCCS java/text/SCCS/s.AttributedString.java java/text/SCCS/s.Annotation.java java/text/SCCS/s.Bidi.java java/text/SCCS/s.AttributedCharacterIterator.java java/text/SCCS/s.ChoiceFormat.java java/text/SCCS/s.DateFormatSymbols.java java/text/SCCS/s.BreakDictionary.java java/text/SCCS/s.BreakIterator.java java/text/SCCS/s.CharacterIterator.java java/text/SCCS/s.CharacterIteratorFieldDelegate.java java/text/SCCS/s.CollationElementIterator.java java/text/SCCS/s.CollationKey.java java/text/SCCS/s.CollationRules.java java/text/SCCS/s.Collator.java java/text/SCCS/s.DateFormat.java java/text/SCCS/s.DecimalFormatSymbols.java java/text/SCCS/s.DecimalFormat.java java/text/SCCS/s.DictionaryBasedBreakIterator.java java/text/SCCS/s.DigitList.java java/text/SCCS/s.DontCareFieldPosition.java java/text/SCCS/s.EntryPair.java java/text/SCCS/s.FieldPosition.java java/text/SCCS/s.Format.java java/text/SCCS/s.MergeCollation.java java/text/SCCS/s.MessageFormat.java java/text/SCCS/s.NumberFormat.java java/text/SCCS/s.ParseException.java java/text/SCCS/s.ParsePosition.java java/text/SCCS/s.PatternEntry.java java/text/SCCS/s.RBCollationTables.java java/text/SCCS/s.package.html java/text/SCCS/s.RBTableBuilder.java java/text/SCCS/s.RuleBasedBreakIterator.java java/text/SCCS/s.RuleBasedCollator.java java/text/SCCS/s.SimpleDateFormat.java java/text/SCCS/s.StringCharacterIterator.java java/text/AttributedString.java java/text/Annotation.java java/text/BreakIterator.java java/text/Bidi.java java/text/AttributedCharacterIterator.java java/text/BreakDictionary.java java/text/CharacterIterator.java java/text/ChoiceFormat.java java/text/CollationKey.java java/text/CharacterIteratorFieldDelegate.java java/text/CollationElementIterator.java java/text/CollationRules.java java/text/Collator.java java/text/DateFormat.java java/text/DictionaryBasedBreakIterator.java java/text/DateFormatSymbols.java java/text/DecimalFormat.java java/text/DecimalFormatSymbols.java java/text/DigitList.java java/text/EntryPair.java java/text/MergeCollation.java java/text/Format.java java/text/DontCareFieldPosition.java java/text/FieldPosition.java java/text/MessageFormat.java java/text/NumberFormat.java java/text/ParseException.java java/text/ParsePosition.java java/text/PatternEntry.java java/text/RBCollationTables.java java/text/RBTableBuilder.java java/text/package.html java/text/RuleBasedCollator.java java/text/RuleBasedBreakIterator.java java/text/SimpleDateFormat.java java/text/StringCharacterIterator.java java/util java/util/SCCS java/util/SCCS/s.AbstractSequentialList.java java/util/SCCS/s.AbstractCollection.java java/util/SCCS/s.AbstractList.java java/util/SCCS/s.AbstractMap.java java/util/SCCS/s.AbstractQueue.java java/util/SCCS/s.AbstractSet.java java/util/SCCS/s.ArrayList.java java/util/SCCS/s.Arrays.java java/util/SCCS/s.BitSet.java java/util/SCCS/s.Calendar.java java/util/SCCS/s.Collection.java java/util/SCCS/s.Collections.java java/util/SCCS/s.Comparator.java java/util/SCCS/s.Currency.java java/util/SCCS/s.ConcurrentModificationException.java java/util/SCCS/s.EmptyStackException.java java/util/SCCS/s.Date.java java/util/SCCS/s.EnumMap.java java/util/SCCS/s.CurrencyData.properties java/util/SCCS/s.Dictionary.java java/util/SCCS/s.Enumeration.java java/util/SCCS/s.EnumSet.java java/util/SCCS/s.DuplicateFormatFlagsException.java java/util/SCCS/s.EventListener.java java/util/SCCS/s.EventListenerProxy.java java/util/SCCS/s.EventObject.java java/util/SCCS/s.Formattable.java java/util/SCCS/s.FormattableFlags.java java/util/SCCS/s.FormatFlagsConversionMismatchException.java java/util/SCCS/s.Formatter.java java/util/SCCS/s.Iterator.java java/util/SCCS/s.ListResourceBundle.java java/util/SCCS/s.FormatterClosedException.java java/util/SCCS/s.GregorianCalendar.java java/util/SCCS/s.HashMap.java java/util/SCCS/s.HashSet.java java/util/SCCS/s.Hashtable.java java/util/SCCS/s.IdentityHashMap.java java/util/SCCS/s.IllegalFormatCodePointException.java java/util/SCCS/s.IllegalFormatConversionException.java java/util/SCCS/s.IllegalFormatException.java java/util/SCCS/s.IllegalFormatFlagsException.java java/util/SCCS/s.IllegalFormatPrecisionException.java java/util/SCCS/s.IllegalFormatWidthException.java java/util/SCCS/s.InputMismatchException.java java/util/SCCS/s.InvalidPropertiesFormatException.java java/util/SCCS/s.JumboEnumSet.java java/util/SCCS/s.LinkedHashMap.java java/util/SCCS/s.LinkedHashSet.java java/util/SCCS/s.LinkedList.java java/util/SCCS/s.List.java java/util/SCCS/s.ListIterator.java java/util/SCCS/s.Locale.java java/util/SCCS/s.Map.java java/util/SCCS/s.NoSuchElementException.java java/util/SCCS/s.MissingFormatArgumentException.java java/util/SCCS/s.MissingFormatWidthException.java java/util/SCCS/s.MissingResourceException.java java/util/SCCS/s.Observable.java java/util/SCCS/s.SortedMap.java java/util/SCCS/s.Set.java java/util/SCCS/s.Observer.java java/util/SCCS/s.PriorityQueue.java java/util/SCCS/s.Properties.java java/util/SCCS/s.PropertyPermission.java java/util/SCCS/s.PropertyResourceBundle.java java/util/SCCS/s.Queue.java java/util/SCCS/s.Random.java java/util/SCCS/s.RandomAccess.java java/util/SCCS/s.RegularEnumSet.java java/util/SCCS/s.ResourceBundle.java java/util/SCCS/s.ResourceBundleEnumeration.java java/util/SCCS/s.Scanner.java java/util/SCCS/s.SimpleTimeZone.java java/util/SCCS/s.SortedSet.java java/util/SCCS/s.Stack.java java/util/SCCS/s.TreeMap.java java/util/SCCS/s.StringTokenizer.java java/util/SCCS/s.TimeZone.java java/util/SCCS/s.Timer.java java/util/SCCS/s.TimerTask.java java/util/SCCS/s.TooManyListenersException.java java/util/SCCS/s.TreeSet.java java/util/SCCS/s.UUID.java java/util/SCCS/s.Vector.java java/util/SCCS/s.WeakHashMap.java java/util/SCCS/s.UnknownFormatConversionException.java java/util/SCCS/s.UnknownFormatFlagsException.java java/util/SCCS/s.XMLUtils.java java/util/SCCS/s.package.html java/util/concurrent java/util/concurrent/SCCS java/util/concurrent/SCCS/s.AbstractExecutorService.java java/util/concurrent/SCCS/p.ConcurrentHashMap.java java/util/concurrent/SCCS/s.ArrayBlockingQueue.java java/util/concurrent/SCCS/s.BlockingQueue.java java/util/concurrent/SCCS/s.BrokenBarrierException.java java/util/concurrent/SCCS/s.Callable.java java/util/concurrent/SCCS/s.CancellationException.java java/util/concurrent/SCCS/s.CompletionService.java java/util/concurrent/SCCS/s.ConcurrentHashMap.java java/util/concurrent/SCCS/s.ConcurrentLinkedQueue.java java/util/concurrent/SCCS/s.ConcurrentMap.java java/util/concurrent/SCCS/s.CopyOnWriteArrayList.java java/util/concurrent/SCCS/s.Future.java java/util/concurrent/SCCS/s.LinkedBlockingQueue.java java/util/concurrent/SCCS/s.CopyOnWriteArraySet.java java/util/concurrent/SCCS/s.CountDownLatch.java java/util/concurrent/SCCS/s.CyclicBarrier.java java/util/concurrent/SCCS/s.DelayQueue.java java/util/concurrent/SCCS/s.Delayed.java java/util/concurrent/SCCS/s.Exchanger.java java/util/concurrent/SCCS/s.ExecutionException.java java/util/concurrent/SCCS/s.Executor.java java/util/concurrent/SCCS/s.ExecutorCompletionService.java java/util/concurrent/SCCS/s.ExecutorService.java java/util/concurrent/SCCS/s.Executors.java java/util/concurrent/SCCS/s.FutureTask.java java/util/concurrent/SCCS/s.RejectedExecutionException.java java/util/concurrent/SCCS/s.PriorityBlockingQueue.java java/util/concurrent/SCCS/s.RejectedExecutionHandler.java java/util/concurrent/SCCS/s.ScheduledExecutorService.java java/util/concurrent/SCCS/s.ScheduledFuture.java java/util/concurrent/SCCS/s.ScheduledThreadPoolExecutor.java java/util/concurrent/SCCS/s.Semaphore.java java/util/concurrent/SCCS/s.SynchronousQueue.java java/util/concurrent/SCCS/s.ThreadFactory.java java/util/concurrent/SCCS/s.ThreadPoolExecutor.java java/util/concurrent/SCCS/s.TimeUnit.java java/util/concurrent/SCCS/s.TimeoutException.java java/util/concurrent/SCCS/s.package.html java/util/concurrent/SCCS/p.ConcurrentLinkedQueue.java java/util/concurrent/SCCS/p.ThreadPoolExecutor.java java/util/concurrent/atomic java/util/concurrent/atomic/SCCS java/util/concurrent/atomic/SCCS/s.AtomicIntegerArray.java java/util/concurrent/atomic/SCCS/s.AtomicBoolean.java java/util/concurrent/atomic/SCCS/s.AtomicInteger.java java/util/concurrent/atomic/SCCS/s.AtomicIntegerFieldUpdater.java java/util/concurrent/atomic/SCCS/s.AtomicLong.java java/util/concurrent/atomic/SCCS/s.AtomicLongArray.java java/util/concurrent/atomic/SCCS/s.AtomicLongFieldUpdater.java java/util/concurrent/atomic/SCCS/s.AtomicMarkableReference.java java/util/concurrent/atomic/SCCS/s.AtomicReference.java java/util/concurrent/atomic/SCCS/s.AtomicReferenceArray.java java/util/concurrent/atomic/SCCS/s.AtomicReferenceFieldUpdater.java java/util/concurrent/atomic/SCCS/s.AtomicStampedReference.java java/util/concurrent/atomic/SCCS/s.package.html java/util/concurrent/atomic/AtomicIntegerArray.java java/util/concurrent/atomic/AtomicBoolean.java java/util/concurrent/atomic/AtomicInteger.java java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java java/util/concurrent/atomic/AtomicLong.java java/util/concurrent/atomic/AtomicLongArray.java java/util/concurrent/atomic/AtomicLongFieldUpdater.java java/util/concurrent/atomic/AtomicMarkableReference.java java/util/concurrent/atomic/AtomicReference.java java/util/concurrent/atomic/AtomicReferenceArray.java java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java java/util/concurrent/atomic/AtomicStampedReference.java java/util/concurrent/atomic/package.html java/util/concurrent/locks java/util/concurrent/locks/SCCS java/util/concurrent/locks/SCCS/s.LockSupport.java java/util/concurrent/locks/SCCS/s.Lock.java java/util/concurrent/locks/SCCS/s.AbstractQueuedSynchronizer.java java/util/concurrent/locks/SCCS/s.Condition.java java/util/concurrent/locks/SCCS/s.ReentrantReadWriteLock.java java/util/concurrent/locks/SCCS/s.ReadWriteLock.java java/util/concurrent/locks/SCCS/s.ReentrantLock.java java/util/concurrent/locks/SCCS/s.package.html java/util/concurrent/locks/LockSupport.java java/util/concurrent/locks/Lock.java java/util/concurrent/locks/AbstractQueuedSynchronizer.java java/util/concurrent/locks/Condition.java java/util/concurrent/locks/ReentrantReadWriteLock.java java/util/concurrent/locks/ReadWriteLock.java java/util/concurrent/locks/ReentrantLock.java java/util/concurrent/locks/package.html java/util/concurrent/AbstractExecutorService.java java/util/concurrent/AbstractExecutorService.java~ java/util/concurrent/ArrayBlockingQueue.java java/util/concurrent/BlockingQueue.java java/util/concurrent/BrokenBarrierException.java java/util/concurrent/Callable.java java/util/concurrent/CancellationException.java java/util/concurrent/CompletionService.java java/util/concurrent/CompletionService.java~ java/util/concurrent/ConcurrentHashMap.java java/util/concurrent/ConcurrentLinkedQueue.java java/util/concurrent/ConcurrentMap.java java/util/concurrent/ExecutorCompletionService.java java/util/concurrent/CopyOnWriteArrayList.java java/util/concurrent/CopyOnWriteArraySet.java java/util/concurrent/CountDownLatch.java java/util/concurrent/CyclicBarrier.java java/util/concurrent/DelayQueue.java java/util/concurrent/Delayed.java java/util/concurrent/Exchanger.java java/util/concurrent/ExecutionException.java java/util/concurrent/Executor.java java/util/concurrent/FutureTask.java java/util/concurrent/Future.java java/util/concurrent/ExecutorCompletionService.java~ java/util/concurrent/ExecutorService.java java/util/concurrent/Executors.java java/util/concurrent/RejectedExecutionException.java java/util/concurrent/LinkedBlockingQueue.java java/util/concurrent/PriorityBlockingQueue.java java/util/concurrent/ScheduledThreadPoolExecutor.java java/util/concurrent/RejectedExecutionHandler.java java/util/concurrent/ScheduledExecutorService.java java/util/concurrent/ScheduledFuture.java java/util/concurrent/SynchronousQueue.java java/util/concurrent/Semaphore.java java/util/concurrent/ThreadFactory.java java/util/concurrent/ThreadPoolExecutor.java java/util/concurrent/TimeUnit.java java/util/concurrent/TimeoutException.java java/util/concurrent/package.html java/util/jar java/util/jar/SCCS java/util/jar/SCCS/s.JarInputStream.java java/util/jar/SCCS/s.Attributes.java java/util/jar/SCCS/s.JarEntry.java java/util/jar/SCCS/s.JarException.java java/util/jar/SCCS/s.JarFile.java java/util/jar/SCCS/s.JavaUtilJarAccessImpl.java java/util/jar/SCCS/s.JarOutputStream.java java/util/jar/SCCS/s.JarVerifier.java java/util/jar/SCCS/s.Manifest.java java/util/jar/SCCS/s.Pack200.java java/util/jar/SCCS/s.package.html java/util/jar/JarException.java java/util/jar/Attributes.java java/util/jar/JarEntry.java java/util/jar/JarOutputStream.java java/util/jar/JarFile.java java/util/jar/JarInputStream.java java/util/jar/JavaUtilJarAccessImpl.java java/util/jar/JarVerifier.java java/util/jar/Manifest.java java/util/jar/Pack200.java java/util/jar/package.html java/util/logging java/util/logging/SCCS java/util/logging/SCCS/s.LoggingPermission.java java/util/logging/SCCS/s.ConsoleHandler.java java/util/logging/SCCS/s.ErrorManager.java java/util/logging/SCCS/s.FileHandler.java java/util/logging/SCCS/s.Filter.java java/util/logging/SCCS/s.Formatter.java java/util/logging/SCCS/s.Handler.java java/util/logging/SCCS/s.Level.java java/util/logging/SCCS/s.LogManager.java java/util/logging/SCCS/s.LogRecord.java java/util/logging/SCCS/s.Logger.java java/util/logging/SCCS/s.Logging.java java/util/logging/SCCS/s.LoggingMXBean.java java/util/logging/SCCS/s.MemoryHandler.java java/util/logging/SCCS/s.SimpleFormatter.java java/util/logging/SCCS/s.SocketHandler.java java/util/logging/SCCS/s.StreamHandler.java java/util/logging/SCCS/s.XMLFormatter.java java/util/logging/SCCS/s.package.html java/util/logging/LoggingPermission.java java/util/logging/ConsoleHandler.java java/util/logging/ErrorManager.java java/util/logging/FileHandler.java java/util/logging/Filter.java java/util/logging/Formatter.java java/util/logging/Handler.java java/util/logging/Level.java java/util/logging/LogManager.java java/util/logging/LogRecord.java java/util/logging/Logger.java java/util/logging/Logging.java java/util/logging/LoggingMXBean.java java/util/logging/MemoryHandler.java java/util/logging/SimpleFormatter.java java/util/logging/SocketHandler.java java/util/logging/StreamHandler.java java/util/logging/XMLFormatter.java java/util/logging/package.html java/util/prefs java/util/prefs/SCCS java/util/prefs/SCCS/s.BackingStoreException.java java/util/prefs/SCCS/s.AbstractPreferences.java java/util/prefs/SCCS/s.NodeChangeEvent.java java/util/prefs/SCCS/s.Base64.java java/util/prefs/SCCS/s.package.html java/util/prefs/SCCS/s.InvalidPreferencesFormatException.java java/util/prefs/SCCS/s.NodeChangeListener.java java/util/prefs/SCCS/s.PreferenceChangeEvent.java java/util/prefs/SCCS/s.PreferenceChangeListener.java java/util/prefs/SCCS/s.Preferences.java java/util/prefs/SCCS/s.PreferencesFactory.java java/util/prefs/SCCS/s.XmlSupport.java java/util/prefs/AbstractPreferences.java java/util/prefs/BackingStoreException.java java/util/prefs/Base64.java java/util/prefs/NodeChangeEvent.java java/util/prefs/Preferences.java java/util/prefs/InvalidPreferencesFormatException.java java/util/prefs/NodeChangeListener.java java/util/prefs/PreferenceChangeEvent.java java/util/prefs/PreferenceChangeListener.java java/util/prefs/PreferencesFactory.java java/util/prefs/XmlSupport.java java/util/prefs/package.html java/util/regex java/util/regex/SCCS java/util/regex/SCCS/s.MatchResult.java java/util/regex/SCCS/s.ASCII.java java/util/regex/SCCS/s.Matcher.java java/util/regex/SCCS/s.Pattern.java java/util/regex/SCCS/s.package.html java/util/regex/SCCS/s.PatternSyntaxException.java java/util/regex/MatchResult.java java/util/regex/ASCII.java java/util/regex/Matcher.java java/util/regex/Pattern.java java/util/regex/package.html java/util/regex/PatternSyntaxException.java java/util/zip java/util/zip/SCCS java/util/zip/SCCS/s.Adler32.java java/util/zip/SCCS/s.CRC32.java java/util/zip/SCCS/s.Checksum.java java/util/zip/SCCS/s.CheckedInputStream.java java/util/zip/SCCS/s.CheckedOutputStream.java java/util/zip/SCCS/s.DataFormatException.java java/util/zip/SCCS/s.Deflater.java java/util/zip/SCCS/s.DeflaterOutputStream.java java/util/zip/SCCS/s.GZIPInputStream.java java/util/zip/SCCS/s.GZIPOutputStream.java java/util/zip/SCCS/s.Inflater.java java/util/zip/SCCS/s.InflaterInputStream.java java/util/zip/SCCS/s.ZipConstants.java java/util/zip/SCCS/s.ZipEntry.java java/util/zip/SCCS/s.ZipException.java java/util/zip/SCCS/s.ZipFile.java java/util/zip/SCCS/s.ZipInputStream.java java/util/zip/SCCS/s.ZipOutputStream.java java/util/zip/SCCS/s.package.html java/util/zip/CheckedInputStream.java java/util/zip/Adler32.java java/util/zip/CRC32.java java/util/zip/ZipOutputStream.java java/util/zip/CheckedOutputStream.java java/util/zip/Checksum.java java/util/zip/DataFormatException.java java/util/zip/Deflater.java java/util/zip/DeflaterOutputStream.java java/util/zip/GZIPInputStream.java java/util/zip/GZIPOutputStream.java java/util/zip/Inflater.java java/util/zip/InflaterInputStream.java java/util/zip/ZipConstants.java java/util/zip/ZipEntry.java java/util/zip/ZipException.java java/util/zip/ZipFile.java java/util/zip/ZipInputStream.java java/util/zip/package.html java/util/AbstractSequentialList.java java/util/AbstractCollection.java java/util/AbstractList.java java/util/AbstractMap.java java/util/AbstractQueue.java java/util/CurrencyData.properties java/util/AbstractSet.java java/util/ArrayList.java java/util/Arrays.java java/util/BitSet.java java/util/Calendar.java java/util/Collection.java java/util/Collections.java java/util/Comparator.java java/util/Currency.java java/util/ConcurrentModificationException.java java/util/Date.java java/util/Dictionary.java java/util/EnumMap.java java/util/EnumSet.java java/util/EventListenerProxy.java java/util/DuplicateFormatFlagsException.java java/util/EmptyStackException.java java/util/Enumeration.java java/util/EventListener.java java/util/FormatterClosedException.java java/util/EventObject.java java/util/Formattable.java java/util/FormattableFlags.java java/util/FormatFlagsConversionMismatchException.java java/util/Formatter.java java/util/IllegalFormatException.java java/util/GregorianCalendar.java java/util/HashMap.java java/util/HashSet.java java/util/Hashtable.java java/util/IdentityHashMap.java java/util/MissingFormatArgumentException.java java/util/IllegalFormatCodePointException.java java/util/IllegalFormatConversionException.java java/util/IllegalFormatFlagsException.java java/util/IllegalFormatPrecisionException.java java/util/IllegalFormatWidthException.java java/util/InputMismatchException.java java/util/Iterator.java java/util/JumboEnumSet.java java/util/InvalidPropertiesFormatException.java java/util/LinkedHashMap.java java/util/LinkedHashSet.java java/util/LinkedList.java java/util/List.java java/util/ListIterator.java java/util/ListResourceBundle.java java/util/Locale.java java/util/Map.java java/util/Observer.java java/util/MissingFormatWidthException.java java/util/MissingResourceException.java java/util/NoSuchElementException.java java/util/Observable.java java/util/ResourceBundleEnumeration.java java/util/PriorityQueue.java java/util/Properties.java java/util/PropertyPermission.java java/util/PropertyResourceBundle.java java/util/Queue.java java/util/Random.java java/util/RandomAccess.java java/util/RegularEnumSet.java java/util/ResourceBundle.java java/util/SimpleTimeZone.java java/util/Scanner.java java/util/Set.java java/util/StringTokenizer.java java/util/SortedMap.java java/util/SortedSet.java java/util/Stack.java java/util/TimeZone.java java/util/Timer.java java/util/WeakHashMap.java java/util/UUID.java java/util/TimerTask.java java/util/TooManyListenersException.java java/util/TreeMap.java java/util/TreeSet.java java/util/Vector.java java/util/UnknownFormatConversionException.java java/util/UnknownFormatFlagsException.java java/util/XMLUtils.java java/util/package.html javax javax/accessibility javax/accessibility/SCCS javax/accessibility/SCCS/s.AccessibleAction.java javax/accessibility/SCCS/s.Accessible.java javax/accessibility/SCCS/s.AccessibleRelationSet.java javax/accessibility/SCCS/s.AccessibleAttributeSequence.java javax/accessibility/SCCS/s.AccessibleBundle.java javax/accessibility/SCCS/s.AccessibleComponent.java javax/accessibility/SCCS/s.AccessibleContext.java javax/accessibility/SCCS/s.AccessibleEditableText.java javax/accessibility/SCCS/s.AccessibleExtendedComponent.java javax/accessibility/SCCS/s.AccessibleExtendedTable.java javax/accessibility/SCCS/s.AccessibleExtendedText.java javax/accessibility/SCCS/s.AccessibleHyperlink.java javax/accessibility/SCCS/s.AccessibleHypertext.java javax/accessibility/SCCS/s.AccessibleIcon.java javax/accessibility/SCCS/s.AccessibleKeyBinding.java javax/accessibility/SCCS/s.AccessibleRelation.java javax/accessibility/SCCS/s.AccessibleTableModelChange.java javax/accessibility/SCCS/s.AccessibleResourceBundle.java javax/accessibility/SCCS/s.AccessibleRole.java javax/accessibility/SCCS/s.AccessibleSelection.java javax/accessibility/SCCS/s.AccessibleState.java javax/accessibility/SCCS/s.AccessibleStateSet.java javax/accessibility/SCCS/s.AccessibleStreamable.java javax/accessibility/SCCS/s.AccessibleTable.java javax/accessibility/SCCS/s.AccessibleText.java javax/accessibility/SCCS/s.AccessibleTextSequence.java javax/accessibility/SCCS/s.AccessibleValue.java javax/accessibility/SCCS/s.package.html javax/accessibility/AccessibleAction.java javax/accessibility/Accessible.java javax/accessibility/AccessibleResourceBundle.java javax/accessibility/AccessibleAttributeSequence.java javax/accessibility/AccessibleBundle.java javax/accessibility/AccessibleComponent.java javax/accessibility/AccessibleContext.java javax/accessibility/AccessibleEditableText.java javax/accessibility/AccessibleExtendedComponent.java javax/accessibility/AccessibleExtendedTable.java javax/accessibility/AccessibleExtendedText.java javax/accessibility/AccessibleHyperlink.java javax/accessibility/AccessibleHypertext.java javax/accessibility/AccessibleIcon.java javax/accessibility/AccessibleKeyBinding.java javax/accessibility/AccessibleRelation.java javax/accessibility/AccessibleRelationSet.java javax/accessibility/AccessibleSelection.java javax/accessibility/AccessibleRole.java javax/accessibility/AccessibleStreamable.java javax/accessibility/AccessibleState.java javax/accessibility/AccessibleStateSet.java javax/accessibility/AccessibleTableModelChange.java javax/accessibility/AccessibleTable.java javax/accessibility/AccessibleTextSequence.java javax/accessibility/AccessibleText.java javax/accessibility/AccessibleValue.java javax/accessibility/package.html javax/activity javax/activity/SCCS javax/activity/SCCS/s.ActivityCompletedException.java javax/activity/SCCS/s.ActivityRequiredException.java javax/activity/SCCS/s.InvalidActivityException.java javax/activity/SCCS/s.package.html javax/activity/ActivityCompletedException.java javax/activity/ActivityRequiredException.java javax/activity/InvalidActivityException.java javax/activity/package.html javax/imageio javax/imageio/SCCS javax/imageio/SCCS/s.IIOParamController.java javax/imageio/SCCS/s.IIOException.java javax/imageio/SCCS/s.IIOImage.java javax/imageio/SCCS/s.IIOParam.java javax/imageio/SCCS/s.ImageReadParam.java javax/imageio/SCCS/s.ImageIO.java javax/imageio/SCCS/s.ImageTranscoder.java javax/imageio/SCCS/s.ImageReader.java javax/imageio/SCCS/s.ImageTypeSpecifier.java javax/imageio/SCCS/s.ImageWriteParam.java javax/imageio/SCCS/s.ImageWriter.java javax/imageio/SCCS/s.package.html javax/imageio/event javax/imageio/event/SCCS javax/imageio/event/SCCS/s.IIOReadProgressListener.java javax/imageio/event/SCCS/s.IIOReadUpdateListener.java javax/imageio/event/SCCS/s.IIOReadWarningListener.java javax/imageio/event/SCCS/s.IIOWriteProgressListener.java javax/imageio/event/SCCS/s.IIOWriteWarningListener.java javax/imageio/event/SCCS/s.package.html javax/imageio/event/IIOReadProgressListener.java javax/imageio/event/IIOReadUpdateListener.java javax/imageio/event/IIOReadWarningListener.java javax/imageio/event/IIOWriteProgressListener.java javax/imageio/event/IIOWriteWarningListener.java javax/imageio/event/package.html javax/imageio/metadata javax/imageio/metadata/SCCS javax/imageio/metadata/SCCS/s.IIOInvalidTreeException.java javax/imageio/metadata/SCCS/s.IIOMetadata.java javax/imageio/metadata/SCCS/s.IIOMetadataController.java javax/imageio/metadata/SCCS/s.IIOMetadataFormat.java javax/imageio/metadata/SCCS/s.IIOMetadataFormatImpl.java javax/imageio/metadata/SCCS/s.IIOMetadataNode.java javax/imageio/metadata/SCCS/s.package.html javax/imageio/metadata/doc-files javax/imageio/metadata/doc-files/SCCS javax/imageio/metadata/doc-files/SCCS/s.jpeg_metadata.html javax/imageio/metadata/doc-files/SCCS/s.bmp_metadata.html javax/imageio/metadata/doc-files/SCCS/s.gif_metadata.html javax/imageio/metadata/doc-files/SCCS/s.standard_metadata.html javax/imageio/metadata/doc-files/SCCS/s.png_metadata.html javax/imageio/metadata/doc-files/SCCS/s.wbmp_metadata.html javax/imageio/metadata/doc-files/standard_metadata.html javax/imageio/metadata/doc-files/bmp_metadata.html javax/imageio/metadata/doc-files/gif_metadata.html javax/imageio/metadata/doc-files/jpeg_metadata.html javax/imageio/metadata/doc-files/png_metadata.html javax/imageio/metadata/doc-files/wbmp_metadata.html javax/imageio/metadata/IIOInvalidTreeException.java javax/imageio/metadata/IIOMetadata.java javax/imageio/metadata/IIOMetadataController.java javax/imageio/metadata/IIOMetadataFormat.java javax/imageio/metadata/IIOMetadataFormatImpl.java javax/imageio/metadata/IIOMetadataNode.java javax/imageio/metadata/package.html javax/imageio/plugins javax/imageio/plugins/bmp javax/imageio/plugins/bmp/SCCS javax/imageio/plugins/bmp/SCCS/s.BMPImageWriteParam.java javax/imageio/plugins/bmp/SCCS/s.package.html javax/imageio/plugins/bmp/BMPImageWriteParam.java javax/imageio/plugins/bmp/package.html javax/imageio/plugins/jpeg javax/imageio/plugins/jpeg/SCCS javax/imageio/plugins/jpeg/SCCS/s.JPEGImageReadParam.java javax/imageio/plugins/jpeg/SCCS/s.JPEGHuffmanTable.java javax/imageio/plugins/jpeg/SCCS/s.JPEGImageWriteParam.java javax/imageio/plugins/jpeg/SCCS/s.JPEGQTable.java javax/imageio/plugins/jpeg/SCCS/s.package.html javax/imageio/plugins/jpeg/JPEGImageWriteParam.java javax/imageio/plugins/jpeg/JPEGHuffmanTable.java javax/imageio/plugins/jpeg/JPEGImageReadParam.java javax/imageio/plugins/jpeg/JPEGQTable.java javax/imageio/plugins/jpeg/package.html javax/imageio/spi javax/imageio/spi/SCCS javax/imageio/spi/SCCS/s.IIOServiceProvider.java javax/imageio/spi/SCCS/s.DigraphNode.java javax/imageio/spi/SCCS/s.IIORegistry.java javax/imageio/spi/SCCS/s.ImageInputStreamSpi.java javax/imageio/spi/SCCS/s.ImageOutputStreamSpi.java javax/imageio/spi/SCCS/s.ImageReaderSpi.java javax/imageio/spi/SCCS/s.ImageReaderWriterSpi.java javax/imageio/spi/SCCS/s.ImageTranscoderSpi.java javax/imageio/spi/SCCS/s.ImageWriterSpi.java javax/imageio/spi/SCCS/s.PartiallyOrderedSet.java javax/imageio/spi/SCCS/s.RegisterableService.java javax/imageio/spi/SCCS/s.ServiceRegistry.java javax/imageio/spi/SCCS/s.package.html javax/imageio/spi/IIOServiceProvider.java javax/imageio/spi/DigraphNode.java javax/imageio/spi/IIORegistry.java javax/imageio/spi/ImageInputStreamSpi.java javax/imageio/spi/ImageOutputStreamSpi.java javax/imageio/spi/ImageReaderSpi.java javax/imageio/spi/ImageReaderWriterSpi.java javax/imageio/spi/ImageTranscoderSpi.java javax/imageio/spi/ImageWriterSpi.java javax/imageio/spi/PartiallyOrderedSet.java javax/imageio/spi/RegisterableService.java javax/imageio/spi/ServiceRegistry.java javax/imageio/spi/package.html javax/imageio/stream javax/imageio/stream/SCCS javax/imageio/stream/SCCS/s.FileCacheImageInputStream.java javax/imageio/stream/SCCS/s.FileCacheImageOutputStream.java javax/imageio/stream/SCCS/s.FileImageInputStream.java javax/imageio/stream/SCCS/s.FileImageOutputStream.java javax/imageio/stream/SCCS/s.IIOByteBuffer.java javax/imageio/stream/SCCS/s.ImageInputStream.java javax/imageio/stream/SCCS/s.ImageInputStreamImpl.java javax/imageio/stream/SCCS/s.ImageOutputStream.java javax/imageio/stream/SCCS/s.ImageOutputStreamImpl.java javax/imageio/stream/SCCS/s.MemoryCache.java javax/imageio/stream/SCCS/s.MemoryCacheImageInputStream.java javax/imageio/stream/SCCS/s.package.html javax/imageio/stream/SCCS/s.MemoryCacheImageOutputStream.java javax/imageio/stream/MemoryCacheImageInputStream.java javax/imageio/stream/FileCacheImageInputStream.java javax/imageio/stream/FileCacheImageOutputStream.java javax/imageio/stream/FileImageInputStream.java javax/imageio/stream/FileImageOutputStream.java javax/imageio/stream/IIOByteBuffer.java javax/imageio/stream/ImageInputStream.java javax/imageio/stream/ImageInputStreamImpl.java javax/imageio/stream/ImageOutputStream.java javax/imageio/stream/ImageOutputStreamImpl.java javax/imageio/stream/MemoryCache.java javax/imageio/stream/package.html javax/imageio/stream/MemoryCacheImageOutputStream.java javax/imageio/IIOParamController.java javax/imageio/IIOException.java javax/imageio/IIOImage.java javax/imageio/IIOParam.java javax/imageio/ImageTranscoder.java javax/imageio/ImageIO.java javax/imageio/ImageReadParam.java javax/imageio/ImageReader.java javax/imageio/ImageTypeSpecifier.java javax/imageio/ImageWriteParam.java javax/imageio/ImageWriter.java javax/imageio/package.html javax/management javax/management/SCCS javax/management/SCCS/s.AndQueryExp.java javax/management/SCCS/s.Attribute.java javax/management/SCCS/s.AttributeList.java javax/management/SCCS/s.QueryEval.java javax/management/SCCS/s.Query.java javax/management/SCCS/s.AttributeChangeNotification.java javax/management/SCCS/s.AttributeChangeNotificationFilter.java javax/management/SCCS/s.AttributeNotFoundException.java javax/management/SCCS/s.AttributeValueExp.java javax/management/SCCS/s.BadAttributeValueExpException.java javax/management/SCCS/s.BadBinaryOpValueExpException.java javax/management/SCCS/s.BadStringOperationException.java javax/management/SCCS/s.BetweenQueryExp.java javax/management/SCCS/s.BinaryOpValueExp.java javax/management/SCCS/s.BinaryRelQueryExp.java javax/management/SCCS/s.BooleanValueExp.java javax/management/SCCS/s.ClassAttributeValueExp.java javax/management/SCCS/s.DefaultLoaderRepository.java javax/management/SCCS/s.Descriptor.java javax/management/SCCS/s.DescriptorAccess.java javax/management/SCCS/s.DynamicMBean.java javax/management/SCCS/s.InQueryExp.java javax/management/SCCS/s.InstanceAlreadyExistsException.java javax/management/SCCS/s.InstanceNotFoundException.java javax/management/SCCS/s.IntrospectionException.java javax/management/SCCS/s.InvalidApplicationException.java javax/management/SCCS/s.JMException.java javax/management/SCCS/s.InvalidAttributeValueException.java javax/management/SCCS/s.JMRuntimeException.java javax/management/SCCS/s.ListenerNotFoundException.java javax/management/SCCS/s.MBeanAttributeInfo.java javax/management/SCCS/s.MBeanConstructorInfo.java javax/management/SCCS/s.MBeanException.java javax/management/SCCS/s.MBeanFeatureInfo.java javax/management/SCCS/s.MBeanInfo.java javax/management/SCCS/s.MBeanNotificationInfo.java javax/management/SCCS/s.MBeanOperationInfo.java javax/management/SCCS/s.MBeanParameterInfo.java javax/management/SCCS/s.MBeanPermission.java javax/management/SCCS/s.MBeanRegistration.java javax/management/SCCS/s.MBeanServer.java javax/management/SCCS/s.MBeanRegistrationException.java javax/management/SCCS/s.MBeanServerBuilder.java javax/management/SCCS/s.MBeanServerConnection.java javax/management/SCCS/s.MBeanServerDelegate.java javax/management/SCCS/s.MBeanServerDelegateMBean.java javax/management/SCCS/s.MBeanServerFactory.java javax/management/SCCS/s.MBeanServerInvocationHandler.java javax/management/SCCS/s.MBeanServerNotification.java javax/management/SCCS/s.MBeanServerPermission.java javax/management/SCCS/s.MBeanTrustPermission.java javax/management/SCCS/s.MalformedObjectNameException.java javax/management/SCCS/s.MatchQueryExp.java javax/management/SCCS/s.NotCompliantMBeanException.java javax/management/SCCS/s.NotQueryExp.java javax/management/SCCS/s.Notification.java javax/management/SCCS/s.NotificationBroadcaster.java javax/management/SCCS/s.NotificationBroadcasterSupport.java javax/management/SCCS/s.NotificationEmitter.java javax/management/SCCS/s.NotificationFilter.java javax/management/SCCS/s.NotificationFilterSupport.java javax/management/SCCS/s.NotificationListener.java javax/management/SCCS/s.NumericValueExp.java javax/management/SCCS/s.ObjectInstance.java javax/management/SCCS/s.ObjectName.java javax/management/SCCS/s.OperationsException.java javax/management/SCCS/s.OrQueryExp.java javax/management/SCCS/s.PersistentMBean.java javax/management/SCCS/s.QueryExp.java javax/management/SCCS/s.QualifiedAttributeValueExp.java javax/management/SCCS/s.RuntimeErrorException.java javax/management/SCCS/s.ReflectionException.java javax/management/SCCS/s.RuntimeMBeanException.java javax/management/SCCS/s.RuntimeOperationsException.java javax/management/SCCS/s.ServiceNotFoundException.java javax/management/SCCS/s.StandardMBean.java javax/management/SCCS/s.StringValueExp.java javax/management/SCCS/s.ValueExp.java javax/management/SCCS/s.package.html javax/management/loading javax/management/loading/SCCS javax/management/loading/SCCS/s.MLetContent.java javax/management/loading/SCCS/s.MLet.java javax/management/loading/SCCS/s.ClassLoaderRepository.java javax/management/loading/SCCS/s.DefaultLoaderRepository.java javax/management/loading/SCCS/s.MLetMBean.java javax/management/loading/SCCS/s.MLetParser.java javax/management/loading/SCCS/s.package.html javax/management/loading/SCCS/s.MLetObjectInputStream.java javax/management/loading/SCCS/s.PrivateClassLoader.java javax/management/loading/SCCS/s.PrivateMLet.java javax/management/loading/DefaultLoaderRepository.java javax/management/loading/ClassLoaderRepository.java javax/management/loading/MLetContent.java javax/management/loading/MLet.java javax/management/loading/MLetMBean.java javax/management/loading/MLetParser.java javax/management/loading/package.html javax/management/loading/MLetObjectInputStream.java javax/management/loading/PrivateClassLoader.java javax/management/loading/PrivateMLet.java javax/management/modelmbean javax/management/modelmbean/SCCS javax/management/modelmbean/SCCS/s.DescriptorSupport.java javax/management/modelmbean/SCCS/s.ModelMBean.java javax/management/modelmbean/SCCS/s.ModelMBeanInfoSupport.java javax/management/modelmbean/SCCS/s.ModelMBeanInfo.java javax/management/modelmbean/SCCS/s.InvalidTargetObjectTypeException.java javax/management/modelmbean/SCCS/s.ModelMBeanAttributeInfo.java javax/management/modelmbean/SCCS/s.ModelMBeanConstructorInfo.java javax/management/modelmbean/SCCS/s.ModelMBeanNotificationBroadcaster.java javax/management/modelmbean/SCCS/s.ModelMBeanNotificationInfo.java javax/management/modelmbean/SCCS/s.ModelMBeanOperationInfo.java javax/management/modelmbean/SCCS/s.RequiredModelMBean.java javax/management/modelmbean/SCCS/s.XMLParseException.java javax/management/modelmbean/SCCS/s.package.html javax/management/modelmbean/DescriptorSupport.java javax/management/modelmbean/ModelMBean.java javax/management/modelmbean/ModelMBeanInfo.java javax/management/modelmbean/ModelMBeanNotificationInfo.java javax/management/modelmbean/InvalidTargetObjectTypeException.java javax/management/modelmbean/ModelMBeanAttributeInfo.java javax/management/modelmbean/ModelMBeanConstructorInfo.java javax/management/modelmbean/ModelMBeanInfoSupport.java javax/management/modelmbean/package.html javax/management/modelmbean/ModelMBeanNotificationBroadcaster.java javax/management/modelmbean/ModelMBeanOperationInfo.java javax/management/modelmbean/RequiredModelMBean.java javax/management/modelmbean/XMLParseException.java javax/management/monitor javax/management/monitor/SCCS javax/management/monitor/SCCS/s.CounterMonitorMBean.java javax/management/monitor/SCCS/s.CounterMonitor.java javax/management/monitor/SCCS/s.GaugeMonitorMBean.java javax/management/monitor/SCCS/s.GaugeMonitor.java javax/management/monitor/SCCS/s.MonitorNotification.java javax/management/monitor/SCCS/s.Monitor.java javax/management/monitor/SCCS/s.MonitorMBean.java javax/management/monitor/SCCS/s.MonitorSettingException.java javax/management/monitor/SCCS/s.StringMonitor.java javax/management/monitor/SCCS/s.StringMonitorMBean.java javax/management/monitor/SCCS/s.package.html javax/management/monitor/CounterMonitorMBean.java javax/management/monitor/CounterMonitor.java javax/management/monitor/GaugeMonitorMBean.java javax/management/monitor/GaugeMonitor.java javax/management/monitor/MonitorNotification.java javax/management/monitor/Monitor.java javax/management/monitor/MonitorMBean.java javax/management/monitor/MonitorSettingException.java javax/management/monitor/StringMonitor.java javax/management/monitor/StringMonitorMBean.java javax/management/monitor/package.html javax/management/openmbean javax/management/openmbean/SCCS javax/management/openmbean/SCCS/s.CompositeData.java javax/management/openmbean/SCCS/s.ArrayType.java javax/management/openmbean/SCCS/s.KeyAlreadyExistsException.java javax/management/openmbean/SCCS/s.CompositeDataSupport.java javax/management/openmbean/SCCS/s.CompositeType.java javax/management/openmbean/SCCS/s.InvalidKeyException.java javax/management/openmbean/SCCS/s.InvalidOpenTypeException.java javax/management/openmbean/SCCS/s.OpenMBeanAttributeInfoSupport.java javax/management/openmbean/SCCS/s.OpenDataException.java javax/management/openmbean/SCCS/s.OpenMBeanAttributeInfo.java javax/management/openmbean/SCCS/s.OpenMBeanConstructorInfo.java javax/management/openmbean/SCCS/s.OpenMBeanInfo.java javax/management/openmbean/SCCS/s.OpenMBeanOperationInfo.java javax/management/openmbean/SCCS/s.OpenMBeanConstructorInfoSupport.java javax/management/openmbean/SCCS/s.OpenMBeanInfoSupport.java javax/management/openmbean/SCCS/s.SimpleType.java javax/management/openmbean/SCCS/s.OpenType.java javax/management/openmbean/SCCS/s.OpenMBeanOperationInfoSupport.java javax/management/openmbean/SCCS/s.OpenMBeanParameterInfo.java javax/management/openmbean/SCCS/s.OpenMBeanParameterInfoSupport.java javax/management/openmbean/SCCS/s.TabularDataSupport.java javax/management/openmbean/SCCS/s.TabularData.java javax/management/openmbean/SCCS/s.TabularType.java javax/management/openmbean/SCCS/s.package.html javax/management/openmbean/CompositeData.java javax/management/openmbean/ArrayType.java javax/management/openmbean/OpenMBeanAttributeInfoSupport.java javax/management/openmbean/CompositeDataSupport.java javax/management/openmbean/CompositeType.java javax/management/openmbean/InvalidKeyException.java javax/management/openmbean/InvalidOpenTypeException.java javax/management/openmbean/KeyAlreadyExistsException.java javax/management/openmbean/OpenDataException.java javax/management/openmbean/OpenMBeanAttributeInfo.java javax/management/openmbean/OpenMBeanConstructorInfo.java javax/management/openmbean/OpenMBeanInfo.java javax/management/openmbean/OpenType.java javax/management/openmbean/TabularDataSupport.java javax/management/openmbean/OpenMBeanConstructorInfoSupport.java javax/management/openmbean/OpenMBeanInfoSupport.java javax/management/openmbean/OpenMBeanOperationInfo.java javax/management/openmbean/OpenMBeanOperationInfoSupport.java javax/management/openmbean/OpenMBeanParameterInfo.java javax/management/openmbean/OpenMBeanParameterInfoSupport.java javax/management/openmbean/SimpleType.java javax/management/openmbean/TabularData.java javax/management/openmbean/TabularType.java javax/management/openmbean/package.html javax/management/relation javax/management/relation/SCCS javax/management/relation/SCCS/s.InvalidRelationServiceException.java javax/management/relation/SCCS/s.InvalidRelationIdException.java javax/management/relation/SCCS/s.Relation.java javax/management/relation/SCCS/s.InvalidRelationTypeException.java javax/management/relation/SCCS/s.InvalidRoleInfoException.java javax/management/relation/SCCS/s.InvalidRoleValueException.java javax/management/relation/SCCS/s.MBeanServerNotificationFilter.java javax/management/relation/SCCS/s.RelationService.java javax/management/relation/SCCS/s.RoleInfoNotFoundException.java javax/management/relation/SCCS/s.RelationException.java javax/management/relation/SCCS/s.RelationNotFoundException.java javax/management/relation/SCCS/s.RelationNotification.java javax/management/relation/SCCS/s.RelationServiceMBean.java javax/management/relation/SCCS/s.RelationSupport.java javax/management/relation/SCCS/s.RelationType.java javax/management/relation/SCCS/s.RelationServiceNotRegisteredException.java javax/management/relation/SCCS/s.RelationSupportMBean.java javax/management/relation/SCCS/s.RelationTypeSupport.java javax/management/relation/SCCS/s.Role.java javax/management/relation/SCCS/s.RelationTypeNotFoundException.java javax/management/relation/SCCS/s.RoleInfo.java javax/management/relation/SCCS/s.RoleList.java javax/management/relation/SCCS/s.RoleResult.java javax/management/relation/SCCS/s.RoleNotFoundException.java javax/management/relation/SCCS/s.RoleStatus.java javax/management/relation/SCCS/s.RoleUnresolved.java javax/management/relation/SCCS/s.RoleUnresolvedList.java javax/management/relation/SCCS/s.package.html javax/management/relation/InvalidRelationServiceException.java javax/management/relation/InvalidRelationIdException.java javax/management/relation/RelationServiceNotRegisteredException.java javax/management/relation/InvalidRelationTypeException.java javax/management/relation/InvalidRoleInfoException.java javax/management/relation/InvalidRoleValueException.java javax/management/relation/MBeanServerNotificationFilter.java javax/management/relation/Relation.java javax/management/relation/RelationException.java javax/management/relation/RelationNotFoundException.java javax/management/relation/RelationNotification.java javax/management/relation/RelationService.java javax/management/relation/RelationServiceMBean.java javax/management/relation/RelationSupportMBean.java javax/management/relation/RelationSupport.java javax/management/relation/RelationTypeSupport.java javax/management/relation/RelationType.java javax/management/relation/Role.java javax/management/relation/RelationTypeNotFoundException.java javax/management/relation/RoleInfo.java javax/management/relation/RoleList.java javax/management/relation/RoleResult.java javax/management/relation/RoleUnresolvedList.java javax/management/relation/RoleInfoNotFoundException.java javax/management/relation/RoleNotFoundException.java javax/management/relation/RoleStatus.java javax/management/relation/RoleUnresolved.java javax/management/relation/package.html javax/management/remote javax/management/remote/SCCS javax/management/remote/SCCS/s.JMXAuthenticator.java javax/management/remote/SCCS/s.JMXConnector.java javax/management/remote/SCCS/s.JMXProviderException.java javax/management/remote/SCCS/s.JMXPrincipal.java javax/management/remote/SCCS/s.JMXConnectionNotification.java javax/management/remote/SCCS/s.JMXConnectorFactory.java javax/management/remote/SCCS/s.JMXConnectorProvider.java javax/management/remote/SCCS/s.JMXConnectorServer.java javax/management/remote/SCCS/s.JMXConnectorServerFactory.java javax/management/remote/SCCS/s.JMXConnectorServerMBean.java javax/management/remote/SCCS/s.JMXConnectorServerProvider.java javax/management/remote/SCCS/s.JMXServiceURL.java javax/management/remote/SCCS/s.JMXServerErrorException.java javax/management/remote/SCCS/s.MBeanServerForwarder.java javax/management/remote/SCCS/s.NotificationResult.java javax/management/remote/SCCS/s.SubjectDelegationPermission.java javax/management/remote/SCCS/s.TargetedNotification.java javax/management/remote/SCCS/s.package.html javax/management/remote/rmi javax/management/remote/rmi/SCCS javax/management/remote/rmi/SCCS/s.NoCallStackClassLoader.java javax/management/remote/rmi/SCCS/s.RMIConnection.java javax/management/remote/rmi/SCCS/s.RMIConnectionImpl.java javax/management/remote/rmi/SCCS/s.RMIConnector.java javax/management/remote/rmi/SCCS/s.RMIConnectorServer.java javax/management/remote/rmi/SCCS/s.RMIIIOPServerImpl.java javax/management/remote/rmi/SCCS/s.RMIJRMPServerImpl.java javax/management/remote/rmi/SCCS/s.RMIServer.java javax/management/remote/rmi/SCCS/s.RMIServerImpl.java javax/management/remote/rmi/SCCS/s.package.html javax/management/remote/rmi/NoCallStackClassLoader.java javax/management/remote/rmi/RMIConnection.java javax/management/remote/rmi/RMIConnectionImpl.java javax/management/remote/rmi/RMIConnector.java javax/management/remote/rmi/RMIConnectorServer.java javax/management/remote/rmi/RMIIIOPServerImpl.java javax/management/remote/rmi/RMIJRMPServerImpl.java javax/management/remote/rmi/RMIServer.java javax/management/remote/rmi/RMIServerImpl.java javax/management/remote/rmi/package.html javax/management/remote/JMXConnectionNotification.java javax/management/remote/JMXAuthenticator.java javax/management/remote/JMXConnectorFactory.java javax/management/remote/JMXConnector.java javax/management/remote/JMXConnectorServerFactory.java javax/management/remote/JMXConnectorProvider.java javax/management/remote/JMXConnectorServer.java javax/management/remote/JMXConnectorServerMBean.java javax/management/remote/JMXConnectorServerProvider.java javax/management/remote/JMXPrincipal.java javax/management/remote/JMXProviderException.java javax/management/remote/JMXServerErrorException.java javax/management/remote/JMXServiceURL.java javax/management/remote/MBeanServerForwarder.java javax/management/remote/NotificationResult.java javax/management/remote/SubjectDelegationPermission.java javax/management/remote/TargetedNotification.java javax/management/remote/package.html javax/management/timer javax/management/timer/SCCS javax/management/timer/SCCS/s.TimerMBean.java javax/management/timer/SCCS/s.Timer.java javax/management/timer/SCCS/s.TimerAlarmClockNotification.java javax/management/timer/SCCS/s.TimerNotification.java javax/management/timer/SCCS/s.package.html javax/management/timer/TimerMBean.java javax/management/timer/Timer.java javax/management/timer/TimerAlarmClockNotification.java javax/management/timer/TimerNotification.java javax/management/timer/package.html javax/management/AndQueryExp.java javax/management/Attribute.java javax/management/AttributeList.java javax/management/DescriptorAccess.java javax/management/Descriptor.java javax/management/AttributeChangeNotification.java javax/management/AttributeChangeNotificationFilter.java javax/management/AttributeNotFoundException.java javax/management/AttributeValueExp.java javax/management/BadAttributeValueExpException.java javax/management/BadBinaryOpValueExpException.java javax/management/BadStringOperationException.java javax/management/BetweenQueryExp.java javax/management/BinaryOpValueExp.java javax/management/BinaryRelQueryExp.java javax/management/BooleanValueExp.java javax/management/ClassAttributeValueExp.java javax/management/DefaultLoaderRepository.java javax/management/DynamicMBean.java javax/management/InQueryExp.java javax/management/InvalidApplicationException.java javax/management/InstanceNotFoundException.java javax/management/InstanceAlreadyExistsException.java javax/management/IntrospectionException.java javax/management/Query.java javax/management/StandardMBean.java javax/management/InvalidAttributeValueException.java javax/management/JMException.java javax/management/JMRuntimeException.java javax/management/ListenerNotFoundException.java javax/management/MBeanAttributeInfo.java javax/management/MBeanConstructorInfo.java javax/management/MBeanException.java javax/management/MBeanFeatureInfo.java javax/management/MBeanInfo.java javax/management/MBeanNotificationInfo.java javax/management/MBeanOperationInfo.java javax/management/MBeanParameterInfo.java javax/management/MBeanPermission.java javax/management/MBeanRegistration.java javax/management/MBeanRegistrationException.java javax/management/MBeanServer.java javax/management/MBeanServerBuilder.java javax/management/MBeanServerConnection.java javax/management/MBeanServerDelegate.java javax/management/MBeanServerDelegateMBean.java javax/management/MBeanServerFactory.java javax/management/MBeanServerInvocationHandler.java javax/management/MBeanServerNotification.java javax/management/MBeanServerPermission.java javax/management/MBeanTrustPermission.java javax/management/MalformedObjectNameException.java javax/management/MatchQueryExp.java javax/management/NotCompliantMBeanException.java javax/management/NotQueryExp.java javax/management/Notification.java javax/management/NotificationBroadcaster.java javax/management/NotificationBroadcasterSupport.java javax/management/NotificationEmitter.java javax/management/NotificationFilter.java javax/management/NotificationFilterSupport.java javax/management/NotificationListener.java javax/management/NumericValueExp.java javax/management/ObjectInstance.java javax/management/ObjectName.java javax/management/OperationsException.java javax/management/OrQueryExp.java javax/management/PersistentMBean.java javax/management/QualifiedAttributeValueExp.java javax/management/QueryEval.java javax/management/QueryExp.java javax/management/RuntimeOperationsException.java javax/management/ReflectionException.java javax/management/RuntimeErrorException.java javax/management/RuntimeMBeanException.java javax/management/ServiceNotFoundException.java javax/management/StringValueExp.java javax/management/ValueExp.java javax/management/package.html javax/naming javax/naming/SCCS javax/naming/SCCS/s.AuthenticationException.java javax/naming/SCCS/s.BinaryRefAddr.java javax/naming/SCCS/s.Binding.java javax/naming/SCCS/s.AuthenticationNotSupportedException.java javax/naming/SCCS/s.CannotProceedException.java javax/naming/SCCS/s.CommunicationException.java javax/naming/SCCS/s.CompositeName.java javax/naming/SCCS/s.CompoundName.java javax/naming/SCCS/s.ConfigurationException.java javax/naming/SCCS/s.Context.java javax/naming/SCCS/s.ContextNotEmptyException.java javax/naming/SCCS/s.InitialContext.java javax/naming/SCCS/s.LinkRef.java javax/naming/SCCS/s.NameNotFoundException.java javax/naming/SCCS/s.InsufficientResourcesException.java javax/naming/SCCS/s.InterruptedNamingException.java javax/naming/SCCS/s.InvalidNameException.java javax/naming/SCCS/s.LimitExceededException.java javax/naming/SCCS/s.LinkException.java javax/naming/SCCS/s.LinkLoopException.java javax/naming/SCCS/s.Name.java javax/naming/SCCS/s.NameImpl.java javax/naming/SCCS/s.MalformedLinkException.java javax/naming/SCCS/s.NameClassPair.java javax/naming/SCCS/s.NameAlreadyBoundException.java javax/naming/SCCS/s.NameParser.java javax/naming/SCCS/s.NamingEnumeration.java javax/naming/SCCS/s.OperationNotSupportedException.java javax/naming/SCCS/s.NamingException.java javax/naming/SCCS/s.NamingSecurityException.java javax/naming/SCCS/s.NoInitialContextException.java javax/naming/SCCS/s.NoPermissionException.java javax/naming/SCCS/s.NotContextException.java javax/naming/SCCS/s.ServiceUnavailableException.java javax/naming/SCCS/s.PartialResultException.java javax/naming/SCCS/s.RefAddr.java javax/naming/SCCS/s.Reference.java javax/naming/SCCS/s.Referenceable.java javax/naming/SCCS/s.ReferralException.java javax/naming/SCCS/s.SizeLimitExceededException.java javax/naming/SCCS/s.StringRefAddr.java javax/naming/SCCS/s.package.html javax/naming/SCCS/s.TimeLimitExceededException.java javax/naming/directory javax/naming/directory/SCCS javax/naming/directory/SCCS/s.Attribute.java javax/naming/directory/SCCS/s.Attributes.java javax/naming/directory/SCCS/s.InvalidAttributeIdentifierException.java javax/naming/directory/SCCS/s.AttributeInUseException.java javax/naming/directory/SCCS/s.AttributeModificationException.java javax/naming/directory/SCCS/s.BasicAttribute.java javax/naming/directory/SCCS/s.BasicAttributes.java javax/naming/directory/SCCS/s.DirContext.java javax/naming/directory/SCCS/s.InitialDirContext.java javax/naming/directory/SCCS/s.package.html javax/naming/directory/SCCS/s.InvalidAttributeValueException.java javax/naming/directory/SCCS/s.InvalidAttributesException.java javax/naming/directory/SCCS/s.InvalidSearchControlsException.java javax/naming/directory/SCCS/s.InvalidSearchFilterException.java javax/naming/directory/SCCS/s.ModificationItem.java javax/naming/directory/SCCS/s.NoSuchAttributeException.java javax/naming/directory/SCCS/s.SchemaViolationException.java javax/naming/directory/SCCS/s.SearchControls.java javax/naming/directory/SCCS/s.SearchResult.java javax/naming/directory/Attribute.java javax/naming/directory/Attributes.java javax/naming/directory/InitialDirContext.java javax/naming/directory/DirContext.java javax/naming/directory/AttributeInUseException.java javax/naming/directory/AttributeModificationException.java javax/naming/directory/BasicAttribute.java javax/naming/directory/BasicAttributes.java javax/naming/directory/package.html javax/naming/directory/InvalidAttributeIdentifierException.java javax/naming/directory/InvalidAttributeValueException.java javax/naming/directory/InvalidAttributesException.java javax/naming/directory/SearchControls.java javax/naming/directory/ModificationItem.java javax/naming/directory/InvalidSearchControlsException.java javax/naming/directory/InvalidSearchFilterException.java javax/naming/directory/NoSuchAttributeException.java javax/naming/directory/SchemaViolationException.java javax/naming/directory/SearchResult.java javax/naming/event javax/naming/event/SCCS javax/naming/event/SCCS/s.EventDirContext.java javax/naming/event/SCCS/s.EventContext.java javax/naming/event/SCCS/s.NamespaceChangeListener.java javax/naming/event/SCCS/s.NamingEvent.java javax/naming/event/SCCS/s.NamingExceptionEvent.java javax/naming/event/SCCS/s.NamingListener.java javax/naming/event/SCCS/s.ObjectChangeListener.java javax/naming/event/SCCS/s.package.html javax/naming/event/EventDirContext.java javax/naming/event/EventContext.java javax/naming/event/NamespaceChangeListener.java javax/naming/event/NamingEvent.java javax/naming/event/NamingExceptionEvent.java javax/naming/event/NamingListener.java javax/naming/event/ObjectChangeListener.java javax/naming/event/package.html javax/naming/ldap javax/naming/ldap/SCCS javax/naming/ldap/SCCS/s.ControlFactory.java javax/naming/ldap/SCCS/s.BasicControl.java javax/naming/ldap/SCCS/s.Control.java javax/naming/ldap/SCCS/s.LdapReferralException.java javax/naming/ldap/SCCS/s.ExtendedRequest.java javax/naming/ldap/SCCS/s.ExtendedResponse.java javax/naming/ldap/SCCS/s.HasControls.java javax/naming/ldap/SCCS/s.InitialLdapContext.java javax/naming/ldap/SCCS/s.LdapContext.java javax/naming/ldap/SCCS/s.LdapName.java javax/naming/ldap/SCCS/s.Rdn.java javax/naming/ldap/SCCS/s.ManageReferralControl.java javax/naming/ldap/SCCS/s.PagedResultsControl.java javax/naming/ldap/SCCS/s.PagedResultsResponseControl.java javax/naming/ldap/SCCS/s.UnsolicitedNotification.java javax/naming/ldap/SCCS/s.Rfc2253Parser.java javax/naming/ldap/SCCS/s.SortControl.java javax/naming/ldap/SCCS/s.SortKey.java javax/naming/ldap/SCCS/s.SortResponseControl.java javax/naming/ldap/SCCS/s.StartTlsRequest.java javax/naming/ldap/SCCS/s.StartTlsResponse.java javax/naming/ldap/SCCS/s.UnsolicitedNotificationListener.java javax/naming/ldap/SCCS/s.UnsolicitedNotificationEvent.java javax/naming/ldap/SCCS/s.package.html javax/naming/ldap/ExtendedRequest.java javax/naming/ldap/BasicControl.java javax/naming/ldap/Control.java javax/naming/ldap/ControlFactory.java javax/naming/ldap/PagedResultsResponseControl.java javax/naming/ldap/ExtendedResponse.java javax/naming/ldap/HasControls.java javax/naming/ldap/InitialLdapContext.java javax/naming/ldap/LdapContext.java javax/naming/ldap/LdapName.java javax/naming/ldap/LdapReferralException.java javax/naming/ldap/ManageReferralControl.java javax/naming/ldap/PagedResultsControl.java javax/naming/ldap/Rdn.java javax/naming/ldap/UnsolicitedNotification.java javax/naming/ldap/Rfc2253Parser.java javax/naming/ldap/SortControl.java javax/naming/ldap/SortKey.java javax/naming/ldap/SortResponseControl.java javax/naming/ldap/StartTlsRequest.java javax/naming/ldap/StartTlsResponse.java javax/naming/ldap/UnsolicitedNotificationListener.java javax/naming/ldap/UnsolicitedNotificationEvent.java javax/naming/ldap/package.html javax/naming/spi javax/naming/spi/SCCS javax/naming/spi/SCCS/s.ContinuationDirContext.java javax/naming/spi/SCCS/s.ContinuationContext.java javax/naming/spi/SCCS/s.InitialContextFactory.java javax/naming/spi/SCCS/s.DirObjectFactory.java javax/naming/spi/SCCS/s.DirStateFactory.java javax/naming/spi/SCCS/s.DirectoryManager.java javax/naming/spi/SCCS/s.InitialContextFactoryBuilder.java javax/naming/spi/SCCS/s.NamingManager.java javax/naming/spi/SCCS/s.ObjectFactory.java javax/naming/spi/SCCS/s.ObjectFactoryBuilder.java javax/naming/spi/SCCS/s.ResolveResult.java javax/naming/spi/SCCS/s.Resolver.java javax/naming/spi/SCCS/s.StateFactory.java javax/naming/spi/SCCS/s.package.html javax/naming/spi/InitialContextFactoryBuilder.java javax/naming/spi/ContinuationContext.java javax/naming/spi/ContinuationDirContext.java javax/naming/spi/DirObjectFactory.java javax/naming/spi/DirStateFactory.java javax/naming/spi/DirectoryManager.java javax/naming/spi/InitialContextFactory.java javax/naming/spi/ObjectFactoryBuilder.java javax/naming/spi/NamingManager.java javax/naming/spi/ObjectFactory.java javax/naming/spi/ResolveResult.java javax/naming/spi/Resolver.java javax/naming/spi/StateFactory.java javax/naming/spi/package.html javax/naming/AuthenticationException.java javax/naming/BinaryRefAddr.java javax/naming/Binding.java javax/naming/LinkRef.java javax/naming/AuthenticationNotSupportedException.java javax/naming/CannotProceedException.java javax/naming/CommunicationException.java javax/naming/CompositeName.java javax/naming/CompoundName.java javax/naming/ConfigurationException.java javax/naming/Context.java javax/naming/NameClassPair.java javax/naming/Name.java javax/naming/ContextNotEmptyException.java javax/naming/InitialContext.java javax/naming/InsufficientResourcesException.java javax/naming/InterruptedNamingException.java javax/naming/InvalidNameException.java javax/naming/LimitExceededException.java javax/naming/LinkException.java javax/naming/LinkLoopException.java javax/naming/MalformedLinkException.java javax/naming/NameAlreadyBoundException.java javax/naming/NameImpl.java javax/naming/NameNotFoundException.java javax/naming/NameParser.java javax/naming/RefAddr.java javax/naming/ServiceUnavailableException.java javax/naming/NamingEnumeration.java javax/naming/NamingException.java javax/naming/NamingSecurityException.java javax/naming/NoInitialContextException.java javax/naming/NoPermissionException.java javax/naming/NotContextException.java javax/naming/OperationNotSupportedException.java javax/naming/PartialResultException.java javax/naming/Reference.java javax/naming/Referenceable.java javax/naming/ReferralException.java javax/naming/SizeLimitExceededException.java javax/naming/StringRefAddr.java javax/naming/TimeLimitExceededException.java javax/naming/package.html javax/pack javax/pack/SCCS javax/print javax/print/SCCS javax/print/SCCS/s.AttributeException.java javax/print/SCCS/s.CancelablePrintJob.java javax/print/SCCS/s.Doc.java javax/print/SCCS/s.DocFlavor.java javax/print/SCCS/s.DocPrintJob.java javax/print/SCCS/s.FlavorException.java javax/print/SCCS/s.MimeType.java javax/print/SCCS/s.MultiDoc.java javax/print/SCCS/s.MultiDocPrintJob.java javax/print/SCCS/s.MultiDocPrintService.java javax/print/SCCS/s.PrintException.java javax/print/SCCS/s.PrintService.java javax/print/SCCS/s.PrintServiceLookup.java javax/print/SCCS/s.ServiceUI.java javax/print/SCCS/s.URIException.java javax/print/SCCS/s.ServiceUIFactory.java javax/print/SCCS/s.SimpleDoc.java javax/print/SCCS/s.StreamPrintService.java javax/print/SCCS/s.StreamPrintServiceFactory.java javax/print/SCCS/s.package.html javax/print/attribute javax/print/attribute/SCCS javax/print/attribute/SCCS/s.DateTimeSyntax.java javax/print/attribute/SCCS/s.Attribute.java javax/print/attribute/SCCS/s.AttributeSet.java javax/print/attribute/SCCS/s.AttributeSetUtilities.java javax/print/attribute/SCCS/s.DocAttribute.java javax/print/attribute/SCCS/s.DocAttributeSet.java javax/print/attribute/SCCS/s.EnumSyntax.java javax/print/attribute/SCCS/s.HashAttributeSet.java javax/print/attribute/SCCS/s.HashDocAttributeSet.java javax/print/attribute/SCCS/s.HashPrintJobAttributeSet.java javax/print/attribute/SCCS/s.HashPrintRequestAttributeSet.java javax/print/attribute/SCCS/s.HashPrintServiceAttributeSet.java javax/print/attribute/SCCS/s.IntegerSyntax.java javax/print/attribute/SCCS/s.PrintRequestAttribute.java javax/print/attribute/SCCS/s.PrintJobAttribute.java javax/print/attribute/SCCS/s.PrintJobAttributeSet.java javax/print/attribute/SCCS/s.PrintRequestAttributeSet.java javax/print/attribute/SCCS/s.PrintServiceAttribute.java javax/print/attribute/SCCS/s.PrintServiceAttributeSet.java javax/print/attribute/SCCS/s.ResolutionSyntax.java javax/print/attribute/SCCS/s.SetOfIntegerSyntax.java javax/print/attribute/SCCS/s.Size2DSyntax.java javax/print/attribute/SCCS/s.SupportedValuesAttribute.java javax/print/attribute/SCCS/s.TextSyntax.java javax/print/attribute/SCCS/s.URISyntax.java javax/print/attribute/SCCS/s.UnmodifiableSetException.java javax/print/attribute/SCCS/s.package.html javax/print/attribute/standard javax/print/attribute/standard/SCCS javax/print/attribute/standard/SCCS/s.ColorSupported.java javax/print/attribute/standard/SCCS/s.Chromaticity.java javax/print/attribute/standard/SCCS/s.DateTimeAtCompleted.java javax/print/attribute/standard/SCCS/s.Compression.java javax/print/attribute/standard/SCCS/s.Copies.java javax/print/attribute/standard/SCCS/s.CopiesSupported.java javax/print/attribute/standard/SCCS/s.DateTimeAtCreation.java javax/print/attribute/standard/SCCS/s.DateTimeAtProcessing.java javax/print/attribute/standard/SCCS/s.Destination.java javax/print/attribute/standard/SCCS/s.DocumentName.java javax/print/attribute/standard/SCCS/s.Fidelity.java javax/print/attribute/standard/SCCS/s.Finishings.java javax/print/attribute/standard/SCCS/s.JobHoldUntil.java javax/print/attribute/standard/SCCS/s.JobImpressions.java javax/print/attribute/standard/SCCS/s.PrinterResolution.java javax/print/attribute/standard/SCCS/s.PrinterName.java javax/print/attribute/standard/SCCS/s.JobImpressionsCompleted.java javax/print/attribute/standard/SCCS/s.JobImpressionsSupported.java javax/print/attribute/standard/SCCS/s.JobKOctets.java javax/print/attribute/standard/SCCS/s.JobKOctetsProcessed.java javax/print/attribute/standard/SCCS/s.JobKOctetsSupported.java javax/print/attribute/standard/SCCS/s.JobMediaSheets.java javax/print/attribute/standard/SCCS/s.JobMediaSheetsCompleted.java javax/print/attribute/standard/SCCS/s.JobMediaSheetsSupported.java javax/print/attribute/standard/SCCS/s.JobMessageFromOperator.java javax/print/attribute/standard/SCCS/s.JobName.java javax/print/attribute/standard/SCCS/s.JobOriginatingUserName.java javax/print/attribute/standard/SCCS/s.JobPriority.java javax/print/attribute/standard/SCCS/s.JobPrioritySupported.java javax/print/attribute/standard/SCCS/s.JobSheets.java javax/print/attribute/standard/SCCS/s.JobState.java javax/print/attribute/standard/SCCS/s.JobStateReason.java javax/print/attribute/standard/SCCS/s.JobStateReasons.java javax/print/attribute/standard/SCCS/s.Media.java javax/print/attribute/standard/SCCS/s.MediaName.java javax/print/attribute/standard/SCCS/s.MediaPrintableArea.java javax/print/attribute/standard/SCCS/s.MediaSize.java javax/print/attribute/standard/SCCS/s.MediaSizeName.java javax/print/attribute/standard/SCCS/s.MediaTray.java javax/print/attribute/standard/SCCS/s.MultipleDocumentHandling.java javax/print/attribute/standard/SCCS/s.NumberOfDocuments.java javax/print/attribute/standard/SCCS/s.NumberOfInterveningJobs.java javax/print/attribute/standard/SCCS/s.NumberUp.java javax/print/attribute/standard/SCCS/s.NumberUpSupported.java javax/print/attribute/standard/SCCS/s.OrientationRequested.java javax/print/attribute/standard/SCCS/s.OutputDeviceAssigned.java javax/print/attribute/standard/SCCS/s.Severity.java javax/print/attribute/standard/SCCS/s.PDLOverrideSupported.java javax/print/attribute/standard/SCCS/s.PageRanges.java javax/print/attribute/standard/SCCS/s.PagesPerMinute.java javax/print/attribute/standard/SCCS/s.PagesPerMinuteColor.java javax/print/attribute/standard/SCCS/s.PresentationDirection.java javax/print/attribute/standard/SCCS/s.PrintQuality.java javax/print/attribute/standard/SCCS/s.PrinterInfo.java javax/print/attribute/standard/SCCS/s.PrinterIsAcceptingJobs.java javax/print/attribute/standard/SCCS/s.PrinterLocation.java javax/print/attribute/standard/SCCS/s.PrinterMakeAndModel.java javax/print/attribute/standard/SCCS/s.PrinterMessageFromOperator.java javax/print/attribute/standard/SCCS/s.PrinterMoreInfo.java javax/print/attribute/standard/SCCS/s.PrinterMoreInfoManufacturer.java javax/print/attribute/standard/SCCS/s.Sides.java javax/print/attribute/standard/SCCS/s.PrinterState.java javax/print/attribute/standard/SCCS/s.PrinterStateReason.java javax/print/attribute/standard/SCCS/s.PrinterStateReasons.java javax/print/attribute/standard/SCCS/s.PrinterURI.java javax/print/attribute/standard/SCCS/s.QueuedJobCount.java javax/print/attribute/standard/SCCS/s.ReferenceUriSchemesSupported.java javax/print/attribute/standard/SCCS/s.RequestingUserName.java javax/print/attribute/standard/SCCS/s.SheetCollate.java javax/print/attribute/standard/SCCS/s.package.html javax/print/attribute/standard/CopiesSupported.java javax/print/attribute/standard/Chromaticity.java javax/print/attribute/standard/ColorSupported.java javax/print/attribute/standard/Compression.java javax/print/attribute/standard/Copies.java javax/print/attribute/standard/MediaName.java javax/print/attribute/standard/Media.java javax/print/attribute/standard/DateTimeAtCompleted.java javax/print/attribute/standard/DateTimeAtCreation.java javax/print/attribute/standard/DateTimeAtProcessing.java javax/print/attribute/standard/Destination.java javax/print/attribute/standard/DocumentName.java javax/print/attribute/standard/Fidelity.java javax/print/attribute/standard/Finishings.java javax/print/attribute/standard/JobHoldUntil.java javax/print/attribute/standard/JobImpressions.java javax/print/attribute/standard/JobKOctets.java javax/print/attribute/standard/JobImpressionsCompleted.java javax/print/attribute/standard/JobImpressionsSupported.java javax/print/attribute/standard/JobKOctetsProcessed.java javax/print/attribute/standard/JobKOctetsSupported.java javax/print/attribute/standard/JobMediaSheets.java javax/print/attribute/standard/JobMediaSheetsCompleted.java javax/print/attribute/standard/JobMediaSheetsSupported.java javax/print/attribute/standard/JobMessageFromOperator.java javax/print/attribute/standard/JobName.java javax/print/attribute/standard/JobOriginatingUserName.java javax/print/attribute/standard/JobPriority.java javax/print/attribute/standard/JobPrioritySupported.java javax/print/attribute/standard/JobSheets.java javax/print/attribute/standard/JobState.java javax/print/attribute/standard/JobStateReason.java javax/print/attribute/standard/JobStateReasons.java javax/print/attribute/standard/MultipleDocumentHandling.java javax/print/attribute/standard/MediaPrintableArea.java javax/print/attribute/standard/MediaSize.java javax/print/attribute/standard/MediaSizeName.java javax/print/attribute/standard/MediaTray.java javax/print/attribute/standard/NumberOfInterveningJobs.java javax/print/attribute/standard/NumberOfDocuments.java javax/print/attribute/standard/NumberUpSupported.java javax/print/attribute/standard/NumberUp.java javax/print/attribute/standard/PrinterMessageFromOperator.java javax/print/attribute/standard/OrientationRequested.java javax/print/attribute/standard/OutputDeviceAssigned.java javax/print/attribute/standard/PDLOverrideSupported.java javax/print/attribute/standard/PageRanges.java javax/print/attribute/standard/PagesPerMinute.java javax/print/attribute/standard/PagesPerMinuteColor.java javax/print/attribute/standard/PresentationDirection.java javax/print/attribute/standard/PrintQuality.java javax/print/attribute/standard/PrinterInfo.java javax/print/attribute/standard/PrinterIsAcceptingJobs.java javax/print/attribute/standard/PrinterLocation.java javax/print/attribute/standard/PrinterMakeAndModel.java javax/print/attribute/standard/PrinterMoreInfo.java javax/print/attribute/standard/PrinterName.java javax/print/attribute/standard/ReferenceUriSchemesSupported.java javax/print/attribute/standard/PrinterMoreInfoManufacturer.java javax/print/attribute/standard/PrinterResolution.java javax/print/attribute/standard/PrinterState.java javax/print/attribute/standard/PrinterStateReason.java javax/print/attribute/standard/PrinterStateReasons.java javax/print/attribute/standard/PrinterURI.java javax/print/attribute/standard/QueuedJobCount.java javax/print/attribute/standard/RequestingUserName.java javax/print/attribute/standard/Severity.java javax/print/attribute/standard/SheetCollate.java javax/print/attribute/standard/Sides.java javax/print/attribute/standard/package.html javax/print/attribute/AttributeSet.java javax/print/attribute/Attribute.java javax/print/attribute/HashPrintRequestAttributeSet.java javax/print/attribute/AttributeSetUtilities.java javax/print/attribute/DateTimeSyntax.java javax/print/attribute/DocAttribute.java javax/print/attribute/DocAttributeSet.java javax/print/attribute/EnumSyntax.java javax/print/attribute/HashAttributeSet.java javax/print/attribute/HashDocAttributeSet.java javax/print/attribute/HashPrintJobAttributeSet.java javax/print/attribute/HashPrintServiceAttributeSet.java javax/print/attribute/IntegerSyntax.java javax/print/attribute/Size2DSyntax.java javax/print/attribute/PrintJobAttribute.java javax/print/attribute/PrintJobAttributeSet.java javax/print/attribute/PrintRequestAttribute.java javax/print/attribute/PrintRequestAttributeSet.java javax/print/attribute/PrintServiceAttribute.java javax/print/attribute/PrintServiceAttributeSet.java javax/print/attribute/ResolutionSyntax.java javax/print/attribute/SetOfIntegerSyntax.java javax/print/attribute/SupportedValuesAttribute.java javax/print/attribute/TextSyntax.java javax/print/attribute/URISyntax.java javax/print/attribute/UnmodifiableSetException.java javax/print/attribute/package.html javax/print/event javax/print/event/SCCS javax/print/event/SCCS/s.PrintJobAdapter.java javax/print/event/SCCS/s.PrintEvent.java javax/print/event/SCCS/s.PrintServiceAttributeListener.java javax/print/event/SCCS/s.PrintJobAttributeEvent.java javax/print/event/SCCS/s.PrintJobAttributeListener.java javax/print/event/SCCS/s.PrintJobEvent.java javax/print/event/SCCS/s.PrintJobListener.java javax/print/event/SCCS/s.PrintServiceAttributeEvent.java javax/print/event/SCCS/s.package.html javax/print/event/PrintJobAdapter.java javax/print/event/PrintEvent.java javax/print/event/PrintJobAttributeListener.java javax/print/event/PrintJobAttributeEvent.java javax/print/event/PrintServiceAttributeEvent.java javax/print/event/PrintJobEvent.java javax/print/event/PrintJobListener.java javax/print/event/PrintServiceAttributeListener.java javax/print/event/package.html javax/print/MultiDocPrintService.java javax/print/AttributeException.java javax/print/CancelablePrintJob.java javax/print/Doc.java javax/print/DocFlavor.java javax/print/DocPrintJob.java javax/print/FlavorException.java javax/print/MimeType.java javax/print/MultiDoc.java javax/print/MultiDocPrintJob.java javax/print/StreamPrintServiceFactory.java javax/print/PrintException.java javax/print/PrintService.java javax/print/PrintServiceLookup.java javax/print/ServiceUI.java javax/print/ServiceUIFactory.java javax/print/SimpleDoc.java javax/print/StreamPrintService.java javax/print/URIException.java javax/print/package.html javax/rmi javax/rmi/CORBA javax/rmi/CORBA/SCCS javax/rmi/CORBA/SCCS/s.ClassDesc.java javax/rmi/CORBA/SCCS/s.Stub.java javax/rmi/CORBA/SCCS/s.StubDelegate.java javax/rmi/CORBA/SCCS/s.GetORBPropertiesFileAction.java javax/rmi/CORBA/SCCS/s.PortableRemoteObjectDelegate.java javax/rmi/CORBA/SCCS/s.Tie.java javax/rmi/CORBA/SCCS/s.Util.java javax/rmi/CORBA/SCCS/s.UtilDelegate.java javax/rmi/CORBA/SCCS/s.ValueHandler.java javax/rmi/CORBA/SCCS/s.package.html javax/rmi/CORBA/SCCS/s.ValueHandlerMultiFormat.java javax/rmi/CORBA/ClassDesc.java javax/rmi/CORBA/Stub.java javax/rmi/CORBA/Tie.java javax/rmi/CORBA/ValueHandlerMultiFormat.java javax/rmi/CORBA/GetORBPropertiesFileAction.java javax/rmi/CORBA/PortableRemoteObjectDelegate.java javax/rmi/CORBA/StubDelegate.java javax/rmi/CORBA/Util.java javax/rmi/CORBA/UtilDelegate.java javax/rmi/CORBA/ValueHandler.java javax/rmi/CORBA/package.html javax/rmi/SCCS javax/rmi/SCCS/s.PortableRemoteObject.java javax/rmi/SCCS/s.package.html javax/rmi/ssl javax/rmi/ssl/SCCS javax/rmi/ssl/SCCS/s.SslRMIClientSocketFactory.java javax/rmi/ssl/SCCS/s.SslRMIServerSocketFactory.java javax/rmi/ssl/SCCS/s.package.html javax/rmi/ssl/SslRMIClientSocketFactory.java javax/rmi/ssl/SslRMIServerSocketFactory.java javax/rmi/ssl/package.html javax/rmi/PortableRemoteObject.java javax/rmi/package.html javax/security javax/security/auth javax/security/auth/SCCS javax/security/auth/SCCS/s.DestroyFailedException.java javax/security/auth/SCCS/s.AuthPermission.java javax/security/auth/SCCS/s.Destroyable.java javax/security/auth/SCCS/s.Policy.java javax/security/auth/SCCS/s.Refreshable.java javax/security/auth/SCCS/s.Subject.java javax/security/auth/SCCS/s.PrivateCredentialPermission.java javax/security/auth/SCCS/s.RefreshFailedException.java javax/security/auth/SCCS/s.package.html javax/security/auth/SCCS/s.SubjectDomainCombiner.java javax/security/auth/callback javax/security/auth/callback/SCCS javax/security/auth/callback/SCCS/s.CallbackHandler.java javax/security/auth/callback/SCCS/s.Callback.java javax/security/auth/callback/SCCS/s.ConfirmationCallback.java javax/security/auth/callback/SCCS/s.ChoiceCallback.java javax/security/auth/callback/SCCS/s.UnsupportedCallbackException.java javax/security/auth/callback/SCCS/s.LanguageCallback.java javax/security/auth/callback/SCCS/s.NameCallback.java javax/security/auth/callback/SCCS/s.PasswordCallback.java javax/security/auth/callback/SCCS/s.TextInputCallback.java javax/security/auth/callback/SCCS/s.TextOutputCallback.java javax/security/auth/callback/SCCS/s.package.html javax/security/auth/callback/CallbackHandler.java javax/security/auth/callback/Callback.java javax/security/auth/callback/ConfirmationCallback.java javax/security/auth/callback/ChoiceCallback.java javax/security/auth/callback/LanguageCallback.java javax/security/auth/callback/NameCallback.java javax/security/auth/callback/PasswordCallback.java javax/security/auth/callback/TextInputCallback.java javax/security/auth/callback/TextOutputCallback.java javax/security/auth/callback/package.html javax/security/auth/callback/UnsupportedCallbackException.java javax/security/auth/kerberos javax/security/auth/kerberos/SCCS javax/security/auth/kerberos/SCCS/s.DelegationPermission.java javax/security/auth/kerberos/SCCS/s.KerberosKey.java javax/security/auth/kerberos/SCCS/s.KerberosPrincipal.java javax/security/auth/kerberos/SCCS/s.KerberosTicket.java javax/security/auth/kerberos/SCCS/s.KeyImpl.java javax/security/auth/kerberos/SCCS/s.ServicePermission.java javax/security/auth/kerberos/SCCS/s.package.html javax/security/auth/kerberos/DelegationPermission.java javax/security/auth/kerberos/KerberosKey.java javax/security/auth/kerberos/KerberosPrincipal.java javax/security/auth/kerberos/KerberosTicket.java javax/security/auth/kerberos/KeyImpl.java javax/security/auth/kerberos/ServicePermission.java javax/security/auth/kerberos/package.html javax/security/auth/login javax/security/auth/login/SCCS javax/security/auth/login/SCCS/s.AccountExpiredException.java javax/security/auth/login/SCCS/s.AccountException.java javax/security/auth/login/SCCS/s.CredentialExpiredException.java javax/security/auth/login/SCCS/s.AccountLockedException.java javax/security/auth/login/SCCS/s.AccountNotFoundException.java javax/security/auth/login/SCCS/s.AppConfigurationEntry.java javax/security/auth/login/SCCS/s.Configuration.java javax/security/auth/login/SCCS/s.CredentialException.java javax/security/auth/login/SCCS/s.CredentialNotFoundException.java javax/security/auth/login/SCCS/s.FailedLoginException.java javax/security/auth/login/SCCS/s.LoginContext.java javax/security/auth/login/SCCS/s.LoginException.java javax/security/auth/login/SCCS/s.package.html javax/security/auth/login/AccountExpiredException.java javax/security/auth/login/AccountException.java javax/security/auth/login/AccountNotFoundException.java javax/security/auth/login/AccountLockedException.java javax/security/auth/login/CredentialNotFoundException.java javax/security/auth/login/AppConfigurationEntry.java javax/security/auth/login/Configuration.java javax/security/auth/login/CredentialException.java javax/security/auth/login/CredentialExpiredException.java javax/security/auth/login/FailedLoginException.java javax/security/auth/login/LoginContext.java javax/security/auth/login/LoginException.java javax/security/auth/login/package.html javax/security/auth/spi javax/security/auth/spi/SCCS javax/security/auth/spi/SCCS/s.LoginModule.java javax/security/auth/spi/SCCS/s.package.html javax/security/auth/spi/LoginModule.java javax/security/auth/spi/package.html javax/security/auth/x500 javax/security/auth/x500/SCCS javax/security/auth/x500/SCCS/s.X500PrivateCredential.java javax/security/auth/x500/SCCS/s.X500Principal.java javax/security/auth/x500/SCCS/s.package.html javax/security/auth/x500/X500PrivateCredential.java javax/security/auth/x500/X500Principal.java javax/security/auth/x500/package.html javax/security/auth/DestroyFailedException.java javax/security/auth/AuthPermission.java javax/security/auth/RefreshFailedException.java javax/security/auth/Destroyable.java javax/security/auth/Policy.java javax/security/auth/PrivateCredentialPermission.java javax/security/auth/Refreshable.java javax/security/auth/Subject.java javax/security/auth/SubjectDomainCombiner.java javax/security/auth/package.html javax/security/sasl javax/security/sasl/SCCS javax/security/sasl/SCCS/s.SaslClient.java javax/security/sasl/SCCS/s.Sasl.java javax/security/sasl/SCCS/s.AuthenticationException.java javax/security/sasl/SCCS/s.AuthorizeCallback.java javax/security/sasl/SCCS/s.RealmCallback.java javax/security/sasl/SCCS/s.RealmChoiceCallback.java javax/security/sasl/SCCS/s.SaslClientFactory.java javax/security/sasl/SCCS/s.SaslException.java javax/security/sasl/SCCS/s.SaslServer.java javax/security/sasl/SCCS/s.SaslServerFactory.java javax/security/sasl/SCCS/s.package.html javax/security/sasl/SaslClient.java javax/security/sasl/Sasl.java javax/security/sasl/AuthenticationException.java javax/security/sasl/AuthorizeCallback.java javax/security/sasl/RealmCallback.java javax/security/sasl/RealmChoiceCallback.java javax/security/sasl/SaslClientFactory.java javax/security/sasl/SaslException.java javax/security/sasl/SaslServer.java javax/security/sasl/SaslServerFactory.java javax/security/sasl/package.html javax/sound javax/sound/midi javax/sound/midi/SCCS javax/sound/midi/SCCS/s.Sequencer.java javax/sound/midi/SCCS/s.ControllerEventListener.java javax/sound/midi/SCCS/s.Instrument.java javax/sound/midi/SCCS/s.InvalidMidiDataException.java javax/sound/midi/SCCS/s.MetaEventListener.java javax/sound/midi/SCCS/s.MetaMessage.java javax/sound/midi/SCCS/s.MidiChannel.java javax/sound/midi/SCCS/s.MidiDevice.java javax/sound/midi/SCCS/s.MidiEvent.java javax/sound/midi/SCCS/s.MidiFileFormat.java javax/sound/midi/SCCS/s.MidiMessage.java javax/sound/midi/SCCS/s.MidiSystem.java javax/sound/midi/SCCS/s.MidiUnavailableException.java javax/sound/midi/SCCS/s.Patch.java javax/sound/midi/SCCS/s.Receiver.java javax/sound/midi/SCCS/s.Sequence.java javax/sound/midi/SCCS/s.SoundbankResource.java javax/sound/midi/SCCS/s.ShortMessage.java javax/sound/midi/SCCS/s.Soundbank.java javax/sound/midi/SCCS/s.Synthesizer.java javax/sound/midi/SCCS/s.SysexMessage.java javax/sound/midi/SCCS/s.Track.java javax/sound/midi/SCCS/s.Transmitter.java javax/sound/midi/SCCS/s.VoiceStatus.java javax/sound/midi/SCCS/s.package.html javax/sound/midi/spi javax/sound/midi/spi/SCCS javax/sound/midi/spi/SCCS/s.MidiDeviceProvider.java javax/sound/midi/spi/SCCS/s.MidiFileReader.java javax/sound/midi/spi/SCCS/s.MidiFileWriter.java javax/sound/midi/spi/SCCS/s.SoundbankReader.java javax/sound/midi/spi/SCCS/s.package.html javax/sound/midi/spi/MidiDeviceProvider.java javax/sound/midi/spi/MidiFileReader.java javax/sound/midi/spi/MidiFileWriter.java javax/sound/midi/spi/SoundbankReader.java javax/sound/midi/spi/package.html javax/sound/midi/Receiver.java javax/sound/midi/Patch.java javax/sound/midi/ControllerEventListener.java javax/sound/midi/Instrument.java javax/sound/midi/InvalidMidiDataException.java javax/sound/midi/MetaEventListener.java javax/sound/midi/MetaMessage.java javax/sound/midi/MidiChannel.java javax/sound/midi/MidiDevice.java javax/sound/midi/MidiEvent.java javax/sound/midi/MidiFileFormat.java javax/sound/midi/MidiMessage.java javax/sound/midi/MidiSystem.java javax/sound/midi/MidiUnavailableException.java javax/sound/midi/ShortMessage.java javax/sound/midi/Sequence.java javax/sound/midi/Sequencer.java javax/sound/midi/SoundbankResource.java javax/sound/midi/Soundbank.java javax/sound/midi/Synthesizer.java javax/sound/midi/SysexMessage.java javax/sound/midi/Track.java javax/sound/midi/Transmitter.java javax/sound/midi/VoiceStatus.java javax/sound/midi/package.html javax/sound/sampled javax/sound/sampled/SCCS javax/sound/sampled/SCCS/s.AudioFileFormat.java javax/sound/sampled/SCCS/s.AudioFormat.java javax/sound/sampled/SCCS/s.AudioInputStream.java javax/sound/sampled/SCCS/s.AudioPermission.java javax/sound/sampled/SCCS/s.AudioSystem.java javax/sound/sampled/SCCS/s.BooleanControl.java javax/sound/sampled/SCCS/s.Clip.java javax/sound/sampled/SCCS/s.CompoundControl.java javax/sound/sampled/SCCS/s.Control.java javax/sound/sampled/SCCS/s.DataLine.java javax/sound/sampled/SCCS/s.EnumControl.java javax/sound/sampled/SCCS/s.FloatControl.java javax/sound/sampled/SCCS/s.Line.java javax/sound/sampled/SCCS/s.LineEvent.java javax/sound/sampled/SCCS/s.LineListener.java javax/sound/sampled/SCCS/s.Mixer.java javax/sound/sampled/SCCS/s.UnsupportedAudioFileException.java javax/sound/sampled/SCCS/s.LineUnavailableException.java javax/sound/sampled/SCCS/s.Port.java javax/sound/sampled/SCCS/s.ReverbType.java javax/sound/sampled/SCCS/s.SourceDataLine.java javax/sound/sampled/SCCS/s.TargetDataLine.java javax/sound/sampled/SCCS/s.package.html javax/sound/sampled/spi javax/sound/sampled/spi/SCCS javax/sound/sampled/spi/SCCS/s.FormatConversionProvider.java javax/sound/sampled/spi/SCCS/s.AudioFileReader.java javax/sound/sampled/spi/SCCS/s.AudioFileWriter.java javax/sound/sampled/spi/SCCS/s.MixerProvider.java javax/sound/sampled/spi/SCCS/s.package.html javax/sound/sampled/spi/FormatConversionProvider.java javax/sound/sampled/spi/AudioFileReader.java javax/sound/sampled/spi/AudioFileWriter.java javax/sound/sampled/spi/MixerProvider.java javax/sound/sampled/spi/package.html javax/sound/sampled/AudioFileFormat.java javax/sound/sampled/AudioFormat.java javax/sound/sampled/AudioInputStream.java javax/sound/sampled/AudioPermission.java javax/sound/sampled/AudioSystem.java javax/sound/sampled/BooleanControl.java javax/sound/sampled/Clip.java javax/sound/sampled/CompoundControl.java javax/sound/sampled/Control.java javax/sound/sampled/DataLine.java javax/sound/sampled/EnumControl.java javax/sound/sampled/FloatControl.java javax/sound/sampled/Line.java javax/sound/sampled/LineEvent.java javax/sound/sampled/LineListener.java javax/sound/sampled/Mixer.java javax/sound/sampled/SourceDataLine.java javax/sound/sampled/LineUnavailableException.java javax/sound/sampled/Port.java javax/sound/sampled/ReverbType.java javax/sound/sampled/TargetDataLine.java javax/sound/sampled/package.html javax/sound/sampled/UnsupportedAudioFileException.java javax/sql javax/sql/SCCS javax/sql/SCCS/s.ConnectionEventListener.java javax/sql/SCCS/s.ConnectionEvent.java javax/sql/SCCS/s.ConnectionPoolDataSource.java javax/sql/SCCS/s.DataSource.java javax/sql/SCCS/s.PooledConnection.java javax/sql/SCCS/s.RowSet.java javax/sql/SCCS/s.RowSetEvent.java javax/sql/SCCS/s.RowSetInternal.java javax/sql/SCCS/s.RowSetListener.java javax/sql/SCCS/s.RowSetMetaData.java javax/sql/SCCS/s.RowSetReader.java javax/sql/SCCS/s.RowSetWriter.java javax/sql/SCCS/s.XAConnection.java javax/sql/SCCS/s.XADataSource.java javax/sql/SCCS/s.package.html javax/sql/rowset javax/sql/rowset/SCCS javax/sql/rowset/SCCS/s.FilteredRowSet.java javax/sql/rowset/SCCS/s.BaseRowSet.java javax/sql/rowset/SCCS/s.CachedRowSet.java javax/sql/rowset/SCCS/s.RowSetMetaDataImpl.java javax/sql/rowset/SCCS/s.JdbcRowSet.java javax/sql/rowset/SCCS/s.JoinRowSet.java javax/sql/rowset/SCCS/s.Joinable.java javax/sql/rowset/SCCS/s.Predicate.java javax/sql/rowset/SCCS/s.RowSetWarning.java javax/sql/rowset/SCCS/s.WebRowSet.java javax/sql/rowset/SCCS/s.package.html javax/sql/rowset/SCCS/s.rowset.properties javax/sql/rowset/SCCS/s.sqlxml.xsd javax/sql/rowset/SCCS/s.webrowset.xsd javax/sql/rowset/serial javax/sql/rowset/serial/SCCS javax/sql/rowset/serial/SCCS/s.SQLOutputImpl.java javax/sql/rowset/serial/SCCS/s.SQLInputImpl.java javax/sql/rowset/serial/SCCS/s.SerialArray.java javax/sql/rowset/serial/SCCS/s.SerialBlob.java javax/sql/rowset/serial/SCCS/s.SerialClob.java javax/sql/rowset/serial/SCCS/s.SerialDatalink.java javax/sql/rowset/serial/SCCS/s.SerialException.java javax/sql/rowset/serial/SCCS/s.SerialJavaObject.java javax/sql/rowset/serial/SCCS/s.SerialRef.java javax/sql/rowset/serial/SCCS/s.SerialStruct.java javax/sql/rowset/serial/SCCS/s.package.html javax/sql/rowset/serial/SerialException.java javax/sql/rowset/serial/SQLInputImpl.java javax/sql/rowset/serial/SQLOutputImpl.java javax/sql/rowset/serial/SerialArray.java javax/sql/rowset/serial/SerialBlob.java javax/sql/rowset/serial/SerialClob.java javax/sql/rowset/serial/SerialDatalink.java javax/sql/rowset/serial/SerialJavaObject.java javax/sql/rowset/serial/SerialRef.java javax/sql/rowset/serial/SerialStruct.java javax/sql/rowset/serial/package.html javax/sql/rowset/spi javax/sql/rowset/spi/SCCS javax/sql/rowset/spi/SCCS/s.SyncFactoryException.java javax/sql/rowset/spi/SCCS/s.SyncFactory.java javax/sql/rowset/spi/SCCS/s.SyncProvider.java javax/sql/rowset/spi/SCCS/s.SyncResolver.java javax/sql/rowset/spi/SCCS/s.package.html javax/sql/rowset/spi/SCCS/s.SyncProviderException.java javax/sql/rowset/spi/SCCS/s.TransactionalWriter.java javax/sql/rowset/spi/SCCS/s.XmlReader.java javax/sql/rowset/spi/SCCS/s.XmlWriter.java javax/sql/rowset/spi/SyncFactoryException.java javax/sql/rowset/spi/SyncFactory.java javax/sql/rowset/spi/SyncProviderException.java javax/sql/rowset/spi/SyncProvider.java javax/sql/rowset/spi/TransactionalWriter.java javax/sql/rowset/spi/SyncResolver.java javax/sql/rowset/spi/XmlReader.java javax/sql/rowset/spi/XmlWriter.java javax/sql/rowset/spi/package.html javax/sql/rowset/CachedRowSet.java javax/sql/rowset/BaseRowSet.java javax/sql/rowset/FilteredRowSet.java javax/sql/rowset/JdbcRowSet.java javax/sql/rowset/JoinRowSet.java javax/sql/rowset/Joinable.java javax/sql/rowset/Predicate.java javax/sql/rowset/RowSetMetaDataImpl.java javax/sql/rowset/RowSetWarning.java javax/sql/rowset/WebRowSet.java javax/sql/rowset/package.html javax/sql/rowset/rowset.properties javax/sql/rowset/sqlxml.xsd javax/sql/rowset/webrowset.xsd javax/sql/ConnectionEventListener.java javax/sql/ConnectionEvent.java javax/sql/RowSetEvent.java javax/sql/RowSet.java javax/sql/ConnectionPoolDataSource.java javax/sql/DataSource.java javax/sql/PooledConnection.java javax/sql/RowSetInternal.java javax/sql/RowSetListener.java javax/sql/RowSetMetaData.java javax/sql/RowSetReader.java javax/sql/RowSetWriter.java javax/sql/XAConnection.java javax/sql/XADataSource.java javax/sql/package.html javax/swing javax/swing/SCCS javax/swing/SCCS/s.AbstractAction.java javax/swing/SCCS/s.AbstractButton.java javax/swing/SCCS/s.Action.java javax/swing/SCCS/s.AbstractActionPropertyChangeListener.java javax/swing/SCCS/s.AbstractCellEditor.java javax/swing/SCCS/s.AbstractListModel.java javax/swing/SCCS/s.AbstractSpinnerModel.java javax/swing/SCCS/s.ActionMap.java javax/swing/SCCS/s.AncestorNotifier.java javax/swing/SCCS/s.ArrayTable.java javax/swing/SCCS/s.Autoscroller.java javax/swing/SCCS/s.BorderFactory.java javax/swing/SCCS/s.BoundedRangeModel.java javax/swing/SCCS/s.Box.java javax/swing/SCCS/s.CellRendererPane.java javax/swing/SCCS/s.BoxLayout.java javax/swing/SCCS/s.ButtonGroup.java javax/swing/SCCS/s.ButtonModel.java javax/swing/SCCS/s.CellEditor.java javax/swing/SCCS/s.ComponentInputMap.java javax/swing/SCCS/s.ComboBoxEditor.java javax/swing/SCCS/s.ComboBoxModel.java javax/swing/SCCS/s.DebugGraphicsObserver.java javax/swing/SCCS/s.DebugGraphics.java javax/swing/SCCS/s.DebugGraphicsFilter.java javax/swing/SCCS/s.DebugGraphicsInfo.java javax/swing/SCCS/s.DefaultDesktopManager.java javax/swing/SCCS/s.DefaultBoundedRangeModel.java javax/swing/SCCS/s.DefaultButtonModel.java javax/swing/SCCS/s.DefaultCellEditor.java javax/swing/SCCS/s.DefaultComboBoxModel.java javax/swing/SCCS/s.DefaultListCellRenderer.java javax/swing/SCCS/s.DefaultFocusManager.java javax/swing/SCCS/s.DefaultListModel.java javax/swing/SCCS/s.DesktopManager.java javax/swing/SCCS/s.Icon.java javax/swing/SCCS/s.DefaultListSelectionModel.java javax/swing/SCCS/s.DefaultSingleSelectionModel.java javax/swing/SCCS/s.DelegatingDefaultFocusManager.java javax/swing/SCCS/s.FocusManager.java javax/swing/SCCS/s.GraphicsWrapper.java javax/swing/SCCS/s.GrayFilter.java javax/swing/SCCS/s.ImageIcon.java javax/swing/SCCS/s.InputMap.java javax/swing/SCCS/s.JCheckBoxMenuItem.java javax/swing/SCCS/s.InputVerifier.java javax/swing/SCCS/s.JApplet.java javax/swing/SCCS/s.JButton.java javax/swing/SCCS/s.InternalFrameFocusTraversalPolicy.java javax/swing/SCCS/s.JCheckBox.java javax/swing/SCCS/s.JColorChooser.java javax/swing/SCCS/s.JComboBox.java javax/swing/SCCS/s.JComponent.java javax/swing/SCCS/s.JDesktopPane.java javax/swing/SCCS/s.JDialog.java javax/swing/SCCS/s.JEditorPane.java javax/swing/SCCS/s.JFileChooser.java javax/swing/SCCS/s.JFormattedTextField.java javax/swing/SCCS/s.JFrame.java javax/swing/SCCS/s.JInternalFrame.java javax/swing/SCCS/s.JLabel.java javax/swing/SCCS/s.JRadioButtonMenuItem.java javax/swing/SCCS/s.JLayeredPane.java javax/swing/SCCS/s.JList.java javax/swing/SCCS/s.JMenu.java javax/swing/SCCS/s.JMenuBar.java javax/swing/SCCS/s.JMenuItem.java javax/swing/SCCS/s.JOptionPane.java javax/swing/SCCS/s.JPanel.java javax/swing/SCCS/s.JPasswordField.java javax/swing/SCCS/s.JPopupMenu.java javax/swing/SCCS/s.JProgressBar.java javax/swing/SCCS/s.JRadioButton.java javax/swing/SCCS/s.JRootPane.java javax/swing/SCCS/s.JScrollBar.java javax/swing/SCCS/s.JScrollPane.java javax/swing/SCCS/s.JSeparator.java javax/swing/SCCS/s.JSlider.java javax/swing/SCCS/s.JSpinner.java javax/swing/SCCS/s.JViewport.java javax/swing/SCCS/s.JToolBar.java javax/swing/SCCS/s.JSplitPane.java javax/swing/SCCS/s.JTabbedPane.java javax/swing/SCCS/s.JTable.java javax/swing/SCCS/s.JTextArea.java javax/swing/SCCS/s.JTextField.java javax/swing/SCCS/s.JTextPane.java javax/swing/SCCS/s.JToggleButton.java javax/swing/SCCS/s.JToolTip.java javax/swing/SCCS/s.JTree.java javax/swing/SCCS/s.KeyStroke.java javax/swing/SCCS/s.JWindow.java javax/swing/SCCS/s.KeyboardManager.java javax/swing/SCCS/s.LayoutComparator.java javax/swing/SCCS/s.Popup.java javax/swing/SCCS/s.LayoutFocusTraversalPolicy.java javax/swing/SCCS/s.LegacyGlueFocusTraversalPolicy.java javax/swing/SCCS/s.ProgressMonitor.java javax/swing/SCCS/s.ListCellRenderer.java javax/swing/SCCS/s.ListModel.java javax/swing/SCCS/s.ListSelectionModel.java javax/swing/SCCS/s.LookAndFeel.java javax/swing/SCCS/s.MenuElement.java javax/swing/SCCS/s.MenuSelectionManager.java javax/swing/SCCS/s.MultiUIDefaults.java javax/swing/SCCS/s.MutableComboBoxModel.java javax/swing/SCCS/s.OverlayLayout.java javax/swing/SCCS/s.PopupFactory.java javax/swing/SCCS/s.ProgressMonitorInputStream.java javax/swing/SCCS/s.Renderer.java javax/swing/SCCS/s.RepaintManager.java javax/swing/SCCS/s.RootPaneContainer.java javax/swing/SCCS/s.package.html javax/swing/SCCS/s.ScrollPaneConstants.java javax/swing/SCCS/s.ScrollPaneLayout.java javax/swing/SCCS/s.Scrollable.java javax/swing/SCCS/s.SingleSelectionModel.java javax/swing/SCCS/s.SizeRequirements.java javax/swing/SCCS/s.SizeSequence.java javax/swing/SCCS/s.SortingFocusTraversalPolicy.java javax/swing/SCCS/s.SpinnerDateModel.java javax/swing/SCCS/s.SpinnerListModel.java javax/swing/SCCS/s.SpinnerModel.java javax/swing/SCCS/s.SpinnerNumberModel.java javax/swing/SCCS/s.Spring.java javax/swing/SCCS/s.SpringLayout.java javax/swing/SCCS/s.SwingConstants.java javax/swing/SCCS/s.SwingUtilities.java javax/swing/SCCS/s.TablePrintable.java javax/swing/SCCS/s.Timer.java javax/swing/SCCS/s.SystemEventQueueUtilities.java javax/swing/SCCS/s.TimerQueue.java javax/swing/SCCS/s.ToolTipManager.java javax/swing/SCCS/s.TransferHandler.java javax/swing/SCCS/s.UIDefaults.java javax/swing/SCCS/s.UIManager.java javax/swing/SCCS/s.UnsupportedLookAndFeelException.java javax/swing/SCCS/s.ViewportLayout.java javax/swing/SCCS/s.WindowConstants.java javax/swing/border javax/swing/border/SCCS javax/swing/border/SCCS/s.AbstractBorder.java javax/swing/border/SCCS/s.BevelBorder.java javax/swing/border/SCCS/s.Border.java javax/swing/border/SCCS/s.CompoundBorder.java javax/swing/border/SCCS/s.EmptyBorder.java javax/swing/border/SCCS/s.EtchedBorder.java javax/swing/border/SCCS/s.LineBorder.java javax/swing/border/SCCS/s.MatteBorder.java javax/swing/border/SCCS/s.SoftBevelBorder.java javax/swing/border/SCCS/s.TitledBorder.java javax/swing/border/SCCS/s.package.html javax/swing/border/SoftBevelBorder.java javax/swing/border/AbstractBorder.java javax/swing/border/BevelBorder.java javax/swing/border/Border.java javax/swing/border/CompoundBorder.java javax/swing/border/EmptyBorder.java javax/swing/border/EtchedBorder.java javax/swing/border/LineBorder.java javax/swing/border/MatteBorder.java javax/swing/border/TitledBorder.java javax/swing/border/package.html javax/swing/colorchooser javax/swing/colorchooser/SCCS javax/swing/colorchooser/SCCS/s.AbstractColorChooserPanel.java javax/swing/colorchooser/SCCS/s.CenterLayout.java javax/swing/colorchooser/SCCS/s.ColorChooserComponentFactory.java javax/swing/colorchooser/SCCS/s.ColorSelectionModel.java javax/swing/colorchooser/SCCS/s.DefaultColorSelectionModel.java javax/swing/colorchooser/SCCS/s.DefaultHSBChooserPanel.java javax/swing/colorchooser/SCCS/s.DefaultPreviewPanel.java javax/swing/colorchooser/SCCS/s.DefaultRGBChooserPanel.java javax/swing/colorchooser/SCCS/s.DefaultSwatchChooserPanel.java javax/swing/colorchooser/SCCS/s.SmartGridLayout.java javax/swing/colorchooser/SCCS/s.SyntheticImage.java javax/swing/colorchooser/SCCS/s.package.html javax/swing/colorchooser/ColorChooserComponentFactory.java javax/swing/colorchooser/AbstractColorChooserPanel.java javax/swing/colorchooser/CenterLayout.java javax/swing/colorchooser/ColorSelectionModel.java javax/swing/colorchooser/DefaultColorSelectionModel.java javax/swing/colorchooser/DefaultHSBChooserPanel.java javax/swing/colorchooser/DefaultPreviewPanel.java javax/swing/colorchooser/DefaultRGBChooserPanel.java javax/swing/colorchooser/DefaultSwatchChooserPanel.java javax/swing/colorchooser/SmartGridLayout.java javax/swing/colorchooser/SyntheticImage.java javax/swing/colorchooser/package.html javax/swing/doc-files javax/swing/doc-files/SCCS javax/swing/doc-files/SCCS/s.JLayeredPane-1.gif javax/swing/doc-files/SCCS/s.BoxLayout-1.gif javax/swing/doc-files/SCCS/s.JRootPane-1.gif javax/swing/doc-files/SCCS/s.JRootPane-2.gif javax/swing/doc-files/SCCS/s.JScrollPane-1.gif javax/swing/doc-files/SCCS/s.SizeSequence-1.gif javax/swing/doc-files/JLayeredPane-1.gif javax/swing/doc-files/BoxLayout-1.gif javax/swing/doc-files/JRootPane-1.gif javax/swing/doc-files/JRootPane-2.gif javax/swing/doc-files/JScrollPane-1.gif javax/swing/doc-files/SizeSequence-1.gif javax/swing/event javax/swing/event/SCCS javax/swing/event/SCCS/s.CellEditorListener.java javax/swing/event/SCCS/s.AncestorEvent.java javax/swing/event/SCCS/s.AncestorListener.java javax/swing/event/SCCS/s.CaretEvent.java javax/swing/event/SCCS/s.CaretListener.java javax/swing/event/SCCS/s.EventListenerList.java javax/swing/event/SCCS/s.ChangeEvent.java javax/swing/event/SCCS/s.ChangeListener.java javax/swing/event/SCCS/s.DocumentEvent.java javax/swing/event/SCCS/s.DocumentListener.java javax/swing/event/SCCS/s.HyperlinkEvent.java javax/swing/event/SCCS/s.HyperlinkListener.java javax/swing/event/SCCS/s.InternalFrameAdapter.java javax/swing/event/SCCS/s.MenuKeyListener.java javax/swing/event/SCCS/s.MenuEvent.java javax/swing/event/SCCS/s.InternalFrameEvent.java javax/swing/event/SCCS/s.InternalFrameListener.java javax/swing/event/SCCS/s.ListDataEvent.java javax/swing/event/SCCS/s.ListDataListener.java javax/swing/event/SCCS/s.ListSelectionEvent.java javax/swing/event/SCCS/s.ListSelectionListener.java javax/swing/event/SCCS/s.MenuDragMouseEvent.java javax/swing/event/SCCS/s.MenuDragMouseListener.java javax/swing/event/SCCS/s.MenuKeyEvent.java javax/swing/event/SCCS/s.MouseInputAdapter.java javax/swing/event/SCCS/s.MenuListener.java javax/swing/event/SCCS/s.MouseInputListener.java javax/swing/event/SCCS/s.PopupMenuEvent.java javax/swing/event/SCCS/s.package.html javax/swing/event/SCCS/s.PopupMenuListener.java javax/swing/event/SCCS/s.SwingPropertyChangeSupport.java javax/swing/event/SCCS/s.TableColumnModelEvent.java javax/swing/event/SCCS/s.TableColumnModelListener.java javax/swing/event/SCCS/s.TableModelEvent.java javax/swing/event/SCCS/s.TableModelListener.java javax/swing/event/SCCS/s.TreeExpansionEvent.java javax/swing/event/SCCS/s.TreeExpansionListener.java javax/swing/event/SCCS/s.TreeModelEvent.java javax/swing/event/SCCS/s.TreeModelListener.java javax/swing/event/SCCS/s.TreeSelectionEvent.java javax/swing/event/SCCS/s.TreeSelectionListener.java javax/swing/event/SCCS/s.TreeWillExpandListener.java javax/swing/event/SCCS/s.UndoableEditEvent.java javax/swing/event/SCCS/s.UndoableEditListener.java javax/swing/event/AncestorListener.java javax/swing/event/AncestorEvent.java javax/swing/event/CellEditorListener.java javax/swing/event/CaretEvent.java javax/swing/event/CaretListener.java javax/swing/event/InternalFrameAdapter.java javax/swing/event/ChangeEvent.java javax/swing/event/ChangeListener.java javax/swing/event/DocumentEvent.java javax/swing/event/DocumentListener.java javax/swing/event/EventListenerList.java javax/swing/event/HyperlinkEvent.java javax/swing/event/HyperlinkListener.java javax/swing/event/InternalFrameEvent.java javax/swing/event/InternalFrameListener.java javax/swing/event/ListDataEvent.java javax/swing/event/ListDataListener.java javax/swing/event/ListSelectionEvent.java javax/swing/event/ListSelectionListener.java javax/swing/event/MenuDragMouseEvent.java javax/swing/event/MenuDragMouseListener.java javax/swing/event/MenuEvent.java javax/swing/event/MenuKeyEvent.java javax/swing/event/MenuKeyListener.java javax/swing/event/MenuListener.java javax/swing/event/MouseInputAdapter.java javax/swing/event/MouseInputListener.java javax/swing/event/PopupMenuEvent.java javax/swing/event/PopupMenuListener.java javax/swing/event/SwingPropertyChangeSupport.java javax/swing/event/TableColumnModelEvent.java javax/swing/event/TableColumnModelListener.java javax/swing/event/TableModelEvent.java javax/swing/event/TableModelListener.java javax/swing/event/TreeExpansionEvent.java javax/swing/event/TreeExpansionListener.java javax/swing/event/TreeModelEvent.java javax/swing/event/TreeModelListener.java javax/swing/event/TreeSelectionEvent.java javax/swing/event/TreeSelectionListener.java javax/swing/event/TreeWillExpandListener.java javax/swing/event/UndoableEditEvent.java javax/swing/event/UndoableEditListener.java javax/swing/event/package.html javax/swing/filechooser javax/swing/filechooser/SCCS javax/swing/filechooser/SCCS/s.FileSystemView.java javax/swing/filechooser/SCCS/s.FileFilter.java javax/swing/filechooser/SCCS/s.FileView.java javax/swing/filechooser/SCCS/s.package.html javax/swing/filechooser/FileSystemView.java javax/swing/filechooser/FileFilter.java javax/swing/filechooser/FileView.java javax/swing/filechooser/package.html javax/swing/plaf javax/swing/plaf/SCCS javax/swing/plaf/SCCS/s.ComponentInputMapUIResource.java javax/swing/plaf/SCCS/s.ActionMapUIResource.java javax/swing/plaf/SCCS/s.BorderUIResource.java javax/swing/plaf/SCCS/s.ButtonUI.java javax/swing/plaf/SCCS/s.ColorChooserUI.java javax/swing/plaf/SCCS/s.ColorUIResource.java javax/swing/plaf/SCCS/s.ComboBoxUI.java javax/swing/plaf/SCCS/s.DesktopIconUI.java javax/swing/plaf/SCCS/s.ComponentUI.java javax/swing/plaf/SCCS/s.DesktopPaneUI.java javax/swing/plaf/SCCS/s.DimensionUIResource.java javax/swing/plaf/SCCS/s.FileChooserUI.java javax/swing/plaf/SCCS/s.FontUIResource.java javax/swing/plaf/SCCS/s.LabelUI.java javax/swing/plaf/SCCS/s.IconUIResource.java javax/swing/plaf/SCCS/s.InputMapUIResource.java javax/swing/plaf/SCCS/s.InsetsUIResource.java javax/swing/plaf/SCCS/s.InternalFrameUI.java javax/swing/plaf/SCCS/s.ListUI.java javax/swing/plaf/SCCS/s.MenuBarUI.java javax/swing/plaf/SCCS/s.MenuItemUI.java javax/swing/plaf/SCCS/s.OptionPaneUI.java javax/swing/plaf/SCCS/s.PanelUI.java javax/swing/plaf/SCCS/s.PopupMenuUI.java javax/swing/plaf/SCCS/s.ProgressBarUI.java javax/swing/plaf/SCCS/s.RootPaneUI.java javax/swing/plaf/SCCS/s.ScrollBarUI.java javax/swing/plaf/SCCS/s.ScrollPaneUI.java javax/swing/plaf/SCCS/s.SeparatorUI.java javax/swing/plaf/SCCS/s.SliderUI.java javax/swing/plaf/SCCS/s.SpinnerUI.java javax/swing/plaf/SCCS/s.TableUI.java javax/swing/plaf/SCCS/s.SplitPaneUI.java javax/swing/plaf/SCCS/s.TabbedPaneUI.java javax/swing/plaf/SCCS/s.TableHeaderUI.java javax/swing/plaf/SCCS/s.TextUI.java javax/swing/plaf/SCCS/s.ToolBarUI.java javax/swing/plaf/SCCS/s.ToolTipUI.java javax/swing/plaf/SCCS/s.TreeUI.java javax/swing/plaf/SCCS/s.UIResource.java javax/swing/plaf/SCCS/s.ViewportUI.java javax/swing/plaf/SCCS/s.package.html javax/swing/plaf/basic javax/swing/plaf/basic/SCCS javax/swing/plaf/basic/SCCS/s.BasicButtonListener.java javax/swing/plaf/basic/SCCS/s.BasicArrowButton.java javax/swing/plaf/basic/SCCS/s.BasicBorders.java javax/swing/plaf/basic/SCCS/s.BasicCheckBoxMenuItemUI.java javax/swing/plaf/basic/SCCS/s.BasicButtonUI.java javax/swing/plaf/basic/SCCS/s.BasicComboBoxRenderer.java javax/swing/plaf/basic/SCCS/s.BasicCheckBoxUI.java javax/swing/plaf/basic/SCCS/s.BasicColorChooserUI.java javax/swing/plaf/basic/SCCS/s.BasicComboBoxEditor.java javax/swing/plaf/basic/SCCS/s.BasicComboBoxUI.java javax/swing/plaf/basic/SCCS/s.BasicComboPopup.java javax/swing/plaf/basic/SCCS/s.BasicDesktopIconUI.java javax/swing/plaf/basic/SCCS/s.BasicHTML.java javax/swing/plaf/basic/SCCS/s.BasicInternalFrameTitlePane.java javax/swing/plaf/basic/SCCS/s.BasicDesktopPaneUI.java javax/swing/plaf/basic/SCCS/s.BasicDirectoryModel.java javax/swing/plaf/basic/SCCS/s.BasicDragGestureRecognizer.java javax/swing/plaf/basic/SCCS/s.BasicDropTargetListener.java javax/swing/plaf/basic/SCCS/s.BasicEditorPaneUI.java javax/swing/plaf/basic/SCCS/s.BasicFileChooserUI.java javax/swing/plaf/basic/SCCS/s.BasicFormattedTextFieldUI.java javax/swing/plaf/basic/SCCS/s.BasicGraphicsUtils.java javax/swing/plaf/basic/SCCS/s.BasicIconFactory.java javax/swing/plaf/basic/SCCS/s.BasicPopupMenuSeparatorUI.java javax/swing/plaf/basic/SCCS/s.BasicInternalFrameUI.java javax/swing/plaf/basic/SCCS/s.BasicLabelUI.java javax/swing/plaf/basic/SCCS/s.BasicListUI.java javax/swing/plaf/basic/SCCS/s.BasicLookAndFeel.java javax/swing/plaf/basic/SCCS/s.BasicMenuBarUI.java javax/swing/plaf/basic/SCCS/s.BasicMenuItemUI.java javax/swing/plaf/basic/SCCS/s.BasicMenuUI.java javax/swing/plaf/basic/SCCS/s.BasicOptionPaneUI.java javax/swing/plaf/basic/SCCS/s.BasicPanelUI.java javax/swing/plaf/basic/SCCS/s.BasicPasswordFieldUI.java javax/swing/plaf/basic/SCCS/s.BasicProgressBarUI.java javax/swing/plaf/basic/SCCS/s.BasicPopupMenuUI.java javax/swing/plaf/basic/SCCS/s.BasicSplitPaneDivider.java javax/swing/plaf/basic/SCCS/s.BasicRadioButtonMenuItemUI.java javax/swing/plaf/basic/SCCS/s.BasicRadioButtonUI.java javax/swing/plaf/basic/SCCS/s.BasicRootPaneUI.java javax/swing/plaf/basic/SCCS/s.BasicScrollBarUI.java javax/swing/plaf/basic/SCCS/s.BasicScrollPaneUI.java javax/swing/plaf/basic/SCCS/s.BasicSeparatorUI.java javax/swing/plaf/basic/SCCS/s.BasicSliderUI.java javax/swing/plaf/basic/SCCS/s.BasicSpinnerUI.java javax/swing/plaf/basic/SCCS/s.BasicTabbedPaneUI.java javax/swing/plaf/basic/SCCS/s.BasicSplitPaneUI.java javax/swing/plaf/basic/SCCS/s.BasicTableHeaderUI.java javax/swing/plaf/basic/SCCS/s.BasicTableUI.java javax/swing/plaf/basic/SCCS/s.BasicTextAreaUI.java javax/swing/plaf/basic/SCCS/s.BasicTextFieldUI.java javax/swing/plaf/basic/SCCS/s.BasicTextPaneUI.java javax/swing/plaf/basic/SCCS/s.BasicTextUI.java javax/swing/plaf/basic/SCCS/s.BasicToggleButtonUI.java javax/swing/plaf/basic/SCCS/s.BasicToolBarSeparatorUI.java javax/swing/plaf/basic/SCCS/s.BasicToolBarUI.java javax/swing/plaf/basic/SCCS/s.BasicToolTipUI.java javax/swing/plaf/basic/SCCS/s.BasicTransferable.java javax/swing/plaf/basic/SCCS/s.BasicTreeUI.java javax/swing/plaf/basic/SCCS/s.BasicViewportUI.java javax/swing/plaf/basic/SCCS/s.CenterLayout.java javax/swing/plaf/basic/SCCS/s.ComboPopup.java javax/swing/plaf/basic/SCCS/s.DefaultMenuLayout.java javax/swing/plaf/basic/SCCS/s.LazyActionMap.java javax/swing/plaf/basic/SCCS/s.package.html javax/swing/plaf/basic/icons javax/swing/plaf/basic/icons/SCCS javax/swing/plaf/basic/icons/SCCS/s.JavaCup16.png javax/swing/plaf/basic/icons/JavaCup16.png javax/swing/plaf/basic/BasicButtonListener.java javax/swing/plaf/basic/BasicArrowButton.java javax/swing/plaf/basic/BasicBorders.java javax/swing/plaf/basic/BasicButtonUI.java javax/swing/plaf/basic/BasicCheckBoxUI.java javax/swing/plaf/basic/BasicIconFactory.java javax/swing/plaf/basic/BasicHTML.java javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java javax/swing/plaf/basic/BasicColorChooserUI.java javax/swing/plaf/basic/BasicComboBoxEditor.java javax/swing/plaf/basic/BasicComboBoxRenderer.java javax/swing/plaf/basic/BasicComboBoxUI.java javax/swing/plaf/basic/BasicComboPopup.java javax/swing/plaf/basic/BasicDesktopIconUI.java javax/swing/plaf/basic/BasicDesktopPaneUI.java javax/swing/plaf/basic/BasicDirectoryModel.java javax/swing/plaf/basic/BasicDragGestureRecognizer.java javax/swing/plaf/basic/BasicDropTargetListener.java javax/swing/plaf/basic/BasicEditorPaneUI.java javax/swing/plaf/basic/BasicFileChooserUI.java javax/swing/plaf/basic/BasicFormattedTextFieldUI.java javax/swing/plaf/basic/BasicGraphicsUtils.java javax/swing/plaf/basic/BasicInternalFrameTitlePane.java javax/swing/plaf/basic/BasicInternalFrameUI.java javax/swing/plaf/basic/BasicLabelUI.java javax/swing/plaf/basic/BasicListUI.java javax/swing/plaf/basic/BasicLookAndFeel.java javax/swing/plaf/basic/BasicMenuBarUI.java javax/swing/plaf/basic/BasicMenuItemUI.java javax/swing/plaf/basic/BasicMenuUI.java javax/swing/plaf/basic/BasicOptionPaneUI.java javax/swing/plaf/basic/BasicPanelUI.java javax/swing/plaf/basic/BasicPasswordFieldUI.java javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java javax/swing/plaf/basic/BasicPopupMenuUI.java javax/swing/plaf/basic/BasicProgressBarUI.java javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java javax/swing/plaf/basic/BasicRadioButtonUI.java javax/swing/plaf/basic/BasicRootPaneUI.java javax/swing/plaf/basic/BasicScrollBarUI.java javax/swing/plaf/basic/BasicScrollPaneUI.java javax/swing/plaf/basic/BasicSeparatorUI.java javax/swing/plaf/basic/ComboPopup.java javax/swing/plaf/basic/BasicSliderUI.java javax/swing/plaf/basic/BasicSpinnerUI.java javax/swing/plaf/basic/BasicSplitPaneDivider.java javax/swing/plaf/basic/BasicSplitPaneUI.java javax/swing/plaf/basic/BasicTabbedPaneUI.java javax/swing/plaf/basic/BasicTableHeaderUI.java javax/swing/plaf/basic/BasicTableUI.java javax/swing/plaf/basic/BasicTextAreaUI.java javax/swing/plaf/basic/BasicTextFieldUI.java javax/swing/plaf/basic/BasicTextPaneUI.java javax/swing/plaf/basic/BasicTextUI.java javax/swing/plaf/basic/BasicToggleButtonUI.java javax/swing/plaf/basic/BasicToolBarSeparatorUI.java javax/swing/plaf/basic/BasicToolBarUI.java javax/swing/plaf/basic/BasicToolTipUI.java javax/swing/plaf/basic/BasicTransferable.java javax/swing/plaf/basic/BasicTreeUI.java javax/swing/plaf/basic/BasicViewportUI.java javax/swing/plaf/basic/CenterLayout.java javax/swing/plaf/basic/DefaultMenuLayout.java javax/swing/plaf/basic/LazyActionMap.java javax/swing/plaf/basic/package.html javax/swing/plaf/metal javax/swing/plaf/metal/SCCS javax/swing/plaf/metal/SCCS/s.DefaultMetalTheme.java javax/swing/plaf/metal/SCCS/s.MetalCheckBoxIcon.java javax/swing/plaf/metal/SCCS/s.MetalBorders.java javax/swing/plaf/metal/SCCS/s.MetalBumps.java javax/swing/plaf/metal/SCCS/s.MetalButtonUI.java javax/swing/plaf/metal/SCCS/s.MetalCheckBoxUI.java javax/swing/plaf/metal/SCCS/s.MetalComboBoxButton.java javax/swing/plaf/metal/SCCS/s.MetalComboBoxEditor.java javax/swing/plaf/metal/SCCS/s.MetalComboBoxIcon.java javax/swing/plaf/metal/SCCS/s.MetalComboBoxUI.java javax/swing/plaf/metal/SCCS/s.MetalDesktopIconUI.java javax/swing/plaf/metal/SCCS/s.MetalFileChooserUI.java javax/swing/plaf/metal/SCCS/s.MetalFontDesktopProperty.java javax/swing/plaf/metal/SCCS/s.MetalHighContrastTheme.java javax/swing/plaf/metal/SCCS/s.MetalIconFactory.java javax/swing/plaf/metal/SCCS/s.MetalInternalFrameTitlePane.java javax/swing/plaf/metal/SCCS/s.MetalInternalFrameUI.java javax/swing/plaf/metal/SCCS/s.MetalLabelUI.java javax/swing/plaf/metal/SCCS/s.MetalLookAndFeel.java javax/swing/plaf/metal/SCCS/s.MetalMenuBarUI.java javax/swing/plaf/metal/SCCS/s.MetalPopupMenuSeparatorUI.java javax/swing/plaf/metal/SCCS/s.MetalProgressBarUI.java javax/swing/plaf/metal/SCCS/s.MetalRadioButtonUI.java javax/swing/plaf/metal/SCCS/s.MetalRootPaneUI.java javax/swing/plaf/metal/SCCS/s.MetalScrollBarUI.java javax/swing/plaf/metal/SCCS/s.MetalScrollButton.java javax/swing/plaf/metal/SCCS/s.MetalScrollPaneUI.java javax/swing/plaf/metal/SCCS/s.MetalSeparatorUI.java javax/swing/plaf/metal/SCCS/s.package.html javax/swing/plaf/metal/SCCS/s.MetalSliderUI.java javax/swing/plaf/metal/SCCS/s.MetalSplitPaneDivider.java javax/swing/plaf/metal/SCCS/s.MetalSplitPaneUI.java javax/swing/plaf/metal/SCCS/s.MetalTabbedPaneUI.java javax/swing/plaf/metal/SCCS/s.MetalTextFieldUI.java javax/swing/plaf/metal/SCCS/s.MetalTheme.java javax/swing/plaf/metal/SCCS/s.MetalTitlePane.java javax/swing/plaf/metal/SCCS/s.MetalToggleButtonUI.java javax/swing/plaf/metal/SCCS/s.MetalToolBarUI.java javax/swing/plaf/metal/SCCS/s.MetalToolTipUI.java javax/swing/plaf/metal/SCCS/s.MetalTreeUI.java javax/swing/plaf/metal/SCCS/s.MetalUtils.java javax/swing/plaf/metal/SCCS/s.OceanTheme.java javax/swing/plaf/metal/icons javax/swing/plaf/metal/icons/SCCS javax/swing/plaf/metal/icons/SCCS/s.Inform.gif javax/swing/plaf/metal/icons/SCCS/s.Error.gif javax/swing/plaf/metal/icons/SCCS/s.Question.gif javax/swing/plaf/metal/icons/SCCS/s.Warn.gif javax/swing/plaf/metal/icons/ocean javax/swing/plaf/metal/icons/ocean/SCCS javax/swing/plaf/metal/icons/ocean/SCCS/s.iconify-pressed.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.close-pressed.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.close.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.collapsed-rtl.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.collapsed.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.computer.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.directory.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.error.png javax/swing/plaf/metal/icons/ocean/SCCS/s.expanded.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.file.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.floppy.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.hardDrive.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.homeFolder.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.maximize-pressed.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.iconify.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.info.png javax/swing/plaf/metal/icons/ocean/SCCS/s.maximize.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.menu.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.minimize-pressed.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.minimize.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.newFolder.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.paletteClose-pressed.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.paletteClose.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.question.png javax/swing/plaf/metal/icons/ocean/SCCS/s.upFolder.gif javax/swing/plaf/metal/icons/ocean/SCCS/s.warning.png javax/swing/plaf/metal/icons/ocean/maximize-pressed.gif javax/swing/plaf/metal/icons/ocean/close-pressed.gif javax/swing/plaf/metal/icons/ocean/close.gif javax/swing/plaf/metal/icons/ocean/collapsed-rtl.gif javax/swing/plaf/metal/icons/ocean/collapsed.gif javax/swing/plaf/metal/icons/ocean/computer.gif javax/swing/plaf/metal/icons/ocean/directory.gif javax/swing/plaf/metal/icons/ocean/error.png javax/swing/plaf/metal/icons/ocean/expanded.gif javax/swing/plaf/metal/icons/ocean/file.gif javax/swing/plaf/metal/icons/ocean/floppy.gif javax/swing/plaf/metal/icons/ocean/hardDrive.gif javax/swing/plaf/metal/icons/ocean/homeFolder.gif javax/swing/plaf/metal/icons/ocean/iconify-pressed.gif javax/swing/plaf/metal/icons/ocean/iconify.gif javax/swing/plaf/metal/icons/ocean/info.png javax/swing/plaf/metal/icons/ocean/maximize.gif javax/swing/plaf/metal/icons/ocean/menu.gif javax/swing/plaf/metal/icons/ocean/warning.png javax/swing/plaf/metal/icons/ocean/minimize.gif javax/swing/plaf/metal/icons/ocean/minimize-pressed.gif javax/swing/plaf/metal/icons/ocean/newFolder.gif javax/swing/plaf/metal/icons/ocean/paletteClose-pressed.gif javax/swing/plaf/metal/icons/ocean/paletteClose.gif javax/swing/plaf/metal/icons/ocean/question.png javax/swing/plaf/metal/icons/ocean/upFolder.gif javax/swing/plaf/metal/icons/Question.gif javax/swing/plaf/metal/icons/Error.gif javax/swing/plaf/metal/icons/Inform.gif javax/swing/plaf/metal/icons/Warn.gif javax/swing/plaf/metal/sounds javax/swing/plaf/metal/sounds/SCCS javax/swing/plaf/metal/sounds/SCCS/s.FrameRestoreDown.wav javax/swing/plaf/metal/sounds/SCCS/s.FrameClose.wav javax/swing/plaf/metal/sounds/SCCS/s.FrameMaximize.wav javax/swing/plaf/metal/sounds/SCCS/s.FrameMinimize.wav javax/swing/plaf/metal/sounds/SCCS/s.FrameRestoreUp.wav javax/swing/plaf/metal/sounds/SCCS/s.MenuItemCommand.wav javax/swing/plaf/metal/sounds/SCCS/s.OptionPaneError.wav javax/swing/plaf/metal/sounds/SCCS/s.OptionPaneInformation.wav javax/swing/plaf/metal/sounds/SCCS/s.OptionPaneQuestion.wav javax/swing/plaf/metal/sounds/SCCS/s.OptionPaneWarning.wav javax/swing/plaf/metal/sounds/SCCS/s.PopupMenuPopup.wav javax/swing/plaf/metal/sounds/FrameMaximize.wav javax/swing/plaf/metal/sounds/FrameClose.wav javax/swing/plaf/metal/sounds/OptionPaneInformation.wav javax/swing/plaf/metal/sounds/FrameMinimize.wav javax/swing/plaf/metal/sounds/FrameRestoreDown.wav javax/swing/plaf/metal/sounds/FrameRestoreUp.wav javax/swing/plaf/metal/sounds/MenuItemCommand.wav javax/swing/plaf/metal/sounds/OptionPaneError.wav javax/swing/plaf/metal/sounds/OptionPaneQuestion.wav javax/swing/plaf/metal/sounds/OptionPaneWarning.wav javax/swing/plaf/metal/sounds/PopupMenuPopup.wav javax/swing/plaf/metal/DefaultMetalTheme.java javax/swing/plaf/metal/MetalComboBoxButton.java javax/swing/plaf/metal/MetalBorders.java javax/swing/plaf/metal/MetalBumps.java javax/swing/plaf/metal/MetalButtonUI.java javax/swing/plaf/metal/MetalCheckBoxIcon.java javax/swing/plaf/metal/MetalCheckBoxUI.java javax/swing/plaf/metal/MetalComboBoxEditor.java javax/swing/plaf/metal/MetalComboBoxIcon.java javax/swing/plaf/metal/MetalComboBoxUI.java javax/swing/plaf/metal/MetalDesktopIconUI.java javax/swing/plaf/metal/MetalLabelUI.java javax/swing/plaf/metal/MetalPopupMenuSeparatorUI.java javax/swing/plaf/metal/MetalMenuBarUI.java javax/swing/plaf/metal/MetalFileChooserUI.java javax/swing/plaf/metal/MetalFontDesktopProperty.java javax/swing/plaf/metal/MetalHighContrastTheme.java javax/swing/plaf/metal/MetalIconFactory.java javax/swing/plaf/metal/MetalInternalFrameTitlePane.java javax/swing/plaf/metal/MetalInternalFrameUI.java javax/swing/plaf/metal/MetalLookAndFeel.java javax/swing/plaf/metal/MetalSplitPaneDivider.java javax/swing/plaf/metal/MetalProgressBarUI.java javax/swing/plaf/metal/MetalRadioButtonUI.java javax/swing/plaf/metal/MetalRootPaneUI.java javax/swing/plaf/metal/MetalScrollBarUI.java javax/swing/plaf/metal/MetalScrollButton.java javax/swing/plaf/metal/MetalScrollPaneUI.java javax/swing/plaf/metal/MetalSeparatorUI.java javax/swing/plaf/metal/MetalSliderUI.java javax/swing/plaf/metal/MetalToggleButtonUI.java javax/swing/plaf/metal/MetalSplitPaneUI.java javax/swing/plaf/metal/MetalTabbedPaneUI.java javax/swing/plaf/metal/MetalTextFieldUI.java javax/swing/plaf/metal/MetalTheme.java javax/swing/plaf/metal/MetalTitlePane.java javax/swing/plaf/metal/MetalToolBarUI.java javax/swing/plaf/metal/MetalToolTipUI.java javax/swing/plaf/metal/MetalTreeUI.java javax/swing/plaf/metal/MetalUtils.java javax/swing/plaf/metal/OceanTheme.java javax/swing/plaf/metal/package.html javax/swing/plaf/multi javax/swing/plaf/multi/SCCS javax/swing/plaf/multi/SCCS/s.MultiColorChooserUI.java javax/swing/plaf/multi/SCCS/s.MultiButtonUI.java javax/swing/plaf/multi/SCCS/s.MultiComboBoxUI.java javax/swing/plaf/multi/SCCS/s.MultiDesktopIconUI.java javax/swing/plaf/multi/SCCS/s.MultiDesktopPaneUI.java javax/swing/plaf/multi/SCCS/s.MultiFileChooserUI.java javax/swing/plaf/multi/SCCS/s.MultiInternalFrameUI.java javax/swing/plaf/multi/SCCS/s.MultiLabelUI.java javax/swing/plaf/multi/SCCS/s.MultiListUI.java javax/swing/plaf/multi/SCCS/s.MultiLookAndFeel.java javax/swing/plaf/multi/SCCS/s.MultiMenuBarUI.java javax/swing/plaf/multi/SCCS/s.MultiMenuItemUI.java javax/swing/plaf/multi/SCCS/s.MultiOptionPaneUI.java javax/swing/plaf/multi/SCCS/s.MultiPanelUI.java javax/swing/plaf/multi/SCCS/s.MultiTableUI.java javax/swing/plaf/multi/SCCS/s.MultiPopupMenuUI.java javax/swing/plaf/multi/SCCS/s.MultiProgressBarUI.java javax/swing/plaf/multi/SCCS/s.MultiRootPaneUI.java javax/swing/plaf/multi/SCCS/s.MultiScrollBarUI.java javax/swing/plaf/multi/SCCS/s.MultiScrollPaneUI.java javax/swing/plaf/multi/SCCS/s.MultiSeparatorUI.java javax/swing/plaf/multi/SCCS/s.MultiSliderUI.java javax/swing/plaf/multi/SCCS/s.MultiSpinnerUI.java javax/swing/plaf/multi/SCCS/s.MultiSplitPaneUI.java javax/swing/plaf/multi/SCCS/s.MultiTabbedPaneUI.java javax/swing/plaf/multi/SCCS/s.MultiTableHeaderUI.java javax/swing/plaf/multi/SCCS/s.MultiTextUI.java javax/swing/plaf/multi/SCCS/s.MultiToolBarUI.java javax/swing/plaf/multi/SCCS/s.MultiTreeUI.java javax/swing/plaf/multi/SCCS/s.MultiToolTipUI.java javax/swing/plaf/multi/SCCS/s.package.html javax/swing/plaf/multi/SCCS/s.MultiViewportUI.java javax/swing/plaf/multi/doc-files javax/swing/plaf/multi/doc-files/SCCS javax/swing/plaf/multi/doc-files/SCCS/s.multi_tsc.html javax/swing/plaf/multi/doc-files/multi_tsc.html javax/swing/plaf/multi/MultiColorChooserUI.java javax/swing/plaf/multi/MultiButtonUI.java javax/swing/plaf/multi/MultiInternalFrameUI.java javax/swing/plaf/multi/MultiComboBoxUI.java javax/swing/plaf/multi/MultiDesktopIconUI.java javax/swing/plaf/multi/MultiDesktopPaneUI.java javax/swing/plaf/multi/MultiFileChooserUI.java javax/swing/plaf/multi/MultiLabelUI.java javax/swing/plaf/multi/MultiListUI.java javax/swing/plaf/multi/MultiLookAndFeel.java javax/swing/plaf/multi/MultiMenuBarUI.java javax/swing/plaf/multi/MultiMenuItemUI.java javax/swing/plaf/multi/MultiOptionPaneUI.java javax/swing/plaf/multi/MultiPanelUI.java javax/swing/plaf/multi/MultiPopupMenuUI.java javax/swing/plaf/multi/MultiProgressBarUI.java javax/swing/plaf/multi/MultiRootPaneUI.java javax/swing/plaf/multi/MultiScrollBarUI.java javax/swing/plaf/multi/MultiScrollPaneUI.java javax/swing/plaf/multi/MultiSeparatorUI.java javax/swing/plaf/multi/MultiSliderUI.java javax/swing/plaf/multi/MultiSpinnerUI.java javax/swing/plaf/multi/MultiSplitPaneUI.java javax/swing/plaf/multi/MultiTabbedPaneUI.java javax/swing/plaf/multi/MultiTableHeaderUI.java javax/swing/plaf/multi/MultiTableUI.java javax/swing/plaf/multi/MultiTextUI.java javax/swing/plaf/multi/MultiToolBarUI.java javax/swing/plaf/multi/MultiToolTipUI.java javax/swing/plaf/multi/MultiTreeUI.java javax/swing/plaf/multi/package.html javax/swing/plaf/multi/MultiViewportUI.java javax/swing/plaf/synth javax/swing/plaf/synth/SCCS javax/swing/plaf/synth/SCCS/s.DefaultMenuLayout.java javax/swing/plaf/synth/SCCS/s.ColorType.java javax/swing/plaf/synth/SCCS/s.DefaultSynthStyleFactory.java javax/swing/plaf/synth/SCCS/s.ImagePainter.java javax/swing/plaf/synth/SCCS/s.ParsedSynthStyle.java javax/swing/plaf/synth/SCCS/s.Region.java javax/swing/plaf/synth/SCCS/s.SynthArrowButton.java javax/swing/plaf/synth/SCCS/s.SynthBorder.java javax/swing/plaf/synth/SCCS/s.SynthButtonUI.java javax/swing/plaf/synth/SCCS/s.SynthCheckBoxMenuItemUI.java javax/swing/plaf/synth/SCCS/s.SynthCheckBoxUI.java javax/swing/plaf/synth/SCCS/s.SynthColorChooserUI.java javax/swing/plaf/synth/SCCS/s.SynthComboBoxUI.java javax/swing/plaf/synth/SCCS/s.SynthLabelUI.java javax/swing/plaf/synth/SCCS/s.SynthOptionPaneUI.java javax/swing/plaf/synth/SCCS/s.SynthComboPopup.java javax/swing/plaf/synth/SCCS/s.SynthConstants.java javax/swing/plaf/synth/SCCS/s.SynthContext.java javax/swing/plaf/synth/SCCS/s.SynthDefaultLookup.java javax/swing/plaf/synth/SCCS/s.SynthDesktopIconUI.java javax/swing/plaf/synth/SCCS/s.SynthDesktopPaneUI.java javax/swing/plaf/synth/SCCS/s.SynthEditorPaneUI.java javax/swing/plaf/synth/SCCS/s.SynthFormattedTextFieldUI.java javax/swing/plaf/synth/SCCS/s.SynthGraphicsUtils.java javax/swing/plaf/synth/SCCS/s.SynthInternalFrameTitlePane.java javax/swing/plaf/synth/SCCS/s.SynthInternalFrameUI.java javax/swing/plaf/synth/SCCS/s.SynthListUI.java javax/swing/plaf/synth/SCCS/s.SynthLookAndFeel.java javax/swing/plaf/synth/SCCS/s.SynthMenuBarUI.java javax/swing/plaf/synth/SCCS/s.package.html javax/swing/plaf/synth/SCCS/s.SynthMenuItemUI.java javax/swing/plaf/synth/SCCS/s.SynthMenuUI.java javax/swing/plaf/synth/SCCS/s.SynthPasswordFieldUI.java javax/swing/plaf/synth/SCCS/s.SynthPainter.java javax/swing/plaf/synth/SCCS/s.SynthPanelUI.java javax/swing/plaf/synth/SCCS/s.SynthParser.java javax/swing/plaf/synth/SCCS/s.SynthProgressBarUI.java javax/swing/plaf/synth/SCCS/s.SynthPopupMenuUI.java javax/swing/plaf/synth/SCCS/s.SynthRadioButtonMenuItemUI.java javax/swing/plaf/synth/SCCS/s.SynthRadioButtonUI.java javax/swing/plaf/synth/SCCS/s.SynthRootPaneUI.java javax/swing/plaf/synth/SCCS/s.SynthScrollBarUI.java javax/swing/plaf/synth/SCCS/s.SynthScrollPaneUI.java javax/swing/plaf/synth/SCCS/s.SynthSeparatorUI.java javax/swing/plaf/synth/SCCS/s.SynthSliderUI.java javax/swing/plaf/synth/SCCS/s.SynthSpinnerUI.java javax/swing/plaf/synth/SCCS/s.SynthSplitPaneDivider.java javax/swing/plaf/synth/SCCS/s.SynthSplitPaneUI.java javax/swing/plaf/synth/SCCS/s.SynthStyle.java javax/swing/plaf/synth/SCCS/s.SynthStyleFactory.java javax/swing/plaf/synth/SCCS/s.SynthTabbedPaneUI.java javax/swing/plaf/synth/SCCS/s.SynthTableHeaderUI.java javax/swing/plaf/synth/SCCS/s.SynthTableUI.java javax/swing/plaf/synth/SCCS/s.SynthTextAreaUI.java javax/swing/plaf/synth/SCCS/s.SynthTextFieldUI.java javax/swing/plaf/synth/SCCS/s.SynthTextPaneUI.java javax/swing/plaf/synth/SCCS/s.SynthToggleButtonUI.java javax/swing/plaf/synth/SCCS/s.SynthToolBarUI.java javax/swing/plaf/synth/SCCS/s.SynthToolTipUI.java javax/swing/plaf/synth/SCCS/s.SynthTreeUI.java javax/swing/plaf/synth/SCCS/s.SynthViewportUI.java javax/swing/plaf/synth/doc-files javax/swing/plaf/synth/doc-files/SCCS javax/swing/plaf/synth/doc-files/SCCS/s.componentProperties.html javax/swing/plaf/synth/doc-files/SCCS/s.synth.dtd javax/swing/plaf/synth/doc-files/SCCS/s.synthFileFormat.html javax/swing/plaf/synth/doc-files/componentProperties.html javax/swing/plaf/synth/doc-files/synth.dtd javax/swing/plaf/synth/doc-files/synthFileFormat.html javax/swing/plaf/synth/DefaultMenuLayout.java javax/swing/plaf/synth/ColorType.java javax/swing/plaf/synth/SynthBorder.java javax/swing/plaf/synth/Region.java javax/swing/plaf/synth/DefaultSynthStyleFactory.java javax/swing/plaf/synth/ImagePainter.java javax/swing/plaf/synth/ParsedSynthStyle.java javax/swing/plaf/synth/SynthCheckBoxMenuItemUI.java javax/swing/plaf/synth/SynthArrowButton.java javax/swing/plaf/synth/SynthButtonUI.java javax/swing/plaf/synth/SynthColorChooserUI.java javax/swing/plaf/synth/SynthCheckBoxUI.java javax/swing/plaf/synth/SynthComboBoxUI.java javax/swing/plaf/synth/SynthInternalFrameTitlePane.java javax/swing/plaf/synth/SynthComboPopup.java javax/swing/plaf/synth/SynthConstants.java javax/swing/plaf/synth/SynthContext.java javax/swing/plaf/synth/SynthDefaultLookup.java javax/swing/plaf/synth/SynthDesktopIconUI.java javax/swing/plaf/synth/SynthDesktopPaneUI.java javax/swing/plaf/synth/SynthEditorPaneUI.java javax/swing/plaf/synth/SynthFormattedTextFieldUI.java javax/swing/plaf/synth/SynthGraphicsUtils.java javax/swing/plaf/synth/SynthPasswordFieldUI.java javax/swing/plaf/synth/SynthInternalFrameUI.java javax/swing/plaf/synth/SynthLabelUI.java javax/swing/plaf/synth/SynthListUI.java javax/swing/plaf/synth/SynthLookAndFeel.java javax/swing/plaf/synth/SynthMenuBarUI.java javax/swing/plaf/synth/SynthMenuItemUI.java javax/swing/plaf/synth/SynthMenuUI.java javax/swing/plaf/synth/SynthOptionPaneUI.java javax/swing/plaf/synth/SynthPainter.java javax/swing/plaf/synth/SynthPanelUI.java javax/swing/plaf/synth/SynthParser.java javax/swing/plaf/synth/SynthRadioButtonMenuItemUI.java javax/swing/plaf/synth/SynthPopupMenuUI.java javax/swing/plaf/synth/SynthProgressBarUI.java javax/swing/plaf/synth/SynthRadioButtonUI.java javax/swing/plaf/synth/SynthRootPaneUI.java javax/swing/plaf/synth/SynthScrollBarUI.java javax/swing/plaf/synth/SynthScrollPaneUI.java javax/swing/plaf/synth/SynthSeparatorUI.java javax/swing/plaf/synth/SynthSliderUI.java javax/swing/plaf/synth/SynthSpinnerUI.java javax/swing/plaf/synth/SynthSplitPaneDivider.java javax/swing/plaf/synth/SynthSplitPaneUI.java javax/swing/plaf/synth/SynthStyle.java javax/swing/plaf/synth/SynthStyleFactory.java javax/swing/plaf/synth/SynthTabbedPaneUI.java javax/swing/plaf/synth/SynthTableHeaderUI.java javax/swing/plaf/synth/SynthTableUI.java javax/swing/plaf/synth/SynthTextAreaUI.java javax/swing/plaf/synth/SynthTextFieldUI.java javax/swing/plaf/synth/SynthTextPaneUI.java javax/swing/plaf/synth/SynthToggleButtonUI.java javax/swing/plaf/synth/SynthToolBarUI.java javax/swing/plaf/synth/SynthToolTipUI.java javax/swing/plaf/synth/SynthTreeUI.java javax/swing/plaf/synth/SynthViewportUI.java javax/swing/plaf/synth/package.html javax/swing/plaf/ComponentInputMapUIResource.java javax/swing/plaf/ActionMapUIResource.java javax/swing/plaf/BorderUIResource.java javax/swing/plaf/ButtonUI.java javax/swing/plaf/ColorChooserUI.java javax/swing/plaf/ColorUIResource.java javax/swing/plaf/ComboBoxUI.java javax/swing/plaf/DimensionUIResource.java javax/swing/plaf/ComponentUI.java javax/swing/plaf/DesktopIconUI.java javax/swing/plaf/DesktopPaneUI.java javax/swing/plaf/FileChooserUI.java javax/swing/plaf/FontUIResource.java javax/swing/plaf/IconUIResource.java javax/swing/plaf/InputMapUIResource.java javax/swing/plaf/InsetsUIResource.java javax/swing/plaf/InternalFrameUI.java javax/swing/plaf/LabelUI.java javax/swing/plaf/ListUI.java javax/swing/plaf/MenuBarUI.java javax/swing/plaf/MenuItemUI.java javax/swing/plaf/OptionPaneUI.java javax/swing/plaf/PanelUI.java javax/swing/plaf/PopupMenuUI.java javax/swing/plaf/ProgressBarUI.java javax/swing/plaf/RootPaneUI.java javax/swing/plaf/ScrollBarUI.java javax/swing/plaf/ScrollPaneUI.java javax/swing/plaf/SeparatorUI.java javax/swing/plaf/SliderUI.java javax/swing/plaf/SpinnerUI.java javax/swing/plaf/SplitPaneUI.java javax/swing/plaf/TabbedPaneUI.java javax/swing/plaf/TableHeaderUI.java javax/swing/plaf/TableUI.java javax/swing/plaf/TextUI.java javax/swing/plaf/ToolBarUI.java javax/swing/plaf/ToolTipUI.java javax/swing/plaf/TreeUI.java javax/swing/plaf/UIResource.java javax/swing/plaf/ViewportUI.java javax/swing/plaf/package.html javax/swing/table javax/swing/table/SCCS javax/swing/table/SCCS/s.DefaultTableCellRenderer.java javax/swing/table/SCCS/s.AbstractTableModel.java javax/swing/table/SCCS/s.DefaultTableColumnModel.java javax/swing/table/SCCS/s.DefaultTableModel.java javax/swing/table/SCCS/s.JTableHeader.java javax/swing/table/SCCS/s.TableCellEditor.java javax/swing/table/SCCS/s.TableCellRenderer.java javax/swing/table/SCCS/s.TableColumn.java javax/swing/table/SCCS/s.TableColumnModel.java javax/swing/table/SCCS/s.TableModel.java javax/swing/table/SCCS/s.package.html javax/swing/table/DefaultTableCellRenderer.java javax/swing/table/AbstractTableModel.java javax/swing/table/DefaultTableColumnModel.java javax/swing/table/DefaultTableModel.java javax/swing/table/JTableHeader.java javax/swing/table/TableCellEditor.java javax/swing/table/TableCellRenderer.java javax/swing/table/TableColumn.java javax/swing/table/TableColumnModel.java javax/swing/table/TableModel.java javax/swing/table/package.html javax/swing/text javax/swing/text/SCCS javax/swing/text/SCCS/s.BadLocationException.java javax/swing/text/SCCS/s.AbstractDocument.java javax/swing/text/SCCS/s.AbstractWriter.java javax/swing/text/SCCS/s.AsyncBoxView.java javax/swing/text/SCCS/s.AttributeSet.java javax/swing/text/SCCS/s.ComponentView.java javax/swing/text/SCCS/s.BoxView.java javax/swing/text/SCCS/s.Caret.java javax/swing/text/SCCS/s.SegmentCache.java javax/swing/text/SCCS/s.ChangedCharSetException.java javax/swing/text/SCCS/s.CompositeView.java javax/swing/text/SCCS/s.DateFormatter.java javax/swing/text/SCCS/s.DefaultCaret.java javax/swing/text/SCCS/s.DefaultEditorKit.java javax/swing/text/SCCS/s.DefaultFormatter.java javax/swing/text/SCCS/s.Segment.java javax/swing/text/SCCS/s.DefaultFormatterFactory.java javax/swing/text/SCCS/s.DefaultHighlighter.java javax/swing/text/SCCS/s.DefaultStyledDocument.java javax/swing/text/SCCS/s.DefaultTextUI.java javax/swing/text/SCCS/s.Document.java javax/swing/text/SCCS/s.DocumentFilter.java javax/swing/text/SCCS/s.EditorKit.java javax/swing/text/SCCS/s.Element.java javax/swing/text/SCCS/s.ElementIterator.java javax/swing/text/SCCS/s.FieldView.java javax/swing/text/SCCS/s.FlowView.java javax/swing/text/SCCS/s.GapContent.java javax/swing/text/SCCS/s.GapVector.java javax/swing/text/SCCS/s.GlyphPainter1.java javax/swing/text/SCCS/s.GlyphPainter2.java javax/swing/text/SCCS/s.GlyphView.java javax/swing/text/SCCS/s.IconView.java javax/swing/text/SCCS/s.Highlighter.java javax/swing/text/SCCS/s.InternationalFormatter.java javax/swing/text/SCCS/s.JTextComponent.java javax/swing/text/SCCS/s.Keymap.java javax/swing/text/SCCS/s.LabelView.java javax/swing/text/SCCS/s.LayeredHighlighter.java javax/swing/text/SCCS/s.LayoutQueue.java javax/swing/text/SCCS/s.MaskFormatter.java javax/swing/text/SCCS/s.MutableAttributeSet.java javax/swing/text/SCCS/s.NavigationFilter.java javax/swing/text/SCCS/s.NumberFormatter.java javax/swing/text/SCCS/s.ParagraphView.java javax/swing/text/SCCS/s.PasswordView.java javax/swing/text/SCCS/s.PlainDocument.java javax/swing/text/SCCS/s.PlainView.java javax/swing/text/SCCS/s.Position.java javax/swing/text/SCCS/s.View.java javax/swing/text/SCCS/s.WrappedPlainView.java javax/swing/text/SCCS/s.SimpleAttributeSet.java javax/swing/text/SCCS/s.StateInvariantError.java javax/swing/text/SCCS/s.StringContent.java javax/swing/text/SCCS/s.Style.java javax/swing/text/SCCS/s.StyleConstants.java javax/swing/text/SCCS/s.StyleContext.java javax/swing/text/SCCS/s.StyledDocument.java javax/swing/text/SCCS/s.StyledEditorKit.java javax/swing/text/SCCS/s.TabExpander.java javax/swing/text/SCCS/s.TabSet.java javax/swing/text/SCCS/s.TabStop.java javax/swing/text/SCCS/s.TabableView.java javax/swing/text/SCCS/s.TableView.java javax/swing/text/SCCS/s.TextAction.java javax/swing/text/SCCS/s.TextLayoutStrategy.java javax/swing/text/SCCS/s.Utilities.java javax/swing/text/SCCS/s.ViewFactory.java javax/swing/text/SCCS/s.ZoneView.java javax/swing/text/SCCS/s.package.html javax/swing/text/doc-files javax/swing/text/doc-files/SCCS javax/swing/text/doc-files/SCCS/s.Document-notification.gif javax/swing/text/doc-files/SCCS/s.Document-coord.gif javax/swing/text/doc-files/SCCS/s.Document-insert.gif javax/swing/text/doc-files/SCCS/s.Document-remove.gif javax/swing/text/doc-files/SCCS/s.Document-structure.gif javax/swing/text/doc-files/SCCS/s.OpenBookIcon.gif javax/swing/text/doc-files/SCCS/s.View-flexibility.jpg javax/swing/text/doc-files/SCCS/s.View-layout.jpg javax/swing/text/doc-files/SCCS/s.editor.gif javax/swing/text/doc-files/SCCS/s.paragraph.gif javax/swing/text/doc-files/Document-notification.gif javax/swing/text/doc-files/Document-coord.gif javax/swing/text/doc-files/Document-insert.gif javax/swing/text/doc-files/Document-structure.gif javax/swing/text/doc-files/Document-remove.gif javax/swing/text/doc-files/OpenBookIcon.gif javax/swing/text/doc-files/View-flexibility.jpg javax/swing/text/doc-files/View-layout.jpg javax/swing/text/doc-files/editor.gif javax/swing/text/doc-files/paragraph.gif javax/swing/text/html javax/swing/text/html/SCCS javax/swing/text/html/SCCS/s.AccessibleHTML.java javax/swing/text/html/SCCS/s.BRView.java javax/swing/text/html/SCCS/s.BlockView.java javax/swing/text/html/SCCS/s.CSS.java javax/swing/text/html/SCCS/s.CSSParser.java javax/swing/text/html/SCCS/s.CommentView.java javax/swing/text/html/SCCS/s.EditableView.java javax/swing/text/html/SCCS/s.FormSubmitEvent.java javax/swing/text/html/SCCS/s.FormView.java javax/swing/text/html/SCCS/s.FrameSetView.java javax/swing/text/html/SCCS/s.FrameView.java javax/swing/text/html/SCCS/s.HRuleView.java javax/swing/text/html/SCCS/s.HTML.java javax/swing/text/html/SCCS/s.HTMLDocument.java javax/swing/text/html/SCCS/s.HTMLEditorKit.java javax/swing/text/html/SCCS/s.HTMLWriter.java javax/swing/text/html/SCCS/s.NoFramesView.java javax/swing/text/html/SCCS/s.Map.java javax/swing/text/html/SCCS/s.HTMLFrameHyperlinkEvent.java javax/swing/text/html/SCCS/s.HiddenTagView.java javax/swing/text/html/SCCS/s.ImageView.java javax/swing/text/html/SCCS/s.InlineView.java javax/swing/text/html/SCCS/s.IsindexView.java javax/swing/text/html/SCCS/s.LineView.java javax/swing/text/html/SCCS/s.ListView.java javax/swing/text/html/SCCS/s.MinimalHTMLWriter.java javax/swing/text/html/SCCS/s.MuxingAttributeSet.java javax/swing/text/html/SCCS/s.ObjectView.java javax/swing/text/html/SCCS/s.Option.java javax/swing/text/html/SCCS/s.OptionComboBoxModel.java javax/swing/text/html/SCCS/s.OptionListModel.java javax/swing/text/html/SCCS/s.ParagraphView.java javax/swing/text/html/SCCS/s.ResourceLoader.java javax/swing/text/html/SCCS/s.StyleSheet.java javax/swing/text/html/SCCS/s.default.css javax/swing/text/html/SCCS/s.TableView.java javax/swing/text/html/SCCS/s.TextAreaDocument.java javax/swing/text/html/SCCS/s.package.html javax/swing/text/html/icons javax/swing/text/html/icons/SCCS javax/swing/text/html/icons/SCCS/s.image-delayed.gif javax/swing/text/html/icons/SCCS/s.image-failed.gif javax/swing/text/html/icons/image-delayed.gif javax/swing/text/html/icons/image-failed.gif javax/swing/text/html/parser javax/swing/text/html/parser/SCCS javax/swing/text/html/parser/SCCS/s.ContentModelState.java javax/swing/text/html/parser/SCCS/s.AttributeList.java javax/swing/text/html/parser/SCCS/s.ContentModel.java javax/swing/text/html/parser/SCCS/s.DTDConstants.java javax/swing/text/html/parser/SCCS/s.DTD.java javax/swing/text/html/parser/SCCS/s.DocumentParser.java javax/swing/text/html/parser/SCCS/s.Element.java javax/swing/text/html/parser/SCCS/s.Entity.java javax/swing/text/html/parser/SCCS/s.Parser.java javax/swing/text/html/parser/SCCS/s.ParserDelegator.java javax/swing/text/html/parser/SCCS/s.ResourceLoader.java javax/swing/text/html/parser/SCCS/s.TagElement.java javax/swing/text/html/parser/SCCS/s.TagStack.java javax/swing/text/html/parser/SCCS/s.html32.bdtd javax/swing/text/html/parser/SCCS/s.package.html javax/swing/text/html/parser/ContentModelState.java javax/swing/text/html/parser/AttributeList.java javax/swing/text/html/parser/ContentModel.java javax/swing/text/html/parser/DTDConstants.java javax/swing/text/html/parser/DTD.java javax/swing/text/html/parser/DocumentParser.java javax/swing/text/html/parser/Element.java javax/swing/text/html/parser/Entity.java javax/swing/text/html/parser/Parser.java javax/swing/text/html/parser/ParserDelegator.java javax/swing/text/html/parser/ResourceLoader.java javax/swing/text/html/parser/TagElement.java javax/swing/text/html/parser/TagStack.java javax/swing/text/html/parser/html32.bdtd javax/swing/text/html/parser/package.html javax/swing/text/html/FormSubmitEvent.java javax/swing/text/html/AccessibleHTML.java javax/swing/text/html/BRView.java javax/swing/text/html/BlockView.java javax/swing/text/html/CSS.java javax/swing/text/html/CSSParser.java javax/swing/text/html/CommentView.java javax/swing/text/html/EditableView.java javax/swing/text/html/FormView.java javax/swing/text/html/FrameSetView.java javax/swing/text/html/FrameView.java javax/swing/text/html/HRuleView.java javax/swing/text/html/HTML.java javax/swing/text/html/HTMLDocument.java javax/swing/text/html/HTMLEditorKit.java javax/swing/text/html/HTMLWriter.java javax/swing/text/html/MinimalHTMLWriter.java javax/swing/text/html/HTMLFrameHyperlinkEvent.java javax/swing/text/html/HiddenTagView.java javax/swing/text/html/ImageView.java javax/swing/text/html/InlineView.java javax/swing/text/html/IsindexView.java javax/swing/text/html/LineView.java javax/swing/text/html/ListView.java javax/swing/text/html/Map.java javax/swing/text/html/OptionComboBoxModel.java javax/swing/text/html/MuxingAttributeSet.java javax/swing/text/html/NoFramesView.java javax/swing/text/html/ObjectView.java javax/swing/text/html/Option.java javax/swing/text/html/OptionListModel.java javax/swing/text/html/ParagraphView.java javax/swing/text/html/ResourceLoader.java javax/swing/text/html/StyleSheet.java javax/swing/text/html/TableView.java javax/swing/text/html/default.css javax/swing/text/html/TextAreaDocument.java javax/swing/text/html/package.html javax/swing/text/rtf javax/swing/text/rtf/SCCS javax/swing/text/rtf/SCCS/s.AbstractFilter.java javax/swing/text/rtf/SCCS/s.Constants.java javax/swing/text/rtf/SCCS/s.MockAttributeSet.java javax/swing/text/rtf/SCCS/s.RTFAttribute.java javax/swing/text/rtf/SCCS/s.RTFAttributes.java javax/swing/text/rtf/SCCS/s.RTFEditorKit.java javax/swing/text/rtf/SCCS/s.RTFGenerator.java javax/swing/text/rtf/SCCS/s.RTFParser.java javax/swing/text/rtf/SCCS/s.RTFReader.java javax/swing/text/rtf/SCCS/s.package.html javax/swing/text/rtf/charsets javax/swing/text/rtf/charsets/SCCS javax/swing/text/rtf/charsets/SCCS/s.cpg437.txt javax/swing/text/rtf/charsets/SCCS/s.NeXT.txt javax/swing/text/rtf/charsets/SCCS/s.ansi.txt javax/swing/text/rtf/charsets/SCCS/s.cpg850.txt javax/swing/text/rtf/charsets/SCCS/s.mac.txt javax/swing/text/rtf/charsets/NeXT.txt javax/swing/text/rtf/charsets/ansi.txt javax/swing/text/rtf/charsets/cpg437.txt javax/swing/text/rtf/charsets/cpg850.txt javax/swing/text/rtf/charsets/mac.txt javax/swing/text/rtf/MockAttributeSet.java javax/swing/text/rtf/AbstractFilter.java javax/swing/text/rtf/Constants.java javax/swing/text/rtf/RTFAttribute.java javax/swing/text/rtf/RTFAttributes.java javax/swing/text/rtf/RTFEditorKit.java javax/swing/text/rtf/RTFGenerator.java javax/swing/text/rtf/RTFParser.java javax/swing/text/rtf/RTFReader.java javax/swing/text/rtf/package.html javax/swing/text/BadLocationException.java javax/swing/text/AbstractDocument.java javax/swing/text/AbstractWriter.java javax/swing/text/AsyncBoxView.java javax/swing/text/AttributeSet.java javax/swing/text/BoxView.java javax/swing/text/Caret.java javax/swing/text/ComponentView.java javax/swing/text/DefaultFormatterFactory.java javax/swing/text/ChangedCharSetException.java javax/swing/text/CompositeView.java javax/swing/text/DateFormatter.java javax/swing/text/DefaultCaret.java javax/swing/text/DefaultEditorKit.java javax/swing/text/DefaultFormatter.java javax/swing/text/DefaultStyledDocument.java javax/swing/text/DefaultHighlighter.java javax/swing/text/DefaultTextUI.java javax/swing/text/Document.java javax/swing/text/DocumentFilter.java javax/swing/text/EditorKit.java javax/swing/text/Element.java javax/swing/text/ElementIterator.java javax/swing/text/FieldView.java javax/swing/text/FlowView.java javax/swing/text/GapContent.java javax/swing/text/GapVector.java javax/swing/text/GlyphPainter1.java javax/swing/text/GlyphPainter2.java javax/swing/text/GlyphView.java javax/swing/text/Highlighter.java javax/swing/text/LabelView.java javax/swing/text/Keymap.java javax/swing/text/IconView.java javax/swing/text/InternationalFormatter.java javax/swing/text/JTextComponent.java javax/swing/text/MutableAttributeSet.java javax/swing/text/LayeredHighlighter.java javax/swing/text/LayoutQueue.java javax/swing/text/MaskFormatter.java javax/swing/text/NavigationFilter.java javax/swing/text/NumberFormatter.java javax/swing/text/ParagraphView.java javax/swing/text/PasswordView.java javax/swing/text/PlainDocument.java javax/swing/text/PlainView.java javax/swing/text/Position.java javax/swing/text/Segment.java javax/swing/text/SegmentCache.java javax/swing/text/SimpleAttributeSet.java javax/swing/text/Style.java javax/swing/text/StateInvariantError.java javax/swing/text/StringContent.java javax/swing/text/StyleConstants.java javax/swing/text/StyleContext.java javax/swing/text/StyledDocument.java javax/swing/text/StyledEditorKit.java javax/swing/text/TabExpander.java javax/swing/text/TabSet.java javax/swing/text/TabStop.java javax/swing/text/TabableView.java javax/swing/text/TableView.java javax/swing/text/TextAction.java javax/swing/text/TextLayoutStrategy.java javax/swing/text/Utilities.java javax/swing/text/View.java javax/swing/text/ViewFactory.java javax/swing/text/ZoneView.java javax/swing/text/WrappedPlainView.java javax/swing/text/package.html javax/swing/tree javax/swing/tree/SCCS javax/swing/tree/SCCS/s.DefaultMutableTreeNode.java javax/swing/tree/SCCS/s.AbstractLayoutCache.java javax/swing/tree/SCCS/s.DefaultTreeCellEditor.java javax/swing/tree/SCCS/s.DefaultTreeCellRenderer.java javax/swing/tree/SCCS/s.DefaultTreeModel.java javax/swing/tree/SCCS/s.DefaultTreeSelectionModel.java javax/swing/tree/SCCS/s.ExpandVetoException.java javax/swing/tree/SCCS/s.FixedHeightLayoutCache.java javax/swing/tree/SCCS/s.MutableTreeNode.java javax/swing/tree/SCCS/s.RowMapper.java javax/swing/tree/SCCS/s.TreeCellEditor.java javax/swing/tree/SCCS/s.TreeCellRenderer.java javax/swing/tree/SCCS/s.TreeModel.java javax/swing/tree/SCCS/s.TreeNode.java javax/swing/tree/SCCS/s.TreePath.java javax/swing/tree/SCCS/s.TreeSelectionModel.java javax/swing/tree/SCCS/s.VariableHeightLayoutCache.java javax/swing/tree/SCCS/s.package.html javax/swing/tree/DefaultTreeCellRenderer.java javax/swing/tree/AbstractLayoutCache.java javax/swing/tree/DefaultMutableTreeNode.java javax/swing/tree/DefaultTreeCellEditor.java javax/swing/tree/DefaultTreeSelectionModel.java javax/swing/tree/DefaultTreeModel.java javax/swing/tree/ExpandVetoException.java javax/swing/tree/FixedHeightLayoutCache.java javax/swing/tree/MutableTreeNode.java javax/swing/tree/RowMapper.java javax/swing/tree/TreeCellEditor.java javax/swing/tree/TreeCellRenderer.java javax/swing/tree/TreeModel.java javax/swing/tree/VariableHeightLayoutCache.java javax/swing/tree/TreeNode.java javax/swing/tree/TreePath.java javax/swing/tree/TreeSelectionModel.java javax/swing/tree/package.html javax/swing/undo javax/swing/undo/SCCS javax/swing/undo/SCCS/s.AbstractUndoableEdit.java javax/swing/undo/SCCS/s.CannotRedoException.java javax/swing/undo/SCCS/s.CannotUndoException.java javax/swing/undo/SCCS/s.CompoundEdit.java javax/swing/undo/SCCS/s.StateEdit.java javax/swing/undo/SCCS/s.StateEditable.java javax/swing/undo/SCCS/s.UndoManager.java javax/swing/undo/SCCS/s.UndoableEdit.java javax/swing/undo/SCCS/s.UndoableEditSupport.java javax/swing/undo/SCCS/s.package.html javax/swing/undo/AbstractUndoableEdit.java javax/swing/undo/CannotRedoException.java javax/swing/undo/CannotUndoException.java javax/swing/undo/CompoundEdit.java javax/swing/undo/StateEdit.java javax/swing/undo/StateEditable.java javax/swing/undo/UndoManager.java javax/swing/undo/UndoableEdit.java javax/swing/undo/UndoableEditSupport.java javax/swing/undo/package.html javax/swing/AbstractAction.java javax/swing/AbstractButton.java javax/swing/Action.java javax/swing/AbstractActionPropertyChangeListener.java javax/swing/AbstractCellEditor.java javax/swing/AbstractListModel.java javax/swing/AbstractSpinnerModel.java javax/swing/ActionMap.java javax/swing/DefaultBoundedRangeModel.java javax/swing/AncestorNotifier.java javax/swing/ArrayTable.java javax/swing/Autoscroller.java javax/swing/BorderFactory.java javax/swing/BoundedRangeModel.java javax/swing/Box.java javax/swing/BoxLayout.java javax/swing/ButtonGroup.java javax/swing/ButtonModel.java javax/swing/CellEditor.java javax/swing/CellRendererPane.java javax/swing/ComboBoxEditor.java javax/swing/ComboBoxModel.java javax/swing/ComponentInputMap.java javax/swing/DebugGraphics.java javax/swing/DebugGraphicsFilter.java javax/swing/DebugGraphicsInfo.java javax/swing/DesktopManager.java javax/swing/DebugGraphicsObserver.java javax/swing/DefaultComboBoxModel.java javax/swing/DefaultButtonModel.java javax/swing/DefaultCellEditor.java javax/swing/DefaultSingleSelectionModel.java javax/swing/DefaultDesktopManager.java javax/swing/DefaultFocusManager.java javax/swing/DefaultListCellRenderer.java javax/swing/DefaultListModel.java javax/swing/DefaultListSelectionModel.java javax/swing/DelegatingDefaultFocusManager.java javax/swing/FocusManager.java javax/swing/GraphicsWrapper.java javax/swing/LayoutFocusTraversalPolicy.java javax/swing/GrayFilter.java javax/swing/Icon.java javax/swing/ImageIcon.java javax/swing/InputMap.java javax/swing/InputVerifier.java javax/swing/JApplet.java javax/swing/JButton.java javax/swing/InternalFrameFocusTraversalPolicy.java javax/swing/JCheckBox.java javax/swing/JCheckBoxMenuItem.java javax/swing/JColorChooser.java javax/swing/JComboBox.java javax/swing/JComponent.java javax/swing/JDesktopPane.java javax/swing/JDialog.java javax/swing/JEditorPane.java javax/swing/JFileChooser.java javax/swing/JFormattedTextField.java javax/swing/JFrame.java javax/swing/JInternalFrame.java javax/swing/JLabel.java javax/swing/JLayeredPane.java javax/swing/JList.java javax/swing/JMenu.java javax/swing/JMenuBar.java javax/swing/JMenuItem.java javax/swing/JOptionPane.java javax/swing/JPanel.java javax/swing/JPasswordField.java javax/swing/JPopupMenu.java javax/swing/JProgressBar.java javax/swing/JRadioButton.java javax/swing/JRadioButtonMenuItem.java javax/swing/JRootPane.java javax/swing/JScrollBar.java javax/swing/JScrollPane.java javax/swing/JSeparator.java javax/swing/JSlider.java javax/swing/JSpinner.java javax/swing/JSplitPane.java javax/swing/JTabbedPane.java javax/swing/JTable.java javax/swing/JTextArea.java javax/swing/JTextField.java javax/swing/JTextPane.java javax/swing/JToggleButton.java javax/swing/JToolBar.java javax/swing/JToolTip.java javax/swing/JTree.java javax/swing/JViewport.java javax/swing/JWindow.java javax/swing/KeyStroke.java javax/swing/KeyboardManager.java javax/swing/LayoutComparator.java javax/swing/ListSelectionModel.java javax/swing/LegacyGlueFocusTraversalPolicy.java javax/swing/ListCellRenderer.java javax/swing/ListModel.java javax/swing/MenuSelectionManager.java javax/swing/LookAndFeel.java javax/swing/MenuElement.java javax/swing/MutableComboBoxModel.java javax/swing/MultiUIDefaults.java javax/swing/ProgressMonitorInputStream.java javax/swing/OverlayLayout.java javax/swing/Popup.java javax/swing/PopupFactory.java javax/swing/ProgressMonitor.java javax/swing/RepaintManager.java javax/swing/Renderer.java javax/swing/RootPaneContainer.java javax/swing/ScrollPaneConstants.java javax/swing/ScrollPaneLayout.java javax/swing/SpringLayout.java javax/swing/Spring.java javax/swing/Scrollable.java javax/swing/SingleSelectionModel.java javax/swing/SizeRequirements.java javax/swing/SizeSequence.java javax/swing/SortingFocusTraversalPolicy.java javax/swing/SpinnerDateModel.java javax/swing/SpinnerListModel.java javax/swing/SpinnerModel.java javax/swing/SpinnerNumberModel.java javax/swing/SwingConstants.java javax/swing/SwingUtilities.java javax/swing/TablePrintable.java javax/swing/Timer.java javax/swing/SystemEventQueueUtilities.java javax/swing/TimerQueue.java javax/swing/ViewportLayout.java javax/swing/UIDefaults.java javax/swing/ToolTipManager.java javax/swing/TransferHandler.java javax/swing/UIManager.java javax/swing/package.html javax/swing/UnsupportedLookAndFeelException.java javax/swing/WindowConstants.java javax/transaction javax/transaction/SCCS javax/transaction/SCCS/s.TransactionRolledbackException.java javax/transaction/SCCS/s.InvalidTransactionException.java javax/transaction/SCCS/s.TransactionRequiredException.java javax/transaction/SCCS/s.package.html javax/transaction/xa javax/transaction/xa/SCCS javax/transaction/xa/SCCS/s.XAException.java javax/transaction/xa/SCCS/s.XAResource.java javax/transaction/xa/SCCS/s.Xid.java javax/transaction/xa/SCCS/s.package.html javax/transaction/xa/XAException.java javax/transaction/xa/XAResource.java javax/transaction/xa/Xid.java javax/transaction/xa/package.html javax/transaction/InvalidTransactionException.java javax/transaction/TransactionRequiredException.java javax/transaction/TransactionRolledbackException.java javax/transaction/package.html javax/xml javax/xml/SCCS javax/xml/SCCS/s.XMLConstants.java javax/xml/SCCS/s.package.html javax/xml/datatype javax/xml/datatype/SCCS javax/xml/datatype/SCCS/s.FactoryFinder.java javax/xml/datatype/SCCS/s.Duration.java javax/xml/datatype/SCCS/s.DatatypeConfigurationException.java javax/xml/datatype/SCCS/s.DatatypeConstants.java javax/xml/datatype/SCCS/s.DatatypeFactory.java javax/xml/datatype/SCCS/s.XMLGregorianCalendar.java javax/xml/datatype/SCCS/s.package.html javax/xml/datatype/DatatypeConfigurationException.java javax/xml/datatype/DatatypeConstants.java javax/xml/datatype/DatatypeFactory.java javax/xml/datatype/Duration.java javax/xml/datatype/FactoryFinder.java javax/xml/datatype/XMLGregorianCalendar.java javax/xml/datatype/package.html javax/xml/namespace javax/xml/namespace/SCCS javax/xml/namespace/SCCS/s.NamespaceContext.java javax/xml/namespace/SCCS/s.QName.java javax/xml/namespace/SCCS/s.package.html javax/xml/namespace/NamespaceContext.java javax/xml/namespace/QName.java javax/xml/namespace/package.html javax/xml/parsers javax/xml/parsers/SCCS javax/xml/parsers/SCCS/s.DocumentBuilderFactory.java javax/xml/parsers/SCCS/s.DocumentBuilder.java javax/xml/parsers/SCCS/s.FactoryConfigurationError.java javax/xml/parsers/SCCS/s.FactoryFinder.java javax/xml/parsers/SCCS/s.ParserConfigurationException.java javax/xml/parsers/SCCS/s.SAXParser.java javax/xml/parsers/SCCS/s.SAXParserFactory.java javax/xml/parsers/SCCS/s.SecuritySupport.java javax/xml/parsers/SCCS/s.package.html javax/xml/parsers/DocumentBuilderFactory.java javax/xml/parsers/DocumentBuilder.java javax/xml/parsers/FactoryConfigurationError.java javax/xml/parsers/FactoryFinder.java javax/xml/parsers/ParserConfigurationException.java javax/xml/parsers/SAXParser.java javax/xml/parsers/SAXParserFactory.java javax/xml/parsers/SecuritySupport.java javax/xml/parsers/package.html javax/xml/transform javax/xml/transform/SCCS javax/xml/transform/SCCS/s.TransformerException.java javax/xml/transform/SCCS/s.ErrorListener.java javax/xml/transform/SCCS/s.FactoryFinder.java javax/xml/transform/SCCS/s.OutputKeys.java javax/xml/transform/SCCS/s.Result.java javax/xml/transform/SCCS/s.SecuritySupport.java javax/xml/transform/SCCS/s.Source.java javax/xml/transform/SCCS/s.SourceLocator.java javax/xml/transform/SCCS/s.Templates.java javax/xml/transform/SCCS/s.Transformer.java javax/xml/transform/SCCS/s.overview.html javax/xml/transform/SCCS/s.TransformerConfigurationException.java javax/xml/transform/SCCS/s.TransformerFactory.java javax/xml/transform/SCCS/s.URIResolver.java javax/xml/transform/SCCS/s.TransformerFactoryConfigurationError.java javax/xml/transform/SCCS/s.package.html javax/xml/transform/dom javax/xml/transform/dom/SCCS javax/xml/transform/dom/SCCS/s.DOMLocator.java javax/xml/transform/dom/SCCS/s.DOMResult.java javax/xml/transform/dom/SCCS/s.DOMSource.java javax/xml/transform/dom/SCCS/s.package.html javax/xml/transform/dom/DOMLocator.java javax/xml/transform/dom/DOMResult.java javax/xml/transform/dom/DOMSource.java javax/xml/transform/dom/package.html javax/xml/transform/sax javax/xml/transform/sax/SCCS javax/xml/transform/sax/SCCS/s.TemplatesHandler.java javax/xml/transform/sax/SCCS/s.SAXResult.java javax/xml/transform/sax/SCCS/s.SAXSource.java javax/xml/transform/sax/SCCS/s.SAXTransformerFactory.java javax/xml/transform/sax/SCCS/s.TransformerHandler.java javax/xml/transform/sax/SCCS/s.package.html javax/xml/transform/sax/TemplatesHandler.java javax/xml/transform/sax/SAXResult.java javax/xml/transform/sax/SAXSource.java javax/xml/transform/sax/SAXTransformerFactory.java javax/xml/transform/sax/TransformerHandler.java javax/xml/transform/sax/package.html javax/xml/transform/stream javax/xml/transform/stream/SCCS javax/xml/transform/stream/SCCS/s.StreamResult.java javax/xml/transform/stream/SCCS/s.StreamSource.java javax/xml/transform/stream/SCCS/s.package.html javax/xml/transform/stream/StreamResult.java javax/xml/transform/stream/StreamSource.java javax/xml/transform/stream/package.html javax/xml/transform/SecuritySupport.java javax/xml/transform/ErrorListener.java javax/xml/transform/FactoryFinder.java javax/xml/transform/OutputKeys.java javax/xml/transform/Result.java javax/xml/transform/SourceLocator.java javax/xml/transform/Source.java javax/xml/transform/TransformerException.java javax/xml/transform/Templates.java javax/xml/transform/Transformer.java javax/xml/transform/TransformerConfigurationException.java javax/xml/transform/TransformerFactory.java javax/xml/transform/URIResolver.java javax/xml/transform/TransformerFactoryConfigurationError.java javax/xml/transform/overview.html javax/xml/transform/package.html javax/xml/validation javax/xml/validation/SCCS javax/xml/validation/SCCS/s.SchemaFactory.java javax/xml/validation/SCCS/s.Schema.java javax/xml/validation/SCCS/s.SchemaFactoryFinder.java javax/xml/validation/SCCS/s.SchemaFactoryLoader.java javax/xml/validation/SCCS/s.TypeInfoProvider.java javax/xml/validation/SCCS/s.Validator.java javax/xml/validation/SCCS/s.ValidatorHandler.java javax/xml/validation/SCCS/s.package.html javax/xml/validation/SchemaFactory.java javax/xml/validation/Schema.java javax/xml/validation/SchemaFactoryFinder.java javax/xml/validation/SchemaFactoryLoader.java javax/xml/validation/TypeInfoProvider.java javax/xml/validation/Validator.java javax/xml/validation/ValidatorHandler.java javax/xml/validation/package.html javax/xml/xpath javax/xml/xpath/SCCS javax/xml/xpath/SCCS/s.XPathConstants.java javax/xml/xpath/SCCS/s.XPath.java javax/xml/xpath/SCCS/s.XPathExpressionException.java javax/xml/xpath/SCCS/s.XPathException.java javax/xml/xpath/SCCS/s.XPathExpression.java javax/xml/xpath/SCCS/s.XPathFactoryFinder.java javax/xml/xpath/SCCS/s.XPathFactory.java javax/xml/xpath/SCCS/s.package.html javax/xml/xpath/SCCS/s.XPathFactoryConfigurationException.java javax/xml/xpath/SCCS/s.XPathFunction.java javax/xml/xpath/SCCS/s.XPathFunctionException.java javax/xml/xpath/SCCS/s.XPathFunctionResolver.java javax/xml/xpath/SCCS/s.XPathVariableResolver.java javax/xml/xpath/XPathConstants.java javax/xml/xpath/XPath.java javax/xml/xpath/XPathExpression.java javax/xml/xpath/XPathException.java javax/xml/xpath/XPathFactoryConfigurationException.java javax/xml/xpath/XPathExpressionException.java javax/xml/xpath/XPathFactory.java javax/xml/xpath/XPathFactoryFinder.java javax/xml/xpath/XPathFunction.java javax/xml/xpath/XPathFunctionException.java javax/xml/xpath/XPathFunctionResolver.java javax/xml/xpath/XPathVariableResolver.java javax/xml/xpath/package.html javax/xml/XMLConstants.java javax/xml/package.html org org/ietf org/ietf/jgss org/ietf/jgss/SCCS org/ietf/jgss/SCCS/s.ChannelBinding.java org/ietf/jgss/SCCS/s.GSSContext.java org/ietf/jgss/SCCS/s.GSSCredential.java org/ietf/jgss/SCCS/s.GSSException.java org/ietf/jgss/SCCS/s.GSSManager.java org/ietf/jgss/SCCS/s.GSSName.java org/ietf/jgss/SCCS/s.MessageProp.java org/ietf/jgss/SCCS/s.Oid.java org/ietf/jgss/SCCS/s.package.html org/ietf/jgss/ChannelBinding.java org/ietf/jgss/GSSContext.java org/ietf/jgss/GSSCredential.java org/ietf/jgss/GSSException.java org/ietf/jgss/GSSManager.java org/ietf/jgss/GSSName.java org/ietf/jgss/MessageProp.java org/ietf/jgss/Oid.java org/ietf/jgss/package.html org/omg org/omg/CORBA org/omg/CORBA/DynAnyPackage org/omg/CORBA/DynAnyPackage/SCCS org/omg/CORBA/DynAnyPackage/SCCS/s.InvalidSeq.java org/omg/CORBA/DynAnyPackage/SCCS/s.Invalid.java org/omg/CORBA/DynAnyPackage/SCCS/s.InvalidValue.java org/omg/CORBA/DynAnyPackage/SCCS/s.TypeMismatch.java org/omg/CORBA/DynAnyPackage/SCCS/s.package.html org/omg/CORBA/DynAnyPackage/InvalidValue.java org/omg/CORBA/DynAnyPackage/Invalid.java org/omg/CORBA/DynAnyPackage/InvalidSeq.java org/omg/CORBA/DynAnyPackage/TypeMismatch.java org/omg/CORBA/DynAnyPackage/package.html org/omg/CORBA/ORBPackage org/omg/CORBA/ORBPackage/SCCS org/omg/CORBA/ORBPackage/SCCS/s.InconsistentTypeCode.java org/omg/CORBA/ORBPackage/SCCS/s.InvalidName.java org/omg/CORBA/ORBPackage/SCCS/s.package.html org/omg/CORBA/ORBPackage/InconsistentTypeCode.java org/omg/CORBA/ORBPackage/InvalidName.java org/omg/CORBA/ORBPackage/package.html org/omg/CORBA/SCCS org/omg/CORBA/SCCS/s.ACTIVITY_COMPLETED.java org/omg/CORBA/SCCS/s.ACTIVITY_REQUIRED.java org/omg/CORBA/SCCS/s.ARG_IN.java org/omg/CORBA/SCCS/s.ARG_INOUT.java org/omg/CORBA/SCCS/s.ARG_OUT.java org/omg/CORBA/SCCS/s.Any.java org/omg/CORBA/SCCS/s.AnyHolder.java org/omg/CORBA/SCCS/s.AnySeqHelper.java org/omg/CORBA/SCCS/s.AnySeqHolder.java org/omg/CORBA/SCCS/s.BAD_CONTEXT.java org/omg/CORBA/SCCS/s.BAD_INV_ORDER.java org/omg/CORBA/SCCS/s.BAD_OPERATION.java org/omg/CORBA/SCCS/s.BAD_PARAM.java org/omg/CORBA/SCCS/s.BAD_POLICY.java org/omg/CORBA/SCCS/s.BAD_POLICY_TYPE.java org/omg/CORBA/SCCS/s.ContextList.java org/omg/CORBA/SCCS/s.Context.java org/omg/CORBA/SCCS/s.BAD_POLICY_VALUE.java org/omg/CORBA/SCCS/s.BAD_QOS.java org/omg/CORBA/SCCS/s.BAD_TYPECODE.java org/omg/CORBA/SCCS/s.BooleanHolder.java org/omg/CORBA/SCCS/s.BooleanSeqHelper.java org/omg/CORBA/SCCS/s.BooleanSeqHolder.java org/omg/CORBA/SCCS/s.Bounds.java org/omg/CORBA/SCCS/s.ByteHolder.java org/omg/CORBA/SCCS/s.CODESET_INCOMPATIBLE.java org/omg/CORBA/SCCS/s.COMM_FAILURE.java org/omg/CORBA/SCCS/s.CTX_RESTRICT_SCOPE.java org/omg/CORBA/SCCS/s.CharHolder.java org/omg/CORBA/SCCS/s.CharSeqHelper.java org/omg/CORBA/SCCS/s.CharSeqHolder.java org/omg/CORBA/SCCS/s.CompletionStatus.java org/omg/CORBA/SCCS/s.CompletionStatusHelper.java org/omg/CORBA/SCCS/s.CurrentHelper.java org/omg/CORBA/SCCS/s.Current.java org/omg/CORBA/SCCS/s.CurrentOperations.java org/omg/CORBA/SCCS/s.CurrentHolder.java org/omg/CORBA/SCCS/s.DomainManagerOperations.java org/omg/CORBA/SCCS/s.CustomMarshal.java org/omg/CORBA/SCCS/s.DATA_CONVERSION.java org/omg/CORBA/SCCS/s.DataInputStream.java org/omg/CORBA/SCCS/s.DataOutputStream.java org/omg/CORBA/SCCS/s.DefinitionKind.java org/omg/CORBA/SCCS/s.DefinitionKindHelper.java org/omg/CORBA/SCCS/s.DomainManager.java org/omg/CORBA/SCCS/s.DoubleHolder.java org/omg/CORBA/SCCS/s.DoubleSeqHelper.java org/omg/CORBA/SCCS/s.FieldNameHelper.java org/omg/CORBA/SCCS/s.FREE_MEM.java org/omg/CORBA/SCCS/s.DoubleSeqHolder.java org/omg/CORBA/SCCS/s.DynAny.java org/omg/CORBA/SCCS/s.DynArray.java org/omg/CORBA/SCCS/s.DynEnum.java org/omg/CORBA/SCCS/s.DynFixed.java org/omg/CORBA/SCCS/s.DynSequence.java org/omg/CORBA/SCCS/s.DynStruct.java org/omg/CORBA/SCCS/s.DynUnion.java org/omg/CORBA/SCCS/s.DynValue.java org/omg/CORBA/SCCS/s.DynamicImplementation.java org/omg/CORBA/SCCS/s.Environment.java org/omg/CORBA/SCCS/s.ExceptionList.java org/omg/CORBA/SCCS/s.FloatSeqHelper.java org/omg/CORBA/SCCS/s.FixedHolder.java org/omg/CORBA/SCCS/s.FloatHolder.java org/omg/CORBA/SCCS/s.IDLTypeHelper.java org/omg/CORBA/SCCS/s.FloatSeqHolder.java org/omg/CORBA/SCCS/s.IDLType.java org/omg/CORBA/SCCS/s.ServiceInformationHelper.java org/omg/CORBA/SCCS/s.IDLTypeOperations.java org/omg/CORBA/SCCS/s.IMP_LIMIT.java org/omg/CORBA/SCCS/s.INITIALIZE.java org/omg/CORBA/SCCS/s.INTERNAL.java org/omg/CORBA/SCCS/s.INTF_REPOS.java org/omg/CORBA/SCCS/s.INVALID_ACTIVITY.java org/omg/CORBA/SCCS/s.INVALID_TRANSACTION.java org/omg/CORBA/SCCS/s.INV_FLAG.java org/omg/CORBA/SCCS/s.INV_IDENT.java org/omg/CORBA/SCCS/s.INV_OBJREF.java org/omg/CORBA/SCCS/s.INV_POLICY.java org/omg/CORBA/SCCS/s.IRObject.java org/omg/CORBA/SCCS/s.IRObjectOperations.java org/omg/CORBA/SCCS/s.IdentifierHelper.java org/omg/CORBA/SCCS/s.IntHolder.java org/omg/CORBA/SCCS/s.LocalObject.java org/omg/CORBA/SCCS/s.LongHolder.java org/omg/CORBA/SCCS/s.LongLongSeqHelper.java org/omg/CORBA/SCCS/s.LongLongSeqHolder.java org/omg/CORBA/SCCS/s.LongSeqHelper.java org/omg/CORBA/SCCS/s.LongSeqHolder.java org/omg/CORBA/SCCS/s.MARSHAL.java org/omg/CORBA/SCCS/s.NO_IMPLEMENT.java org/omg/CORBA/SCCS/s.NO_MEMORY.java org/omg/CORBA/SCCS/s.NO_PERMISSION.java org/omg/CORBA/SCCS/s.NO_RESOURCES.java org/omg/CORBA/SCCS/s.NO_RESPONSE.java org/omg/CORBA/SCCS/s.NVList.java org/omg/CORBA/SCCS/s.NameValuePair.java org/omg/CORBA/SCCS/s.NameValuePairHelper.java org/omg/CORBA/SCCS/s.NamedValue.java org/omg/CORBA/SCCS/s.OBJECT_NOT_EXIST.java org/omg/CORBA/SCCS/s.OBJ_ADAPTER.java org/omg/CORBA/SCCS/s.OMGVMCID.java org/omg/CORBA/SCCS/s.ORB.java org/omg/CORBA/SCCS/s.Object.java org/omg/CORBA/SCCS/s.ObjectHelper.java org/omg/CORBA/SCCS/s.ObjectHolder.java org/omg/CORBA/SCCS/s.OctetSeqHelper.java org/omg/CORBA/SCCS/s.OctetSeqHolder.java org/omg/CORBA/SCCS/s.PERSIST_STORE.java org/omg/CORBA/SCCS/s.PRIVATE_MEMBER.java org/omg/CORBA/SCCS/s.PUBLIC_MEMBER.java org/omg/CORBA/SCCS/s.Policy.java org/omg/CORBA/SCCS/s.PolicyError.java org/omg/CORBA/SCCS/s.PolicyHelper.java org/omg/CORBA/SCCS/s.PolicyHolder.java org/omg/CORBA/SCCS/s.PolicyListHelper.java org/omg/CORBA/SCCS/s.PolicyListHolder.java org/omg/CORBA/SCCS/s.PolicyOperations.java org/omg/CORBA/SCCS/s.REBIND.java org/omg/CORBA/SCCS/s.PolicyTypeHelper.java org/omg/CORBA/SCCS/s.Principal.java org/omg/CORBA/SCCS/s.PrincipalHolder.java org/omg/CORBA/SCCS/s.RepositoryIdHelper.java org/omg/CORBA/SCCS/s.Request.java org/omg/CORBA/SCCS/s.ServerRequest.java org/omg/CORBA/SCCS/s.ServiceDetail.java org/omg/CORBA/SCCS/s.ServiceDetailHelper.java org/omg/CORBA/SCCS/s.ServiceInformation.java org/omg/CORBA/SCCS/s.ServiceInformationHolder.java org/omg/CORBA/SCCS/s.SetOverrideType.java org/omg/CORBA/SCCS/s.SetOverrideTypeHelper.java org/omg/CORBA/SCCS/s.ShortHolder.java org/omg/CORBA/SCCS/s.ShortSeqHelper.java org/omg/CORBA/SCCS/s.ir.idl org/omg/CORBA/SCCS/s.ShortSeqHolder.java org/omg/CORBA/SCCS/s.StringHolder.java org/omg/CORBA/SCCS/s.StringValueHelper.java org/omg/CORBA/SCCS/s.StructMember.java org/omg/CORBA/SCCS/s.StructMemberHelper.java org/omg/CORBA/SCCS/s.SystemException.java org/omg/CORBA/SCCS/s.TCKind.java org/omg/CORBA/SCCS/s.TIMEOUT.java org/omg/CORBA/SCCS/s.TRANSACTION_MODE.java org/omg/CORBA/SCCS/s.TRANSACTION_REQUIRED.java org/omg/CORBA/SCCS/s.TRANSACTION_ROLLEDBACK.java org/omg/CORBA/SCCS/s.TRANSACTION_UNAVAILABLE.java org/omg/CORBA/SCCS/s.TRANSIENT.java org/omg/CORBA/SCCS/s.TypeCode.java org/omg/CORBA/SCCS/s.TypeCodeHolder.java org/omg/CORBA/SCCS/s.ULongLongSeqHelper.java org/omg/CORBA/SCCS/s.ULongLongSeqHolder.java org/omg/CORBA/SCCS/s.ULongSeqHelper.java org/omg/CORBA/SCCS/s.ULongSeqHolder.java org/omg/CORBA/SCCS/s.UNKNOWN.java org/omg/CORBA/SCCS/s.UNSUPPORTED_POLICY.java org/omg/CORBA/SCCS/s.UNSUPPORTED_POLICY_VALUE.java org/omg/CORBA/SCCS/s.UShortSeqHelper.java org/omg/CORBA/SCCS/s.UShortSeqHolder.java org/omg/CORBA/SCCS/s.UnionMember.java org/omg/CORBA/SCCS/s.UnionMemberHelper.java org/omg/CORBA/SCCS/s.UnknownUserException.java org/omg/CORBA/SCCS/s.UnknownUserExceptionHelper.java org/omg/CORBA/SCCS/s.UnknownUserExceptionHolder.java org/omg/CORBA/SCCS/s.UserException.java org/omg/CORBA/SCCS/s.VM_ABSTRACT.java org/omg/CORBA/SCCS/s.VM_CUSTOM.java org/omg/CORBA/SCCS/s.VM_NONE.java org/omg/CORBA/SCCS/s.VM_TRUNCATABLE.java org/omg/CORBA/SCCS/s.ValueBaseHelper.java org/omg/CORBA/SCCS/s.ValueBaseHolder.java org/omg/CORBA/SCCS/s.ValueMember.java org/omg/CORBA/SCCS/s.ValueMemberHelper.java org/omg/CORBA/SCCS/s.VersionSpecHelper.java org/omg/CORBA/SCCS/s.VisibilityHelper.java org/omg/CORBA/SCCS/s.WCharSeqHelper.java org/omg/CORBA/SCCS/s.WCharSeqHolder.java org/omg/CORBA/SCCS/s.WStringValueHelper.java org/omg/CORBA/SCCS/s.WrongTransaction.java org/omg/CORBA/SCCS/s.WrongTransactionHelper.java org/omg/CORBA/SCCS/s.WrongTransactionHolder.java org/omg/CORBA/SCCS/s.orb.idl org/omg/CORBA/SCCS/s._IDLTypeStub.java org/omg/CORBA/SCCS/s._PolicyStub.java org/omg/CORBA/SCCS/s.package.html org/omg/CORBA/TypeCodePackage org/omg/CORBA/TypeCodePackage/SCCS org/omg/CORBA/TypeCodePackage/SCCS/s.BadKind.java org/omg/CORBA/TypeCodePackage/SCCS/s.Bounds.java org/omg/CORBA/TypeCodePackage/SCCS/s.package.html org/omg/CORBA/TypeCodePackage/BadKind.java org/omg/CORBA/TypeCodePackage/Bounds.java org/omg/CORBA/TypeCodePackage/package.html org/omg/CORBA/doc-files org/omg/CORBA/doc-files/SCCS org/omg/CORBA/doc-files/SCCS/s.generatedfiles.html org/omg/CORBA/doc-files/SCCS/s.compliance.html org/omg/CORBA/doc-files/generatedfiles.html org/omg/CORBA/doc-files/compliance.html org/omg/CORBA/portable org/omg/CORBA/portable/SCCS org/omg/CORBA/portable/SCCS/s.ApplicationException.java org/omg/CORBA/portable/SCCS/s.BoxedValueHelper.java org/omg/CORBA/portable/SCCS/s.CustomValue.java org/omg/CORBA/portable/SCCS/s.Delegate.java org/omg/CORBA/portable/SCCS/s.IDLEntity.java org/omg/CORBA/portable/SCCS/s.IndirectionException.java org/omg/CORBA/portable/SCCS/s.InputStream.java org/omg/CORBA/portable/SCCS/s.InvokeHandler.java org/omg/CORBA/portable/SCCS/s.ObjectImpl.java org/omg/CORBA/portable/SCCS/s.OutputStream.java org/omg/CORBA/portable/SCCS/s.RemarshalException.java org/omg/CORBA/portable/SCCS/s.ResponseHandler.java org/omg/CORBA/portable/SCCS/s.ServantObject.java org/omg/CORBA/portable/SCCS/s.Streamable.java org/omg/CORBA/portable/SCCS/s.StreamableValue.java org/omg/CORBA/portable/SCCS/s.ValueBase.java org/omg/CORBA/portable/SCCS/s.UnknownException.java org/omg/CORBA/portable/SCCS/s.ValueFactory.java org/omg/CORBA/portable/SCCS/s.ValueInputStream.java org/omg/CORBA/portable/SCCS/s.ValueOutputStream.java org/omg/CORBA/portable/SCCS/s.package.html org/omg/CORBA/portable/ApplicationException.java org/omg/CORBA/portable/BoxedValueHelper.java org/omg/CORBA/portable/CustomValue.java org/omg/CORBA/portable/Delegate.java org/omg/CORBA/portable/IDLEntity.java org/omg/CORBA/portable/IndirectionException.java org/omg/CORBA/portable/InputStream.java org/omg/CORBA/portable/InvokeHandler.java org/omg/CORBA/portable/ObjectImpl.java org/omg/CORBA/portable/OutputStream.java org/omg/CORBA/portable/RemarshalException.java org/omg/CORBA/portable/ResponseHandler.java org/omg/CORBA/portable/ServantObject.java org/omg/CORBA/portable/Streamable.java org/omg/CORBA/portable/ValueBase.java org/omg/CORBA/portable/StreamableValue.java org/omg/CORBA/portable/UnknownException.java org/omg/CORBA/portable/ValueFactory.java org/omg/CORBA/portable/ValueInputStream.java org/omg/CORBA/portable/ValueOutputStream.java org/omg/CORBA/portable/package.html org/omg/CORBA/ACTIVITY_COMPLETED.java org/omg/CORBA/ACTIVITY_REQUIRED.java org/omg/CORBA/ARG_IN.java org/omg/CORBA/ARG_INOUT.java org/omg/CORBA/ARG_OUT.java org/omg/CORBA/Any.java org/omg/CORBA/AnyHolder.java org/omg/CORBA/AnySeqHelper.java org/omg/CORBA/AnySeqHolder.java org/omg/CORBA/BAD_CONTEXT.java org/omg/CORBA/BAD_INV_ORDER.java org/omg/CORBA/BAD_OPERATION.java org/omg/CORBA/DynArray.java org/omg/CORBA/DynAny.java org/omg/CORBA/BAD_PARAM.java org/omg/CORBA/BAD_POLICY.java org/omg/CORBA/BAD_POLICY_TYPE.java org/omg/CORBA/BAD_POLICY_VALUE.java org/omg/CORBA/BAD_QOS.java org/omg/CORBA/BAD_TYPECODE.java org/omg/CORBA/BooleanHolder.java org/omg/CORBA/BooleanSeqHelper.java org/omg/CORBA/BooleanSeqHolder.java org/omg/CORBA/Bounds.java org/omg/CORBA/ByteHolder.java org/omg/CORBA/CODESET_INCOMPATIBLE.java org/omg/CORBA/COMM_FAILURE.java org/omg/CORBA/CTX_RESTRICT_SCOPE.java org/omg/CORBA/CharHolder.java org/omg/CORBA/CharSeqHelper.java org/omg/CORBA/CharSeqHolder.java org/omg/CORBA/CompletionStatus.java org/omg/CORBA/CompletionStatusHelper.java org/omg/CORBA/Context.java org/omg/CORBA/ContextList.java org/omg/CORBA/Current.java org/omg/CORBA/CurrentHelper.java org/omg/CORBA/CurrentHolder.java org/omg/CORBA/CurrentOperations.java org/omg/CORBA/CustomMarshal.java org/omg/CORBA/DATA_CONVERSION.java org/omg/CORBA/DataInputStream.java org/omg/CORBA/DataOutputStream.java org/omg/CORBA/DefinitionKind.java org/omg/CORBA/DefinitionKindHelper.java org/omg/CORBA/DomainManager.java org/omg/CORBA/DomainManagerOperations.java org/omg/CORBA/DoubleHolder.java org/omg/CORBA/DynEnum.java org/omg/CORBA/DoubleSeqHelper.java org/omg/CORBA/DoubleSeqHolder.java org/omg/CORBA/DynSequence.java org/omg/CORBA/DynFixed.java org/omg/CORBA/DynStruct.java org/omg/CORBA/DynUnion.java org/omg/CORBA/DynValue.java org/omg/CORBA/Environment.java org/omg/CORBA/DynamicImplementation.java org/omg/CORBA/ExceptionList.java org/omg/CORBA/FREE_MEM.java org/omg/CORBA/FieldNameHelper.java org/omg/CORBA/FixedHolder.java org/omg/CORBA/FloatHolder.java org/omg/CORBA/FloatSeqHelper.java org/omg/CORBA/FloatSeqHolder.java org/omg/CORBA/IDLType.java org/omg/CORBA/INVALID_TRANSACTION.java org/omg/CORBA/IDLTypeHelper.java org/omg/CORBA/IDLTypeOperations.java org/omg/CORBA/IMP_LIMIT.java org/omg/CORBA/INITIALIZE.java org/omg/CORBA/INTERNAL.java org/omg/CORBA/INTF_REPOS.java org/omg/CORBA/INVALID_ACTIVITY.java org/omg/CORBA/IRObjectOperations.java org/omg/CORBA/INV_FLAG.java org/omg/CORBA/INV_IDENT.java org/omg/CORBA/INV_OBJREF.java org/omg/CORBA/INV_POLICY.java org/omg/CORBA/IRObject.java org/omg/CORBA/NameValuePairHelper.java org/omg/CORBA/IdentifierHelper.java org/omg/CORBA/IntHolder.java org/omg/CORBA/LocalObject.java org/omg/CORBA/LongHolder.java org/omg/CORBA/MARSHAL.java org/omg/CORBA/LongLongSeqHelper.java org/omg/CORBA/LongLongSeqHolder.java org/omg/CORBA/LongSeqHelper.java org/omg/CORBA/LongSeqHolder.java org/omg/CORBA/NO_IMPLEMENT.java org/omg/CORBA/NO_MEMORY.java org/omg/CORBA/NO_PERMISSION.java org/omg/CORBA/NO_RESOURCES.java org/omg/CORBA/NO_RESPONSE.java org/omg/CORBA/NVList.java org/omg/CORBA/NameValuePair.java org/omg/CORBA/OBJECT_NOT_EXIST.java org/omg/CORBA/NamedValue.java org/omg/CORBA/OBJ_ADAPTER.java org/omg/CORBA/OMGVMCID.java org/omg/CORBA/ORB.java org/omg/CORBA/Object.java org/omg/CORBA/Policy.java org/omg/CORBA/ServiceDetailHelper.java org/omg/CORBA/ObjectHelper.java org/omg/CORBA/ObjectHolder.java org/omg/CORBA/OctetSeqHelper.java org/omg/CORBA/OctetSeqHolder.java org/omg/CORBA/PERSIST_STORE.java org/omg/CORBA/PRIVATE_MEMBER.java org/omg/CORBA/PUBLIC_MEMBER.java org/omg/CORBA/PolicyError.java org/omg/CORBA/PolicyHelper.java org/omg/CORBA/PolicyHolder.java org/omg/CORBA/PolicyListHelper.java org/omg/CORBA/PolicyListHolder.java org/omg/CORBA/PolicyOperations.java org/omg/CORBA/PolicyTypeHelper.java org/omg/CORBA/Principal.java org/omg/CORBA/PrincipalHolder.java org/omg/CORBA/REBIND.java org/omg/CORBA/Request.java org/omg/CORBA/RepositoryIdHelper.java org/omg/CORBA/ServerRequest.java org/omg/CORBA/ServiceDetail.java org/omg/CORBA/ServiceInformationHelper.java org/omg/CORBA/ServiceInformation.java org/omg/CORBA/TRANSACTION_REQUIRED.java org/omg/CORBA/ServiceInformationHolder.java org/omg/CORBA/SetOverrideType.java org/omg/CORBA/SetOverrideTypeHelper.java org/omg/CORBA/ShortHolder.java org/omg/CORBA/ShortSeqHelper.java org/omg/CORBA/ShortSeqHolder.java org/omg/CORBA/StringHolder.java org/omg/CORBA/StringValueHelper.java org/omg/CORBA/StructMember.java org/omg/CORBA/StructMemberHelper.java org/omg/CORBA/SystemException.java org/omg/CORBA/TCKind.java org/omg/CORBA/TIMEOUT.java org/omg/CORBA/TRANSACTION_MODE.java org/omg/CORBA/TRANSACTION_UNAVAILABLE.java org/omg/CORBA/TRANSACTION_ROLLEDBACK.java org/omg/CORBA/ULongLongSeqHelper.java org/omg/CORBA/TRANSIENT.java org/omg/CORBA/TypeCode.java org/omg/CORBA/TypeCodeHolder.java org/omg/CORBA/ULongLongSeqHolder.java org/omg/CORBA/ULongSeqHelper.java org/omg/CORBA/ULongSeqHolder.java org/omg/CORBA/UNKNOWN.java org/omg/CORBA/UNSUPPORTED_POLICY.java org/omg/CORBA/UShortSeqHelper.java org/omg/CORBA/UnknownUserExceptionHelper.java org/omg/CORBA/UNSUPPORTED_POLICY_VALUE.java org/omg/CORBA/UShortSeqHolder.java org/omg/CORBA/UnionMember.java org/omg/CORBA/UnionMemberHelper.java org/omg/CORBA/UnknownUserException.java org/omg/CORBA/ir.idl org/omg/CORBA/UnknownUserExceptionHolder.java org/omg/CORBA/UserException.java org/omg/CORBA/VM_ABSTRACT.java org/omg/CORBA/VM_CUSTOM.java org/omg/CORBA/VM_NONE.java org/omg/CORBA/VM_TRUNCATABLE.java org/omg/CORBA/ValueBaseHelper.java org/omg/CORBA/ValueBaseHolder.java org/omg/CORBA/ValueMember.java org/omg/CORBA/ValueMemberHelper.java org/omg/CORBA/VersionSpecHelper.java org/omg/CORBA/VisibilityHelper.java org/omg/CORBA/WCharSeqHelper.java org/omg/CORBA/WCharSeqHolder.java org/omg/CORBA/WStringValueHelper.java org/omg/CORBA/WrongTransaction.java org/omg/CORBA/WrongTransactionHelper.java org/omg/CORBA/WrongTransactionHolder.java org/omg/CORBA/_IDLTypeStub.java org/omg/CORBA/_PolicyStub.java org/omg/CORBA/orb.idl org/omg/CORBA/package.html org/omg/CORBA_2_3 org/omg/CORBA_2_3/SCCS org/omg/CORBA_2_3/SCCS/s.package.html org/omg/CORBA_2_3/SCCS/s.ORB.java org/omg/CORBA_2_3/portable org/omg/CORBA_2_3/portable/SCCS org/omg/CORBA_2_3/portable/SCCS/s.InputStream.java org/omg/CORBA_2_3/portable/SCCS/s.Delegate.java org/omg/CORBA_2_3/portable/SCCS/s.ObjectImpl.java org/omg/CORBA_2_3/portable/SCCS/s.OutputStream.java org/omg/CORBA_2_3/portable/SCCS/s.package.html org/omg/CORBA_2_3/portable/InputStream.java org/omg/CORBA_2_3/portable/Delegate.java org/omg/CORBA_2_3/portable/ObjectImpl.java org/omg/CORBA_2_3/portable/OutputStream.java org/omg/CORBA_2_3/portable/package.html org/omg/CORBA_2_3/package.html org/omg/CORBA_2_3/ORB.java org/omg/CosNaming org/omg/CosNaming/NamingContextExtPackage org/omg/CosNaming/NamingContextExtPackage/SCCS org/omg/CosNaming/NamingContextExtPackage/SCCS/s.package.html org/omg/CosNaming/NamingContextExtPackage/package.html org/omg/CosNaming/NamingContextPackage org/omg/CosNaming/NamingContextPackage/SCCS org/omg/CosNaming/NamingContextPackage/SCCS/s.package.html org/omg/CosNaming/NamingContextPackage/package.html org/omg/CosNaming/SCCS org/omg/CosNaming/SCCS/s._BindingIteratorImplBase.java org/omg/CosNaming/SCCS/s._NamingContextImplBase.java org/omg/CosNaming/SCCS/s.nameservice.idl org/omg/CosNaming/SCCS/s.package.html org/omg/CosNaming/_BindingIteratorImplBase.java org/omg/CosNaming/_NamingContextImplBase.java org/omg/CosNaming/nameservice.idl org/omg/CosNaming/package.html org/omg/Dynamic org/omg/Dynamic/SCCS org/omg/Dynamic/SCCS/s.package.html org/omg/Dynamic/package.html org/omg/DynamicAny org/omg/DynamicAny/DynAnyFactoryPackage org/omg/DynamicAny/DynAnyFactoryPackage/SCCS org/omg/DynamicAny/DynAnyFactoryPackage/SCCS/s.package.html org/omg/DynamicAny/DynAnyFactoryPackage/package.html org/omg/DynamicAny/DynAnyPackage org/omg/DynamicAny/DynAnyPackage/SCCS org/omg/DynamicAny/DynAnyPackage/SCCS/s.package.html org/omg/DynamicAny/DynAnyPackage/package.html org/omg/DynamicAny/SCCS org/omg/DynamicAny/SCCS/s.DynamicAny.idl org/omg/DynamicAny/SCCS/s.package.html org/omg/DynamicAny/DynamicAny.idl org/omg/DynamicAny/package.html org/omg/IOP org/omg/IOP/CodecFactoryPackage org/omg/IOP/CodecFactoryPackage/SCCS org/omg/IOP/CodecFactoryPackage/SCCS/s.package.html org/omg/IOP/CodecFactoryPackage/package.html org/omg/IOP/CodecPackage org/omg/IOP/CodecPackage/SCCS org/omg/IOP/CodecPackage/SCCS/s.package.html org/omg/IOP/CodecPackage/package.html org/omg/IOP/SCCS org/omg/IOP/SCCS/s.package.html org/omg/IOP/package.html org/omg/Messaging org/omg/Messaging/SCCS org/omg/Messaging/SCCS/s.package.html org/omg/Messaging/package.html org/omg/PortableInterceptor org/omg/PortableInterceptor/ORBInitInfoPackage org/omg/PortableInterceptor/ORBInitInfoPackage/SCCS org/omg/PortableInterceptor/ORBInitInfoPackage/SCCS/s.package.html org/omg/PortableInterceptor/ORBInitInfoPackage/package.html org/omg/PortableInterceptor/SCCS org/omg/PortableInterceptor/SCCS/s.Interceptors.idl org/omg/PortableInterceptor/SCCS/s.CORBAX.idl org/omg/PortableInterceptor/SCCS/s.IOP.idl org/omg/PortableInterceptor/SCCS/s.Messaging.idl org/omg/PortableInterceptor/SCCS/s.package.html org/omg/PortableInterceptor/Interceptors.idl org/omg/PortableInterceptor/CORBAX.idl org/omg/PortableInterceptor/IOP.idl org/omg/PortableInterceptor/Messaging.idl org/omg/PortableInterceptor/package.html org/omg/PortableServer org/omg/PortableServer/CurrentPackage org/omg/PortableServer/CurrentPackage/SCCS org/omg/PortableServer/CurrentPackage/SCCS/s.package.html org/omg/PortableServer/CurrentPackage/package.html org/omg/PortableServer/POAManagerPackage org/omg/PortableServer/POAManagerPackage/SCCS org/omg/PortableServer/POAManagerPackage/SCCS/s.package.html org/omg/PortableServer/POAManagerPackage/package.html org/omg/PortableServer/POAPackage org/omg/PortableServer/POAPackage/SCCS org/omg/PortableServer/POAPackage/SCCS/s.package.html org/omg/PortableServer/POAPackage/package.html org/omg/PortableServer/SCCS org/omg/PortableServer/SCCS/s.DynamicImplementation.java org/omg/PortableServer/SCCS/s.CurrentHelper.java org/omg/PortableServer/SCCS/s.POAHelper.java org/omg/PortableServer/SCCS/s.Servant.java org/omg/PortableServer/SCCS/s.corba.idl org/omg/PortableServer/SCCS/s.package.html org/omg/PortableServer/SCCS/s.poa.idl org/omg/PortableServer/ServantLocatorPackage org/omg/PortableServer/ServantLocatorPackage/SCCS org/omg/PortableServer/ServantLocatorPackage/SCCS/s.CookieHolder.java org/omg/PortableServer/ServantLocatorPackage/SCCS/s.package.html org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java org/omg/PortableServer/ServantLocatorPackage/package.html org/omg/PortableServer/portable org/omg/PortableServer/portable/SCCS org/omg/PortableServer/portable/SCCS/s.Delegate.java org/omg/PortableServer/portable/SCCS/s.package.html org/omg/PortableServer/portable/Delegate.java org/omg/PortableServer/portable/package.html org/omg/PortableServer/DynamicImplementation.java org/omg/PortableServer/CurrentHelper.java org/omg/PortableServer/POAHelper.java org/omg/PortableServer/Servant.java org/omg/PortableServer/corba.idl org/omg/PortableServer/package.html org/omg/PortableServer/poa.idl org/omg/SendingContext org/omg/SendingContext/SCCS org/omg/SendingContext/SCCS/s.RunTime.java org/omg/SendingContext/SCCS/s.package.html org/omg/SendingContext/SCCS/s.RunTimeOperations.java org/omg/SendingContext/RunTimeOperations.java org/omg/SendingContext/RunTime.java org/omg/SendingContext/package.html org/omg/stub org/omg/stub/java org/omg/stub/java/rmi org/omg/stub/java/rmi/SCCS org/omg/stub/java/rmi/SCCS/s._Remote_Stub.java org/omg/stub/java/rmi/SCCS/s.package.html org/omg/stub/java/rmi/_Remote_Stub.java org/omg/stub/java/rmi/package.html org/w3c org/w3c/dom org/w3c/dom/SCCS org/w3c/dom/SCCS/s.CDATASection.java org/w3c/dom/SCCS/s.Attr.java org/w3c/dom/SCCS/s.DOMImplementation.java org/w3c/dom/SCCS/s.CharacterData.java org/w3c/dom/SCCS/s.Comment.java org/w3c/dom/SCCS/s.DOMConfiguration.java org/w3c/dom/SCCS/s.DOMError.java org/w3c/dom/SCCS/s.DOMErrorHandler.java org/w3c/dom/SCCS/s.DOMException.java org/w3c/dom/SCCS/s.Node.java org/w3c/dom/SCCS/s.DOMImplementationList.java org/w3c/dom/SCCS/s.DOMImplementationSource.java org/w3c/dom/SCCS/s.DOMLocator.java org/w3c/dom/SCCS/s.DOMStringList.java org/w3c/dom/SCCS/s.Document.java org/w3c/dom/SCCS/s.TypeInfo.java org/w3c/dom/SCCS/s.Text.java org/w3c/dom/SCCS/s.DocumentFragment.java org/w3c/dom/SCCS/s.DocumentType.java org/w3c/dom/SCCS/s.Element.java org/w3c/dom/SCCS/s.Entity.java org/w3c/dom/SCCS/s.EntityReference.java org/w3c/dom/SCCS/s.NameList.java org/w3c/dom/SCCS/s.NamedNodeMap.java org/w3c/dom/SCCS/s.NodeList.java org/w3c/dom/SCCS/s.Notation.java org/w3c/dom/SCCS/s.ProcessingInstruction.java org/w3c/dom/SCCS/s.UserDataHandler.java org/w3c/dom/SCCS/s.package.html org/w3c/dom/bootstrap org/w3c/dom/bootstrap/SCCS org/w3c/dom/bootstrap/SCCS/s.DOMImplementationRegistry.java org/w3c/dom/bootstrap/DOMImplementationRegistry.java org/w3c/dom/css org/w3c/dom/css/SCCS org/w3c/dom/css/SCCS/s.CSSPrimitiveValue.java org/w3c/dom/css/SCCS/s.CSS2Properties.java org/w3c/dom/css/SCCS/s.CSSCharsetRule.java org/w3c/dom/css/SCCS/s.CSSFontFaceRule.java org/w3c/dom/css/SCCS/s.CSSImportRule.java org/w3c/dom/css/SCCS/s.CSSMediaRule.java org/w3c/dom/css/SCCS/s.CSSPageRule.java org/w3c/dom/css/SCCS/s.CSSStyleDeclaration.java org/w3c/dom/css/SCCS/s.CSSRule.java org/w3c/dom/css/SCCS/s.CSSRuleList.java org/w3c/dom/css/SCCS/s.CSSStyleSheet.java org/w3c/dom/css/SCCS/s.CSSStyleRule.java org/w3c/dom/css/SCCS/s.DOMImplementationCSS.java org/w3c/dom/css/SCCS/s.CSSUnknownRule.java org/w3c/dom/css/SCCS/s.CSSValue.java org/w3c/dom/css/SCCS/s.CSSValueList.java org/w3c/dom/css/SCCS/s.Counter.java org/w3c/dom/css/SCCS/s.DocumentCSS.java org/w3c/dom/css/SCCS/s.RGBColor.java org/w3c/dom/css/SCCS/s.Rect.java org/w3c/dom/css/SCCS/s.ElementCSSInlineStyle.java org/w3c/dom/css/SCCS/s.ViewCSS.java org/w3c/dom/css/CSSFontFaceRule.java org/w3c/dom/css/CSS2Properties.java org/w3c/dom/css/CSSCharsetRule.java org/w3c/dom/css/CSSStyleDeclaration.java org/w3c/dom/css/CSSImportRule.java org/w3c/dom/css/CSSMediaRule.java org/w3c/dom/css/CSSPageRule.java org/w3c/dom/css/CSSPrimitiveValue.java org/w3c/dom/css/CSSRule.java org/w3c/dom/css/CSSRuleList.java org/w3c/dom/css/CSSStyleRule.java org/w3c/dom/css/CSSStyleSheet.java org/w3c/dom/css/CSSUnknownRule.java org/w3c/dom/css/CSSValue.java org/w3c/dom/css/CSSValueList.java org/w3c/dom/css/Counter.java org/w3c/dom/css/Rect.java org/w3c/dom/css/DOMImplementationCSS.java org/w3c/dom/css/DocumentCSS.java org/w3c/dom/css/ElementCSSInlineStyle.java org/w3c/dom/css/RGBColor.java org/w3c/dom/css/ViewCSS.java org/w3c/dom/events org/w3c/dom/events/SCCS org/w3c/dom/events/SCCS/s.DocumentEvent.java org/w3c/dom/events/SCCS/s.Event.java org/w3c/dom/events/SCCS/s.EventException.java org/w3c/dom/events/SCCS/s.EventListener.java org/w3c/dom/events/SCCS/s.EventTarget.java org/w3c/dom/events/SCCS/s.MouseEvent.java org/w3c/dom/events/SCCS/s.MutationEvent.java org/w3c/dom/events/SCCS/s.UIEvent.java org/w3c/dom/events/DocumentEvent.java org/w3c/dom/events/Event.java org/w3c/dom/events/EventException.java org/w3c/dom/events/EventListener.java org/w3c/dom/events/EventTarget.java org/w3c/dom/events/MouseEvent.java org/w3c/dom/events/MutationEvent.java org/w3c/dom/events/UIEvent.java org/w3c/dom/html org/w3c/dom/html/SCCS org/w3c/dom/html/SCCS/s.HTMLDOMImplementation.java org/w3c/dom/html/SCCS/s.HTMLAnchorElement.java org/w3c/dom/html/SCCS/s.HTMLAppletElement.java org/w3c/dom/html/SCCS/s.HTMLAreaElement.java org/w3c/dom/html/SCCS/s.HTMLBRElement.java org/w3c/dom/html/SCCS/s.HTMLBaseElement.java org/w3c/dom/html/SCCS/s.HTMLBaseFontElement.java org/w3c/dom/html/SCCS/s.HTMLBodyElement.java org/w3c/dom/html/SCCS/s.HTMLButtonElement.java org/w3c/dom/html/SCCS/s.HTMLCollection.java org/w3c/dom/html/SCCS/s.HTMLDListElement.java org/w3c/dom/html/SCCS/s.HTMLDirectoryElement.java org/w3c/dom/html/SCCS/s.HTMLDivElement.java org/w3c/dom/html/SCCS/s.HTMLTableCaptionElement.java org/w3c/dom/html/SCCS/s.HTMLDocument.java org/w3c/dom/html/SCCS/s.HTMLElement.java org/w3c/dom/html/SCCS/s.HTMLFieldSetElement.java org/w3c/dom/html/SCCS/s.HTMLFontElement.java org/w3c/dom/html/SCCS/s.HTMLFormElement.java org/w3c/dom/html/SCCS/s.HTMLFrameElement.java org/w3c/dom/html/SCCS/s.HTMLFrameSetElement.java org/w3c/dom/html/SCCS/s.HTMLHRElement.java org/w3c/dom/html/SCCS/s.HTMLHeadElement.java org/w3c/dom/html/SCCS/s.HTMLHeadingElement.java org/w3c/dom/html/SCCS/s.HTMLHtmlElement.java org/w3c/dom/html/SCCS/s.HTMLIFrameElement.java org/w3c/dom/html/SCCS/s.HTMLImageElement.java org/w3c/dom/html/SCCS/s.HTMLInputElement.java org/w3c/dom/html/SCCS/s.HTMLIsIndexElement.java org/w3c/dom/html/SCCS/s.HTMLLIElement.java org/w3c/dom/html/SCCS/s.HTMLLabelElement.java org/w3c/dom/html/SCCS/s.HTMLLegendElement.java org/w3c/dom/html/SCCS/s.HTMLLinkElement.java org/w3c/dom/html/SCCS/s.HTMLMapElement.java org/w3c/dom/html/SCCS/s.HTMLMenuElement.java org/w3c/dom/html/SCCS/s.HTMLMetaElement.java org/w3c/dom/html/SCCS/s.HTMLModElement.java org/w3c/dom/html/SCCS/s.HTMLOListElement.java org/w3c/dom/html/SCCS/s.HTMLObjectElement.java org/w3c/dom/html/SCCS/s.HTMLOptGroupElement.java org/w3c/dom/html/SCCS/s.HTMLOptionElement.java org/w3c/dom/html/SCCS/s.HTMLParagraphElement.java org/w3c/dom/html/SCCS/s.HTMLParamElement.java org/w3c/dom/html/SCCS/s.HTMLPreElement.java org/w3c/dom/html/SCCS/s.HTMLQuoteElement.java org/w3c/dom/html/SCCS/s.HTMLScriptElement.java org/w3c/dom/html/SCCS/s.HTMLSelectElement.java org/w3c/dom/html/SCCS/s.HTMLStyleElement.java org/w3c/dom/html/SCCS/s.HTMLTableSectionElement.java org/w3c/dom/html/SCCS/s.HTMLTableCellElement.java org/w3c/dom/html/SCCS/s.HTMLTableColElement.java org/w3c/dom/html/SCCS/s.HTMLTableElement.java org/w3c/dom/html/SCCS/s.HTMLTableRowElement.java org/w3c/dom/html/SCCS/s.HTMLTextAreaElement.java org/w3c/dom/html/SCCS/s.HTMLTitleElement.java org/w3c/dom/html/SCCS/s.HTMLUListElement.java org/w3c/dom/html/HTMLBaseFontElement.java org/w3c/dom/html/HTMLAnchorElement.java org/w3c/dom/html/HTMLAppletElement.java org/w3c/dom/html/HTMLAreaElement.java org/w3c/dom/html/HTMLBRElement.java org/w3c/dom/html/HTMLBaseElement.java org/w3c/dom/html/HTMLBodyElement.java org/w3c/dom/html/HTMLButtonElement.java org/w3c/dom/html/HTMLCollection.java org/w3c/dom/html/HTMLDListElement.java org/w3c/dom/html/HTMLDOMImplementation.java org/w3c/dom/html/HTMLDirectoryElement.java org/w3c/dom/html/HTMLDivElement.java org/w3c/dom/html/HTMLDocument.java org/w3c/dom/html/HTMLElement.java org/w3c/dom/html/HTMLFieldSetElement.java org/w3c/dom/html/HTMLFontElement.java org/w3c/dom/html/HTMLFormElement.java org/w3c/dom/html/HTMLFrameElement.java org/w3c/dom/html/HTMLFrameSetElement.java org/w3c/dom/html/HTMLHRElement.java org/w3c/dom/html/HTMLHeadElement.java org/w3c/dom/html/HTMLHeadingElement.java org/w3c/dom/html/HTMLHtmlElement.java org/w3c/dom/html/HTMLIFrameElement.java org/w3c/dom/html/HTMLImageElement.java org/w3c/dom/html/HTMLInputElement.java org/w3c/dom/html/HTMLIsIndexElement.java org/w3c/dom/html/HTMLLIElement.java org/w3c/dom/html/HTMLLabelElement.java org/w3c/dom/html/HTMLLegendElement.java org/w3c/dom/html/HTMLLinkElement.java org/w3c/dom/html/HTMLMapElement.java org/w3c/dom/html/HTMLMenuElement.java org/w3c/dom/html/HTMLMetaElement.java org/w3c/dom/html/HTMLModElement.java org/w3c/dom/html/HTMLOListElement.java org/w3c/dom/html/HTMLObjectElement.java org/w3c/dom/html/HTMLOptGroupElement.java org/w3c/dom/html/HTMLOptionElement.java org/w3c/dom/html/HTMLParagraphElement.java org/w3c/dom/html/HTMLParamElement.java org/w3c/dom/html/HTMLPreElement.java org/w3c/dom/html/HTMLQuoteElement.java org/w3c/dom/html/HTMLScriptElement.java org/w3c/dom/html/HTMLSelectElement.java org/w3c/dom/html/HTMLStyleElement.java org/w3c/dom/html/HTMLTableCaptionElement.java org/w3c/dom/html/HTMLTableCellElement.java org/w3c/dom/html/HTMLTableColElement.java org/w3c/dom/html/HTMLTableElement.java org/w3c/dom/html/HTMLTableRowElement.java org/w3c/dom/html/HTMLTableSectionElement.java org/w3c/dom/html/HTMLTextAreaElement.java org/w3c/dom/html/HTMLTitleElement.java org/w3c/dom/html/HTMLUListElement.java org/w3c/dom/ls org/w3c/dom/ls/SCCS org/w3c/dom/ls/SCCS/s.DOMImplementationLS.java org/w3c/dom/ls/SCCS/s.LSException.java org/w3c/dom/ls/SCCS/s.LSInput.java org/w3c/dom/ls/SCCS/s.LSLoadEvent.java org/w3c/dom/ls/SCCS/s.LSOutput.java org/w3c/dom/ls/SCCS/s.LSParser.java org/w3c/dom/ls/SCCS/s.LSParserFilter.java org/w3c/dom/ls/SCCS/s.LSProgressEvent.java org/w3c/dom/ls/SCCS/s.LSResourceResolver.java org/w3c/dom/ls/SCCS/s.LSSerializer.java org/w3c/dom/ls/SCCS/s.LSSerializerFilter.java org/w3c/dom/ls/DOMImplementationLS.java org/w3c/dom/ls/LSException.java org/w3c/dom/ls/LSInput.java org/w3c/dom/ls/LSLoadEvent.java org/w3c/dom/ls/LSOutput.java org/w3c/dom/ls/LSParser.java org/w3c/dom/ls/LSParserFilter.java org/w3c/dom/ls/LSProgressEvent.java org/w3c/dom/ls/LSResourceResolver.java org/w3c/dom/ls/LSSerializer.java org/w3c/dom/ls/LSSerializerFilter.java org/w3c/dom/ranges org/w3c/dom/ranges/SCCS org/w3c/dom/ranges/SCCS/s.DocumentRange.java org/w3c/dom/ranges/SCCS/s.Range.java org/w3c/dom/ranges/SCCS/s.RangeException.java org/w3c/dom/ranges/SCCS/s.package.html org/w3c/dom/ranges/DocumentRange.java org/w3c/dom/ranges/Range.java org/w3c/dom/ranges/RangeException.java org/w3c/dom/ranges/package.html org/w3c/dom/stylesheets org/w3c/dom/stylesheets/SCCS org/w3c/dom/stylesheets/SCCS/s.DocumentStyle.java org/w3c/dom/stylesheets/SCCS/s.LinkStyle.java org/w3c/dom/stylesheets/SCCS/s.MediaList.java org/w3c/dom/stylesheets/SCCS/s.StyleSheet.java org/w3c/dom/stylesheets/SCCS/s.StyleSheetList.java org/w3c/dom/stylesheets/DocumentStyle.java org/w3c/dom/stylesheets/LinkStyle.java org/w3c/dom/stylesheets/MediaList.java org/w3c/dom/stylesheets/StyleSheet.java org/w3c/dom/stylesheets/StyleSheetList.java org/w3c/dom/traversal org/w3c/dom/traversal/SCCS org/w3c/dom/traversal/SCCS/s.DocumentTraversal.java org/w3c/dom/traversal/SCCS/s.NodeFilter.java org/w3c/dom/traversal/SCCS/s.NodeIterator.java org/w3c/dom/traversal/SCCS/s.TreeWalker.java org/w3c/dom/traversal/DocumentTraversal.java org/w3c/dom/traversal/NodeFilter.java org/w3c/dom/traversal/NodeIterator.java org/w3c/dom/traversal/TreeWalker.java org/w3c/dom/views org/w3c/dom/views/SCCS org/w3c/dom/views/SCCS/s.AbstractView.java org/w3c/dom/views/SCCS/s.DocumentView.java org/w3c/dom/views/AbstractView.java org/w3c/dom/views/DocumentView.java org/w3c/dom/CDATASection.java org/w3c/dom/Attr.java org/w3c/dom/DOMConfiguration.java org/w3c/dom/CharacterData.java org/w3c/dom/Comment.java org/w3c/dom/DOMErrorHandler.java org/w3c/dom/DOMError.java org/w3c/dom/DOMException.java org/w3c/dom/DOMImplementation.java org/w3c/dom/DOMLocator.java org/w3c/dom/Entity.java org/w3c/dom/NamedNodeMap.java org/w3c/dom/DOMImplementationList.java org/w3c/dom/DOMImplementationSource.java org/w3c/dom/DOMStringList.java org/w3c/dom/Document.java org/w3c/dom/DocumentFragment.java org/w3c/dom/DocumentType.java org/w3c/dom/Element.java org/w3c/dom/NameList.java org/w3c/dom/EntityReference.java org/w3c/dom/Node.java org/w3c/dom/NodeList.java org/w3c/dom/Notation.java org/w3c/dom/ProcessingInstruction.java org/w3c/dom/Text.java org/w3c/dom/TypeInfo.java org/w3c/dom/UserDataHandler.java org/w3c/dom/package.html org/xml org/xml/sax org/xml/sax/SCCS org/xml/sax/SCCS/s.AttributeList.java org/xml/sax/SCCS/s.Attributes.java org/xml/sax/SCCS/s.COPYING org/xml/sax/SCCS/s.COPYING.txt org/xml/sax/SCCS/s.ContentHandler.java org/xml/sax/SCCS/s.DTDHandler.java org/xml/sax/SCCS/s.DocumentHandler.java org/xml/sax/SCCS/s.EntityResolver.java org/xml/sax/SCCS/s.ErrorHandler.java org/xml/sax/SCCS/s.HandlerBase.java org/xml/sax/SCCS/s.InputSource.java org/xml/sax/SCCS/s.Locator.java org/xml/sax/SCCS/s.Parser.java org/xml/sax/SCCS/s.SAXException.java org/xml/sax/SCCS/s.SAXNotRecognizedException.java org/xml/sax/SCCS/s.SAXNotSupportedException.java org/xml/sax/SCCS/s.SAXParseException.java org/xml/sax/SCCS/s.XMLFilter.java org/xml/sax/SCCS/s.XMLReader.java org/xml/sax/SCCS/s.package.html org/xml/sax/ext org/xml/sax/ext/SCCS org/xml/sax/ext/SCCS/s.Attributes2Impl.java org/xml/sax/ext/SCCS/s.Attributes2.java org/xml/sax/ext/SCCS/s.DeclHandler.java org/xml/sax/ext/SCCS/s.DefaultHandler2.java org/xml/sax/ext/SCCS/s.EntityResolver2.java org/xml/sax/ext/SCCS/s.LexicalHandler.java org/xml/sax/ext/SCCS/s.Locator2.java org/xml/sax/ext/SCCS/s.Locator2Impl.java org/xml/sax/ext/SCCS/s.package.html org/xml/sax/ext/Attributes2Impl.java org/xml/sax/ext/Attributes2.java org/xml/sax/ext/DeclHandler.java org/xml/sax/ext/DefaultHandler2.java org/xml/sax/ext/EntityResolver2.java org/xml/sax/ext/LexicalHandler.java org/xml/sax/ext/Locator2.java org/xml/sax/ext/Locator2Impl.java org/xml/sax/ext/package.html org/xml/sax/helpers org/xml/sax/helpers/SCCS org/xml/sax/helpers/SCCS/s.AttributeListImpl.java org/xml/sax/helpers/SCCS/s.AttributesImpl.java org/xml/sax/helpers/SCCS/s.DefaultHandler.java org/xml/sax/helpers/SCCS/s.LocatorImpl.java org/xml/sax/helpers/SCCS/s.NamespaceSupport.java org/xml/sax/helpers/SCCS/s.NewInstance.java org/xml/sax/helpers/SCCS/s.ParserAdapter.java org/xml/sax/helpers/SCCS/s.ParserFactory.java org/xml/sax/helpers/SCCS/s.XMLFilterImpl.java org/xml/sax/helpers/SCCS/s.XMLReaderAdapter.java org/xml/sax/helpers/SCCS/s.XMLReaderFactory.java org/xml/sax/helpers/SCCS/s.package.html org/xml/sax/helpers/AttributeListImpl.java org/xml/sax/helpers/AttributesImpl.java org/xml/sax/helpers/DefaultHandler.java org/xml/sax/helpers/LocatorImpl.java org/xml/sax/helpers/NamespaceSupport.java org/xml/sax/helpers/NewInstance.java org/xml/sax/helpers/ParserAdapter.java org/xml/sax/helpers/ParserFactory.java org/xml/sax/helpers/XMLFilterImpl.java org/xml/sax/helpers/XMLReaderAdapter.java org/xml/sax/helpers/XMLReaderFactory.java org/xml/sax/helpers/package.html org/xml/sax/DocumentHandler.java org/xml/sax/AttributeList.java org/xml/sax/Attributes.java org/xml/sax/COPYING org/xml/sax/COPYING.txt org/xml/sax/ContentHandler.java org/xml/sax/DTDHandler.java org/xml/sax/SAXNotRecognizedException.java org/xml/sax/EntityResolver.java org/xml/sax/ErrorHandler.java org/xml/sax/HandlerBase.java org/xml/sax/InputSource.java org/xml/sax/Locator.java org/xml/sax/Parser.java org/xml/sax/SAXException.java org/xml/sax/SAXNotSupportedException.java org/xml/sax/SAXParseException.java org/xml/sax/XMLFilter.java org/xml/sax/XMLReader.java org/xml/sax/package.html sun sun/applet sun/applet/SCCS sun/applet/SCCS/s.AppletClassLoader.java sun/applet/SCCS/s.AppletAudioClip.java sun/applet/SCCS/s.AppletIOException.java sun/applet/SCCS/s.AppletEvent.java sun/applet/SCCS/s.AppletIllegalArgumentException.java sun/applet/SCCS/s.AppletEventMulticaster.java sun/applet/SCCS/s.AppletObjectInputStream.java sun/applet/SCCS/s.AppletImageRef.java sun/applet/SCCS/s.AppletListener.java sun/applet/SCCS/s.AppletMessageHandler.java sun/applet/SCCS/s.AppletPanel.java sun/applet/SCCS/s.AppletProps.java sun/applet/SCCS/s.AppletSecurityException.java sun/applet/SCCS/s.AppletSecurity.java sun/applet/SCCS/s.AppletResourceLoader.java sun/applet/SCCS/s.AppletThreadGroup.java sun/applet/SCCS/s.AppletViewer.java sun/applet/SCCS/s.AppletViewerFactory.java sun/applet/SCCS/s.AppletViewerPanel.java sun/applet/SCCS/s.Main.java sun/applet/resources sun/applet/resources/SCCS sun/applet/resources/SCCS/s.MsgAppletViewer_de.java sun/applet/resources/SCCS/s.MsgAppletViewer.java sun/applet/resources/SCCS/s.MsgAppletViewer_es.java sun/applet/resources/SCCS/s.MsgAppletViewer_fr.java sun/applet/resources/SCCS/s.MsgAppletViewer_it.java sun/applet/resources/SCCS/s.MsgAppletViewer_ja.java sun/applet/resources/SCCS/s.MsgAppletViewer_ko.java sun/applet/resources/SCCS/s.MsgAppletViewer_sv.java sun/applet/resources/SCCS/s.MsgAppletViewer_zh_CN.java sun/applet/resources/SCCS/s.MsgAppletViewer_zh_TW.java sun/applet/resources/MsgAppletViewer_zh_CN.java sun/applet/resources/MsgAppletViewer.java sun/applet/resources/MsgAppletViewer_de.java sun/applet/resources/MsgAppletViewer_es.java sun/applet/resources/MsgAppletViewer_fr.java sun/applet/resources/MsgAppletViewer_it.java sun/applet/resources/MsgAppletViewer_ja.java sun/applet/resources/MsgAppletViewer_ko.java sun/applet/resources/MsgAppletViewer_sv.java sun/applet/resources/MsgAppletViewer_zh_TW.java sun/applet/AppletEventMulticaster.java sun/applet/AppletAudioClip.java sun/applet/AppletClassLoader.java sun/applet/AppletEvent.java sun/applet/AppletIOException.java sun/applet/AppletImageRef.java sun/applet/AppletPanel.java sun/applet/AppletIllegalArgumentException.java sun/applet/AppletListener.java sun/applet/AppletMessageHandler.java sun/applet/AppletObjectInputStream.java sun/applet/AppletProps.java sun/applet/Main.java sun/applet/AppletResourceLoader.java sun/applet/AppletSecurity.java sun/applet/AppletSecurityException.java sun/applet/AppletThreadGroup.java sun/applet/AppletViewer.java sun/applet/AppletViewerFactory.java sun/applet/AppletViewerPanel.java sun/audio sun/audio/SCCS sun/audio/SCCS/s.AudioDataStream.java sun/audio/SCCS/s.AudioData.java sun/audio/SCCS/s.AudioSecurityAction.java sun/audio/SCCS/s.AudioDevice.java sun/audio/SCCS/s.AudioPlayer.java sun/audio/SCCS/s.AudioSecurityExceptionAction.java sun/audio/SCCS/s.AudioStream.java sun/audio/SCCS/s.AudioStreamSequence.java sun/audio/SCCS/s.AudioTranslatorStream.java sun/audio/SCCS/s.ContinuousAudioDataStream.java sun/audio/SCCS/s.InvalidAudioFormatException.java sun/audio/SCCS/s.NativeAudioStream.java sun/audio/AudioDataStream.java sun/audio/AudioData.java sun/audio/AudioSecurityAction.java sun/audio/AudioDevice.java sun/audio/AudioPlayer.java sun/audio/AudioSecurityExceptionAction.java sun/audio/AudioStream.java sun/audio/AudioStreamSequence.java sun/audio/AudioTranslatorStream.java sun/audio/ContinuousAudioDataStream.java sun/audio/InvalidAudioFormatException.java sun/audio/NativeAudioStream.java sun/awt sun/awt/SCCS sun/awt/SCCS/s.AWTSecurityManager.java sun/awt/SCCS/s.AWTAutoShutdown.java sun/awt/SCCS/s.ConstrainableGraphics.java sun/awt/SCCS/s.AppContext.java sun/awt/SCCS/s.CharToByteSymbol.java sun/awt/SCCS/s.CharsetString.java sun/awt/SCCS/s.ComponentFactory.java sun/awt/SCCS/s.DebugHelper.java.m4 sun/awt/SCCS/s.CustomCursor.java sun/awt/SCCS/s.DisplayChangedListener.java sun/awt/SCCS/s.DebugHelperImpl.java sun/awt/SCCS/s.DebugSettings.java sun/awt/SCCS/s.DefaultMouseInfoPeer.java sun/awt/SCCS/s.EmbeddedFrame.java sun/awt/SCCS/s.Mutex.java sun/awt/SCCS/s.EventListenerAggregate.java sun/awt/SCCS/s.FocusingTextField.java sun/awt/SCCS/s.FontConfiguration.java sun/awt/SCCS/s.FontDescriptor.java sun/awt/SCCS/s.GlobalCursorManager.java sun/awt/SCCS/s.Graphics2Delegate.java sun/awt/SCCS/s.HeadlessToolkit.java sun/awt/SCCS/s.HorizBagLayout.java sun/awt/SCCS/s.InputMethodSupport.java sun/awt/SCCS/s.KeyboardFocusManagerPeerImpl.java sun/awt/SCCS/s.ModalExclude.java sun/awt/SCCS/s.NativeLibLoader.java sun/awt/SCCS/s.NullComponentPeer.java sun/awt/SCCS/s.OrientableFlowLayout.java sun/awt/SCCS/s.PeerEvent.java sun/awt/SCCS/s.PlatformFont.java sun/awt/SCCS/s.RepaintArea.java sun/awt/SCCS/s.ScrollPaneWheelScroller.java sun/awt/SCCS/s.SunDisplayChanger.java sun/awt/SCCS/s.SunGraphicsCallback.java sun/awt/SCCS/s.SunHints.java sun/awt/SCCS/s.SunToolkit.java sun/awt/SCCS/s.TracedEventQueue.java sun/awt/SCCS/s.VariableGridLayout.java sun/awt/SCCS/s.VerticalBagLayout.java sun/awt/SCCS/s.WindowClosingListener.java sun/awt/SCCS/s.WindowClosingSupport.java sun/awt/color sun/awt/color/SCCS sun/awt/color/SCCS/s.CMM.java sun/awt/color/SCCS/s.CMMImageLayout.java sun/awt/color/SCCS/s.ICC_Transform.java sun/awt/color/SCCS/s.ProfileActivator.java sun/awt/color/SCCS/s.ProfileDeferralInfo.java sun/awt/color/SCCS/s.ProfileDeferralMgr.java sun/awt/color/CMMImageLayout.java sun/awt/color/CMM.java sun/awt/color/ProfileActivator.java sun/awt/color/ICC_Transform.java sun/awt/color/ProfileDeferralInfo.java sun/awt/color/ProfileDeferralMgr.java sun/awt/datatransfer sun/awt/datatransfer/SCCS sun/awt/datatransfer/SCCS/s.ToolkitThreadBlockedHandler.java sun/awt/datatransfer/SCCS/s.ClipboardTransferable.java sun/awt/datatransfer/SCCS/s.DataTransferer.java sun/awt/datatransfer/SCCS/s.SunClipboard.java sun/awt/datatransfer/SCCS/s.TransferableProxy.java sun/awt/datatransfer/ToolkitThreadBlockedHandler.java sun/awt/datatransfer/ClipboardTransferable.java sun/awt/datatransfer/DataTransferer.java sun/awt/datatransfer/SunClipboard.java sun/awt/datatransfer/TransferableProxy.java sun/awt/dnd sun/awt/dnd/SCCS sun/awt/dnd/SCCS/s.SunDragSourceContextPeer.java sun/awt/dnd/SCCS/s.SunDropTargetContextPeer.java sun/awt/dnd/SCCS/s.SunDropTargetEvent.java sun/awt/dnd/SunDragSourceContextPeer.java sun/awt/dnd/SunDropTargetContextPeer.java sun/awt/dnd/SunDropTargetEvent.java sun/awt/geom sun/awt/geom/SCCS sun/awt/geom/SCCS/s.Crossings.java sun/awt/geom/SCCS/s.AreaOp.java sun/awt/geom/SCCS/s.ChainEnd.java sun/awt/geom/SCCS/s.Curve.java sun/awt/geom/SCCS/s.CurveLink.java sun/awt/geom/SCCS/s.Edge.java sun/awt/geom/SCCS/s.Order0.java sun/awt/geom/SCCS/s.Order1.java sun/awt/geom/SCCS/s.Order2.java sun/awt/geom/SCCS/s.Order3.java sun/awt/geom/ChainEnd.java sun/awt/geom/AreaOp.java sun/awt/geom/Crossings.java sun/awt/geom/Curve.java sun/awt/geom/CurveLink.java sun/awt/geom/Edge.java sun/awt/geom/Order0.java sun/awt/geom/Order1.java sun/awt/geom/Order2.java sun/awt/geom/Order3.java sun/awt/im sun/awt/im/SCCS sun/awt/im/SCCS/s.CompositionAreaHandler.java sun/awt/im/SCCS/s.CompositionArea.java sun/awt/im/SCCS/s.InputMethodAdapter.java sun/awt/im/SCCS/s.InputContext.java sun/awt/im/SCCS/s.SimpleInputMethodWindow.java sun/awt/im/SCCS/s.InputMethodContext.java sun/awt/im/SCCS/s.InputMethodJFrame.java sun/awt/im/SCCS/s.InputMethodLocator.java sun/awt/im/SCCS/s.InputMethodManager.java sun/awt/im/SCCS/s.InputMethodPopupMenu.java sun/awt/im/SCCS/s.InputMethodWindow.java sun/awt/im/CompositionAreaHandler.java sun/awt/im/CompositionArea.java sun/awt/im/InputMethodPopupMenu.java sun/awt/im/InputContext.java sun/awt/im/InputMethodAdapter.java sun/awt/im/InputMethodContext.java sun/awt/im/InputMethodJFrame.java sun/awt/im/InputMethodLocator.java sun/awt/im/InputMethodManager.java sun/awt/im/SimpleInputMethodWindow.java sun/awt/im/InputMethodWindow.java sun/awt/image sun/awt/image/SCCS sun/awt/image/SCCS/s.BufImgVolatileSurfaceManager.java sun/awt/image/SCCS/s.BadDepthException.java sun/awt/image/SCCS/s.BufImgSurfaceData.java sun/awt/image/SCCS/s.BufferedImageGraphicsConfig.java sun/awt/image/SCCS/s.BufferedImageDevice.java sun/awt/image/SCCS/s.ByteInterleavedRaster.java sun/awt/image/SCCS/s.ByteArrayImageSource.java sun/awt/image/SCCS/s.ByteBandedRaster.java sun/awt/image/SCCS/s.ByteComponentRaster.java sun/awt/image/SCCS/s.CachingSurfaceManager.java sun/awt/image/SCCS/s.BytePackedRaster.java sun/awt/image/SCCS/s.InputStreamImageSource.java sun/awt/image/SCCS/s.DataBufferNative.java sun/awt/image/SCCS/s.FileImageSource.java sun/awt/image/SCCS/s.GifImageDecoder.java sun/awt/image/SCCS/s.ImageAccessException.java sun/awt/image/SCCS/s.ImageConsumerQueue.java sun/awt/image/SCCS/s.ImageDecoder.java sun/awt/image/SCCS/s.ImageFetchable.java sun/awt/image/SCCS/s.ImageFetcher.java sun/awt/image/SCCS/s.ImageFormatException.java sun/awt/image/SCCS/s.ImageRepresentation.java sun/awt/image/SCCS/s.ImageWatched.java sun/awt/image/SCCS/s.ImagingLib.java sun/awt/image/SCCS/s.IntegerComponentRaster.java sun/awt/image/SCCS/s.IntegerInterleavedRaster.java sun/awt/image/SCCS/s.JPEGImageDecoder.java sun/awt/image/SCCS/s.Manageable.java sun/awt/image/SCCS/s.NativeLibLoader.java sun/awt/image/SCCS/s.OffScreenImage.java sun/awt/image/SCCS/s.OffScreenImageSource.java sun/awt/image/SCCS/s.PNGImageDecoder.java sun/awt/image/SCCS/s.PixelConverter.java sun/awt/image/SCCS/s.RasterListener.java sun/awt/image/SCCS/s.RemoteOffScreenImage.java sun/awt/image/SCCS/s.ShortBandedRaster.java sun/awt/image/SCCS/s.ShortComponentRaster.java sun/awt/image/SCCS/s.ShortInterleavedRaster.java sun/awt/image/SCCS/s.SunVolatileImage.java sun/awt/image/SCCS/s.SunWritableRaster.java sun/awt/image/SCCS/s.SurfaceManager.java sun/awt/image/SCCS/s.ToolkitImage.java sun/awt/image/SCCS/s.URLImageSource.java sun/awt/image/SCCS/s.VolatileSurfaceManager.java sun/awt/image/SCCS/s.WritableRasterNative.java sun/awt/image/SCCS/s.XbmImageDecoder.java sun/awt/image/SCCS/s.OffScreenSurfaceManager.java sun/awt/image/codec sun/awt/image/codec/SCCS sun/awt/image/codec/SCCS/s.JPEGImageDecoderImpl.java sun/awt/image/codec/SCCS/s.JPEGImageEncoderImpl.java sun/awt/image/codec/SCCS/s.JPEGParam.java sun/awt/image/codec/JPEGImageDecoderImpl.java sun/awt/image/codec/JPEGImageEncoderImpl.java sun/awt/image/codec/JPEGParam.java sun/awt/image/BufferedImageDevice.java sun/awt/image/BadDepthException.java sun/awt/image/BufImgSurfaceData.java sun/awt/image/BufImgVolatileSurfaceManager.java sun/awt/image/BufferedImageGraphicsConfig.java sun/awt/image/ByteArrayImageSource.java sun/awt/image/ByteBandedRaster.java sun/awt/image/ByteComponentRaster.java sun/awt/image/ByteInterleavedRaster.java sun/awt/image/BytePackedRaster.java sun/awt/image/CachingSurfaceManager.java sun/awt/image/DataBufferNative.java sun/awt/image/ImageDecoder.java sun/awt/image/FileImageSource.java sun/awt/image/GifImageDecoder.java sun/awt/image/ImageAccessException.java sun/awt/image/ImageConsumerQueue.java sun/awt/image/ImageFetchable.java sun/awt/image/ImageFetcher.java sun/awt/image/ImageFormatException.java sun/awt/image/ImageRepresentation.java sun/awt/image/ImageWatched.java sun/awt/image/ImagingLib.java sun/awt/image/InputStreamImageSource.java sun/awt/image/IntegerComponentRaster.java sun/awt/image/IntegerInterleavedRaster.java sun/awt/image/Manageable.java sun/awt/image/JPEGImageDecoder.java sun/awt/image/NativeLibLoader.java sun/awt/image/OffScreenImage.java sun/awt/image/OffScreenImageSource.java sun/awt/image/PNGImageDecoder.java sun/awt/image/PixelConverter.java sun/awt/image/RasterListener.java sun/awt/image/RemoteOffScreenImage.java sun/awt/image/ShortBandedRaster.java sun/awt/image/ShortComponentRaster.java sun/awt/image/ShortInterleavedRaster.java sun/awt/image/SunVolatileImage.java sun/awt/image/SunWritableRaster.java sun/awt/image/SurfaceManager.java sun/awt/image/ToolkitImage.java sun/awt/image/URLImageSource.java sun/awt/image/VolatileSurfaceManager.java sun/awt/image/WritableRasterNative.java sun/awt/image/XbmImageDecoder.java sun/awt/image/OffScreenSurfaceManager.java sun/awt/resources sun/awt/resources/SCCS sun/awt/resources/SCCS/s.awt_zh_CN.properties sun/awt/resources/SCCS/s.awt.properties sun/awt/resources/SCCS/s.awt_de.properties sun/awt/resources/SCCS/s.awt_es.properties sun/awt/resources/SCCS/s.awt_fr.properties sun/awt/resources/SCCS/s.awt_it.properties sun/awt/resources/SCCS/s.awt_ja.properties sun/awt/resources/SCCS/s.awt_ko.properties sun/awt/resources/SCCS/s.awt_sv.properties sun/awt/resources/SCCS/s.awt_zh_TW.properties sun/awt/resources/awt_de.properties sun/awt/resources/awt.properties sun/awt/resources/awt_es.properties sun/awt/resources/awt_fr.properties sun/awt/resources/awt_it.properties sun/awt/resources/awt_ja.properties sun/awt/resources/awt_ko.properties sun/awt/resources/awt_sv.properties sun/awt/resources/awt_zh_CN.properties sun/awt/resources/awt_zh_TW.properties sun/awt/robot sun/awt/robot/SCCS sun/awt/robot/SCCS/s.RobotPeer.java sun/awt/robot/SCCS/s.Robot.java sun/awt/robot/SCCS/s.ScreenCaptureProducer.java sun/awt/robot/SCCS/s.ScreenCapture.java sun/awt/robot/RobotPeer.java sun/awt/robot/Robot.java sun/awt/robot/ScreenCaptureProducer.java sun/awt/robot/ScreenCapture.java sun/awt/shell sun/awt/shell/SCCS sun/awt/shell/SCCS/s.DefaultShellFolder.java sun/awt/shell/SCCS/s.ShellFolder.java sun/awt/shell/SCCS/s.ShellFolderManager.java sun/awt/shell/DefaultShellFolder.java sun/awt/shell/ShellFolder.java sun/awt/shell/ShellFolderManager.java sun/awt/ConstrainableGraphics.java sun/awt/AWTAutoShutdown.java sun/awt/AWTSecurityManager.java sun/awt/AppContext.java sun/awt/CharToByteSymbol.java sun/awt/CharsetString.java sun/awt/ComponentFactory.java sun/awt/CustomCursor.java sun/awt/DebugHelper.java.m4 sun/awt/Mutex.java sun/awt/PlatformFont.java sun/awt/DebugHelperImpl.java sun/awt/DebugSettings.java sun/awt/DefaultMouseInfoPeer.java sun/awt/DisplayChangedListener.java sun/awt/EmbeddedFrame.java sun/awt/EventListenerAggregate.java sun/awt/FocusingTextField.java sun/awt/FontConfiguration.java sun/awt/FontDescriptor.java sun/awt/GlobalCursorManager.java sun/awt/Graphics2Delegate.java sun/awt/HeadlessToolkit.java sun/awt/HorizBagLayout.java sun/awt/InputMethodSupport.java sun/awt/KeyboardFocusManagerPeerImpl.java sun/awt/ModalExclude.java sun/awt/OrientableFlowLayout.java sun/awt/NativeLibLoader.java sun/awt/NullComponentPeer.java sun/awt/PeerEvent.java sun/awt/RepaintArea.java sun/awt/SunDisplayChanger.java sun/awt/TracedEventQueue.java sun/awt/SunHints.java sun/awt/ScrollPaneWheelScroller.java sun/awt/SunGraphicsCallback.java sun/awt/SunToolkit.java sun/awt/VariableGridLayout.java sun/awt/VerticalBagLayout.java sun/awt/WindowClosingListener.java sun/awt/WindowClosingSupport.java sun/beans sun/beans/editors sun/beans/editors/SCCS sun/beans/editors/SCCS/s.BoolEditor.java sun/beans/editors/SCCS/s.ByteEditor.java sun/beans/editors/SCCS/s.ColorEditor.java sun/beans/editors/SCCS/s.DoubleEditor.java sun/beans/editors/SCCS/s.FloatEditor.java sun/beans/editors/SCCS/s.FontEditor.java sun/beans/editors/SCCS/s.IntEditor.java sun/beans/editors/SCCS/s.LongEditor.java sun/beans/editors/SCCS/s.NumberEditor.java sun/beans/editors/SCCS/s.ShortEditor.java sun/beans/editors/SCCS/s.StringEditor.java sun/beans/editors/ColorEditor.java sun/beans/editors/BoolEditor.java sun/beans/editors/ByteEditor.java sun/beans/editors/DoubleEditor.java sun/beans/editors/FloatEditor.java sun/beans/editors/FontEditor.java sun/beans/editors/IntEditor.java sun/beans/editors/LongEditor.java sun/beans/editors/NumberEditor.java sun/beans/editors/ShortEditor.java sun/beans/editors/StringEditor.java sun/beans/infos sun/beans/infos/SCCS sun/beans/infos/SCCS/s.ComponentBeanInfo.java sun/beans/infos/ComponentBeanInfo.java sun/corba sun/corba/SCCS sun/corba/SCCS/s.BridgePermission.java sun/corba/SCCS/s.Bridge.java sun/corba/SCCS/s.package.html sun/corba/package.html sun/corba/Bridge.java sun/corba/BridgePermission.java sun/dc sun/dc/path sun/dc/path/SCCS sun/dc/path/SCCS/s.FastPathProducer.java sun/dc/path/SCCS/s.PathConsumer.java sun/dc/path/SCCS/s.PathError.java sun/dc/path/SCCS/s.PathException.java sun/dc/path/FastPathProducer.java sun/dc/path/PathConsumer.java sun/dc/path/PathError.java sun/dc/path/PathException.java sun/dc/pr sun/dc/pr/SCCS sun/dc/pr/SCCS/s.PRException.java sun/dc/pr/SCCS/s.PRError.java sun/dc/pr/SCCS/s.PathDasher.java sun/dc/pr/SCCS/s.PathFiller.java sun/dc/pr/SCCS/s.PathStroker.java sun/dc/pr/SCCS/s.Rasterizer.java sun/dc/pr/PRException.java sun/dc/pr/PRError.java sun/dc/pr/PathDasher.java sun/dc/pr/PathFiller.java sun/dc/pr/PathStroker.java sun/dc/pr/Rasterizer.java sun/font sun/font/SCCS sun/font/SCCS/s.CharToGlyphMapper.java sun/font/SCCS/s.AdvanceCache.java sun/font/SCCS/s.BidiUtils.java sun/font/SCCS/s.CMap.java sun/font/SCCS/s.CompositeFontDescriptor.java sun/font/SCCS/s.CompositeFont.java sun/font/SCCS/s.ExtendedTextSourceLabel.java sun/font/SCCS/s.CompositeGlyphMapper.java sun/font/SCCS/s.CompositeStrike.java sun/font/SCCS/s.CoreMetrics.java sun/font/SCCS/s.Decoration.java sun/font/SCCS/s.DelegatingShape.java sun/font/SCCS/s.ExtendedTextLabel.java sun/font/SCCS/s.FileFont.java sun/font/SCCS/s.FileFontStrike.java sun/font/SCCS/s.Font2D.java sun/font/SCCS/s.Font2DHandle.java sun/font/SCCS/s.FontDesignMetrics.java sun/font/SCCS/s.FontFamily.java sun/font/SCCS/s.FontLineMetrics.java sun/font/SCCS/s.FontManager.java sun/font/SCCS/s.FontResolver.java sun/font/SCCS/s.FontRunIterator.java sun/font/SCCS/s.FontStrike.java sun/font/SCCS/s.FontStrikeDesc.java sun/font/SCCS/s.FontStrikeDisposer.java sun/font/SCCS/s.GlyphLayout.java sun/font/SCCS/s.GlyphList.java sun/font/SCCS/s.GraphicComponent.java sun/font/SCCS/s.PhysicalFont.java sun/font/SCCS/s.PhysicalStrike.java sun/font/SCCS/s.Script.java sun/font/SCCS/s.ScriptRun.java sun/font/SCCS/s.ScriptRunData.java sun/font/SCCS/s.StandardGlyphVector.java sun/font/SCCS/s.StandardTextSource.java sun/font/SCCS/s.StrikeCache.java sun/font/SCCS/s.StrikeMetrics.java sun/font/SCCS/s.SunLayoutEngine.java sun/font/SCCS/s.TextLabel.java sun/font/SCCS/s.TextLabelFactory.java sun/font/SCCS/s.TextLineComponent.java sun/font/SCCS/s.TextRecord.java sun/font/SCCS/s.TextSource.java sun/font/SCCS/s.TextSourceLabel.java sun/font/SCCS/s.TrueTypeFont.java sun/font/SCCS/s.TrueTypeGlyphMapper.java sun/font/SCCS/s.Type1Font.java sun/font/SCCS/s.Type1GlyphMapper.java sun/font/SCCS/s.Underline.java sun/font/CharToGlyphMapper.java sun/font/AdvanceCache.java sun/font/BidiUtils.java sun/font/CMap.java sun/font/CompositeGlyphMapper.java sun/font/CompositeFont.java sun/font/Font2DHandle.java sun/font/Font2D.java sun/font/CompositeFontDescriptor.java sun/font/CompositeStrike.java sun/font/CoreMetrics.java sun/font/Decoration.java sun/font/DelegatingShape.java sun/font/ExtendedTextLabel.java sun/font/ExtendedTextSourceLabel.java sun/font/FileFont.java sun/font/FileFontStrike.java sun/font/StandardGlyphVector.java sun/font/FontDesignMetrics.java sun/font/FontFamily.java sun/font/FontLineMetrics.java sun/font/FontManager.java sun/font/FontResolver.java sun/font/FontRunIterator.java sun/font/FontStrike.java sun/font/FontStrikeDesc.java sun/font/FontStrikeDisposer.java sun/font/GlyphLayout.java sun/font/GlyphList.java sun/font/GraphicComponent.java sun/font/PhysicalFont.java sun/font/PhysicalStrike.java sun/font/Script.java sun/font/ScriptRun.java sun/font/ScriptRunData.java sun/font/TrueTypeGlyphMapper.java sun/font/StandardTextSource.java sun/font/StrikeCache.java sun/font/StrikeMetrics.java sun/font/SunLayoutEngine.java sun/font/TextLabel.java sun/font/TextLabelFactory.java sun/font/TextLineComponent.java sun/font/TextRecord.java sun/font/TextSource.java sun/font/TextSourceLabel.java sun/font/TrueTypeFont.java sun/font/Type1GlyphMapper.java sun/font/Type1Font.java sun/font/Underline.java sun/instrument sun/instrument/SCCS sun/instrument/SCCS/s.InstrumentationImpl.java sun/instrument/SCCS/s.TransformerManager.java sun/instrument/InstrumentationImpl.java sun/instrument/TransformerManager.java sun/io sun/io/SCCS sun/io/SCCS/s.ByteToCharBig5_HKSCS.java sun/io/SCCS/s.ByteToCharASCII.java sun/io/SCCS/s.ByteToCharBig5.java sun/io/SCCS/s.ByteToCharBig5_Solaris.java sun/io/SCCS/s.ByteToCharConverter.java sun/io/SCCS/s.ByteToCharCp037.java sun/io/SCCS/s.ByteToCharCp1006.java sun/io/SCCS/s.ByteToCharCp1025.java sun/io/SCCS/s.ByteToCharCp1026.java sun/io/SCCS/s.ByteToCharCp1046.java sun/io/SCCS/s.ByteToCharCp1047.java sun/io/SCCS/s.ByteToCharCp1097.java sun/io/SCCS/s.ByteToCharCp1098.java sun/io/SCCS/s.ByteToCharCp1112.java sun/io/SCCS/s.ByteToCharCp1122.java sun/io/SCCS/s.ByteToCharCp1123.java sun/io/SCCS/s.ByteToCharCp1124.java sun/io/SCCS/s.ByteToCharCp1140.java sun/io/SCCS/s.ByteToCharCp1141.java sun/io/SCCS/s.ByteToCharCp1142.java sun/io/SCCS/s.ByteToCharCp1143.java sun/io/SCCS/s.ByteToCharCp1144.java sun/io/SCCS/s.ByteToCharCp1145.java sun/io/SCCS/s.ByteToCharCp1146.java sun/io/SCCS/s.ByteToCharCp1147.java sun/io/SCCS/s.ByteToCharCp1148.java sun/io/SCCS/s.ByteToCharCp1149.java sun/io/SCCS/s.ByteToCharCp1250.java sun/io/SCCS/s.ByteToCharCp1251.java sun/io/SCCS/s.ByteToCharCp1252.java sun/io/SCCS/s.ByteToCharCp1253.java sun/io/SCCS/s.ByteToCharCp1254.java sun/io/SCCS/s.ByteToCharCp1255.java sun/io/SCCS/s.ByteToCharCp1256.java sun/io/SCCS/s.ByteToCharCp1257.java sun/io/SCCS/s.ByteToCharCp1258.java sun/io/SCCS/s.ByteToCharCp1381.java sun/io/SCCS/s.ByteToCharCp1383.java sun/io/SCCS/s.ByteToCharCp273.java sun/io/SCCS/s.ByteToCharCp277.java sun/io/SCCS/s.ByteToCharCp278.java sun/io/SCCS/s.ByteToCharCp280.java sun/io/SCCS/s.ByteToCharCp284.java sun/io/SCCS/s.ByteToCharCp285.java sun/io/SCCS/s.ByteToCharCp297.java sun/io/SCCS/s.ByteToCharCp420.java sun/io/SCCS/s.ByteToCharCp33722.java sun/io/SCCS/s.ByteToCharCp424.java sun/io/SCCS/s.ByteToCharCp437.java sun/io/SCCS/s.ByteToCharCp500.java sun/io/SCCS/s.ByteToCharCp737.java sun/io/SCCS/s.ByteToCharCp775.java sun/io/SCCS/s.ByteToCharCp838.java sun/io/SCCS/s.ByteToCharCp850.java sun/io/SCCS/s.ByteToCharCp852.java sun/io/SCCS/s.ByteToCharCp855.java sun/io/SCCS/s.ByteToCharCp856.java sun/io/SCCS/s.ByteToCharCp857.java sun/io/SCCS/s.ByteToCharCp858.java sun/io/SCCS/s.ByteToCharCp860.java sun/io/SCCS/s.Converters.java sun/io/SCCS/s.ByteToCharCp861.java sun/io/SCCS/s.ByteToCharCp862.java sun/io/SCCS/s.ByteToCharCp863.java sun/io/SCCS/s.ByteToCharCp864.java sun/io/SCCS/s.ByteToCharCp865.java sun/io/SCCS/s.ByteToCharCp866.java sun/io/SCCS/s.ByteToCharCp868.java sun/io/SCCS/s.ByteToCharCp869.java sun/io/SCCS/s.ByteToCharCp870.java sun/io/SCCS/s.ByteToCharCp871.java sun/io/SCCS/s.ByteToCharCp874.java sun/io/SCCS/s.ByteToCharCp875.java sun/io/SCCS/s.ByteToCharCp918.java sun/io/SCCS/s.ByteToCharCp921.java sun/io/SCCS/s.ByteToCharCp922.java sun/io/SCCS/s.ByteToCharCp930.java sun/io/SCCS/s.ByteToCharCp933.java sun/io/SCCS/s.ByteToCharCp935.java sun/io/SCCS/s.ByteToCharCp937.java sun/io/SCCS/s.ByteToCharCp939.java sun/io/SCCS/s.ByteToCharCp942.java sun/io/SCCS/s.ByteToCharCp942C.java sun/io/SCCS/s.ByteToCharCp943.java sun/io/SCCS/s.ByteToCharCp943C.java sun/io/SCCS/s.ByteToCharCp948.java sun/io/SCCS/s.ByteToCharCp949.java sun/io/SCCS/s.ByteToCharCp949C.java sun/io/SCCS/s.ByteToCharCp950.java sun/io/SCCS/s.ByteToCharCp964.java sun/io/SCCS/s.ByteToCharCp970.java sun/io/SCCS/s.ByteToCharDBCS_ASCII.java sun/io/SCCS/s.ByteToCharDBCS_EBCDIC.java sun/io/SCCS/s.ByteToCharDoubleByte.java sun/io/SCCS/s.ByteToCharEUC.java sun/io/SCCS/s.ByteToCharEUC_CN.java sun/io/SCCS/s.ByteToCharEUC_JP.java sun/io/SCCS/s.ByteToCharEUC_JP_LINUX.java sun/io/SCCS/s.ByteToCharEUC_JP_Solaris.java sun/io/SCCS/s.ByteToCharEUC_KR.java sun/io/SCCS/s.ByteToCharEUC_TW.java sun/io/SCCS/s.ByteToCharGB18030.java sun/io/SCCS/s.ByteToCharGB18030DB.java sun/io/SCCS/s.ByteToCharGBK.java sun/io/SCCS/s.ByteToCharHKSCS.java sun/io/SCCS/s.ByteToCharHKSCS_2001.java sun/io/SCCS/s.ByteToCharISCII91.java sun/io/SCCS/s.ByteToCharISO2022.java sun/io/SCCS/s.ByteToCharISO2022CN.java sun/io/SCCS/s.ByteToCharISO2022JP.java sun/io/SCCS/s.ByteToCharISO2022KR.java sun/io/SCCS/s.ByteToCharISO8859_1.java sun/io/SCCS/s.ByteToCharISO8859_13.java sun/io/SCCS/s.ByteToCharISO8859_15.java sun/io/SCCS/s.ByteToCharISO8859_2.java sun/io/SCCS/s.ByteToCharISO8859_3.java sun/io/SCCS/s.ByteToCharISO8859_4.java sun/io/SCCS/s.ByteToCharISO8859_5.java sun/io/SCCS/s.ByteToCharISO8859_6.java sun/io/SCCS/s.ByteToCharISO8859_7.java sun/io/SCCS/s.ByteToCharISO8859_8.java sun/io/SCCS/s.ByteToCharISO8859_9.java sun/io/SCCS/s.ByteToCharJIS0201.java sun/io/SCCS/s.ByteToCharJIS0208.java sun/io/SCCS/s.ByteToCharJIS0208_Solaris.java sun/io/SCCS/s.ByteToCharJIS0212.java sun/io/SCCS/s.ByteToCharJIS0212_Solaris.java sun/io/SCCS/s.ByteToCharJISAutoDetect.java sun/io/SCCS/s.ByteToCharJohab.java sun/io/SCCS/s.ByteToCharKOI8_R.java sun/io/SCCS/s.ByteToCharMS874.java sun/io/SCCS/s.ByteToCharMS932.java sun/io/SCCS/s.ByteToCharMS932DB.java sun/io/SCCS/s.ByteToCharMS936.java sun/io/SCCS/s.ByteToCharMS949.java sun/io/SCCS/s.ByteToCharMS950.java sun/io/SCCS/s.ByteToCharMS950_HKSCS.java sun/io/SCCS/s.ByteToCharMacArabic.java sun/io/SCCS/s.ByteToCharMacCentralEurope.java sun/io/SCCS/s.ByteToCharMacCroatian.java sun/io/SCCS/s.ByteToCharMacCyrillic.java sun/io/SCCS/s.ByteToCharMacDingbat.java sun/io/SCCS/s.ByteToCharMacGreek.java sun/io/SCCS/s.ByteToCharMacHebrew.java sun/io/SCCS/s.ByteToCharMacIceland.java sun/io/SCCS/s.ByteToCharMacRoman.java sun/io/SCCS/s.ByteToCharMacRomania.java sun/io/SCCS/s.ByteToCharPCK.java sun/io/SCCS/s.ByteToCharSJIS.java sun/io/SCCS/s.ByteToCharMacSymbol.java sun/io/SCCS/s.ByteToCharMacThai.java sun/io/SCCS/s.ByteToCharMacTurkish.java sun/io/SCCS/s.ByteToCharMacUkraine.java sun/io/SCCS/s.ByteToCharSingleByte.java sun/io/SCCS/s.ByteToCharTIS620.java sun/io/SCCS/s.ByteToCharUTF16.java sun/io/SCCS/s.ByteToCharUTF8.java sun/io/SCCS/s.ByteToCharUnicode.java sun/io/SCCS/s.ByteToCharUnicodeBig.java sun/io/SCCS/s.ByteToCharUnicodeBigUnmarked.java sun/io/SCCS/s.ByteToCharUnicodeLittle.java sun/io/SCCS/s.ByteToCharUnicodeLittleUnmarked.java sun/io/SCCS/s.CharToByteASCII.java sun/io/SCCS/s.CharToByteBig5.java sun/io/SCCS/s.CharToByteBig5_HKSCS.java sun/io/SCCS/s.CharToByteBig5_Solaris.java sun/io/SCCS/s.CharToByteConverter.java sun/io/SCCS/s.CharToByteCp037.java sun/io/SCCS/s.CharToByteCp1006.java sun/io/SCCS/s.CharToByteCp1025.java sun/io/SCCS/s.CharToByteCp1026.java sun/io/SCCS/s.CharToByteCp1046.java sun/io/SCCS/s.CharToByteCp1047.java sun/io/SCCS/s.CharToByteCp1097.java sun/io/SCCS/s.CharToByteCp1098.java sun/io/SCCS/s.CharToByteCp1112.java sun/io/SCCS/s.CharToByteCp1122.java sun/io/SCCS/s.CharToByteCp1123.java sun/io/SCCS/s.CharToByteCp1124.java sun/io/SCCS/s.CharToByteCp1140.java sun/io/SCCS/s.CharToByteCp1141.java sun/io/SCCS/s.CharToByteCp1142.java sun/io/SCCS/s.CharToByteCp1143.java sun/io/SCCS/s.CharToByteCp1144.java sun/io/SCCS/s.CharToByteCp1145.java sun/io/SCCS/s.CharToByteCp1146.java sun/io/SCCS/s.CharToByteCp1147.java sun/io/SCCS/s.CharToByteCp1148.java sun/io/SCCS/s.CharToByteCp1149.java sun/io/SCCS/s.CharToByteCp1250.java sun/io/SCCS/s.CharToByteCp1251.java sun/io/SCCS/s.CharToByteCp1252.java sun/io/SCCS/s.CharToByteCp1253.java sun/io/SCCS/s.CharToByteCp1254.java sun/io/SCCS/s.CharToByteCp1255.java sun/io/SCCS/s.CharToByteCp1256.java sun/io/SCCS/s.CharToByteCp1257.java sun/io/SCCS/s.CharToByteCp1258.java sun/io/SCCS/s.CharToByteCp1381.java sun/io/SCCS/s.CharToByteCp1383.java sun/io/SCCS/s.CharToByteCp273.java sun/io/SCCS/s.CharToByteCp277.java sun/io/SCCS/s.CharToByteCp278.java sun/io/SCCS/s.CharToByteCp280.java sun/io/SCCS/s.CharToByteCp284.java sun/io/SCCS/s.CharToByteCp285.java sun/io/SCCS/s.CharToByteCp297.java sun/io/SCCS/s.CharToByteCp33722.java sun/io/SCCS/s.CharToByteCp420.java sun/io/SCCS/s.CharToByteCp424.java sun/io/SCCS/s.CharToByteCp437.java sun/io/SCCS/s.CharToByteCp500.java sun/io/SCCS/s.CharToByteCp737.java sun/io/SCCS/s.CharToByteCp775.java sun/io/SCCS/s.CharToByteCp838.java sun/io/SCCS/s.CharToByteCp850.java sun/io/SCCS/s.CharToByteCp852.java sun/io/SCCS/s.CharToByteCp855.java sun/io/SCCS/s.CharToByteCp856.java sun/io/SCCS/s.CharToByteCp857.java sun/io/SCCS/s.CharToByteCp858.java sun/io/SCCS/s.CharToByteCp860.java sun/io/SCCS/s.CharToByteCp861.java sun/io/SCCS/s.CharToByteCp862.java sun/io/SCCS/s.CharToByteCp863.java sun/io/SCCS/s.CharToByteCp864.java sun/io/SCCS/s.CharToByteCp865.java sun/io/SCCS/s.CharToByteCp866.java sun/io/SCCS/s.CharToByteCp868.java sun/io/SCCS/s.CharToByteCp869.java sun/io/SCCS/s.CharToByteCp870.java sun/io/SCCS/s.CharToByteCp871.java sun/io/SCCS/s.CharToByteCp874.java sun/io/SCCS/s.CharToByteCp875.java sun/io/SCCS/s.CharToByteCp918.java sun/io/SCCS/s.CharToByteCp921.java sun/io/SCCS/s.CharToByteCp922.java sun/io/SCCS/s.CharToByteCp930.java sun/io/SCCS/s.CharToByteCp933.java sun/io/SCCS/s.CharToByteCp935.java sun/io/SCCS/s.CharToByteCp937.java sun/io/SCCS/s.CharToByteCp939.java sun/io/SCCS/s.CharToByteCp942.java sun/io/SCCS/s.CharToByteCp942C.java sun/io/SCCS/s.CharToByteCp943.java sun/io/SCCS/s.CharToByteCp943C.java sun/io/SCCS/s.CharToByteCp948.java sun/io/SCCS/s.CharToByteCp949.java sun/io/SCCS/s.CharToByteCp949C.java sun/io/SCCS/s.CharToByteCp950.java sun/io/SCCS/s.CharToByteCp964.java sun/io/SCCS/s.CharToByteCp970.java sun/io/SCCS/s.CharToByteDBCS_ASCII.java sun/io/SCCS/s.CharToByteDBCS_EBCDIC.java sun/io/SCCS/s.CharToByteDoubleByte.java sun/io/SCCS/s.CharToByteEUC.java sun/io/SCCS/s.CharToByteEUC_CN.java sun/io/SCCS/s.CharToByteEUC_JP.java sun/io/SCCS/s.CharToByteEUC_JP_LINUX.java sun/io/SCCS/s.CharToByteEUC_JP_Solaris.java sun/io/SCCS/s.CharToByteEUC_KR.java sun/io/SCCS/s.CharToByteEUC_TW.java sun/io/SCCS/s.CharToByteGB18030.java sun/io/SCCS/s.CharToByteGBK.java sun/io/SCCS/s.CharToByteHKSCS.java sun/io/SCCS/s.CharToByteHKSCS_2001.java sun/io/SCCS/s.CharToByteISCII91.java sun/io/SCCS/s.CharToByteISO2022.java sun/io/SCCS/s.CharToByteISO2022CN_CNS.java sun/io/SCCS/s.CharToByteISO2022CN_GB.java sun/io/SCCS/s.CharToByteISO2022JP.java sun/io/SCCS/s.CharToByteISO2022KR.java sun/io/SCCS/s.CharToByteISO8859_1.java sun/io/SCCS/s.CharToByteISO8859_13.java sun/io/SCCS/s.CharToByteISO8859_15.java sun/io/SCCS/s.CharToByteISO8859_2.java sun/io/SCCS/s.CharToByteISO8859_3.java sun/io/SCCS/s.CharToByteISO8859_4.java sun/io/SCCS/s.CharToByteISO8859_5.java sun/io/SCCS/s.CharToByteISO8859_6.java sun/io/SCCS/s.CharToByteISO8859_7.java sun/io/SCCS/s.CharToByteISO8859_8.java sun/io/SCCS/s.CharToByteISO8859_9.java sun/io/SCCS/s.CharToByteJIS0201.java sun/io/SCCS/s.CharToByteJIS0208.java sun/io/SCCS/s.CharToByteJIS0208_Solaris.java sun/io/SCCS/s.CharToByteJIS0212.java sun/io/SCCS/s.CharToByteJIS0212_Solaris.java sun/io/SCCS/s.CharToByteJohab.java sun/io/SCCS/s.CharToByteKOI8_R.java sun/io/SCCS/s.CharToByteMS874.java sun/io/SCCS/s.CharToByteMS932.java sun/io/SCCS/s.CharToByteMS932DB.java sun/io/SCCS/s.CharToByteMS936.java sun/io/SCCS/s.CharToByteMS949.java sun/io/SCCS/s.CharToByteMS950.java sun/io/SCCS/s.CharToByteMS950_HKSCS.java sun/io/SCCS/s.CharToByteMacArabic.java sun/io/SCCS/s.CharToByteMacCentralEurope.java sun/io/SCCS/s.CharToByteMacCroatian.java sun/io/SCCS/s.CharToByteMacCyrillic.java sun/io/SCCS/s.CharToByteMacDingbat.java sun/io/SCCS/s.CharToByteMacGreek.java sun/io/SCCS/s.CharToByteMacHebrew.java sun/io/SCCS/s.CharToByteMacIceland.java sun/io/SCCS/s.CharToByteMacRoman.java sun/io/SCCS/s.CharToByteMacRomania.java sun/io/SCCS/s.CharToByteMacSymbol.java sun/io/SCCS/s.CharToByteMacThai.java sun/io/SCCS/s.CharToByteMacTurkish.java sun/io/SCCS/s.CharToByteMacUkraine.java sun/io/SCCS/s.CharToBytePCK.java sun/io/SCCS/s.CharToByteSJIS.java sun/io/SCCS/s.CharToByteSingleByte.java sun/io/SCCS/s.CharToByteTIS620.java sun/io/SCCS/s.CharToByteUTF16.java sun/io/SCCS/s.CharToByteUTF8.java sun/io/SCCS/s.CharToByteUnicode.java sun/io/SCCS/s.CharToByteUnicodeBig.java sun/io/SCCS/s.CharToByteUnicodeBigUnmarked.java sun/io/SCCS/s.CharToByteUnicodeLittle.java sun/io/SCCS/s.CharToByteUnicodeLittleUnmarked.java sun/io/SCCS/s.CharacterEncoding.java sun/io/SCCS/s.MalformedInputException.java sun/io/SCCS/s.ConversionBufferFullException.java sun/io/SCCS/s.UnknownCharacterException.java sun/io/ByteToCharBig5_HKSCS.java sun/io/ByteToCharASCII.java sun/io/ByteToCharBig5.java sun/io/ByteToCharUnicodeBigUnmarked.java sun/io/ByteToCharBig5_Solaris.java sun/io/ByteToCharConverter.java sun/io/ByteToCharCp037.java sun/io/ByteToCharCp1006.java sun/io/ByteToCharCp1025.java sun/io/ByteToCharCp1026.java sun/io/ByteToCharCp1046.java sun/io/ByteToCharCp1047.java sun/io/ByteToCharCp1097.java sun/io/ByteToCharCp1098.java sun/io/ByteToCharCp1112.java sun/io/ByteToCharCp1122.java sun/io/ByteToCharCp1123.java sun/io/ByteToCharCp1124.java sun/io/ByteToCharCp1140.java sun/io/ByteToCharCp1141.java sun/io/ByteToCharCp1142.java sun/io/ByteToCharCp1143.java sun/io/ByteToCharCp1144.java sun/io/ByteToCharCp1145.java sun/io/ByteToCharCp1146.java sun/io/ByteToCharCp1147.java sun/io/ByteToCharCp1148.java sun/io/ByteToCharCp1149.java sun/io/ByteToCharCp1250.java sun/io/ByteToCharCp1251.java sun/io/ByteToCharCp1252.java sun/io/ByteToCharCp1253.java sun/io/ByteToCharCp1254.java sun/io/ByteToCharCp1255.java sun/io/ByteToCharCp1256.java sun/io/ByteToCharCp1257.java sun/io/ByteToCharCp1258.java sun/io/ByteToCharCp1381.java sun/io/ByteToCharCp1383.java sun/io/ByteToCharCp273.java sun/io/ByteToCharCp277.java sun/io/ByteToCharCp278.java sun/io/ByteToCharCp280.java sun/io/ByteToCharCp284.java sun/io/ByteToCharCp285.java sun/io/ByteToCharCp297.java sun/io/ByteToCharCp33722.java sun/io/ByteToCharCp420.java sun/io/ByteToCharCp424.java sun/io/ByteToCharCp437.java sun/io/ByteToCharCp500.java sun/io/ByteToCharCp737.java sun/io/ByteToCharCp775.java sun/io/ByteToCharCp838.java sun/io/ByteToCharCp850.java sun/io/ByteToCharCp852.java sun/io/ByteToCharCp855.java sun/io/ByteToCharCp856.java sun/io/ByteToCharCp857.java sun/io/ByteToCharCp858.java sun/io/ByteToCharCp860.java sun/io/ByteToCharCp861.java sun/io/ByteToCharCp862.java sun/io/ByteToCharCp863.java sun/io/ByteToCharCp864.java sun/io/ByteToCharCp865.java sun/io/ByteToCharCp866.java sun/io/ByteToCharCp868.java sun/io/ByteToCharCp869.java sun/io/ByteToCharCp870.java sun/io/ByteToCharCp871.java sun/io/ByteToCharCp874.java sun/io/ByteToCharCp875.java sun/io/ByteToCharCp918.java sun/io/ByteToCharCp921.java sun/io/ByteToCharCp922.java sun/io/ByteToCharCp930.java sun/io/ByteToCharCp933.java sun/io/ByteToCharCp935.java sun/io/ByteToCharCp937.java sun/io/ByteToCharCp939.java sun/io/ByteToCharCp942.java sun/io/ByteToCharCp942C.java sun/io/ByteToCharCp943.java sun/io/ByteToCharCp943C.java sun/io/ByteToCharCp948.java sun/io/ByteToCharCp949.java sun/io/ByteToCharCp949C.java sun/io/ByteToCharCp950.java sun/io/ByteToCharCp964.java sun/io/ByteToCharCp970.java sun/io/ByteToCharDBCS_ASCII.java sun/io/ByteToCharDBCS_EBCDIC.java sun/io/Converters.java sun/io/ByteToCharDoubleByte.java sun/io/ByteToCharEUC.java sun/io/ByteToCharEUC_CN.java sun/io/ByteToCharEUC_JP.java sun/io/ByteToCharEUC_JP_LINUX.java sun/io/ByteToCharEUC_JP_Solaris.java sun/io/ByteToCharEUC_KR.java sun/io/ByteToCharEUC_TW.java sun/io/ByteToCharGB18030.java sun/io/ByteToCharGB18030DB.java sun/io/ByteToCharGBK.java sun/io/ByteToCharHKSCS.java sun/io/ByteToCharHKSCS_2001.java sun/io/ByteToCharISCII91.java sun/io/ByteToCharISO2022.java sun/io/ByteToCharISO2022CN.java sun/io/ByteToCharISO2022JP.java sun/io/ByteToCharISO2022KR.java sun/io/ByteToCharISO8859_1.java sun/io/ByteToCharISO8859_13.java sun/io/ByteToCharISO8859_15.java sun/io/ByteToCharISO8859_2.java sun/io/ByteToCharISO8859_3.java sun/io/ByteToCharISO8859_4.java sun/io/ByteToCharISO8859_5.java sun/io/ByteToCharISO8859_6.java sun/io/ByteToCharISO8859_7.java sun/io/ByteToCharISO8859_8.java sun/io/ByteToCharISO8859_9.java sun/io/ByteToCharJIS0201.java sun/io/ByteToCharJIS0208.java sun/io/ByteToCharJIS0208_Solaris.java sun/io/ByteToCharJIS0212.java sun/io/ByteToCharJIS0212_Solaris.java sun/io/ByteToCharJISAutoDetect.java sun/io/ByteToCharJohab.java sun/io/ByteToCharKOI8_R.java sun/io/ByteToCharMS874.java sun/io/ByteToCharMS932.java sun/io/ByteToCharMS932DB.java sun/io/ByteToCharMS936.java sun/io/ByteToCharMS949.java sun/io/ByteToCharMS950.java sun/io/ByteToCharMS950_HKSCS.java sun/io/ByteToCharMacArabic.java sun/io/ByteToCharMacCentralEurope.java sun/io/ByteToCharMacCroatian.java sun/io/ByteToCharMacCyrillic.java sun/io/ByteToCharMacDingbat.java sun/io/ByteToCharMacGreek.java sun/io/ByteToCharMacHebrew.java sun/io/ByteToCharMacIceland.java sun/io/ByteToCharMacRoman.java sun/io/ByteToCharMacRomania.java sun/io/ByteToCharMacSymbol.java sun/io/ByteToCharMacThai.java sun/io/ByteToCharMacTurkish.java sun/io/ByteToCharMacUkraine.java sun/io/ByteToCharPCK.java sun/io/ByteToCharSJIS.java sun/io/ByteToCharSingleByte.java sun/io/ByteToCharTIS620.java sun/io/ByteToCharUTF16.java sun/io/ByteToCharUTF8.java sun/io/ByteToCharUnicode.java sun/io/ByteToCharUnicodeBig.java sun/io/ByteToCharUnicodeLittleUnmarked.java sun/io/ByteToCharUnicodeLittle.java sun/io/CharToByteBig5_HKSCS.java sun/io/CharToByteASCII.java sun/io/CharToByteBig5.java sun/io/CharToByteEUC_JP_Solaris.java sun/io/CharToByteCp037.java sun/io/CharToByteBig5_Solaris.java sun/io/CharToByteConverter.java sun/io/CharToByteCp1006.java sun/io/CharToByteCp1025.java sun/io/CharToByteCp1026.java sun/io/CharToByteCp1046.java sun/io/CharToByteCp1047.java sun/io/CharToByteCp1097.java sun/io/CharToByteCp1098.java sun/io/CharToByteCp1112.java sun/io/CharToByteCp1122.java sun/io/CharToByteCp1123.java sun/io/CharToByteCp1124.java sun/io/CharToByteCp1140.java sun/io/CharToByteCp1141.java sun/io/CharToByteCp1142.java sun/io/CharToByteCp1143.java sun/io/CharToByteCp1144.java sun/io/CharToByteCp1145.java sun/io/CharToByteCp1146.java sun/io/CharToByteCp1147.java sun/io/CharToByteCp1148.java sun/io/CharToByteCp1149.java sun/io/CharToByteCp1250.java sun/io/CharToByteCp1251.java sun/io/CharToByteCp1252.java sun/io/CharToByteCp1253.java sun/io/CharToByteCp1254.java sun/io/CharToByteCp1255.java sun/io/CharToByteCp1256.java sun/io/CharToByteCp1257.java sun/io/CharToByteCp1258.java sun/io/CharToByteCp1381.java sun/io/CharToByteCp1383.java sun/io/CharToByteCp273.java sun/io/CharToByteCp277.java sun/io/CharToByteCp278.java sun/io/CharToByteCp280.java sun/io/CharToByteCp284.java sun/io/CharToByteCp285.java sun/io/CharToByteCp297.java sun/io/CharToByteCp33722.java sun/io/CharToByteCp420.java sun/io/CharToByteCp424.java sun/io/CharToByteCp437.java sun/io/CharToByteCp500.java sun/io/CharToByteCp737.java sun/io/CharToByteCp775.java sun/io/CharToByteCp838.java sun/io/CharToByteCp850.java sun/io/CharToByteCp852.java sun/io/CharToByteCp855.java sun/io/CharToByteCp856.java sun/io/CharToByteCp857.java sun/io/CharToByteCp858.java sun/io/CharToByteCp860.java sun/io/CharToByteCp861.java sun/io/CharToByteCp862.java sun/io/CharToByteCp863.java sun/io/CharToByteCp864.java sun/io/CharToByteCp865.java sun/io/CharToByteCp866.java sun/io/CharToByteCp868.java sun/io/CharToByteCp869.java sun/io/CharToByteCp870.java sun/io/CharToByteCp871.java sun/io/CharToByteCp874.java sun/io/CharToByteCp875.java sun/io/CharToByteCp918.java sun/io/CharToByteCp921.java sun/io/CharToByteCp922.java sun/io/CharToByteCp930.java sun/io/CharToByteCp933.java sun/io/CharToByteCp935.java sun/io/CharToByteCp937.java sun/io/CharToByteCp939.java sun/io/CharToByteCp942.java sun/io/CharToByteCp942C.java sun/io/CharToByteCp943.java sun/io/CharToByteCp943C.java sun/io/CharToByteCp948.java sun/io/CharToByteCp949.java sun/io/CharToByteCp949C.java sun/io/CharToByteCp950.java sun/io/CharToByteCp964.java sun/io/CharToByteCp970.java sun/io/CharToByteDBCS_ASCII.java sun/io/CharToByteDBCS_EBCDIC.java sun/io/CharToByteDoubleByte.java sun/io/CharToByteEUC.java sun/io/CharToByteEUC_CN.java sun/io/CharToByteEUC_JP.java sun/io/CharToByteEUC_JP_LINUX.java sun/io/CharToByteUnicodeLittleUnmarked.java sun/io/CharToByteEUC_KR.java sun/io/CharToByteEUC_TW.java sun/io/CharToByteGB18030.java sun/io/CharToByteGBK.java sun/io/CharToByteHKSCS.java sun/io/CharToByteHKSCS_2001.java sun/io/CharToByteISCII91.java sun/io/CharToByteISO2022.java sun/io/CharToByteISO2022CN_CNS.java sun/io/CharToByteISO2022CN_GB.java sun/io/CharToByteISO2022JP.java sun/io/CharToByteISO2022KR.java sun/io/CharToByteISO8859_1.java sun/io/CharToByteISO8859_13.java sun/io/CharToByteISO8859_15.java sun/io/CharToByteISO8859_2.java sun/io/CharToByteISO8859_3.java sun/io/CharToByteISO8859_4.java sun/io/CharToByteISO8859_5.java sun/io/CharToByteISO8859_6.java sun/io/CharToByteISO8859_7.java sun/io/CharToByteISO8859_8.java sun/io/CharToByteISO8859_9.java sun/io/CharToByteJIS0201.java sun/io/CharToByteJIS0208.java sun/io/CharToByteJIS0208_Solaris.java sun/io/CharToByteJIS0212.java sun/io/CharToByteJIS0212_Solaris.java sun/io/CharToByteJohab.java sun/io/CharToByteKOI8_R.java sun/io/CharToByteMS874.java sun/io/CharToByteMS932.java sun/io/CharToByteMS932DB.java sun/io/CharToByteMS936.java sun/io/CharToByteMS949.java sun/io/CharToByteMS950.java sun/io/CharToByteMS950_HKSCS.java sun/io/CharToByteMacArabic.java sun/io/CharToByteMacCentralEurope.java sun/io/CharToByteMacCroatian.java sun/io/CharToByteMacCyrillic.java sun/io/CharToByteMacDingbat.java sun/io/CharToByteMacGreek.java sun/io/CharToByteMacHebrew.java sun/io/CharToByteMacIceland.java sun/io/CharToByteMacRoman.java sun/io/CharToByteMacRomania.java sun/io/CharToByteMacSymbol.java sun/io/CharToByteMacThai.java sun/io/CharToByteMacTurkish.java sun/io/CharToByteMacUkraine.java sun/io/CharToBytePCK.java sun/io/CharToByteSJIS.java sun/io/CharToByteSingleByte.java sun/io/CharToByteTIS620.java sun/io/CharToByteUTF16.java sun/io/CharToByteUTF8.java sun/io/CharToByteUnicode.java sun/io/CharToByteUnicodeBig.java sun/io/CharToByteUnicodeBigUnmarked.java sun/io/CharToByteUnicodeLittle.java sun/io/MalformedInputException.java sun/io/CharacterEncoding.java sun/io/ConversionBufferFullException.java sun/io/UnknownCharacterException.java sun/java2d sun/java2d/SCCS sun/java2d/SCCS/s.HeadlessGraphicsEnvironment.java sun/java2d/SCCS/s.DefaultDisposerRecord.java sun/java2d/SCCS/s.Disposer.java sun/java2d/SCCS/s.DisposerRecord.java sun/java2d/SCCS/s.DisposerTarget.java sun/java2d/SCCS/s.FontSupport.java sun/java2d/SCCS/s.InvalidPipeException.java sun/java2d/SCCS/s.NullSurfaceData.java sun/java2d/SCCS/s.Spans.java sun/java2d/SCCS/s.SunCompositeContext.java sun/java2d/SCCS/s.SunGraphics2D.java sun/java2d/SCCS/s.SunGraphicsEnvironment.java sun/java2d/SCCS/s.SurfaceData.java sun/java2d/loops sun/java2d/loops/SCCS sun/java2d/loops/SCCS/s.BlitBg.java sun/java2d/loops/SCCS/s.Blit.java sun/java2d/loops/SCCS/s.CompositeType.java sun/java2d/loops/SCCS/s.CustomComponent.java sun/java2d/loops/SCCS/s.DrawGlyphList.java sun/java2d/loops/SCCS/s.DrawGlyphListAA.java sun/java2d/loops/SCCS/s.DrawLine.java sun/java2d/loops/SCCS/s.DrawPolygons.java sun/java2d/loops/SCCS/s.DrawRect.java sun/java2d/loops/SCCS/s.FillRect.java sun/java2d/loops/SCCS/s.FillSpans.java sun/java2d/loops/SCCS/s.FontInfo.java sun/java2d/loops/SCCS/s.GeneralRenderer.java sun/java2d/loops/SCCS/s.GraphicsPrimitive.java sun/java2d/loops/SCCS/s.GraphicsPrimitiveMgr.java sun/java2d/loops/SCCS/s.MaskBlit.java sun/java2d/loops/SCCS/s.TransformBlit.java sun/java2d/loops/SCCS/s.GraphicsPrimitiveProxy.java sun/java2d/loops/SCCS/s.MaskFill.java sun/java2d/loops/SCCS/s.RenderCache.java sun/java2d/loops/SCCS/s.RenderLoops.java sun/java2d/loops/SCCS/s.ScaledBlit.java sun/java2d/loops/SCCS/s.SurfaceType.java sun/java2d/loops/SCCS/s.TransformHelper.java sun/java2d/loops/SCCS/s.XORComposite.java sun/java2d/loops/CompositeType.java sun/java2d/loops/Blit.java sun/java2d/loops/BlitBg.java sun/java2d/loops/GraphicsPrimitiveMgr.java sun/java2d/loops/CustomComponent.java sun/java2d/loops/DrawGlyphList.java sun/java2d/loops/DrawGlyphListAA.java sun/java2d/loops/DrawLine.java sun/java2d/loops/DrawPolygons.java sun/java2d/loops/DrawRect.java sun/java2d/loops/FillRect.java sun/java2d/loops/FillSpans.java sun/java2d/loops/FontInfo.java sun/java2d/loops/GeneralRenderer.java sun/java2d/loops/GraphicsPrimitive.java sun/java2d/loops/MaskBlit.java sun/java2d/loops/GraphicsPrimitiveProxy.java sun/java2d/loops/MaskFill.java sun/java2d/loops/RenderCache.java sun/java2d/loops/RenderLoops.java sun/java2d/loops/ScaledBlit.java sun/java2d/loops/SurfaceType.java sun/java2d/loops/TransformBlit.java sun/java2d/loops/XORComposite.java sun/java2d/loops/TransformHelper.java sun/java2d/opengl sun/java2d/opengl/SCCS sun/java2d/opengl/SCCS/s.OGLSurfaceData.java sun/java2d/opengl/SCCS/s.OGLBlitLoops.java sun/java2d/opengl/SCCS/s.OGLContext.java sun/java2d/opengl/SCCS/s.OGLDrawImage.java sun/java2d/opengl/SCCS/s.OGLMaskBlit.java sun/java2d/opengl/SCCS/s.OGLMaskFill.java sun/java2d/opengl/SCCS/s.OGLRenderer.java sun/java2d/opengl/SCCS/s.OGLTextRenderer.java sun/java2d/opengl/OGLTextRenderer.java sun/java2d/opengl/OGLBlitLoops.java sun/java2d/opengl/OGLContext.java sun/java2d/opengl/OGLDrawImage.java sun/java2d/opengl/OGLMaskBlit.java sun/java2d/opengl/OGLMaskFill.java sun/java2d/opengl/OGLRenderer.java sun/java2d/opengl/OGLSurfaceData.java sun/java2d/pipe sun/java2d/pipe/SCCS sun/java2d/pipe/SCCS/s.DuctusShapeRenderer.java sun/java2d/pipe/SCCS/s.AATextRenderer.java sun/java2d/pipe/SCCS/s.AlphaColorPipe.java sun/java2d/pipe/SCCS/s.AlphaPaintPipe.java sun/java2d/pipe/SCCS/s.CompositePipe.java sun/java2d/pipe/SCCS/s.DrawImage.java sun/java2d/pipe/SCCS/s.DrawImagePipe.java sun/java2d/pipe/SCCS/s.DuctusRenderer.java sun/java2d/pipe/SCCS/s.GeneralCompositePipe.java sun/java2d/pipe/SCCS/s.GlyphListPipe.java sun/java2d/pipe/SCCS/s.LoopPipe.java sun/java2d/pipe/SCCS/s.NullPipe.java sun/java2d/pipe/SCCS/s.OutlineTextRenderer.java sun/java2d/pipe/SCCS/s.PixelDrawPipe.java sun/java2d/pipe/SCCS/s.PixelFillPipe.java sun/java2d/pipe/SCCS/s.PixelToShapeConverter.java sun/java2d/pipe/SCCS/s.Region.java sun/java2d/pipe/SCCS/s.RegionClipSpanIterator.java sun/java2d/pipe/SCCS/s.RegionIterator.java sun/java2d/pipe/SCCS/s.RegionSpanIterator.java sun/java2d/pipe/SCCS/s.ShapeDrawPipe.java sun/java2d/pipe/SCCS/s.ShapeSpanIterator.java sun/java2d/pipe/SCCS/s.SolidTextRenderer.java sun/java2d/pipe/SCCS/s.SpanClipRenderer.java sun/java2d/pipe/SCCS/s.SpanIterator.java sun/java2d/pipe/SCCS/s.SpanShapeRenderer.java sun/java2d/pipe/SCCS/s.TextPipe.java sun/java2d/pipe/SCCS/s.TextRenderer.java sun/java2d/pipe/SCCS/s.ValidatePipe.java sun/java2d/pipe/DuctusShapeRenderer.java sun/java2d/pipe/AATextRenderer.java sun/java2d/pipe/AlphaColorPipe.java sun/java2d/pipe/AlphaPaintPipe.java sun/java2d/pipe/CompositePipe.java sun/java2d/pipe/DrawImage.java sun/java2d/pipe/DrawImagePipe.java sun/java2d/pipe/DuctusRenderer.java sun/java2d/pipe/PixelToShapeConverter.java sun/java2d/pipe/GeneralCompositePipe.java sun/java2d/pipe/GlyphListPipe.java sun/java2d/pipe/LoopPipe.java sun/java2d/pipe/NullPipe.java sun/java2d/pipe/OutlineTextRenderer.java sun/java2d/pipe/PixelDrawPipe.java sun/java2d/pipe/PixelFillPipe.java sun/java2d/pipe/RegionIterator.java sun/java2d/pipe/Region.java sun/java2d/pipe/RegionClipSpanIterator.java sun/java2d/pipe/RegionSpanIterator.java sun/java2d/pipe/ShapeDrawPipe.java sun/java2d/pipe/ShapeSpanIterator.java sun/java2d/pipe/SolidTextRenderer.java sun/java2d/pipe/SpanClipRenderer.java sun/java2d/pipe/SpanIterator.java sun/java2d/pipe/SpanShapeRenderer.java sun/java2d/pipe/TextPipe.java sun/java2d/pipe/TextRenderer.java sun/java2d/pipe/ValidatePipe.java sun/java2d/HeadlessGraphicsEnvironment.java sun/java2d/DefaultDisposerRecord.java sun/java2d/Disposer.java sun/java2d/DisposerRecord.java sun/java2d/DisposerTarget.java sun/java2d/FontSupport.java sun/java2d/InvalidPipeException.java sun/java2d/NullSurfaceData.java sun/java2d/Spans.java sun/java2d/SunCompositeContext.java sun/java2d/SunGraphics2D.java sun/java2d/SunGraphicsEnvironment.java sun/java2d/SurfaceData.java sun/jdbc sun/jdbc/odbc sun/jdbc/odbc/SCCS sun/jdbc/odbc/SCCS/s.JdbcOdbcBoundCol.java sun/jdbc/odbc/SCCS/s.JdbcOdbc.c sun/jdbc/odbc/SCCS/s.JdbcOdbc.java sun/jdbc/odbc/SCCS/s.JdbcOdbcPreparedStatement.java sun/jdbc/odbc/SCCS/s.JdbcOdbcBatchUpdateException.java sun/jdbc/odbc/SCCS/s.JdbcOdbcBoundArrayOfParams.java sun/jdbc/odbc/SCCS/s.JdbcOdbcBoundParam.java sun/jdbc/odbc/SCCS/s.JdbcOdbcCallableStatement.java sun/jdbc/odbc/SCCS/s.JdbcOdbcConnection.java sun/jdbc/odbc/SCCS/s.JdbcOdbcConnectionInterface.java sun/jdbc/odbc/SCCS/s.JdbcOdbcDatabaseMetaData.java sun/jdbc/odbc/SCCS/s.JdbcOdbcDriver.java sun/jdbc/odbc/SCCS/s.JdbcOdbcDriverInterface.java sun/jdbc/odbc/SCCS/s.JdbcOdbcInputStream.java sun/jdbc/odbc/SCCS/s.JdbcOdbcLimits.java sun/jdbc/odbc/SCCS/s.JdbcOdbcObject.java sun/jdbc/odbc/SCCS/s.JdbcOdbcPlatform.java sun/jdbc/odbc/SCCS/s.JdbcOdbcResultSetInterface.java sun/jdbc/odbc/SCCS/s.JdbcOdbcPseudoCol.java sun/jdbc/odbc/SCCS/s.JdbcOdbcResultSet.java sun/jdbc/odbc/SCCS/s.odbcver.h sun/jdbc/odbc/SCCS/s.JdbcOdbcResultSetMetaData.java sun/jdbc/odbc/SCCS/s.JdbcOdbcSQLWarning.java sun/jdbc/odbc/SCCS/s.JdbcOdbcStatement.java sun/jdbc/odbc/SCCS/s.JdbcOdbcTracer.java sun/jdbc/odbc/SCCS/s.JdbcOdbcTypeInfo.java sun/jdbc/odbc/SCCS/s.JdbcOdbcTypes.java sun/jdbc/odbc/SCCS/s.JdbcOdbcUtils.java sun/jdbc/odbc/SCCS/s.OdbcDef.java sun/jdbc/odbc/SCCS/s.odbcinst.h sun/jdbc/odbc/SCCS/s.sql.h sun/jdbc/odbc/SCCS/s.sqlext.h sun/jdbc/odbc/SCCS/s.sqltypes.h sun/jdbc/odbc/SCCS/s.sqlucode.h sun/jdbc/odbc/SCCS/s.sqlunx.h sun/jdbc/odbc/SCCS/s.wodbcinst.h sun/jdbc/odbc/SCCS/s.wodbcver.h sun/jdbc/odbc/SCCS/s.wsql.h sun/jdbc/odbc/SCCS/s.wsqlext.h sun/jdbc/odbc/SCCS/s.wsqltypes.h sun/jdbc/odbc/SCCS/s.wsqlucode.h sun/jdbc/odbc/ee sun/jdbc/odbc/ee/SCCS sun/jdbc/odbc/ee/SCCS/s.ConnectionAttributes.java sun/jdbc/odbc/ee/SCCS/s.CommonDataSource.java sun/jdbc/odbc/ee/SCCS/s.ConnectionEventListener.java sun/jdbc/odbc/ee/SCCS/s.ConnectionHandler.java sun/jdbc/odbc/ee/SCCS/s.ConnectionPool.java sun/jdbc/odbc/ee/SCCS/s.ConnectionPoolDataSource.java sun/jdbc/odbc/ee/SCCS/s.ConnectionPoolFactory.java sun/jdbc/odbc/ee/SCCS/s.DataSource.java sun/jdbc/odbc/ee/SCCS/s.ObjectFactory.java sun/jdbc/odbc/ee/SCCS/s.ObjectPool.java sun/jdbc/odbc/ee/SCCS/s.PoolProperties.java sun/jdbc/odbc/ee/SCCS/s.PoolWorker.java sun/jdbc/odbc/ee/SCCS/s.PooledConnection.java sun/jdbc/odbc/ee/SCCS/s.PooledObject.java sun/jdbc/odbc/ee/ConnectionAttributes.java sun/jdbc/odbc/ee/CommonDataSource.java sun/jdbc/odbc/ee/ConnectionEventListener.java sun/jdbc/odbc/ee/ConnectionHandler.java sun/jdbc/odbc/ee/ConnectionPool.java sun/jdbc/odbc/ee/ConnectionPoolDataSource.java sun/jdbc/odbc/ee/ConnectionPoolFactory.java sun/jdbc/odbc/ee/DataSource.java sun/jdbc/odbc/ee/ObjectFactory.java sun/jdbc/odbc/ee/ObjectPool.java sun/jdbc/odbc/ee/PoolProperties.java sun/jdbc/odbc/ee/PoolWorker.java sun/jdbc/odbc/ee/PooledConnection.java sun/jdbc/odbc/ee/PooledObject.java sun/jdbc/odbc/JdbcOdbc.java sun/jdbc/odbc/JdbcOdbc.c sun/jdbc/odbc/OdbcDef.java sun/jdbc/odbc/JdbcOdbcBatchUpdateException.java sun/jdbc/odbc/JdbcOdbcBoundArrayOfParams.java sun/jdbc/odbc/JdbcOdbcBoundCol.java sun/jdbc/odbc/JdbcOdbcBoundParam.java sun/jdbc/odbc/JdbcOdbcCallableStatement.java sun/jdbc/odbc/JdbcOdbcConnection.java sun/jdbc/odbc/JdbcOdbcConnectionInterface.java sun/jdbc/odbc/JdbcOdbcDatabaseMetaData.java sun/jdbc/odbc/JdbcOdbcDriver.java sun/jdbc/odbc/JdbcOdbcLimits.java sun/jdbc/odbc/JdbcOdbcObject.java sun/jdbc/odbc/JdbcOdbcDriverInterface.java sun/jdbc/odbc/JdbcOdbcInputStream.java sun/jdbc/odbc/JdbcOdbcPlatform.java sun/jdbc/odbc/JdbcOdbcPreparedStatement.java sun/jdbc/odbc/JdbcOdbcPseudoCol.java sun/jdbc/odbc/JdbcOdbcResultSet.java sun/jdbc/odbc/JdbcOdbcResultSetInterface.java sun/jdbc/odbc/JdbcOdbcResultSetMetaData.java sun/jdbc/odbc/JdbcOdbcSQLWarning.java sun/jdbc/odbc/JdbcOdbcStatement.java sun/jdbc/odbc/JdbcOdbcTracer.java sun/jdbc/odbc/JdbcOdbcTypeInfo.java sun/jdbc/odbc/JdbcOdbcTypes.java sun/jdbc/odbc/JdbcOdbcUtils.java sun/jdbc/odbc/odbcinst.h sun/jdbc/odbc/odbcver.h sun/jdbc/odbc/sql.h sun/jdbc/odbc/sqlext.h sun/jdbc/odbc/sqltypes.h sun/jdbc/odbc/sqlucode.h sun/jdbc/odbc/sqlunx.h sun/jdbc/odbc/wodbcinst.h sun/jdbc/odbc/wodbcver.h sun/jdbc/odbc/wsql.h sun/jdbc/odbc/wsqlext.h sun/jdbc/odbc/wsqltypes.h sun/jdbc/odbc/wsqlucode.h sun/jvmstat sun/jvmstat/monitor sun/jvmstat/monitor/SCCS sun/jvmstat/monitor/SCCS/s.AbstractMonitor.java sun/jvmstat/monitor/SCCS/s.ByteArrayMonitor.java sun/jvmstat/monitor/SCCS/s.HostIdentifier.java sun/jvmstat/monitor/SCCS/s.IntegerMonitor.java sun/jvmstat/monitor/SCCS/s.LongMonitor.java sun/jvmstat/monitor/SCCS/s.Monitor.java sun/jvmstat/monitor/SCCS/s.MonitorException.java sun/jvmstat/monitor/SCCS/s.MonitoredHost.java sun/jvmstat/monitor/SCCS/s.MonitoredVm.java sun/jvmstat/monitor/SCCS/s.MonitoredVmUtil.java sun/jvmstat/monitor/SCCS/s.StringMonitor.java sun/jvmstat/monitor/SCCS/s.VmIdentifier.java sun/jvmstat/monitor/SCCS/s.package.html sun/jvmstat/monitor/event sun/jvmstat/monitor/event/SCCS sun/jvmstat/monitor/event/SCCS/s.HostEvent.java sun/jvmstat/monitor/event/SCCS/s.HostListener.java sun/jvmstat/monitor/event/SCCS/s.VmEvent.java sun/jvmstat/monitor/event/SCCS/s.package.html sun/jvmstat/monitor/event/SCCS/s.MonitorStatusChangeEvent.java sun/jvmstat/monitor/event/SCCS/s.VmListener.java sun/jvmstat/monitor/event/SCCS/s.VmStatusChangeEvent.java sun/jvmstat/monitor/event/HostListener.java sun/jvmstat/monitor/event/HostEvent.java sun/jvmstat/monitor/event/MonitorStatusChangeEvent.java sun/jvmstat/monitor/event/VmEvent.java sun/jvmstat/monitor/event/VmListener.java sun/jvmstat/monitor/event/VmStatusChangeEvent.java sun/jvmstat/monitor/event/package.html sun/jvmstat/monitor/remote sun/jvmstat/monitor/remote/SCCS sun/jvmstat/monitor/remote/SCCS/s.BufferedMonitoredVm.java sun/jvmstat/monitor/remote/SCCS/s.RemoteHost.java sun/jvmstat/monitor/remote/SCCS/s.RemoteVm.java sun/jvmstat/monitor/remote/SCCS/s.package.html sun/jvmstat/monitor/remote/BufferedMonitoredVm.java sun/jvmstat/monitor/remote/RemoteHost.java sun/jvmstat/monitor/remote/RemoteVm.java sun/jvmstat/monitor/remote/package.html sun/jvmstat/monitor/AbstractMonitor.java sun/jvmstat/monitor/ByteArrayMonitor.java sun/jvmstat/monitor/HostIdentifier.java sun/jvmstat/monitor/IntegerMonitor.java sun/jvmstat/monitor/LongMonitor.java sun/jvmstat/monitor/Monitor.java sun/jvmstat/monitor/MonitorException.java sun/jvmstat/monitor/MonitoredHost.java sun/jvmstat/monitor/MonitoredVm.java sun/jvmstat/monitor/MonitoredVmUtil.java sun/jvmstat/monitor/StringMonitor.java sun/jvmstat/monitor/VmIdentifier.java sun/jvmstat/monitor/package.html sun/jvmstat/perfdata sun/jvmstat/perfdata/monitor sun/jvmstat/perfdata/monitor/SCCS sun/jvmstat/perfdata/monitor/SCCS/s.AbstractPerfDataBuffer.java sun/jvmstat/perfdata/monitor/SCCS/s.AbstractMonitoredVm.java sun/jvmstat/perfdata/monitor/SCCS/s.package.html sun/jvmstat/perfdata/monitor/SCCS/s.AbstractPerfDataBufferPrologue.java sun/jvmstat/perfdata/monitor/SCCS/s.AliasFileParser.java sun/jvmstat/perfdata/monitor/SCCS/s.CountedTimerTask.java sun/jvmstat/perfdata/monitor/SCCS/s.CountedTimerTaskUtils.java sun/jvmstat/perfdata/monitor/SCCS/s.MonitorDataException.java sun/jvmstat/perfdata/monitor/SCCS/s.MonitorStatus.java sun/jvmstat/perfdata/monitor/SCCS/s.MonitorStructureException.java sun/jvmstat/perfdata/monitor/SCCS/s.MonitorTypeException.java sun/jvmstat/perfdata/monitor/SCCS/s.MonitorVersionException.java sun/jvmstat/perfdata/monitor/SCCS/s.PerfByteArrayMonitor.java sun/jvmstat/perfdata/monitor/SCCS/s.PerfDataBufferImpl.java sun/jvmstat/perfdata/monitor/SCCS/s.PerfIntegerMonitor.java sun/jvmstat/perfdata/monitor/SCCS/s.PerfLongMonitor.java sun/jvmstat/perfdata/monitor/SCCS/s.PerfStringConstantMonitor.java sun/jvmstat/perfdata/monitor/SCCS/s.PerfStringMonitor.java sun/jvmstat/perfdata/monitor/SCCS/s.PerfStringVariableMonitor.java sun/jvmstat/perfdata/monitor/SCCS/s.SyntaxException.java sun/jvmstat/perfdata/monitor/protocol sun/jvmstat/perfdata/monitor/protocol/file sun/jvmstat/perfdata/monitor/protocol/file/SCCS sun/jvmstat/perfdata/monitor/protocol/file/SCCS/s.MonitoredHostProvider.java sun/jvmstat/perfdata/monitor/protocol/file/SCCS/s.FileMonitoredVm.java sun/jvmstat/perfdata/monitor/protocol/file/SCCS/s.PerfDataBuffer.java sun/jvmstat/perfdata/monitor/protocol/file/SCCS/s.package.html sun/jvmstat/perfdata/monitor/protocol/file/MonitoredHostProvider.java sun/jvmstat/perfdata/monitor/protocol/file/FileMonitoredVm.java sun/jvmstat/perfdata/monitor/protocol/file/PerfDataBuffer.java sun/jvmstat/perfdata/monitor/protocol/file/package.html sun/jvmstat/perfdata/monitor/protocol/local sun/jvmstat/perfdata/monitor/protocol/local/SCCS sun/jvmstat/perfdata/monitor/protocol/local/SCCS/s.MonitoredHostProvider.java sun/jvmstat/perfdata/monitor/protocol/local/SCCS/s.LocalEventTimer.java sun/jvmstat/perfdata/monitor/protocol/local/SCCS/s.LocalMonitoredVm.java sun/jvmstat/perfdata/monitor/protocol/local/SCCS/s.LocalVmManager.java sun/jvmstat/perfdata/monitor/protocol/local/SCCS/s.PerfDataBuffer.java sun/jvmstat/perfdata/monitor/protocol/local/SCCS/s.PerfDataFile.java sun/jvmstat/perfdata/monitor/protocol/local/SCCS/s.package.html sun/jvmstat/perfdata/monitor/protocol/local/MonitoredHostProvider.java sun/jvmstat/perfdata/monitor/protocol/local/LocalEventTimer.java sun/jvmstat/perfdata/monitor/protocol/local/LocalMonitoredVm.java sun/jvmstat/perfdata/monitor/protocol/local/LocalVmManager.java sun/jvmstat/perfdata/monitor/protocol/local/PerfDataBuffer.java sun/jvmstat/perfdata/monitor/protocol/local/PerfDataFile.java sun/jvmstat/perfdata/monitor/protocol/local/package.html sun/jvmstat/perfdata/monitor/protocol/rmi sun/jvmstat/perfdata/monitor/protocol/rmi/SCCS sun/jvmstat/perfdata/monitor/protocol/rmi/SCCS/s.MonitoredHostProvider.java sun/jvmstat/perfdata/monitor/protocol/rmi/SCCS/s.PerfDataBuffer.java sun/jvmstat/perfdata/monitor/protocol/rmi/SCCS/s.RemoteMonitoredVm.java sun/jvmstat/perfdata/monitor/protocol/rmi/SCCS/s.RemoteVmManager.java sun/jvmstat/perfdata/monitor/protocol/rmi/SCCS/s.package.html sun/jvmstat/perfdata/monitor/protocol/rmi/MonitoredHostProvider.java sun/jvmstat/perfdata/monitor/protocol/rmi/PerfDataBuffer.java sun/jvmstat/perfdata/monitor/protocol/rmi/RemoteMonitoredVm.java sun/jvmstat/perfdata/monitor/protocol/rmi/RemoteVmManager.java sun/jvmstat/perfdata/monitor/protocol/rmi/package.html sun/jvmstat/perfdata/monitor/v1_0 sun/jvmstat/perfdata/monitor/v1_0/SCCS sun/jvmstat/perfdata/monitor/v1_0/SCCS/s.PerfDataBuffer.java sun/jvmstat/perfdata/monitor/v1_0/SCCS/s.BasicType.java sun/jvmstat/perfdata/monitor/v1_0/SCCS/s.PerfDataBufferPrologue.java sun/jvmstat/perfdata/monitor/v1_0/PerfDataBuffer.java sun/jvmstat/perfdata/monitor/v1_0/BasicType.java sun/jvmstat/perfdata/monitor/v1_0/PerfDataBufferPrologue.java sun/jvmstat/perfdata/monitor/v2_0 sun/jvmstat/perfdata/monitor/v2_0/SCCS sun/jvmstat/perfdata/monitor/v2_0/SCCS/s.PerfDataBufferPrologue.java sun/jvmstat/perfdata/monitor/v2_0/SCCS/s.PerfDataBuffer.java sun/jvmstat/perfdata/monitor/v2_0/SCCS/s.TypeCode.java sun/jvmstat/perfdata/monitor/v2_0/PerfDataBufferPrologue.java sun/jvmstat/perfdata/monitor/v2_0/PerfDataBuffer.java sun/jvmstat/perfdata/monitor/v2_0/TypeCode.java sun/jvmstat/perfdata/monitor/AbstractPerfDataBufferPrologue.java sun/jvmstat/perfdata/monitor/AbstractMonitoredVm.java sun/jvmstat/perfdata/monitor/AbstractPerfDataBuffer.java sun/jvmstat/perfdata/monitor/CountedTimerTaskUtils.java sun/jvmstat/perfdata/monitor/AliasFileParser.java sun/jvmstat/perfdata/monitor/CountedTimerTask.java sun/jvmstat/perfdata/monitor/MonitorDataException.java sun/jvmstat/perfdata/monitor/MonitorStatus.java sun/jvmstat/perfdata/monitor/MonitorStructureException.java sun/jvmstat/perfdata/monitor/MonitorTypeException.java sun/jvmstat/perfdata/monitor/MonitorVersionException.java sun/jvmstat/perfdata/monitor/package.html sun/jvmstat/perfdata/monitor/PerfByteArrayMonitor.java sun/jvmstat/perfdata/monitor/PerfDataBufferImpl.java sun/jvmstat/perfdata/monitor/PerfIntegerMonitor.java sun/jvmstat/perfdata/monitor/PerfLongMonitor.java sun/jvmstat/perfdata/monitor/PerfStringConstantMonitor.java sun/jvmstat/perfdata/monitor/PerfStringMonitor.java sun/jvmstat/perfdata/monitor/PerfStringVariableMonitor.java sun/jvmstat/perfdata/monitor/SyntaxException.java sun/jvmstat/perfdata/resources sun/jvmstat/perfdata/resources/SCCS sun/jvmstat/perfdata/resources/SCCS/s.aliasmap sun/jvmstat/perfdata/resources/aliasmap sun/management sun/management/SCCS sun/management/SCCS/s.BooleanFlag.java sun/management/SCCS/s.Agent.java sun/management/SCCS/s.Flag.java sun/management/SCCS/s.AgentConfigurationError.java sun/management/SCCS/s.ClassLoadingImpl.java sun/management/SCCS/s.CompilationImpl.java sun/management/SCCS/s.CompilerThreadStat.java sun/management/SCCS/s.ConnectorAddressLink.java sun/management/SCCS/s.FileSystem.java sun/management/SCCS/s.GarbageCollectorImpl.java sun/management/SCCS/s.GcInfoBuilder.java sun/management/SCCS/s.GcInfoCompositeData.java sun/management/SCCS/s.HotspotClassLoading.java sun/management/SCCS/s.HotspotInternalMBean.java sun/management/SCCS/s.HotspotInternal.java sun/management/SCCS/s.HotspotClassLoadingMBean.java sun/management/SCCS/s.HotspotCompilation.java sun/management/SCCS/s.HotspotCompilationMBean.java sun/management/SCCS/s.HotspotMemoryMBean.java sun/management/SCCS/s.HotspotMemory.java sun/management/SCCS/s.HotspotRuntime.java sun/management/SCCS/s.HotspotRuntimeMBean.java sun/management/SCCS/s.HotspotThread.java sun/management/SCCS/s.HotspotThreadMBean.java sun/management/SCCS/s.LazyCompositeData.java sun/management/SCCS/s.LongFlag.java sun/management/SCCS/s.MXBeanSupport.java sun/management/SCCS/s.ManagementFactory.java sun/management/SCCS/s.OperatingSystemImpl.java sun/management/SCCS/s.MethodInfo.java sun/management/SCCS/s.MappedMXBeanType.java sun/management/SCCS/s.MemoryImpl.java sun/management/SCCS/s.MemoryManagerImpl.java sun/management/SCCS/s.MemoryNotifInfoCompositeData.java sun/management/SCCS/s.MemoryPoolImpl.java sun/management/SCCS/s.MemoryUsageCompositeData.java sun/management/SCCS/s.PlatformMXBeanInvocationHandler.java sun/management/SCCS/s.NotificationEmitterSupport.java sun/management/SCCS/s.ThreadInfoCompositeData.java sun/management/SCCS/s.RuntimeImpl.java sun/management/SCCS/s.Sensor.java sun/management/SCCS/s.StringFlag.java sun/management/SCCS/s.ThreadImpl.java sun/management/SCCS/s.Util.java sun/management/SCCS/s.VMManagement.java sun/management/SCCS/s.VMManagementImpl.java sun/management/counter sun/management/counter/SCCS sun/management/counter/SCCS/s.AbstractCounter.java sun/management/counter/SCCS/s.ByteArrayCounter.java sun/management/counter/SCCS/s.Counter.java sun/management/counter/SCCS/s.LongArrayCounter.java sun/management/counter/SCCS/s.LongCounter.java sun/management/counter/SCCS/s.StringCounter.java sun/management/counter/SCCS/s.Units.java sun/management/counter/SCCS/s.Variability.java sun/management/counter/perf sun/management/counter/perf/SCCS sun/management/counter/perf/SCCS/s.ByteArrayCounterSnapshot.java sun/management/counter/perf/SCCS/s.InstrumentationException.java sun/management/counter/perf/SCCS/s.LongArrayCounterSnapshot.java sun/management/counter/perf/SCCS/s.LongCounterSnapshot.java sun/management/counter/perf/SCCS/s.PerfByteArrayCounter.java sun/management/counter/perf/SCCS/s.PerfDataEntry.java sun/management/counter/perf/SCCS/s.PerfDataType.java sun/management/counter/perf/SCCS/s.PerfInstrumentation.java sun/management/counter/perf/SCCS/s.PerfLongArrayCounter.java sun/management/counter/perf/SCCS/s.PerfLongCounter.java sun/management/counter/perf/SCCS/s.PerfStringCounter.java sun/management/counter/perf/SCCS/s.Prologue.java sun/management/counter/perf/SCCS/s.StringCounterSnapshot.java sun/management/counter/perf/ByteArrayCounterSnapshot.java sun/management/counter/perf/InstrumentationException.java sun/management/counter/perf/LongArrayCounterSnapshot.java sun/management/counter/perf/LongCounterSnapshot.java sun/management/counter/perf/PerfByteArrayCounter.java sun/management/counter/perf/PerfDataEntry.java sun/management/counter/perf/PerfDataType.java sun/management/counter/perf/PerfInstrumentation.java sun/management/counter/perf/PerfLongArrayCounter.java sun/management/counter/perf/PerfLongCounter.java sun/management/counter/perf/PerfStringCounter.java sun/management/counter/perf/Prologue.java sun/management/counter/perf/StringCounterSnapshot.java sun/management/counter/AbstractCounter.java sun/management/counter/ByteArrayCounter.java sun/management/counter/Counter.java sun/management/counter/LongArrayCounter.java sun/management/counter/LongCounter.java sun/management/counter/StringCounter.java sun/management/counter/Units.java sun/management/counter/Variability.java sun/management/jmxremote sun/management/jmxremote/SCCS sun/management/jmxremote/SCCS/s.ConnectorBootstrap.java sun/management/jmxremote/SCCS/s.SingleEntryRegistry.java sun/management/jmxremote/SCCS/s.package.html sun/management/jmxremote/SingleEntryRegistry.java sun/management/jmxremote/ConnectorBootstrap.java sun/management/jmxremote/package.html sun/management/resources sun/management/resources/SCCS sun/management/resources/SCCS/s.agent_de.properties sun/management/resources/SCCS/s.agent.properties sun/management/resources/SCCS/s.agent_es.properties sun/management/resources/SCCS/s.agent_fr.properties sun/management/resources/SCCS/s.agent_it.properties sun/management/resources/SCCS/s.agent_ja.properties sun/management/resources/SCCS/s.agent_ko.properties sun/management/resources/SCCS/s.agent_sv.properties sun/management/resources/SCCS/s.agent_zh_CN.properties sun/management/resources/SCCS/s.agent_zh_TW.properties sun/management/resources/agent_zh_CN.properties sun/management/resources/agent.properties sun/management/resources/agent_de.properties sun/management/resources/agent_es.properties sun/management/resources/agent_fr.properties sun/management/resources/agent_it.properties sun/management/resources/agent_ja.properties sun/management/resources/agent_ko.properties sun/management/resources/agent_sv.properties sun/management/resources/agent_zh_TW.properties sun/management/snmp sun/management/snmp/SCCS sun/management/snmp/SCCS/s.JVM-MANAGEMENT-MIB.mib sun/management/snmp/SCCS/s.AdaptorBootstrap.java sun/management/snmp/SCCS/s.README sun/management/snmp/SCCS/s.mib_core.txt sun/management/snmp/SCCS/s.package.html sun/management/snmp/SCCS/s.mibgen.properties.tiger sun/management/snmp/SCCS/s.rfc2287.txt sun/management/snmp/SCCS/s.rfc2564.txt sun/management/snmp/jvminstr sun/management/snmp/jvminstr/SCCS sun/management/snmp/jvminstr/SCCS/s.JvmMemManagerTableMetaImpl.java sun/management/snmp/jvminstr/SCCS/s.JVM_MANAGEMENT_MIB_IMPL.java sun/management/snmp/jvminstr/SCCS/s.JvmClassLoadingImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmCompilationImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmMemGCEntryImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmMemGCTableMetaImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmMemManagerEntryImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmRTBootClassPathEntryImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmMemMgrPoolRelEntryImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmMemMgrPoolRelTableMetaImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmMemPoolEntryImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmMemPoolTableMetaImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmMemoryImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmMemoryMetaImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmOSImpl.java sun/management/snmp/jvminstr/SCCS/s.README sun/management/snmp/jvminstr/SCCS/s.JvmRTBootClassPathTableMetaImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmRTClassPathEntryImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmRTClassPathTableMetaImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmRTInputArgsEntryImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmRTInputArgsTableMetaImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmRTLibraryPathEntryImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmRTLibraryPathTableMetaImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmRuntimeImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmRuntimeMetaImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmThreadInstanceEntryImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmThreadInstanceTableMetaImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmThreadingImpl.java sun/management/snmp/jvminstr/SCCS/s.JvmThreadingMetaImpl.java sun/management/snmp/jvminstr/SCCS/s.NotificationTarget.java sun/management/snmp/jvminstr/SCCS/s.NotificationTargetImpl.java sun/management/snmp/jvminstr/SCCS/s.package.html sun/management/snmp/jvminstr/JvmMemMgrPoolRelTableMetaImpl.java sun/management/snmp/jvminstr/JVM_MANAGEMENT_MIB_IMPL.java sun/management/snmp/jvminstr/JvmClassLoadingImpl.java sun/management/snmp/jvminstr/JvmCompilationImpl.java sun/management/snmp/jvminstr/JvmMemGCEntryImpl.java sun/management/snmp/jvminstr/JvmMemGCTableMetaImpl.java sun/management/snmp/jvminstr/JvmMemManagerEntryImpl.java sun/management/snmp/jvminstr/JvmMemManagerTableMetaImpl.java sun/management/snmp/jvminstr/JvmMemMgrPoolRelEntryImpl.java sun/management/snmp/jvminstr/JvmMemPoolEntryImpl.java sun/management/snmp/jvminstr/JvmMemPoolTableMetaImpl.java sun/management/snmp/jvminstr/README sun/management/snmp/jvminstr/JvmMemoryImpl.java sun/management/snmp/jvminstr/JvmMemoryMetaImpl.java sun/management/snmp/jvminstr/JvmOSImpl.java sun/management/snmp/jvminstr/JvmRTBootClassPathEntryImpl.java sun/management/snmp/jvminstr/JvmRTBootClassPathTableMetaImpl.java sun/management/snmp/jvminstr/JvmRTClassPathEntryImpl.java sun/management/snmp/jvminstr/JvmRTClassPathTableMetaImpl.java sun/management/snmp/jvminstr/JvmRTInputArgsEntryImpl.java sun/management/snmp/jvminstr/JvmRTInputArgsTableMetaImpl.java sun/management/snmp/jvminstr/JvmRTLibraryPathEntryImpl.java sun/management/snmp/jvminstr/JvmRTLibraryPathTableMetaImpl.java sun/management/snmp/jvminstr/JvmRuntimeImpl.java sun/management/snmp/jvminstr/JvmRuntimeMetaImpl.java sun/management/snmp/jvminstr/package.html sun/management/snmp/jvminstr/JvmThreadInstanceEntryImpl.java sun/management/snmp/jvminstr/JvmThreadInstanceTableMetaImpl.java sun/management/snmp/jvminstr/JvmThreadingImpl.java sun/management/snmp/jvminstr/JvmThreadingMetaImpl.java sun/management/snmp/jvminstr/NotificationTarget.java sun/management/snmp/jvminstr/NotificationTargetImpl.java sun/management/snmp/jvmmib sun/management/snmp/jvmmib/SCCS sun/management/snmp/jvmmib/SCCS/s.EnumJvmJITCompilerTimeMonitoring.java sun/management/snmp/jvmmib/SCCS/s.EnumJvmClassesVerboseLevel.java sun/management/snmp/jvmmib/SCCS/s.EnumJvmMemManagerState.java sun/management/snmp/jvmmib/SCCS/s.EnumJvmMemPoolState.java sun/management/snmp/jvmmib/SCCS/s.EnumJvmMemPoolCollectThreshdSupport.java sun/management/snmp/jvmmib/SCCS/s.EnumJvmMemPoolThreshdSupport.java sun/management/snmp/jvmmib/SCCS/s.EnumJvmMemPoolType.java sun/management/snmp/jvmmib/SCCS/s.EnumJvmMemoryGCCall.java sun/management/snmp/jvmmib/SCCS/s.EnumJvmMemoryGCVerboseLevel.java sun/management/snmp/jvmmib/SCCS/s.EnumJvmRTBootClassPathSupport.java sun/management/snmp/jvmmib/SCCS/s.package.html sun/management/snmp/jvmmib/SCCS/s.JVM_MANAGEMENT_MIB.java sun/management/snmp/jvmmib/SCCS/s.EnumJvmThreadContentionMonitoring.java sun/management/snmp/jvmmib/SCCS/s.EnumJvmThreadCpuTimeMonitoring.java sun/management/snmp/jvmmib/SCCS/s.JVM_MANAGEMENT_MIBOidTable.java sun/management/snmp/jvmmib/SCCS/s.JvmClassLoadingMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmClassLoadingMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmCompilationMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmCompilationMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmMemGCEntryMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmMemGCEntryMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmMemGCTableMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmMemManagerEntryMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmMemManagerEntryMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmMemPoolEntryMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmMemManagerTableMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmMemMgrPoolRelEntryMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmMemMgrPoolRelEntryMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmMemMgrPoolRelTableMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmMemPoolEntryMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmMemPoolTableMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmMemoryMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmMemoryMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmOSMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmOSMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmRTBootClassPathEntryMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmRTBootClassPathEntryMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmRTBootClassPathTableMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmRTClassPathEntryMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmRTClassPathEntryMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmRTClassPathTableMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmRTInputArgsEntryMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmRTInputArgsEntryMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmRTInputArgsTableMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmRTLibraryPathEntryMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmRTLibraryPathEntryMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmRTLibraryPathTableMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmRuntimeMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmRuntimeMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmThreadingMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmThreadInstanceEntryMBean.java sun/management/snmp/jvmmib/SCCS/s.JvmThreadInstanceEntryMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmThreadInstanceTableMeta.java sun/management/snmp/jvmmib/SCCS/s.JvmThreadingMBean.java sun/management/snmp/jvmmib/EnumJvmJITCompilerTimeMonitoring.java sun/management/snmp/jvmmib/EnumJvmClassesVerboseLevel.java sun/management/snmp/jvmmib/EnumJvmMemManagerState.java sun/management/snmp/jvmmib/EnumJvmMemPoolState.java sun/management/snmp/jvmmib/EnumJvmMemPoolCollectThreshdSupport.java sun/management/snmp/jvmmib/EnumJvmMemPoolThreshdSupport.java sun/management/snmp/jvmmib/EnumJvmMemPoolType.java sun/management/snmp/jvmmib/EnumJvmMemoryGCCall.java sun/management/snmp/jvmmib/EnumJvmMemoryGCVerboseLevel.java sun/management/snmp/jvmmib/EnumJvmRTBootClassPathSupport.java sun/management/snmp/jvmmib/JvmRuntimeMBean.java sun/management/snmp/jvmmib/JvmOSMBean.java sun/management/snmp/jvmmib/EnumJvmThreadContentionMonitoring.java sun/management/snmp/jvmmib/EnumJvmThreadCpuTimeMonitoring.java sun/management/snmp/jvmmib/JVM_MANAGEMENT_MIB.java sun/management/snmp/jvmmib/JVM_MANAGEMENT_MIBOidTable.java sun/management/snmp/jvmmib/JvmClassLoadingMBean.java sun/management/snmp/jvmmib/JvmClassLoadingMeta.java sun/management/snmp/jvmmib/JvmCompilationMBean.java sun/management/snmp/jvmmib/JvmCompilationMeta.java sun/management/snmp/jvmmib/JvmMemGCEntryMBean.java sun/management/snmp/jvmmib/JvmMemGCEntryMeta.java sun/management/snmp/jvmmib/JvmMemGCTableMeta.java sun/management/snmp/jvmmib/JvmMemManagerEntryMBean.java sun/management/snmp/jvmmib/JvmMemManagerEntryMeta.java sun/management/snmp/jvmmib/JvmMemManagerTableMeta.java sun/management/snmp/jvmmib/JvmMemMgrPoolRelEntryMBean.java sun/management/snmp/jvmmib/JvmMemMgrPoolRelEntryMeta.java sun/management/snmp/jvmmib/JvmMemMgrPoolRelTableMeta.java sun/management/snmp/jvmmib/JvmMemPoolEntryMBean.java sun/management/snmp/jvmmib/JvmMemPoolEntryMeta.java sun/management/snmp/jvmmib/JvmMemPoolTableMeta.java sun/management/snmp/jvmmib/JvmMemoryMBean.java sun/management/snmp/jvmmib/JvmMemoryMeta.java sun/management/snmp/jvmmib/JvmOSMeta.java sun/management/snmp/jvmmib/JvmRTBootClassPathEntryMBean.java sun/management/snmp/jvmmib/JvmRTBootClassPathEntryMeta.java sun/management/snmp/jvmmib/JvmRTBootClassPathTableMeta.java sun/management/snmp/jvmmib/JvmThreadingMBean.java sun/management/snmp/jvmmib/JvmRTClassPathEntryMBean.java sun/management/snmp/jvmmib/JvmRTClassPathEntryMeta.java sun/management/snmp/jvmmib/JvmRTClassPathTableMeta.java sun/management/snmp/jvmmib/JvmRTInputArgsEntryMBean.java sun/management/snmp/jvmmib/JvmRTInputArgsEntryMeta.java sun/management/snmp/jvmmib/JvmRTInputArgsTableMeta.java sun/management/snmp/jvmmib/JvmRTLibraryPathEntryMBean.java sun/management/snmp/jvmmib/JvmRTLibraryPathEntryMeta.java sun/management/snmp/jvmmib/JvmRTLibraryPathTableMeta.java sun/management/snmp/jvmmib/JvmRuntimeMeta.java sun/management/snmp/jvmmib/JvmThreadInstanceEntryMBean.java sun/management/snmp/jvmmib/JvmThreadInstanceEntryMeta.java sun/management/snmp/jvmmib/JvmThreadInstanceTableMeta.java sun/management/snmp/jvmmib/JvmThreadingMeta.java sun/management/snmp/jvmmib/package.html sun/management/snmp/util sun/management/snmp/util/SCCS sun/management/snmp/util/SCCS/s.SnmpNamedListTableCache.java sun/management/snmp/util/SCCS/s.JvmContextFactory.java sun/management/snmp/util/SCCS/s.MibLogger.java sun/management/snmp/util/SCCS/s.SnmpCachedData.java sun/management/snmp/util/SCCS/s.SnmpListTableCache.java sun/management/snmp/util/SCCS/s.SnmpLoadedClassData.java sun/management/snmp/util/SCCS/s.SnmpTableCache.java sun/management/snmp/util/SCCS/s.SnmpTableHandler.java sun/management/snmp/util/SCCS/s.package.html sun/management/snmp/util/SnmpLoadedClassData.java sun/management/snmp/util/JvmContextFactory.java sun/management/snmp/util/MibLogger.java sun/management/snmp/util/SnmpCachedData.java sun/management/snmp/util/SnmpListTableCache.java sun/management/snmp/util/SnmpNamedListTableCache.java sun/management/snmp/util/SnmpTableCache.java sun/management/snmp/util/SnmpTableHandler.java sun/management/snmp/util/package.html sun/management/snmp/mib_core.txt sun/management/snmp/README sun/management/snmp/AdaptorBootstrap.java sun/management/snmp/JVM-MANAGEMENT-MIB.mib sun/management/snmp/mibgen.properties.tiger sun/management/snmp/package.html sun/management/snmp/rfc2287.txt sun/management/snmp/rfc2564.txt sun/management/BooleanFlag.java sun/management/Agent.java sun/management/GcInfoBuilder.java sun/management/Flag.java sun/management/AgentConfigurationError.java sun/management/ClassLoadingImpl.java sun/management/CompilationImpl.java sun/management/CompilerThreadStat.java sun/management/ConnectorAddressLink.java sun/management/FileSystem.java sun/management/GarbageCollectorImpl.java sun/management/HotspotCompilationMBean.java sun/management/HotspotCompilation.java sun/management/GcInfoCompositeData.java sun/management/HotspotClassLoading.java sun/management/HotspotClassLoadingMBean.java sun/management/HotspotInternalMBean.java sun/management/HotspotInternal.java sun/management/HotspotRuntimeMBean.java sun/management/HotspotMemory.java sun/management/HotspotMemoryMBean.java sun/management/HotspotRuntime.java sun/management/MemoryUsageCompositeData.java sun/management/HotspotThread.java sun/management/HotspotThreadMBean.java sun/management/LazyCompositeData.java sun/management/LongFlag.java sun/management/MXBeanSupport.java sun/management/MemoryImpl.java sun/management/ManagementFactory.java sun/management/MappedMXBeanType.java sun/management/MemoryManagerImpl.java sun/management/MemoryPoolImpl.java sun/management/MethodInfo.java sun/management/MemoryNotifInfoCompositeData.java sun/management/PlatformMXBeanInvocationHandler.java sun/management/NotificationEmitterSupport.java sun/management/OperatingSystemImpl.java sun/management/RuntimeImpl.java sun/management/Sensor.java sun/management/StringFlag.java sun/management/ThreadImpl.java sun/management/Util.java sun/management/ThreadInfoCompositeData.java sun/management/VMManagement.java sun/management/VMManagementImpl.java sun/misc sun/misc/SCCS sun/misc/SCCS/s.CharacterDecoder.java sun/misc/SCCS/s.CRC16.java sun/misc/SCCS/s.ASCIICaseInsensitiveComparator.java sun/misc/SCCS/s.AtomicLong.java sun/misc/SCCS/s.AtomicLongCSImpl.java sun/misc/SCCS/s.AtomicLongLockImpl.java sun/misc/SCCS/s.BASE64Decoder.java sun/misc/SCCS/s.BASE64Encoder.java sun/misc/SCCS/s.CEFormatException.java sun/misc/SCCS/s.CEStreamExhausted.java sun/misc/SCCS/s.Cache.java sun/misc/SCCS/s.ClassFileTransformer.java sun/misc/SCCS/s.CharacterEncoder.java sun/misc/SCCS/s.ConditionLock.java sun/misc/SCCS/s.Cleaner.java sun/misc/SCCS/s.Compare.java sun/misc/SCCS/s.CompoundEnumeration.java sun/misc/SCCS/s.DoubleConsts.java sun/misc/SCCS/s.ExtensionDependency.java sun/misc/SCCS/s.ExtensionInfo.java sun/misc/SCCS/s.FloatConsts.java sun/misc/SCCS/s.FpUtils.java sun/misc/SCCS/s.Lock.java sun/misc/SCCS/s.ExtensionInstallationException.java sun/misc/SCCS/s.ExtensionInstallationProvider.java sun/misc/SCCS/s.FloatingDecimal.java sun/misc/SCCS/s.FormattedFloatingDecimal.java sun/misc/SCCS/s.GC.java sun/misc/SCCS/s.HexDumpEncoder.java sun/misc/SCCS/s.JarFilter.java sun/misc/SCCS/s.NativeSignalHandler.java sun/misc/SCCS/s.InvalidJarIndexException.java sun/misc/SCCS/s.JarIndex.java sun/misc/SCCS/s.JavaLangAccess.java sun/misc/SCCS/s.JavaUtilJarAccess.java sun/misc/SCCS/s.LRUCache.java sun/misc/SCCS/s.Launcher.java sun/misc/SCCS/s.MessageUtils.java sun/misc/SCCS/s.Queue.java sun/misc/SCCS/s.Perf.java sun/misc/SCCS/s.PerformanceLogger.java sun/misc/SCCS/s.ProxyGenerator.java sun/misc/SCCS/s.REException.java sun/misc/SCCS/s.Ref.java sun/misc/SCCS/s.Regexp.java sun/misc/SCCS/s.RegexpPool.java sun/misc/SCCS/s.RegexpTarget.java sun/misc/SCCS/s.Request.java sun/misc/SCCS/s.RequestProcessor.java sun/misc/SCCS/s.Resource.java sun/misc/SCCS/s.SelfTest.java sun/misc/SCCS/s.Service.java sun/misc/SCCS/s.SharedSecrets.java sun/misc/SCCS/s.Sort.java sun/misc/SCCS/s.ServiceConfigurationError.java sun/misc/SCCS/s.Signal.java sun/misc/SCCS/s.SignalHandler.java sun/misc/SCCS/s.SoftCache.java sun/misc/SCCS/s.Timeable.java sun/misc/SCCS/s.Timer.java sun/misc/SCCS/s.UCDecoder.java sun/misc/SCCS/s.UCEncoder.java sun/misc/SCCS/s.URLClassPath.java sun/misc/SCCS/s.UUDecoder.java sun/misc/SCCS/s.UUEncoder.java sun/misc/SCCS/s.Unsafe.java sun/misc/SCCS/s.VM.java sun/misc/SCCS/s.VMNotification.java sun/misc/SCCS/s.Version-template.java sun/misc/resources sun/misc/resources/SCCS sun/misc/resources/SCCS/s.Messages_de.java sun/misc/resources/SCCS/s.Messages.java sun/misc/resources/SCCS/s.Messages_es.java sun/misc/resources/SCCS/s.Messages_fr.java sun/misc/resources/SCCS/s.Messages_it.java sun/misc/resources/SCCS/s.Messages_ja.java sun/misc/resources/SCCS/s.Messages_ko.java sun/misc/resources/SCCS/s.Messages_sv.java sun/misc/resources/SCCS/s.Messages_zh_CN.java sun/misc/resources/SCCS/s.Messages_zh_TW.java sun/misc/resources/Messages_de.java sun/misc/resources/Messages.java sun/misc/resources/Messages_es.java sun/misc/resources/Messages_fr.java sun/misc/resources/Messages_it.java sun/misc/resources/Messages_ja.java sun/misc/resources/Messages_ko.java sun/misc/resources/Messages_sv.java sun/misc/resources/Messages_zh_CN.java sun/misc/resources/Messages_zh_TW.java sun/misc/CRC16.java sun/misc/ASCIICaseInsensitiveComparator.java sun/misc/AtomicLong.java sun/misc/AtomicLongCSImpl.java sun/misc/AtomicLongLockImpl.java sun/misc/BASE64Decoder.java sun/misc/BASE64Encoder.java sun/misc/CEFormatException.java sun/misc/CEStreamExhausted.java sun/misc/Cache.java sun/misc/CharacterDecoder.java sun/misc/CharacterEncoder.java sun/misc/ClassFileTransformer.java sun/misc/Cleaner.java sun/misc/ExtensionDependency.java sun/misc/Compare.java sun/misc/ConditionLock.java sun/misc/CompoundEnumeration.java sun/misc/DoubleConsts.java sun/misc/GC.java sun/misc/ExtensionInfo.java sun/misc/ExtensionInstallationException.java sun/misc/ExtensionInstallationProvider.java sun/misc/FloatConsts.java sun/misc/FloatingDecimal.java sun/misc/FormattedFloatingDecimal.java sun/misc/FpUtils.java sun/misc/HexDumpEncoder.java sun/misc/MessageUtils.java sun/misc/Lock.java sun/misc/InvalidJarIndexException.java sun/misc/JarFilter.java sun/misc/JarIndex.java sun/misc/JavaLangAccess.java sun/misc/JavaUtilJarAccess.java sun/misc/LRUCache.java sun/misc/Launcher.java sun/misc/ServiceConfigurationError.java sun/misc/NativeSignalHandler.java sun/misc/Perf.java sun/misc/PerformanceLogger.java sun/misc/ProxyGenerator.java sun/misc/Queue.java sun/misc/REException.java sun/misc/Ref.java sun/misc/Regexp.java sun/misc/RegexpPool.java sun/misc/RegexpTarget.java sun/misc/Request.java sun/misc/RequestProcessor.java sun/misc/Resource.java sun/misc/SelfTest.java sun/misc/Service.java sun/misc/Version-template.java sun/misc/SharedSecrets.java sun/misc/Signal.java sun/misc/SignalHandler.java sun/misc/SoftCache.java sun/misc/Sort.java sun/misc/Timeable.java sun/misc/Timer.java sun/misc/UCDecoder.java sun/misc/UCEncoder.java sun/misc/URLClassPath.java sun/misc/UUDecoder.java sun/misc/UUEncoder.java sun/misc/Unsafe.java sun/misc/VM.java sun/misc/VMNotification.java sun/net sun/net/SCCS sun/net/SCCS/s.ConnectionResetException.java sun/net/SCCS/s.InetAddressCachePolicy.java sun/net/SCCS/s.NetProperties.java sun/net/SCCS/s.NetworkClient.java sun/net/SCCS/s.NetworkServer.java sun/net/SCCS/s.ProgressEvent.java sun/net/SCCS/s.ProgressListener.java sun/net/SCCS/s.ProgressMeteringPolicy.java sun/net/SCCS/s.ProgressMonitor.java sun/net/SCCS/s.ProgressSource.java sun/net/SCCS/s.TelnetInputStream.java sun/net/SCCS/s.TelnetOutputStream.java sun/net/SCCS/s.TelnetProtocolException.java sun/net/SCCS/s.URLCanonicalizer.java sun/net/SCCS/s.TransferProtocolClient.java sun/net/dns sun/net/dns/SCCS sun/net/dns/SCCS/s.ResolverConfiguration.java sun/net/dns/ResolverConfiguration.java sun/net/ftp sun/net/ftp/SCCS sun/net/ftp/SCCS/s.FtpLoginException.java sun/net/ftp/SCCS/s.FtpClient.java sun/net/ftp/SCCS/s.FtpProtocolException.java sun/net/ftp/FtpLoginException.java sun/net/ftp/FtpClient.java sun/net/ftp/FtpProtocolException.java sun/net/smtp sun/net/smtp/SCCS sun/net/smtp/SCCS/s.SmtpClient.java sun/net/smtp/SCCS/s.SmtpProtocolException.java sun/net/smtp/SmtpClient.java sun/net/smtp/SmtpProtocolException.java sun/net/spi sun/net/spi/SCCS sun/net/spi/SCCS/s.DefaultProxySelector.java sun/net/spi/nameservice sun/net/spi/nameservice/SCCS sun/net/spi/nameservice/SCCS/s.NameService.java sun/net/spi/nameservice/SCCS/s.NameServiceDescriptor.java sun/net/spi/nameservice/dns sun/net/spi/nameservice/dns/META-INF sun/net/spi/nameservice/dns/META-INF/services sun/net/spi/nameservice/dns/META-INF/services/SCCS sun/net/spi/nameservice/dns/META-INF/services/SCCS/s.sun.net.spi.nameservice.NameServiceDescriptor sun/net/spi/nameservice/dns/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor sun/net/spi/nameservice/dns/SCCS sun/net/spi/nameservice/dns/SCCS/s.DNSNameServiceDescriptor.java sun/net/spi/nameservice/dns/SCCS/s.DNSNameService.java sun/net/spi/nameservice/dns/DNSNameService.java sun/net/spi/nameservice/dns/DNSNameServiceDescriptor.java sun/net/spi/nameservice/NameServiceDescriptor.java sun/net/spi/nameservice/NameService.java sun/net/spi/DefaultProxySelector.java sun/net/util sun/net/util/SCCS sun/net/util/SCCS/s.IPAddressUtil.java sun/net/util/IPAddressUtil.java sun/net/www sun/net/www/SCCS sun/net/www/SCCS/s.ApplicationLaunchException.java sun/net/www/SCCS/s.HeaderParser.java sun/net/www/SCCS/s.MessageHeader.java sun/net/www/SCCS/s.MeteredStream.java sun/net/www/SCCS/s.MimeEntry.java sun/net/www/SCCS/s.MimeLauncher.java sun/net/www/SCCS/s.MimeTable.java sun/net/www/SCCS/s.ParseUtil.java sun/net/www/SCCS/s.URLConnection.java sun/net/www/content sun/net/www/content/audio sun/net/www/content/audio/SCCS sun/net/www/content/audio/SCCS/s.basic.java sun/net/www/content/audio/SCCS/s.aiff.java sun/net/www/content/audio/SCCS/s.wav.java sun/net/www/content/audio/SCCS/s.x_aiff.java sun/net/www/content/audio/SCCS/s.x_wav.java sun/net/www/content/audio/aiff.java sun/net/www/content/audio/basic.java sun/net/www/content/audio/wav.java sun/net/www/content/audio/x_aiff.java sun/net/www/content/audio/x_wav.java sun/net/www/content/image sun/net/www/content/image/SCCS sun/net/www/content/image/SCCS/s.x_xbitmap.java sun/net/www/content/image/SCCS/s.gif.java sun/net/www/content/image/SCCS/s.jpeg.java sun/net/www/content/image/SCCS/s.png.java sun/net/www/content/image/SCCS/s.x_xpixmap.java sun/net/www/content/image/x_xbitmap.java sun/net/www/content/image/gif.java sun/net/www/content/image/jpeg.java sun/net/www/content/image/png.java sun/net/www/content/image/x_xpixmap.java sun/net/www/content/text sun/net/www/content/text/SCCS sun/net/www/content/text/SCCS/s.Generic.java sun/net/www/content/text/SCCS/s.plain.java sun/net/www/content/text/SCCS/s.PlainTextInputStream.java sun/net/www/content/text/Generic.java sun/net/www/content/text/plain.java sun/net/www/content/text/PlainTextInputStream.java sun/net/www/http sun/net/www/http/SCCS sun/net/www/http/SCCS/s.ChunkedInputStream.java sun/net/www/http/SCCS/s.ChunkedOutputStream.java sun/net/www/http/SCCS/s.HttpClient.java sun/net/www/http/SCCS/s.Hurryable.java sun/net/www/http/SCCS/s.KeepAliveCache.java sun/net/www/http/SCCS/s.KeepAliveStream.java sun/net/www/http/SCCS/s.PosterOutputStream.java sun/net/www/http/ChunkedOutputStream.java sun/net/www/http/ChunkedInputStream.java sun/net/www/http/KeepAliveStream.java sun/net/www/http/HttpClient.java sun/net/www/http/Hurryable.java sun/net/www/http/KeepAliveCache.java sun/net/www/http/PosterOutputStream.java sun/net/www/protocol sun/net/www/protocol/doc sun/net/www/protocol/doc/SCCS sun/net/www/protocol/doc/SCCS/s.DocURLConnection.java sun/net/www/protocol/doc/SCCS/s.Handler.java sun/net/www/protocol/doc/DocURLConnection.java sun/net/www/protocol/doc/Handler.java sun/net/www/protocol/file sun/net/www/protocol/file/SCCS sun/net/www/protocol/file/SCCS/s.FileURLConnection.java sun/net/www/protocol/file/FileURLConnection.java sun/net/www/protocol/ftp sun/net/www/protocol/ftp/SCCS sun/net/www/protocol/ftp/SCCS/s.FtpURLConnection.java sun/net/www/protocol/ftp/SCCS/s.Handler.java sun/net/www/protocol/ftp/FtpURLConnection.java sun/net/www/protocol/ftp/Handler.java sun/net/www/protocol/gopher sun/net/www/protocol/gopher/SCCS sun/net/www/protocol/gopher/SCCS/s.GopherClient.java sun/net/www/protocol/gopher/SCCS/s.Handler.java sun/net/www/protocol/gopher/GopherClient.java sun/net/www/protocol/gopher/Handler.java sun/net/www/protocol/http sun/net/www/protocol/http/SCCS sun/net/www/protocol/http/SCCS/s.AuthCacheImpl.java sun/net/www/protocol/http/SCCS/s.AuthCache.java sun/net/www/protocol/http/SCCS/s.AuthCacheValue.java sun/net/www/protocol/http/SCCS/s.AuthenticationHeader.java sun/net/www/protocol/http/SCCS/s.AuthenticationInfo.java sun/net/www/protocol/http/SCCS/s.BasicAuthentication.java sun/net/www/protocol/http/SCCS/s.DigestAuthentication.java sun/net/www/protocol/http/SCCS/s.Handler.java sun/net/www/protocol/http/SCCS/s.HttpAuthenticator.java sun/net/www/protocol/http/SCCS/s.HttpURLConnection.java sun/net/www/protocol/http/SCCS/s.NTLMAuthentication.java sun/net/www/protocol/http/AuthCacheImpl.java sun/net/www/protocol/http/AuthCache.java sun/net/www/protocol/http/AuthenticationHeader.java sun/net/www/protocol/http/AuthCacheValue.java sun/net/www/protocol/http/AuthenticationInfo.java sun/net/www/protocol/http/BasicAuthentication.java sun/net/www/protocol/http/DigestAuthentication.java sun/net/www/protocol/http/Handler.java sun/net/www/protocol/http/HttpAuthenticator.java sun/net/www/protocol/http/HttpURLConnection.java sun/net/www/protocol/http/NTLMAuthentication.java sun/net/www/protocol/jar sun/net/www/protocol/jar/SCCS sun/net/www/protocol/jar/SCCS/s.JarURLConnection.java sun/net/www/protocol/jar/SCCS/s.Handler.java sun/net/www/protocol/jar/SCCS/s.URLJarFileCallBack.java sun/net/www/protocol/jar/SCCS/s.URLJarFile.java sun/net/www/protocol/jar/JarURLConnection.java sun/net/www/protocol/jar/Handler.java sun/net/www/protocol/jar/URLJarFileCallBack.java sun/net/www/protocol/jar/URLJarFile.java sun/net/www/protocol/mailto sun/net/www/protocol/mailto/SCCS sun/net/www/protocol/mailto/SCCS/s.Handler.java sun/net/www/protocol/mailto/SCCS/s.MailToURLConnection.java sun/net/www/protocol/mailto/Handler.java sun/net/www/protocol/mailto/MailToURLConnection.java sun/net/www/protocol/netdoc sun/net/www/protocol/netdoc/SCCS sun/net/www/protocol/netdoc/SCCS/s.Handler.java sun/net/www/protocol/netdoc/Handler.java sun/net/www/protocol/systemresource sun/net/www/protocol/systemresource/SCCS sun/net/www/protocol/systemresource/SCCS/s.Handler.java sun/net/www/protocol/systemresource/SCCS/s.SystemResourceURLConnection.java sun/net/www/protocol/systemresource/Handler.java sun/net/www/protocol/systemresource/SystemResourceURLConnection.java sun/net/www/protocol/verbatim sun/net/www/protocol/verbatim/SCCS sun/net/www/protocol/verbatim/SCCS/s.Handler.java sun/net/www/protocol/verbatim/Handler.java sun/net/www/ApplicationLaunchException.java sun/net/www/HeaderParser.java sun/net/www/MessageHeader.java sun/net/www/MeteredStream.java sun/net/www/MimeEntry.java sun/net/www/MimeLauncher.java sun/net/www/MimeTable.java sun/net/www/ParseUtil.java sun/net/www/URLConnection.java sun/net/TelnetProtocolException.java sun/net/ConnectionResetException.java sun/net/InetAddressCachePolicy.java sun/net/NetProperties.java sun/net/NetworkClient.java sun/net/NetworkServer.java sun/net/ProgressEvent.java sun/net/ProgressListener.java sun/net/ProgressMeteringPolicy.java sun/net/ProgressMonitor.java sun/net/ProgressSource.java sun/net/TelnetInputStream.java sun/net/TelnetOutputStream.java sun/net/TransferProtocolClient.java sun/net/URLCanonicalizer.java sun/nio sun/nio/SCCS sun/nio/SCCS/s.ByteBuffered.java sun/nio/ch sun/nio/ch/SCCS sun/nio/ch/SCCS/s.Net.java sun/nio/ch/SCCS/s.AbstractPollArrayWrapper.java sun/nio/ch/SCCS/s.AbstractPollSelectorImpl.java sun/nio/ch/SCCS/s.AllocatedNativeObject.java sun/nio/ch/SCCS/s.ChannelInputStream.java sun/nio/ch/SCCS/s.DatagramChannelImpl.java sun/nio/ch/SCCS/s.DatagramSocketAdaptor.java sun/nio/ch/SCCS/s.DevPollSelectorProvider.java sun/nio/ch/SCCS/s.DirectBuffer.java sun/nio/ch/SCCS/s.FileChannelImpl.java sun/nio/ch/SCCS/s.FileLockImpl.java sun/nio/ch/SCCS/s.IOStatus.java sun/nio/ch/SCCS/s.IOUtil.java sun/nio/ch/SCCS/s.IOVecWrapper.java sun/nio/ch/SCCS/s.SelChImpl.java sun/nio/ch/SCCS/s.Interruptible.java sun/nio/ch/SCCS/s.NativeDispatcher.java sun/nio/ch/SCCS/s.NativeObject.java sun/nio/ch/SCCS/s.NativeThreadSet.java sun/nio/ch/SCCS/s.PollSelectorProvider.java sun/nio/ch/SCCS/s.OptionAdaptor.java sun/nio/ch/SCCS/s.Reflect.java sun/nio/ch/SCCS/s.ServerSocketChannelImpl.java sun/nio/ch/SCCS/s.SelectionKeyImpl.java sun/nio/ch/SCCS/s.SelectorImpl.java sun/nio/ch/SCCS/s.SelectorProviderImpl.java sun/nio/ch/SCCS/s.ServerSocketAdaptor.java sun/nio/ch/SCCS/s.SocketAdaptor.java sun/nio/ch/SCCS/s.SocketChannelImpl.java sun/nio/ch/SCCS/s.SocketOpts.java sun/nio/ch/SCCS/s.Util.java sun/nio/ch/SCCS/s.SocketOptsImpl.java sun/nio/ch/SCCS/s.exceptions sun/nio/ch/IOVecWrapper.java sun/nio/ch/IOUtil.java sun/nio/ch/AbstractPollArrayWrapper.java sun/nio/ch/AbstractPollSelectorImpl.java sun/nio/ch/AllocatedNativeObject.java sun/nio/ch/ChannelInputStream.java sun/nio/ch/DatagramChannelImpl.java sun/nio/ch/DatagramSocketAdaptor.java sun/nio/ch/DevPollSelectorProvider.java sun/nio/ch/DirectBuffer.java sun/nio/ch/FileChannelImpl.java sun/nio/ch/FileLockImpl.java sun/nio/ch/IOStatus.java sun/nio/ch/OptionAdaptor.java sun/nio/ch/Net.java sun/nio/ch/Interruptible.java sun/nio/ch/NativeDispatcher.java sun/nio/ch/NativeObject.java sun/nio/ch/NativeThreadSet.java sun/nio/ch/ServerSocketChannelImpl.java sun/nio/ch/PollSelectorProvider.java sun/nio/ch/Reflect.java sun/nio/ch/SelChImpl.java sun/nio/ch/SelectionKeyImpl.java sun/nio/ch/SelectorImpl.java sun/nio/ch/SelectorProviderImpl.java sun/nio/ch/ServerSocketAdaptor.java sun/nio/ch/SocketAdaptor.java sun/nio/ch/SocketChannelImpl.java sun/nio/ch/SocketOpts.java sun/nio/ch/SocketOptsImpl.java sun/nio/ch/Util.java sun/nio/ch/exceptions sun/nio/cs sun/nio/cs/SCCS sun/nio/cs/SCCS/s.AbstractCharsetProvider.java sun/nio/cs/SCCS/s.FastCharsetProvider.java sun/nio/cs/SCCS/s.HistoricallyNamedCharset.java sun/nio/cs/SCCS/s.ISO_8859_1.java sun/nio/cs/SCCS/s.ISO_8859_13.java sun/nio/cs/SCCS/s.ISO_8859_15.java sun/nio/cs/SCCS/s.ISO_8859_2.java sun/nio/cs/SCCS/s.ISO_8859_4.java sun/nio/cs/SCCS/s.ISO_8859_5.java sun/nio/cs/SCCS/s.ISO_8859_7.java sun/nio/cs/SCCS/s.ISO_8859_9.java sun/nio/cs/SCCS/s.KOI8_R.java sun/nio/cs/SCCS/s.MS1250.java sun/nio/cs/SCCS/s.MS1251.java sun/nio/cs/SCCS/s.MS1252.java sun/nio/cs/SCCS/s.MS1253.java sun/nio/cs/SCCS/s.MS1254.java sun/nio/cs/SCCS/s.MS1257.java sun/nio/cs/SCCS/s.SingleByteDecoder.java sun/nio/cs/SCCS/s.SingleByteEncoder.java sun/nio/cs/SCCS/s.StreamDecoder.java sun/nio/cs/SCCS/s.StreamEncoder.java sun/nio/cs/SCCS/s.Surrogate.java sun/nio/cs/SCCS/s.ThreadLocalCoders.java sun/nio/cs/SCCS/s.US_ASCII.java sun/nio/cs/SCCS/s.UTF_16.java sun/nio/cs/SCCS/s.UTF_16BE.java sun/nio/cs/SCCS/s.UTF_16LE.java sun/nio/cs/SCCS/s.UTF_8.java sun/nio/cs/SCCS/s.UnicodeDecoder.java sun/nio/cs/SCCS/s.UnicodeEncoder.java sun/nio/cs/SCCS/s.standard-charsets sun/nio/cs/SCCS/s.UTF_16LE_BOM.java sun/nio/cs/SCCS/s.Unicode.java sun/nio/cs/ext sun/nio/cs/ext/META-INF sun/nio/cs/ext/META-INF/services sun/nio/cs/ext/META-INF/services/SCCS sun/nio/cs/ext/META-INF/services/SCCS/s.java.nio.charset.spi.CharsetProvider sun/nio/cs/ext/META-INF/services/java.nio.charset.spi.CharsetProvider sun/nio/cs/ext/SCCS sun/nio/cs/ext/SCCS/s.Big5_HKSCS.java sun/nio/cs/ext/SCCS/s.Big5.java sun/nio/cs/ext/SCCS/s.DBCSDecoderMapping.java sun/nio/cs/ext/SCCS/s.Big5_Solaris.java sun/nio/cs/ext/SCCS/s.GBK.java sun/nio/cs/ext/SCCS/s.DBCS_IBM_ASCII_Decoder.java sun/nio/cs/ext/SCCS/s.DBCS_IBM_ASCII_Encoder.java sun/nio/cs/ext/SCCS/s.DBCS_IBM_EBCDIC_Decoder.java sun/nio/cs/ext/SCCS/s.DBCS_IBM_EBCDIC_Encoder.java sun/nio/cs/ext/SCCS/s.DelegatableDecoder.java sun/nio/cs/ext/SCCS/s.DoubleByteDecoder.java sun/nio/cs/ext/SCCS/s.DoubleByteEncoder.java sun/nio/cs/ext/SCCS/s.EUC_CN.java sun/nio/cs/ext/SCCS/s.EUC_JP.java sun/nio/cs/ext/SCCS/s.JIS_X_0208_Decoder.java sun/nio/cs/ext/SCCS/s.EUC_JP_LINUX.java sun/nio/cs/ext/SCCS/s.EUC_JP_Open.java sun/nio/cs/ext/SCCS/s.EUC_KR.java sun/nio/cs/ext/SCCS/s.EUC_TW.java sun/nio/cs/ext/SCCS/s.ExtendedCharsets.java sun/nio/cs/ext/SCCS/s.GB18030.java sun/nio/cs/ext/SCCS/s.HKSCS.java sun/nio/cs/ext/SCCS/s.HKSCS_2001.java sun/nio/cs/ext/SCCS/s.IBM037.java sun/nio/cs/ext/SCCS/s.IBM1006.java sun/nio/cs/ext/SCCS/s.IBM1025.java sun/nio/cs/ext/SCCS/s.IBM1026.java sun/nio/cs/ext/SCCS/s.IBM1046.java sun/nio/cs/ext/SCCS/s.IBM1047.java sun/nio/cs/ext/SCCS/s.IBM1097.java sun/nio/cs/ext/SCCS/s.IBM1098.java sun/nio/cs/ext/SCCS/s.IBM1112.java sun/nio/cs/ext/SCCS/s.IBM1122.java sun/nio/cs/ext/SCCS/s.IBM1123.java sun/nio/cs/ext/SCCS/s.IBM1124.java sun/nio/cs/ext/SCCS/s.IBM1140.java sun/nio/cs/ext/SCCS/s.IBM1141.java sun/nio/cs/ext/SCCS/s.IBM1142.java sun/nio/cs/ext/SCCS/s.IBM1143.java sun/nio/cs/ext/SCCS/s.IBM1144.java sun/nio/cs/ext/SCCS/s.IBM1145.java sun/nio/cs/ext/SCCS/s.IBM1146.java sun/nio/cs/ext/SCCS/s.IBM1147.java sun/nio/cs/ext/SCCS/s.IBM1148.java sun/nio/cs/ext/SCCS/s.IBM1149.java sun/nio/cs/ext/SCCS/s.IBM1381.java sun/nio/cs/ext/SCCS/s.IBM1383.java sun/nio/cs/ext/SCCS/s.IBM273.java sun/nio/cs/ext/SCCS/s.IBM277.java sun/nio/cs/ext/SCCS/s.IBM278.java sun/nio/cs/ext/SCCS/s.IBM280.java sun/nio/cs/ext/SCCS/s.IBM284.java sun/nio/cs/ext/SCCS/s.IBM285.java sun/nio/cs/ext/SCCS/s.IBM297.java sun/nio/cs/ext/SCCS/s.IBM33722.java sun/nio/cs/ext/SCCS/s.IBM420.java sun/nio/cs/ext/SCCS/s.IBM424.java sun/nio/cs/ext/SCCS/s.IBM437.java sun/nio/cs/ext/SCCS/s.IBM500.java sun/nio/cs/ext/SCCS/s.IBM737.java sun/nio/cs/ext/SCCS/s.IBM775.java sun/nio/cs/ext/SCCS/s.IBM838.java sun/nio/cs/ext/SCCS/s.IBM850.java sun/nio/cs/ext/SCCS/s.IBM852.java sun/nio/cs/ext/SCCS/s.IBM855.java sun/nio/cs/ext/SCCS/s.IBM856.java sun/nio/cs/ext/SCCS/s.IBM857.java sun/nio/cs/ext/SCCS/s.IBM858.java sun/nio/cs/ext/SCCS/s.IBM860.java sun/nio/cs/ext/SCCS/s.IBM861.java sun/nio/cs/ext/SCCS/s.IBM862.java sun/nio/cs/ext/SCCS/s.IBM863.java sun/nio/cs/ext/SCCS/s.IBM864.java sun/nio/cs/ext/SCCS/s.IBM865.java sun/nio/cs/ext/SCCS/s.IBM866.java sun/nio/cs/ext/SCCS/s.IBM868.java sun/nio/cs/ext/SCCS/s.IBM869.java sun/nio/cs/ext/SCCS/s.IBM870.java sun/nio/cs/ext/SCCS/s.IBM871.java sun/nio/cs/ext/SCCS/s.IBM874.java sun/nio/cs/ext/SCCS/s.IBM875.java sun/nio/cs/ext/SCCS/s.IBM918.java sun/nio/cs/ext/SCCS/s.IBM921.java sun/nio/cs/ext/SCCS/s.IBM922.java sun/nio/cs/ext/SCCS/s.IBM930.java sun/nio/cs/ext/SCCS/s.IBM933.java sun/nio/cs/ext/SCCS/s.IBM935.java sun/nio/cs/ext/SCCS/s.IBM937.java sun/nio/cs/ext/SCCS/s.IBM939.java sun/nio/cs/ext/SCCS/s.IBM942.java sun/nio/cs/ext/SCCS/s.IBM942C.java sun/nio/cs/ext/SCCS/s.IBM943.java sun/nio/cs/ext/SCCS/s.IBM943C.java sun/nio/cs/ext/SCCS/s.IBM948.java sun/nio/cs/ext/SCCS/s.IBM949.java sun/nio/cs/ext/SCCS/s.IBM949C.java sun/nio/cs/ext/SCCS/s.IBM950.java sun/nio/cs/ext/SCCS/s.IBM964.java sun/nio/cs/ext/SCCS/s.IBM970.java sun/nio/cs/ext/SCCS/s.ISCII91.java sun/nio/cs/ext/SCCS/s.ISO2022.java sun/nio/cs/ext/SCCS/s.ISO2022_CN.java sun/nio/cs/ext/SCCS/s.ISO2022_CN_CNS.java sun/nio/cs/ext/SCCS/s.ISO2022_CN_GB.java sun/nio/cs/ext/SCCS/s.ISO2022_JP.java sun/nio/cs/ext/SCCS/s.ISO2022_KR.java sun/nio/cs/ext/SCCS/s.ISO_8859_11.java sun/nio/cs/ext/SCCS/s.ISO_8859_3.java sun/nio/cs/ext/SCCS/s.ISO_8859_6.java sun/nio/cs/ext/SCCS/s.ISO_8859_8.java sun/nio/cs/ext/SCCS/s.JISAutoDetect.java sun/nio/cs/ext/SCCS/s.JIS_X_0201.java sun/nio/cs/ext/SCCS/s.JIS_X_0208.java sun/nio/cs/ext/SCCS/s.JIS_X_0208_Encoder.java sun/nio/cs/ext/SCCS/s.MS950_HKSCS.java sun/nio/cs/ext/SCCS/s.Johab.java sun/nio/cs/ext/SCCS/s.JIS_X_0208_Solaris_Decoder.java sun/nio/cs/ext/SCCS/s.JIS_X_0208_Solaris_Encoder.java sun/nio/cs/ext/SCCS/s.JIS_X_0212.java sun/nio/cs/ext/SCCS/s.JIS_X_0212_Decoder.java sun/nio/cs/ext/SCCS/s.JIS_X_0212_Encoder.java sun/nio/cs/ext/SCCS/s.JIS_X_0212_Solaris_Decoder.java sun/nio/cs/ext/SCCS/s.JIS_X_0212_Solaris_Encoder.java sun/nio/cs/ext/SCCS/s.MS1255.java sun/nio/cs/ext/SCCS/s.MS1256.java sun/nio/cs/ext/SCCS/s.MS1258.java sun/nio/cs/ext/SCCS/s.MS874.java sun/nio/cs/ext/SCCS/s.MS932.java sun/nio/cs/ext/SCCS/s.MS932DB.java sun/nio/cs/ext/SCCS/s.MS936.java sun/nio/cs/ext/SCCS/s.MS949.java sun/nio/cs/ext/SCCS/s.MS950.java sun/nio/cs/ext/SCCS/s.PCK.java sun/nio/cs/ext/SCCS/s.MacCentralEurope.java sun/nio/cs/ext/SCCS/s.MacArabic.java sun/nio/cs/ext/SCCS/s.MacCroatian.java sun/nio/cs/ext/SCCS/s.MacCyrillic.java sun/nio/cs/ext/SCCS/s.MacDingbat.java sun/nio/cs/ext/SCCS/s.MacGreek.java sun/nio/cs/ext/SCCS/s.MacHebrew.java sun/nio/cs/ext/SCCS/s.MacIceland.java sun/nio/cs/ext/SCCS/s.MacRoman.java sun/nio/cs/ext/SCCS/s.MacRomania.java sun/nio/cs/ext/SCCS/s.MacSymbol.java sun/nio/cs/ext/SCCS/s.MacThai.java sun/nio/cs/ext/SCCS/s.MacTurkish.java sun/nio/cs/ext/SCCS/s.MacUkraine.java sun/nio/cs/ext/SCCS/s.SJIS.java sun/nio/cs/ext/SCCS/s.SimpleEUCDecoder.java sun/nio/cs/ext/SCCS/s.SimpleEUCEncoder.java sun/nio/cs/ext/SCCS/s.TIS_620.java sun/nio/cs/ext/Big5_HKSCS.java sun/nio/cs/ext/Big5.java sun/nio/cs/ext/DBCS_IBM_ASCII_Decoder.java sun/nio/cs/ext/Big5_Solaris.java sun/nio/cs/ext/DBCSDecoderMapping.java sun/nio/cs/ext/EUC_CN.java sun/nio/cs/ext/DBCS_IBM_ASCII_Encoder.java sun/nio/cs/ext/DBCS_IBM_EBCDIC_Decoder.java sun/nio/cs/ext/DBCS_IBM_EBCDIC_Encoder.java sun/nio/cs/ext/DelegatableDecoder.java sun/nio/cs/ext/DoubleByteDecoder.java sun/nio/cs/ext/DoubleByteEncoder.java sun/nio/cs/ext/EUC_JP.java sun/nio/cs/ext/EUC_KR.java sun/nio/cs/ext/JIS_X_0208_Solaris_Decoder.java sun/nio/cs/ext/EUC_JP_LINUX.java sun/nio/cs/ext/EUC_JP_Open.java sun/nio/cs/ext/EUC_TW.java sun/nio/cs/ext/ExtendedCharsets.java sun/nio/cs/ext/GB18030.java sun/nio/cs/ext/GBK.java sun/nio/cs/ext/HKSCS.java sun/nio/cs/ext/HKSCS_2001.java sun/nio/cs/ext/IBM037.java sun/nio/cs/ext/IBM1006.java sun/nio/cs/ext/IBM1025.java sun/nio/cs/ext/IBM1026.java sun/nio/cs/ext/IBM1046.java sun/nio/cs/ext/IBM1047.java sun/nio/cs/ext/IBM1097.java sun/nio/cs/ext/IBM1098.java sun/nio/cs/ext/IBM1112.java sun/nio/cs/ext/IBM1122.java sun/nio/cs/ext/IBM1123.java sun/nio/cs/ext/IBM1124.java sun/nio/cs/ext/IBM1140.java sun/nio/cs/ext/IBM1141.java sun/nio/cs/ext/IBM1142.java sun/nio/cs/ext/IBM1143.java sun/nio/cs/ext/IBM1144.java sun/nio/cs/ext/IBM1145.java sun/nio/cs/ext/IBM1146.java sun/nio/cs/ext/IBM1147.java sun/nio/cs/ext/IBM1148.java sun/nio/cs/ext/IBM1149.java sun/nio/cs/ext/IBM1381.java sun/nio/cs/ext/IBM1383.java sun/nio/cs/ext/IBM273.java sun/nio/cs/ext/IBM277.java sun/nio/cs/ext/IBM278.java sun/nio/cs/ext/IBM280.java sun/nio/cs/ext/IBM284.java sun/nio/cs/ext/IBM285.java sun/nio/cs/ext/IBM297.java sun/nio/cs/ext/IBM33722.java sun/nio/cs/ext/IBM420.java sun/nio/cs/ext/IBM424.java sun/nio/cs/ext/IBM437.java sun/nio/cs/ext/IBM500.java sun/nio/cs/ext/IBM737.java sun/nio/cs/ext/IBM775.java sun/nio/cs/ext/IBM838.java sun/nio/cs/ext/IBM850.java sun/nio/cs/ext/IBM852.java sun/nio/cs/ext/IBM855.java sun/nio/cs/ext/IBM856.java sun/nio/cs/ext/IBM857.java sun/nio/cs/ext/IBM858.java sun/nio/cs/ext/IBM860.java sun/nio/cs/ext/IBM861.java sun/nio/cs/ext/IBM862.java sun/nio/cs/ext/IBM863.java sun/nio/cs/ext/IBM864.java sun/nio/cs/ext/IBM865.java sun/nio/cs/ext/IBM866.java sun/nio/cs/ext/IBM868.java sun/nio/cs/ext/IBM869.java sun/nio/cs/ext/IBM870.java sun/nio/cs/ext/IBM871.java sun/nio/cs/ext/IBM874.java sun/nio/cs/ext/IBM875.java sun/nio/cs/ext/IBM918.java sun/nio/cs/ext/IBM921.java sun/nio/cs/ext/IBM922.java sun/nio/cs/ext/IBM930.java sun/nio/cs/ext/IBM933.java sun/nio/cs/ext/IBM935.java sun/nio/cs/ext/IBM937.java sun/nio/cs/ext/IBM939.java sun/nio/cs/ext/IBM942.java sun/nio/cs/ext/IBM942C.java sun/nio/cs/ext/IBM943.java sun/nio/cs/ext/IBM943C.java sun/nio/cs/ext/IBM948.java sun/nio/cs/ext/IBM949.java sun/nio/cs/ext/IBM949C.java sun/nio/cs/ext/IBM950.java sun/nio/cs/ext/IBM964.java sun/nio/cs/ext/IBM970.java sun/nio/cs/ext/ISCII91.java sun/nio/cs/ext/ISO2022.java sun/nio/cs/ext/ISO2022_CN.java sun/nio/cs/ext/ISO2022_CN_CNS.java sun/nio/cs/ext/ISO2022_CN_GB.java sun/nio/cs/ext/ISO2022_JP.java sun/nio/cs/ext/ISO2022_KR.java sun/nio/cs/ext/ISO_8859_3.java sun/nio/cs/ext/ISO_8859_11.java sun/nio/cs/ext/ISO_8859_6.java sun/nio/cs/ext/ISO_8859_8.java sun/nio/cs/ext/JISAutoDetect.java sun/nio/cs/ext/JIS_X_0201.java sun/nio/cs/ext/JIS_X_0208.java sun/nio/cs/ext/JIS_X_0208_Decoder.java sun/nio/cs/ext/JIS_X_0208_Encoder.java sun/nio/cs/ext/MS932DB.java sun/nio/cs/ext/Johab.java sun/nio/cs/ext/JIS_X_0208_Solaris_Encoder.java sun/nio/cs/ext/JIS_X_0212.java sun/nio/cs/ext/JIS_X_0212_Decoder.java sun/nio/cs/ext/JIS_X_0212_Encoder.java sun/nio/cs/ext/JIS_X_0212_Solaris_Decoder.java sun/nio/cs/ext/JIS_X_0212_Solaris_Encoder.java sun/nio/cs/ext/MS1255.java sun/nio/cs/ext/MS1256.java sun/nio/cs/ext/MS1258.java sun/nio/cs/ext/MS874.java sun/nio/cs/ext/MS932.java sun/nio/cs/ext/MS950_HKSCS.java sun/nio/cs/ext/MS936.java sun/nio/cs/ext/MS949.java sun/nio/cs/ext/MS950.java sun/nio/cs/ext/MacCentralEurope.java sun/nio/cs/ext/MacArabic.java sun/nio/cs/ext/SimpleEUCDecoder.java sun/nio/cs/ext/MacCroatian.java sun/nio/cs/ext/MacCyrillic.java sun/nio/cs/ext/MacDingbat.java sun/nio/cs/ext/MacGreek.java sun/nio/cs/ext/MacHebrew.java sun/nio/cs/ext/MacIceland.java sun/nio/cs/ext/MacRoman.java sun/nio/cs/ext/MacRomania.java sun/nio/cs/ext/MacSymbol.java sun/nio/cs/ext/MacThai.java sun/nio/cs/ext/MacTurkish.java sun/nio/cs/ext/MacUkraine.java sun/nio/cs/ext/PCK.java sun/nio/cs/ext/SJIS.java sun/nio/cs/ext/SimpleEUCEncoder.java sun/nio/cs/ext/TIS_620.java sun/nio/cs/KOI8_R.java sun/nio/cs/AbstractCharsetProvider.java sun/nio/cs/FastCharsetProvider.java sun/nio/cs/HistoricallyNamedCharset.java sun/nio/cs/ISO_8859_1.java sun/nio/cs/ISO_8859_13.java sun/nio/cs/ISO_8859_15.java sun/nio/cs/ISO_8859_2.java sun/nio/cs/ISO_8859_4.java sun/nio/cs/ISO_8859_5.java sun/nio/cs/ISO_8859_7.java sun/nio/cs/ISO_8859_9.java sun/nio/cs/MS1250.java sun/nio/cs/MS1251.java sun/nio/cs/MS1252.java sun/nio/cs/MS1253.java sun/nio/cs/MS1254.java sun/nio/cs/MS1257.java sun/nio/cs/SingleByteDecoder.java sun/nio/cs/SingleByteEncoder.java sun/nio/cs/StreamDecoder.java sun/nio/cs/StreamEncoder.java sun/nio/cs/Surrogate.java sun/nio/cs/ThreadLocalCoders.java sun/nio/cs/US_ASCII.java sun/nio/cs/UTF_16.java sun/nio/cs/UTF_16BE.java sun/nio/cs/UTF_16LE.java sun/nio/cs/UTF_8.java sun/nio/cs/UnicodeDecoder.java sun/nio/cs/UnicodeEncoder.java sun/nio/cs/standard-charsets sun/nio/cs/UTF_16LE_BOM.java sun/nio/cs/Unicode.java sun/nio/ByteBuffered.java sun/print sun/print/SCCS sun/print/SCCS/s.BackgroundLookupListener.java sun/print/SCCS/s.AttributeUpdater.java sun/print/SCCS/s.BackgroundServiceLookup.java sun/print/SCCS/s.CustomMediaSizeName.java sun/print/SCCS/s.CustomMediaTray.java sun/print/SCCS/s.DialogTypeSelection.java sun/print/SCCS/s.ImagePrinter.java sun/print/SCCS/s.OpenBook.java sun/print/SCCS/s.PSPathGraphics.java sun/print/SCCS/s.PSPrinterJob.java sun/print/SCCS/s.PSStreamPrintJob.java sun/print/SCCS/s.PSStreamPrintService.java sun/print/SCCS/s.PSStreamPrinterFactory.java sun/print/SCCS/s.PageableDoc.java sun/print/SCCS/s.PathGraphics.java sun/print/SCCS/s.PeekGraphics.java sun/print/SCCS/s.PeekMetrics.java sun/print/SCCS/s.PrintJob2D.java sun/print/SCCS/s.PrintJobAttributeException.java sun/print/SCCS/s.PrintJobFlavorException.java sun/print/SCCS/s.ProxyGraphics.java sun/print/SCCS/s.ProxyGraphics2D.java sun/print/SCCS/s.ProxyPrintGraphics.java sun/print/SCCS/s.RasterPrinterJob.java sun/print/SCCS/s.ServiceDialog.java sun/print/SCCS/s.ServiceNotifier.java sun/print/SCCS/s.SunAlternateMedia.java sun/print/SCCS/s.SunMinMaxPage.java sun/print/SCCS/s.SunPageSelection.java sun/print/SCCS/s.SunPrinterJobService.java sun/print/SCCS/s.psfont.properties.ja sun/print/SCCS/s.psfontj2d.properties sun/print/SCCS/s.PrinterGraphicsConfig.java sun/print/SCCS/s.PrinterGraphicsDevice.java sun/print/resources sun/print/resources/SCCS sun/print/resources/SCCS/s.orientLandscape.gif sun/print/resources/SCCS/s.duplex.gif sun/print/resources/SCCS/s.oneside.gif sun/print/resources/SCCS/s.orientRevLandscape.gif sun/print/resources/SCCS/s.orientPortrait.gif sun/print/resources/SCCS/s.orientRevPortrait.gif sun/print/resources/SCCS/s.serviceui.properties sun/print/resources/SCCS/s.serviceui_de.properties sun/print/resources/SCCS/s.serviceui_es.properties sun/print/resources/SCCS/s.serviceui_fr.properties sun/print/resources/SCCS/s.serviceui_it.properties sun/print/resources/SCCS/s.serviceui_ja.properties sun/print/resources/SCCS/s.serviceui_ko.properties sun/print/resources/SCCS/s.tumble.gif sun/print/resources/SCCS/s.serviceui_sv.properties sun/print/resources/SCCS/s.serviceui_zh_CN.properties sun/print/resources/SCCS/s.serviceui_zh_TW.properties sun/print/resources/orientLandscape.gif sun/print/resources/duplex.gif sun/print/resources/oneside.gif sun/print/resources/orientRevLandscape.gif sun/print/resources/orientPortrait.gif sun/print/resources/orientRevPortrait.gif sun/print/resources/serviceui.properties sun/print/resources/serviceui_de.properties sun/print/resources/serviceui_es.properties sun/print/resources/serviceui_fr.properties sun/print/resources/serviceui_it.properties sun/print/resources/serviceui_ja.properties sun/print/resources/serviceui_ko.properties sun/print/resources/serviceui_sv.properties sun/print/resources/serviceui_zh_CN.properties sun/print/resources/tumble.gif sun/print/resources/serviceui_zh_TW.properties sun/print/BackgroundLookupListener.java sun/print/AttributeUpdater.java sun/print/BackgroundServiceLookup.java sun/print/CustomMediaSizeName.java sun/print/CustomMediaTray.java sun/print/DialogTypeSelection.java sun/print/ImagePrinter.java sun/print/OpenBook.java sun/print/PSPathGraphics.java sun/print/PSPrinterJob.java sun/print/PSStreamPrintJob.java sun/print/PSStreamPrintService.java sun/print/PSStreamPrinterFactory.java sun/print/PrintJob2D.java sun/print/PageableDoc.java sun/print/PathGraphics.java sun/print/PeekGraphics.java sun/print/PeekMetrics.java sun/print/PrintJobAttributeException.java sun/print/PrintJobFlavorException.java sun/print/ProxyGraphics.java sun/print/ProxyGraphics2D.java sun/print/ProxyPrintGraphics.java sun/print/RasterPrinterJob.java sun/print/ServiceDialog.java sun/print/ServiceNotifier.java sun/print/SunAlternateMedia.java sun/print/SunMinMaxPage.java sun/print/SunPageSelection.java sun/print/SunPrinterJobService.java sun/print/psfont.properties.ja sun/print/psfontj2d.properties sun/print/PrinterGraphicsConfig.java sun/print/PrinterGraphicsDevice.java sun/reflect sun/reflect/SCCS sun/reflect/SCCS/s.ConstructorAccessorImpl.java sun/reflect/SCCS/s.AccessorGenerator.java sun/reflect/SCCS/s.ByteVector.java sun/reflect/SCCS/s.ClassDefiner.java sun/reflect/SCCS/s.BootstrapConstructorAccessorImpl.java sun/reflect/SCCS/s.ByteVectorFactory.java sun/reflect/SCCS/s.ByteVectorImpl.java sun/reflect/SCCS/s.ClassFileAssembler.java sun/reflect/SCCS/s.ClassFileConstants.java sun/reflect/SCCS/s.ConstantPool.java sun/reflect/SCCS/s.ConstructorAccessor.java sun/reflect/SCCS/s.DelegatingMethodAccessorImpl.java sun/reflect/SCCS/s.UTF8.java sun/reflect/SCCS/s.FieldAccessor.java sun/reflect/SCCS/s.DelegatingConstructorAccessorImpl.java sun/reflect/SCCS/s.FieldAccessorImpl.java sun/reflect/SCCS/s.FieldInfo.java sun/reflect/SCCS/s.Label.java sun/reflect/SCCS/s.LangReflectAccess.java sun/reflect/SCCS/s.InstantiationExceptionConstructorAccessorImpl.java sun/reflect/SCCS/s.MagicAccessorImpl.java sun/reflect/SCCS/s.MethodAccessor.java sun/reflect/SCCS/s.MethodAccessorGenerator.java sun/reflect/SCCS/s.MethodAccessorImpl.java sun/reflect/SCCS/s.NativeConstructorAccessorImpl.java sun/reflect/SCCS/s.NativeMethodAccessorImpl.java sun/reflect/SCCS/s.Reflection.java sun/reflect/SCCS/s.ReflectionFactory.java sun/reflect/SCCS/s.SerializationConstructorAccessorImpl.java sun/reflect/SCCS/s.SignatureIterator.java sun/reflect/SCCS/s.UnsafeBooleanFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeByteFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeCharacterFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeDoubleFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeFieldAccessorFactory.java sun/reflect/SCCS/s.UnsafeFieldAccessorImpl.java sun/reflect/SCCS/s.package.html sun/reflect/SCCS/s.UnsafeFloatFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeIntegerFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeLongFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeObjectFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedBooleanFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedByteFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedCharacterFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedDoubleFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedFloatFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedIntegerFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedLongFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedObjectFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedShortFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedStaticBooleanFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedStaticByteFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedStaticCharacterFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedStaticDoubleFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeShortFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedStaticFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedStaticFloatFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedStaticIntegerFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedStaticLongFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedStaticObjectFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeQualifiedStaticShortFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeStaticBooleanFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeStaticByteFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeStaticFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeStaticCharacterFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeStaticDoubleFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeStaticFloatFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeStaticIntegerFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeStaticLongFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeStaticObjectFieldAccessorImpl.java sun/reflect/SCCS/s.UnsafeStaticShortFieldAccessorImpl.java sun/reflect/annotation sun/reflect/annotation/SCCS sun/reflect/annotation/SCCS/s.AnnotationTypeMismatchExceptionProxy.java sun/reflect/annotation/SCCS/s.AnnotationInvocationHandler.java sun/reflect/annotation/SCCS/s.AnnotationParser.java sun/reflect/annotation/SCCS/s.AnnotationType.java sun/reflect/annotation/SCCS/s.EnumConstantNotPresentExceptionProxy.java sun/reflect/annotation/SCCS/s.ExceptionProxy.java sun/reflect/annotation/SCCS/s.TypeNotPresentExceptionProxy.java sun/reflect/annotation/AnnotationTypeMismatchExceptionProxy.java sun/reflect/annotation/AnnotationInvocationHandler.java sun/reflect/annotation/AnnotationParser.java sun/reflect/annotation/AnnotationType.java sun/reflect/annotation/EnumConstantNotPresentExceptionProxy.java sun/reflect/annotation/ExceptionProxy.java sun/reflect/annotation/TypeNotPresentExceptionProxy.java sun/reflect/generics sun/reflect/generics/factory sun/reflect/generics/factory/SCCS sun/reflect/generics/factory/SCCS/s.CoreReflectionFactory.java sun/reflect/generics/factory/SCCS/s.GenericsFactory.java sun/reflect/generics/factory/CoreReflectionFactory.java sun/reflect/generics/factory/GenericsFactory.java sun/reflect/generics/parser sun/reflect/generics/parser/SCCS sun/reflect/generics/parser/SCCS/s.SignatureParser.java sun/reflect/generics/parser/SignatureParser.java sun/reflect/generics/reflectiveObjects sun/reflect/generics/reflectiveObjects/SCCS sun/reflect/generics/reflectiveObjects/SCCS/s.NotImplementedException.java sun/reflect/generics/reflectiveObjects/SCCS/s.GenericArrayTypeImpl.java sun/reflect/generics/reflectiveObjects/SCCS/s.LazyReflectiveObjectGenerator.java sun/reflect/generics/reflectiveObjects/SCCS/s.ParameterizedTypeImpl.java sun/reflect/generics/reflectiveObjects/SCCS/s.TypeVariableImpl.java sun/reflect/generics/reflectiveObjects/SCCS/s.WildcardTypeImpl.java sun/reflect/generics/reflectiveObjects/LazyReflectiveObjectGenerator.java sun/reflect/generics/reflectiveObjects/GenericArrayTypeImpl.java sun/reflect/generics/reflectiveObjects/NotImplementedException.java sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java sun/reflect/generics/reflectiveObjects/WildcardTypeImpl.java sun/reflect/generics/repository sun/reflect/generics/repository/SCCS sun/reflect/generics/repository/SCCS/s.ConstructorRepository.java sun/reflect/generics/repository/SCCS/s.AbstractRepository.java sun/reflect/generics/repository/SCCS/s.ClassRepository.java sun/reflect/generics/repository/SCCS/s.GenericDeclRepository.java sun/reflect/generics/repository/SCCS/s.FieldRepository.java sun/reflect/generics/repository/SCCS/s.MethodRepository.java sun/reflect/generics/repository/ConstructorRepository.java sun/reflect/generics/repository/AbstractRepository.java sun/reflect/generics/repository/ClassRepository.java sun/reflect/generics/repository/FieldRepository.java sun/reflect/generics/repository/GenericDeclRepository.java sun/reflect/generics/repository/MethodRepository.java sun/reflect/generics/scope sun/reflect/generics/scope/SCCS sun/reflect/generics/scope/SCCS/s.AbstractScope.java sun/reflect/generics/scope/SCCS/s.ClassScope.java sun/reflect/generics/scope/SCCS/s.ConstructorScope.java sun/reflect/generics/scope/SCCS/s.DummyScope.java sun/reflect/generics/scope/SCCS/s.MethodScope.java sun/reflect/generics/scope/SCCS/s.Scope.java sun/reflect/generics/scope/ConstructorScope.java sun/reflect/generics/scope/AbstractScope.java sun/reflect/generics/scope/ClassScope.java sun/reflect/generics/scope/DummyScope.java sun/reflect/generics/scope/MethodScope.java sun/reflect/generics/scope/Scope.java sun/reflect/generics/tree sun/reflect/generics/tree/SCCS sun/reflect/generics/tree/SCCS/s.ArrayTypeSignature.java sun/reflect/generics/tree/SCCS/s.BaseType.java sun/reflect/generics/tree/SCCS/s.BooleanSignature.java sun/reflect/generics/tree/SCCS/s.BottomSignature.java sun/reflect/generics/tree/SCCS/s.ByteSignature.java sun/reflect/generics/tree/SCCS/s.CharSignature.java sun/reflect/generics/tree/SCCS/s.ClassSignature.java sun/reflect/generics/tree/SCCS/s.ClassTypeSignature.java sun/reflect/generics/tree/SCCS/s.DoubleSignature.java sun/reflect/generics/tree/SCCS/s.FieldTypeSignature.java sun/reflect/generics/tree/SCCS/s.FloatSignature.java sun/reflect/generics/tree/SCCS/s.FormalTypeParameter.java sun/reflect/generics/tree/SCCS/s.IntSignature.java sun/reflect/generics/tree/SCCS/s.Tree.java sun/reflect/generics/tree/SCCS/s.LongSignature.java sun/reflect/generics/tree/SCCS/s.MethodTypeSignature.java sun/reflect/generics/tree/SCCS/s.ReturnType.java sun/reflect/generics/tree/SCCS/s.ShortSignature.java sun/reflect/generics/tree/SCCS/s.Signature.java sun/reflect/generics/tree/SCCS/s.SimpleClassTypeSignature.java sun/reflect/generics/tree/SCCS/s.TypeArgument.java sun/reflect/generics/tree/SCCS/s.TypeSignature.java sun/reflect/generics/tree/SCCS/s.TypeTree.java sun/reflect/generics/tree/SCCS/s.TypeVariableSignature.java sun/reflect/generics/tree/SCCS/s.VoidDescriptor.java sun/reflect/generics/tree/SCCS/s.Wildcard.java sun/reflect/generics/tree/FormalTypeParameter.java sun/reflect/generics/tree/ArrayTypeSignature.java sun/reflect/generics/tree/BaseType.java sun/reflect/generics/tree/BooleanSignature.java sun/reflect/generics/tree/BottomSignature.java sun/reflect/generics/tree/ByteSignature.java sun/reflect/generics/tree/CharSignature.java sun/reflect/generics/tree/ClassSignature.java sun/reflect/generics/tree/ClassTypeSignature.java sun/reflect/generics/tree/DoubleSignature.java sun/reflect/generics/tree/FieldTypeSignature.java sun/reflect/generics/tree/FloatSignature.java sun/reflect/generics/tree/IntSignature.java sun/reflect/generics/tree/LongSignature.java sun/reflect/generics/tree/TypeArgument.java sun/reflect/generics/tree/Tree.java sun/reflect/generics/tree/MethodTypeSignature.java sun/reflect/generics/tree/ReturnType.java sun/reflect/generics/tree/ShortSignature.java sun/reflect/generics/tree/Signature.java sun/reflect/generics/tree/SimpleClassTypeSignature.java sun/reflect/generics/tree/TypeVariableSignature.java sun/reflect/generics/tree/TypeSignature.java sun/reflect/generics/tree/TypeTree.java sun/reflect/generics/tree/VoidDescriptor.java sun/reflect/generics/tree/Wildcard.java sun/reflect/generics/visitor sun/reflect/generics/visitor/SCCS sun/reflect/generics/visitor/SCCS/s.TypeTreeVisitor.java sun/reflect/generics/visitor/SCCS/s.Reifier.java sun/reflect/generics/visitor/SCCS/s.Visitor.java sun/reflect/generics/visitor/TypeTreeVisitor.java sun/reflect/generics/visitor/Reifier.java sun/reflect/generics/visitor/Visitor.java sun/reflect/ConstructorAccessor.java sun/reflect/AccessorGenerator.java sun/reflect/ByteVector.java sun/reflect/ByteVectorFactory.java sun/reflect/BootstrapConstructorAccessorImpl.java sun/reflect/ByteVectorImpl.java sun/reflect/ClassDefiner.java sun/reflect/ClassFileAssembler.java sun/reflect/ClassFileConstants.java sun/reflect/ConstantPool.java sun/reflect/ConstructorAccessorImpl.java sun/reflect/FieldAccessor.java sun/reflect/MethodAccessorGenerator.java sun/reflect/DelegatingConstructorAccessorImpl.java sun/reflect/DelegatingMethodAccessorImpl.java sun/reflect/FieldAccessorImpl.java sun/reflect/FieldInfo.java sun/reflect/Label.java sun/reflect/LangReflectAccess.java sun/reflect/InstantiationExceptionConstructorAccessorImpl.java sun/reflect/MagicAccessorImpl.java sun/reflect/MethodAccessor.java sun/reflect/Reflection.java sun/reflect/MethodAccessorImpl.java sun/reflect/NativeConstructorAccessorImpl.java sun/reflect/NativeMethodAccessorImpl.java sun/reflect/SerializationConstructorAccessorImpl.java sun/reflect/ReflectionFactory.java sun/reflect/SignatureIterator.java sun/reflect/UTF8.java sun/reflect/UnsafeFieldAccessorFactory.java sun/reflect/UnsafeBooleanFieldAccessorImpl.java sun/reflect/UnsafeByteFieldAccessorImpl.java sun/reflect/UnsafeCharacterFieldAccessorImpl.java sun/reflect/UnsafeDoubleFieldAccessorImpl.java sun/reflect/UnsafeFieldAccessorImpl.java sun/reflect/UnsafeFloatFieldAccessorImpl.java sun/reflect/UnsafeIntegerFieldAccessorImpl.java sun/reflect/package.html sun/reflect/UnsafeLongFieldAccessorImpl.java sun/reflect/UnsafeObjectFieldAccessorImpl.java sun/reflect/UnsafeQualifiedBooleanFieldAccessorImpl.java sun/reflect/UnsafeQualifiedByteFieldAccessorImpl.java sun/reflect/UnsafeQualifiedCharacterFieldAccessorImpl.java sun/reflect/UnsafeQualifiedDoubleFieldAccessorImpl.java sun/reflect/UnsafeQualifiedFieldAccessorImpl.java sun/reflect/UnsafeQualifiedFloatFieldAccessorImpl.java sun/reflect/UnsafeQualifiedIntegerFieldAccessorImpl.java sun/reflect/UnsafeQualifiedLongFieldAccessorImpl.java sun/reflect/UnsafeShortFieldAccessorImpl.java sun/reflect/UnsafeQualifiedObjectFieldAccessorImpl.java sun/reflect/UnsafeQualifiedShortFieldAccessorImpl.java sun/reflect/UnsafeQualifiedStaticBooleanFieldAccessorImpl.java sun/reflect/UnsafeQualifiedStaticByteFieldAccessorImpl.java sun/reflect/UnsafeQualifiedStaticCharacterFieldAccessorImpl.java sun/reflect/UnsafeQualifiedStaticDoubleFieldAccessorImpl.java sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl.java sun/reflect/UnsafeQualifiedStaticFloatFieldAccessorImpl.java sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl.java sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl.java sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl.java sun/reflect/UnsafeQualifiedStaticShortFieldAccessorImpl.java sun/reflect/UnsafeStaticBooleanFieldAccessorImpl.java sun/reflect/UnsafeStaticByteFieldAccessorImpl.java sun/reflect/UnsafeStaticCharacterFieldAccessorImpl.java sun/reflect/UnsafeStaticDoubleFieldAccessorImpl.java sun/reflect/UnsafeStaticFieldAccessorImpl.java sun/reflect/UnsafeStaticFloatFieldAccessorImpl.java sun/reflect/UnsafeStaticIntegerFieldAccessorImpl.java sun/reflect/UnsafeStaticLongFieldAccessorImpl.java sun/reflect/UnsafeStaticObjectFieldAccessorImpl.java sun/reflect/UnsafeStaticShortFieldAccessorImpl.java sun/rmi sun/rmi/log sun/rmi/log/SCCS sun/rmi/log/SCCS/s.LogInputStream.java sun/rmi/log/SCCS/s.LogHandler.java sun/rmi/log/SCCS/s.LogOutputStream.java sun/rmi/log/SCCS/s.ReliableLog.java sun/rmi/log/LogInputStream.java sun/rmi/log/LogHandler.java sun/rmi/log/LogOutputStream.java sun/rmi/log/ReliableLog.java sun/rmi/registry sun/rmi/registry/SCCS sun/rmi/registry/SCCS/s.RegistryImpl.java sun/rmi/registry/resources sun/rmi/registry/resources/SCCS sun/rmi/registry/resources/SCCS/s.rmiregistry_zh_CN.properties sun/rmi/registry/resources/SCCS/s.rmiregistry.properties sun/rmi/registry/resources/SCCS/s.rmiregistry_de.properties sun/rmi/registry/resources/SCCS/s.rmiregistry_es.properties sun/rmi/registry/resources/SCCS/s.rmiregistry_fr.properties sun/rmi/registry/resources/SCCS/s.rmiregistry_it.properties sun/rmi/registry/resources/SCCS/s.rmiregistry_ja.properties sun/rmi/registry/resources/SCCS/s.rmiregistry_ko.properties sun/rmi/registry/resources/SCCS/s.rmiregistry_sv.properties sun/rmi/registry/resources/SCCS/s.rmiregistry_zh_TW.properties sun/rmi/registry/resources/rmiregistry_de.properties sun/rmi/registry/resources/rmiregistry.properties sun/rmi/registry/resources/rmiregistry_es.properties sun/rmi/registry/resources/rmiregistry_fr.properties sun/rmi/registry/resources/rmiregistry_it.properties sun/rmi/registry/resources/rmiregistry_ja.properties sun/rmi/registry/resources/rmiregistry_ko.properties sun/rmi/registry/resources/rmiregistry_sv.properties sun/rmi/registry/resources/rmiregistry_zh_CN.properties sun/rmi/registry/resources/rmiregistry_zh_TW.properties sun/rmi/registry/RegistryImpl.java sun/rmi/rmic sun/rmi/rmic/SCCS sun/rmi/rmic/SCCS/s.BatchEnvironment.java sun/rmi/rmic/SCCS/s.Constants.java sun/rmi/rmic/SCCS/s.Generator.java sun/rmi/rmic/SCCS/s.IndentingWriter.java sun/rmi/rmic/SCCS/s.Main.java sun/rmi/rmic/SCCS/s.Names.java sun/rmi/rmic/SCCS/s.RMIConstants.java sun/rmi/rmic/SCCS/s.RMIGenerator.java sun/rmi/rmic/SCCS/s.RemoteClass.java sun/rmi/rmic/SCCS/s.Util.java sun/rmi/rmic/iiop sun/rmi/rmic/iiop/SCCS sun/rmi/rmic/iiop/SCCS/s.BatchEnvironment.java sun/rmi/rmic/iiop/SCCS/s.AbstractType.java sun/rmi/rmic/iiop/SCCS/s.ArrayType.java sun/rmi/rmic/iiop/SCCS/s.ClassPathLoader.java sun/rmi/rmic/iiop/SCCS/s.ClassType.java sun/rmi/rmic/iiop/SCCS/s.CompoundType.java sun/rmi/rmic/iiop/SCCS/s.Constants.java sun/rmi/rmic/iiop/SCCS/s.ContextElement.java sun/rmi/rmic/iiop/SCCS/s.ContextStack.java sun/rmi/rmic/iiop/SCCS/s.DirectoryLoader.java sun/rmi/rmic/iiop/SCCS/s.Generator.java sun/rmi/rmic/iiop/SCCS/s.IDLGenerator.java sun/rmi/rmic/iiop/SCCS/s.IDLNames.java sun/rmi/rmic/iiop/SCCS/s.ImplementationType.java sun/rmi/rmic/iiop/SCCS/s.InterfaceType.java sun/rmi/rmic/iiop/SCCS/s.NCClassType.java sun/rmi/rmic/iiop/SCCS/s.NCInterfaceType.java sun/rmi/rmic/iiop/SCCS/s.NameContext.java sun/rmi/rmic/iiop/SCCS/s.PrimitiveType.java sun/rmi/rmic/iiop/SCCS/s.PrintGenerator.java sun/rmi/rmic/iiop/SCCS/s.RemoteType.java sun/rmi/rmic/iiop/SCCS/s.SpecialClassType.java sun/rmi/rmic/iiop/SCCS/s.SpecialInterfaceType.java sun/rmi/rmic/iiop/SCCS/s.StaticStringsHash.java sun/rmi/rmic/iiop/SCCS/s.StubGenerator.java sun/rmi/rmic/iiop/SCCS/s.Type.java sun/rmi/rmic/iiop/SCCS/s.Util.java sun/rmi/rmic/iiop/SCCS/s.ValueType.java sun/rmi/rmic/iiop/BatchEnvironment.java sun/rmi/rmic/iiop/AbstractType.java sun/rmi/rmic/iiop/ArrayType.java sun/rmi/rmic/iiop/ClassPathLoader.java sun/rmi/rmic/iiop/ClassType.java sun/rmi/rmic/iiop/CompoundType.java sun/rmi/rmic/iiop/Constants.java sun/rmi/rmic/iiop/ContextElement.java sun/rmi/rmic/iiop/ContextStack.java sun/rmi/rmic/iiop/DirectoryLoader.java sun/rmi/rmic/iiop/Generator.java sun/rmi/rmic/iiop/IDLGenerator.java sun/rmi/rmic/iiop/IDLNames.java sun/rmi/rmic/iiop/ImplementationType.java sun/rmi/rmic/iiop/InterfaceType.java sun/rmi/rmic/iiop/NCClassType.java sun/rmi/rmic/iiop/NameContext.java sun/rmi/rmic/iiop/NCInterfaceType.java sun/rmi/rmic/iiop/PrimitiveType.java sun/rmi/rmic/iiop/PrintGenerator.java sun/rmi/rmic/iiop/RemoteType.java sun/rmi/rmic/iiop/SpecialClassType.java sun/rmi/rmic/iiop/SpecialInterfaceType.java sun/rmi/rmic/iiop/StaticStringsHash.java sun/rmi/rmic/iiop/StubGenerator.java sun/rmi/rmic/iiop/Type.java sun/rmi/rmic/iiop/Util.java sun/rmi/rmic/iiop/ValueType.java sun/rmi/rmic/newrmic sun/rmi/rmic/newrmic/SCCS sun/rmi/rmic/newrmic/SCCS/s.BatchEnvironment.java sun/rmi/rmic/newrmic/SCCS/s.Constants.java sun/rmi/rmic/newrmic/SCCS/s.Generator.java sun/rmi/rmic/newrmic/SCCS/s.IndentingWriter.java sun/rmi/rmic/newrmic/SCCS/s.Main.java sun/rmi/rmic/newrmic/SCCS/s.Resources.java sun/rmi/rmic/newrmic/jrmp sun/rmi/rmic/newrmic/jrmp/SCCS sun/rmi/rmic/newrmic/jrmp/SCCS/s.JrmpGenerator.java sun/rmi/rmic/newrmic/jrmp/SCCS/s.Constants.java sun/rmi/rmic/newrmic/jrmp/SCCS/s.StubSkeletonWriter.java sun/rmi/rmic/newrmic/jrmp/SCCS/s.RemoteClass.java sun/rmi/rmic/newrmic/jrmp/SCCS/s.Util.java sun/rmi/rmic/newrmic/jrmp/JrmpGenerator.java sun/rmi/rmic/newrmic/jrmp/Constants.java sun/rmi/rmic/newrmic/jrmp/RemoteClass.java sun/rmi/rmic/newrmic/jrmp/StubSkeletonWriter.java sun/rmi/rmic/newrmic/jrmp/Util.java sun/rmi/rmic/newrmic/BatchEnvironment.java sun/rmi/rmic/newrmic/Constants.java sun/rmi/rmic/newrmic/Generator.java sun/rmi/rmic/newrmic/IndentingWriter.java sun/rmi/rmic/newrmic/Main.java sun/rmi/rmic/newrmic/Resources.java sun/rmi/rmic/resources sun/rmi/rmic/resources/SCCS sun/rmi/rmic/resources/SCCS/s.rmic_ja.properties sun/rmi/rmic/resources/SCCS/s.rmic.properties sun/rmi/rmic/resources/rmic_ja.properties sun/rmi/rmic/resources/rmic.properties sun/rmi/rmic/BatchEnvironment.java sun/rmi/rmic/Constants.java sun/rmi/rmic/Generator.java sun/rmi/rmic/IndentingWriter.java sun/rmi/rmic/Main.java sun/rmi/rmic/Names.java sun/rmi/rmic/RMIConstants.java sun/rmi/rmic/RMIGenerator.java sun/rmi/rmic/RemoteClass.java sun/rmi/rmic/Util.java sun/rmi/runtime sun/rmi/runtime/SCCS sun/rmi/runtime/SCCS/s.Executor.java sun/rmi/runtime/SCCS/s.Log.java sun/rmi/runtime/SCCS/s.WeakKey.java sun/rmi/runtime/SCCS/s.GetThreadPoolAction.java sun/rmi/runtime/SCCS/s.NewThreadAction.java sun/rmi/runtime/SCCS/s.ThreadPool.java sun/rmi/runtime/Executor.java sun/rmi/runtime/Log.java sun/rmi/runtime/ThreadPool.java sun/rmi/runtime/GetThreadPoolAction.java sun/rmi/runtime/NewThreadAction.java sun/rmi/runtime/WeakKey.java sun/rmi/server sun/rmi/server/SCCS sun/rmi/server/SCCS/s.ActivatableServerRef.java sun/rmi/server/SCCS/s.ActivatableRef.java sun/rmi/server/SCCS/s.ActivationGroupImpl.java sun/rmi/server/SCCS/s.Activation.java sun/rmi/server/SCCS/s.Util.java sun/rmi/server/SCCS/s.ActivationGroupInit.java sun/rmi/server/SCCS/s.Dispatcher.java sun/rmi/server/SCCS/s.LoaderHandler.java sun/rmi/server/SCCS/s.MarshalInputStream.java sun/rmi/server/SCCS/s.MarshalOutputStream.java sun/rmi/server/SCCS/s.UnicastRef.java sun/rmi/server/SCCS/s.UnicastRef2.java sun/rmi/server/SCCS/s.UnicastServerRef.java sun/rmi/server/SCCS/s.UnicastServerRef2.java sun/rmi/server/SCCS/s.WeakClassHashMap.java sun/rmi/server/resources sun/rmi/server/resources/SCCS sun/rmi/server/resources/SCCS/s.rmid_de.properties sun/rmi/server/resources/SCCS/s.rmid.properties sun/rmi/server/resources/SCCS/s.rmid_es.properties sun/rmi/server/resources/SCCS/s.rmid_fr.properties sun/rmi/server/resources/SCCS/s.rmid_it.properties sun/rmi/server/resources/SCCS/s.rmid_ja.properties sun/rmi/server/resources/SCCS/s.rmid_ko.properties sun/rmi/server/resources/SCCS/s.rmid_sv.properties sun/rmi/server/resources/SCCS/s.rmid_zh_CN.properties sun/rmi/server/resources/SCCS/s.rmid_zh_TW.properties sun/rmi/server/resources/rmid_de.properties sun/rmi/server/resources/rmid.properties sun/rmi/server/resources/rmid_es.properties sun/rmi/server/resources/rmid_fr.properties sun/rmi/server/resources/rmid_it.properties sun/rmi/server/resources/rmid_ja.properties sun/rmi/server/resources/rmid_ko.properties sun/rmi/server/resources/rmid_sv.properties sun/rmi/server/resources/rmid_zh_CN.properties sun/rmi/server/resources/rmid_zh_TW.properties sun/rmi/server/ActivatableServerRef.java sun/rmi/server/ActivatableRef.java sun/rmi/server/Activation.java sun/rmi/server/Dispatcher.java sun/rmi/server/Util.java sun/rmi/server/ActivationGroupImpl.java sun/rmi/server/ActivationGroupInit.java sun/rmi/server/LoaderHandler.java sun/rmi/server/MarshalInputStream.java sun/rmi/server/MarshalOutputStream.java sun/rmi/server/UnicastRef.java sun/rmi/server/UnicastRef2.java sun/rmi/server/UnicastServerRef.java sun/rmi/server/UnicastServerRef2.java sun/rmi/server/WeakClassHashMap.java sun/rmi/transport sun/rmi/transport/SCCS sun/rmi/transport/SCCS/s.Connection.java sun/rmi/transport/SCCS/s.Channel.java sun/rmi/transport/SCCS/s.ConnectionInputStream.java sun/rmi/transport/SCCS/s.ConnectionOutputStream.java sun/rmi/transport/SCCS/s.DGCAckHandler.java sun/rmi/transport/SCCS/s.DGCClient.java sun/rmi/transport/SCCS/s.DGCImpl.java sun/rmi/transport/SCCS/s.Endpoint.java sun/rmi/transport/SCCS/s.LiveRef.java sun/rmi/transport/SCCS/s.ObjectEndpoint.java sun/rmi/transport/SCCS/s.ObjectTable.java sun/rmi/transport/SCCS/s.StreamRemoteCall.java sun/rmi/transport/SCCS/s.Target.java sun/rmi/transport/SCCS/s.Transport.java sun/rmi/transport/SCCS/s.TransportConstants.java sun/rmi/transport/SCCS/s.WeakRef.java sun/rmi/transport/proxy sun/rmi/transport/proxy/SCCS sun/rmi/transport/proxy/SCCS/s.HttpInputStream.java sun/rmi/transport/proxy/SCCS/s.CGIHandler.java sun/rmi/transport/proxy/SCCS/s.HttpAwareServerSocket.java sun/rmi/transport/proxy/SCCS/s.HttpOutputStream.java sun/rmi/transport/proxy/SCCS/s.HttpReceiveSocket.java sun/rmi/transport/proxy/SCCS/s.HttpSendInputStream.java sun/rmi/transport/proxy/SCCS/s.HttpSendOutputStream.java sun/rmi/transport/proxy/SCCS/s.HttpSendSocket.java sun/rmi/transport/proxy/SCCS/s.RMIDirectSocketFactory.java sun/rmi/transport/proxy/SCCS/s.RMIHttpToCGISocketFactory.java sun/rmi/transport/proxy/SCCS/s.RMIHttpToPortSocketFactory.java sun/rmi/transport/proxy/SCCS/s.RMIMasterSocketFactory.java sun/rmi/transport/proxy/SCCS/s.RMISocketInfo.java sun/rmi/transport/proxy/SCCS/s.WrappedSocket.java sun/rmi/transport/proxy/HttpInputStream.java sun/rmi/transport/proxy/CGIHandler.java sun/rmi/transport/proxy/RMIHttpToCGISocketFactory.java sun/rmi/transport/proxy/HttpAwareServerSocket.java sun/rmi/transport/proxy/HttpOutputStream.java sun/rmi/transport/proxy/HttpReceiveSocket.java sun/rmi/transport/proxy/HttpSendInputStream.java sun/rmi/transport/proxy/HttpSendOutputStream.java sun/rmi/transport/proxy/HttpSendSocket.java sun/rmi/transport/proxy/RMIDirectSocketFactory.java sun/rmi/transport/proxy/RMIHttpToPortSocketFactory.java sun/rmi/transport/proxy/RMIMasterSocketFactory.java sun/rmi/transport/proxy/RMISocketInfo.java sun/rmi/transport/proxy/WrappedSocket.java sun/rmi/transport/tcp sun/rmi/transport/tcp/SCCS sun/rmi/transport/tcp/SCCS/s.ConnectionMultiplexer.java sun/rmi/transport/tcp/SCCS/s.MultiplexConnectionInfo.java sun/rmi/transport/tcp/SCCS/s.MultiplexInputStream.java sun/rmi/transport/tcp/SCCS/s.MultiplexOutputStream.java sun/rmi/transport/tcp/SCCS/s.TCPChannel.java sun/rmi/transport/tcp/SCCS/s.TCPConnection.java sun/rmi/transport/tcp/SCCS/s.TCPEndpoint.java sun/rmi/transport/tcp/SCCS/s.TCPTransport.java sun/rmi/transport/tcp/MultiplexConnectionInfo.java sun/rmi/transport/tcp/ConnectionMultiplexer.java sun/rmi/transport/tcp/MultiplexInputStream.java sun/rmi/transport/tcp/MultiplexOutputStream.java sun/rmi/transport/tcp/TCPChannel.java sun/rmi/transport/tcp/TCPConnection.java sun/rmi/transport/tcp/TCPEndpoint.java sun/rmi/transport/tcp/TCPTransport.java sun/rmi/transport/DGCAckHandler.java sun/rmi/transport/Channel.java sun/rmi/transport/Connection.java sun/rmi/transport/ConnectionInputStream.java sun/rmi/transport/ConnectionOutputStream.java sun/rmi/transport/DGCClient.java sun/rmi/transport/DGCImpl.java sun/rmi/transport/Endpoint.java sun/rmi/transport/LiveRef.java sun/rmi/transport/ObjectEndpoint.java sun/rmi/transport/ObjectTable.java sun/rmi/transport/StreamRemoteCall.java sun/rmi/transport/Target.java sun/rmi/transport/Transport.java sun/rmi/transport/TransportConstants.java sun/rmi/transport/WeakRef.java sun/security sun/security/acl sun/security/acl/SCCS sun/security/acl/SCCS/s.AllPermissionsImpl.java sun/security/acl/SCCS/s.AclEntryImpl.java sun/security/acl/SCCS/s.AclImpl.java sun/security/acl/SCCS/s.PermissionImpl.java sun/security/acl/SCCS/s.GroupImpl.java sun/security/acl/SCCS/s.OwnerImpl.java sun/security/acl/SCCS/s.PrincipalImpl.java sun/security/acl/SCCS/s.WorldGroupImpl.java sun/security/acl/AllPermissionsImpl.java sun/security/acl/AclEntryImpl.java sun/security/acl/AclImpl.java sun/security/acl/GroupImpl.java sun/security/acl/OwnerImpl.java sun/security/acl/PermissionImpl.java sun/security/acl/PrincipalImpl.java sun/security/acl/WorldGroupImpl.java sun/security/action sun/security/action/SCCS sun/security/action/SCCS/s.GetPropertyAction.java sun/security/action/SCCS/s.GetBooleanAction.java sun/security/action/SCCS/s.GetIntegerAction.java sun/security/action/SCCS/s.GetLongAction.java sun/security/action/SCCS/s.OpenFileInputStreamAction.java sun/security/action/SCCS/s.LoadLibraryAction.java sun/security/action/SCCS/s.PutAllAction.java sun/security/action/OpenFileInputStreamAction.java sun/security/action/GetBooleanAction.java sun/security/action/GetIntegerAction.java sun/security/action/GetLongAction.java sun/security/action/GetPropertyAction.java sun/security/action/LoadLibraryAction.java sun/security/action/PutAllAction.java sun/security/jca sun/security/jca/SCCS sun/security/jca/SCCS/s.ProviderConfig.java sun/security/jca/SCCS/s.GetInstance.java sun/security/jca/SCCS/s.JCAUtil.java sun/security/jca/SCCS/s.ProviderList.java sun/security/jca/SCCS/s.Providers.java sun/security/jca/SCCS/s.ServiceId.java sun/security/jca/GetInstance.java sun/security/jca/JCAUtil.java sun/security/jca/ProviderConfig.java sun/security/jca/ProviderList.java sun/security/jca/Providers.java sun/security/jca/ServiceId.java sun/security/jgss sun/security/jgss/SCCS sun/security/jgss/SCCS/s.GSSCredentialImpl.java sun/security/jgss/SCCS/s.GSSContextImpl.java sun/security/jgss/SCCS/s.GSSExceptionImpl.java sun/security/jgss/SCCS/s.GSSHeader.java sun/security/jgss/SCCS/s.GSSManagerImpl.java sun/security/jgss/SCCS/s.GSSNameImpl.java sun/security/jgss/SCCS/s.GSSUtil.java sun/security/jgss/SCCS/s.LoginUtility.java sun/security/jgss/SCCS/s.ProviderList.java sun/security/jgss/SCCS/s.SunProvider.java sun/security/jgss/SCCS/s.TokenTracker.java sun/security/jgss/krb5 sun/security/jgss/krb5/SCCS sun/security/jgss/krb5/SCCS/s.AcceptSecContextToken.java sun/security/jgss/krb5/SCCS/s.CipherHelper.java sun/security/jgss/krb5/SCCS/s.InitSecContextToken.java sun/security/jgss/krb5/SCCS/s.InitialToken.java sun/security/jgss/krb5/SCCS/s.Krb5AcceptCredential.java sun/security/jgss/krb5/SCCS/s.Krb5Context.java sun/security/jgss/krb5/SCCS/s.Krb5CredElement.java sun/security/jgss/krb5/SCCS/s.Krb5InitCredential.java sun/security/jgss/krb5/SCCS/s.Krb5MechFactory.java sun/security/jgss/krb5/SCCS/s.Krb5NameElement.java sun/security/jgss/krb5/SCCS/s.Krb5Token.java sun/security/jgss/krb5/SCCS/s.Krb5Util.java sun/security/jgss/krb5/SCCS/s.MessageToken.java sun/security/jgss/krb5/SCCS/s.MicToken.java sun/security/jgss/krb5/SCCS/s.SubjectComber.java sun/security/jgss/krb5/SCCS/s.WrapToken.java sun/security/jgss/krb5/SCCS/s.MessageToken_v2.java sun/security/jgss/krb5/SCCS/s.MicToken_v2.java sun/security/jgss/krb5/SCCS/s.WrapToken_v2.java sun/security/jgss/krb5/AcceptSecContextToken.java sun/security/jgss/krb5/CipherHelper.java sun/security/jgss/krb5/InitSecContextToken.java sun/security/jgss/krb5/InitialToken.java sun/security/jgss/krb5/Krb5AcceptCredential.java sun/security/jgss/krb5/Krb5Context.java sun/security/jgss/krb5/Krb5CredElement.java sun/security/jgss/krb5/Krb5InitCredential.java sun/security/jgss/krb5/Krb5MechFactory.java sun/security/jgss/krb5/Krb5NameElement.java sun/security/jgss/krb5/Krb5Token.java sun/security/jgss/krb5/Krb5Util.java sun/security/jgss/krb5/MessageToken.java sun/security/jgss/krb5/MicToken.java sun/security/jgss/krb5/SubjectComber.java sun/security/jgss/krb5/WrapToken.java sun/security/jgss/krb5/MessageToken_v2.java sun/security/jgss/krb5/MicToken_v2.java sun/security/jgss/krb5/WrapToken_v2.java sun/security/jgss/spi sun/security/jgss/spi/SCCS sun/security/jgss/spi/SCCS/s.GSSCredentialSpi.java sun/security/jgss/spi/SCCS/s.GSSNameSpi.java sun/security/jgss/spi/SCCS/s.MechanismFactory.java sun/security/jgss/spi/GSSCredentialSpi.java sun/security/jgss/spi/GSSNameSpi.java sun/security/jgss/spi/MechanismFactory.java sun/security/jgss/GSSCredentialImpl.java sun/security/jgss/GSSContextImpl.java sun/security/jgss/GSSExceptionImpl.java sun/security/jgss/GSSHeader.java sun/security/jgss/GSSManagerImpl.java sun/security/jgss/GSSNameImpl.java sun/security/jgss/GSSUtil.java sun/security/jgss/LoginUtility.java sun/security/jgss/ProviderList.java sun/security/jgss/SunProvider.java sun/security/jgss/TokenTracker.java sun/security/pkcs sun/security/pkcs/SCCS sun/security/pkcs/SCCS/s.EncodingException.java sun/security/pkcs/SCCS/s.ContentInfo.java sun/security/pkcs/SCCS/s.EncryptedPrivateKeyInfo.java sun/security/pkcs/SCCS/s.PKCS10.java sun/security/pkcs/SCCS/s.PKCS10Attribute.java sun/security/pkcs/SCCS/s.PKCS10Attributes.java sun/security/pkcs/SCCS/s.PKCS7.java sun/security/pkcs/SCCS/s.PKCS8Key.java sun/security/pkcs/SCCS/s.PKCS9Attribute.java sun/security/pkcs/SCCS/s.PKCS9Attributes.java sun/security/pkcs/SCCS/s.ParsingException.java sun/security/pkcs/SCCS/s.SignerInfo.java sun/security/pkcs/SCCS/s.SigningCertificateInfo.java sun/security/pkcs/EncodingException.java sun/security/pkcs/ContentInfo.java sun/security/pkcs/PKCS10.java sun/security/pkcs/EncryptedPrivateKeyInfo.java sun/security/pkcs/PKCS7.java sun/security/pkcs/PKCS10Attribute.java sun/security/pkcs/PKCS10Attributes.java sun/security/pkcs/PKCS8Key.java sun/security/pkcs/PKCS9Attribute.java sun/security/pkcs/PKCS9Attributes.java sun/security/pkcs/ParsingException.java sun/security/pkcs/SignerInfo.java sun/security/pkcs/SigningCertificateInfo.java sun/security/provider sun/security/provider/SCCS sun/security/provider/SCCS/s.DSA.java sun/security/provider/SCCS/s.DSAPublicKey.java sun/security/provider/SCCS/s.DSAKeyFactory.java sun/security/provider/SCCS/s.DSAKeyPairGenerator.java sun/security/provider/SCCS/s.DSAParameterGenerator.java sun/security/provider/SCCS/s.DSAParameters.java sun/security/provider/SCCS/s.DSAPrivateKey.java sun/security/provider/SCCS/s.DigestBase.java sun/security/provider/SCCS/s.IdentityDatabase.java sun/security/provider/SCCS/s.JavaKeyStore.java sun/security/provider/SCCS/s.KeyProtector.java sun/security/provider/SCCS/s.MD2.java sun/security/provider/SCCS/s.MD5.java sun/security/provider/SCCS/s.ParameterCache.java sun/security/provider/SCCS/s.PolicyFile.java sun/security/provider/SCCS/s.PolicyParser.java sun/security/provider/SCCS/s.SHA.java sun/security/provider/SCCS/s.SHA2.java sun/security/provider/SCCS/s.SHA5.java sun/security/provider/SCCS/s.SecureRandom.java sun/security/provider/SCCS/s.SeedGenerator.java sun/security/provider/SCCS/s.Sun.java sun/security/provider/SCCS/s.SystemIdentity.java sun/security/provider/SCCS/s.SystemSigner.java sun/security/provider/SCCS/s.X509Factory.java sun/security/provider/certpath sun/security/provider/certpath/SCCS sun/security/provider/certpath/SCCS/s.CollectionCertStore.java sun/security/provider/certpath/SCCS/s.AdjacencyList.java sun/security/provider/certpath/SCCS/s.BasicChecker.java sun/security/provider/certpath/SCCS/s.BuildStep.java sun/security/provider/certpath/SCCS/s.Builder.java sun/security/provider/certpath/SCCS/s.CertId.java sun/security/provider/certpath/SCCS/s.CertPathHelper.java sun/security/provider/certpath/SCCS/s.IndexedCollectionCertStore.java sun/security/provider/certpath/SCCS/s.ConstraintsChecker.java sun/security/provider/certpath/SCCS/s.CrlRevocationChecker.java sun/security/provider/certpath/SCCS/s.DistributionPointFetcher.java sun/security/provider/certpath/SCCS/s.ForwardBuilder.java sun/security/provider/certpath/SCCS/s.ForwardState.java sun/security/provider/certpath/SCCS/s.PKIXCertPathValidator.java sun/security/provider/certpath/SCCS/s.KeyChecker.java sun/security/provider/certpath/SCCS/s.LDAPCertStore.java sun/security/provider/certpath/SCCS/s.OCSPChecker.java sun/security/provider/certpath/SCCS/s.OCSPRequest.java sun/security/provider/certpath/SCCS/s.OCSPResponse.java sun/security/provider/certpath/SCCS/s.PKIXMasterCertPathValidator.java sun/security/provider/certpath/SCCS/s.PolicyChecker.java sun/security/provider/certpath/SCCS/s.PolicyNodeImpl.java sun/security/provider/certpath/SCCS/s.ReverseBuilder.java sun/security/provider/certpath/SCCS/s.ReverseState.java sun/security/provider/certpath/SCCS/s.State.java sun/security/provider/certpath/SCCS/s.SunCertPathBuilder.java sun/security/provider/certpath/SCCS/s.SunCertPathBuilderException.java sun/security/provider/certpath/SCCS/s.SunCertPathBuilderParameters.java sun/security/provider/certpath/SCCS/s.Vertex.java sun/security/provider/certpath/SCCS/s.SunCertPathBuilderResult.java sun/security/provider/certpath/SCCS/s.X509CertPath.java sun/security/provider/certpath/SCCS/s.X509CertificatePair.java sun/security/provider/certpath/CollectionCertStore.java sun/security/provider/certpath/AdjacencyList.java sun/security/provider/certpath/BasicChecker.java sun/security/provider/certpath/BuildStep.java sun/security/provider/certpath/Builder.java sun/security/provider/certpath/CertId.java sun/security/provider/certpath/CertPathHelper.java sun/security/provider/certpath/CrlRevocationChecker.java sun/security/provider/certpath/ConstraintsChecker.java sun/security/provider/certpath/State.java sun/security/provider/certpath/DistributionPointFetcher.java sun/security/provider/certpath/ForwardBuilder.java sun/security/provider/certpath/ForwardState.java sun/security/provider/certpath/IndexedCollectionCertStore.java sun/security/provider/certpath/KeyChecker.java sun/security/provider/certpath/X509CertificatePair.java sun/security/provider/certpath/LDAPCertStore.java sun/security/provider/certpath/OCSPChecker.java sun/security/provider/certpath/OCSPRequest.java sun/security/provider/certpath/OCSPResponse.java sun/security/provider/certpath/PKIXCertPathValidator.java sun/security/provider/certpath/PKIXMasterCertPathValidator.java sun/security/provider/certpath/PolicyChecker.java sun/security/provider/certpath/PolicyNodeImpl.java sun/security/provider/certpath/ReverseBuilder.java sun/security/provider/certpath/ReverseState.java sun/security/provider/certpath/SunCertPathBuilder.java sun/security/provider/certpath/Vertex.java sun/security/provider/certpath/X509CertPath.java sun/security/provider/certpath/SunCertPathBuilderException.java sun/security/provider/certpath/SunCertPathBuilderParameters.java sun/security/provider/certpath/SunCertPathBuilderResult.java sun/security/provider/DSAKeyFactory.java sun/security/provider/DSA.java sun/security/provider/DSAKeyPairGenerator.java sun/security/provider/DSAParameterGenerator.java sun/security/provider/DSAParameters.java sun/security/provider/DSAPrivateKey.java sun/security/provider/DSAPublicKey.java sun/security/provider/DigestBase.java sun/security/provider/IdentityDatabase.java sun/security/provider/JavaKeyStore.java sun/security/provider/KeyProtector.java sun/security/provider/MD2.java sun/security/provider/MD5.java sun/security/provider/ParameterCache.java sun/security/provider/PolicyFile.java sun/security/provider/PolicyParser.java sun/security/provider/SHA.java sun/security/provider/SHA2.java sun/security/provider/SHA5.java sun/security/provider/SecureRandom.java sun/security/provider/SeedGenerator.java sun/security/provider/Sun.java sun/security/provider/SystemIdentity.java sun/security/provider/SystemSigner.java sun/security/provider/X509Factory.java sun/security/rsa sun/security/rsa/SCCS sun/security/rsa/SCCS/s.RSAKeyFactory.java sun/security/rsa/SCCS/s.RSACore.java sun/security/rsa/SCCS/s.RSAKeyPairGenerator.java sun/security/rsa/SCCS/s.RSAPadding.java sun/security/rsa/SCCS/s.RSAPrivateCrtKeyImpl.java sun/security/rsa/SCCS/s.RSAPrivateKeyImpl.java sun/security/rsa/SCCS/s.RSAPublicKeyImpl.java sun/security/rsa/SCCS/s.RSASignature.java sun/security/rsa/SCCS/s.SunRsaSign.java sun/security/rsa/RSAKeyFactory.java sun/security/rsa/RSACore.java sun/security/rsa/RSAKeyPairGenerator.java sun/security/rsa/RSAPadding.java sun/security/rsa/RSAPrivateCrtKeyImpl.java sun/security/rsa/RSAPrivateKeyImpl.java sun/security/rsa/RSAPublicKeyImpl.java sun/security/rsa/RSASignature.java sun/security/rsa/SunRsaSign.java sun/security/timestamp sun/security/timestamp/SCCS sun/security/timestamp/SCCS/s.HttpTimestamper.java sun/security/timestamp/SCCS/s.TSRequest.java sun/security/timestamp/SCCS/s.TSResponse.java sun/security/timestamp/SCCS/s.TimestampToken.java sun/security/timestamp/SCCS/s.Timestamper.java sun/security/timestamp/HttpTimestamper.java sun/security/timestamp/TSRequest.java sun/security/timestamp/TSResponse.java sun/security/timestamp/TimestampToken.java sun/security/timestamp/Timestamper.java sun/security/tools sun/security/tools/SCCS sun/security/tools/SCCS/s.JarSignerResources.java sun/security/tools/SCCS/s.JarSigner.java sun/security/tools/SCCS/s.JarSignerResources_ja.java sun/security/tools/SCCS/s.KeyTool.java sun/security/tools/SCCS/s.PolicyTool.java sun/security/tools/SCCS/s.TimestampedSigner.java sun/security/tools/JarSignerResources.java sun/security/tools/JarSigner.java sun/security/tools/JarSignerResources_ja.java sun/security/tools/KeyTool.java sun/security/tools/PolicyTool.java sun/security/tools/TimestampedSigner.java sun/security/util sun/security/util/SCCS sun/security/util/SCCS/s.AuthResources_zh_CN.java sun/security/util/SCCS/s.AuthResources.java sun/security/util/SCCS/s.AuthResources_de.java sun/security/util/SCCS/s.AuthResources_es.java sun/security/util/SCCS/s.AuthResources_fr.java sun/security/util/SCCS/s.AuthResources_it.java sun/security/util/SCCS/s.AuthResources_ja.java sun/security/util/SCCS/s.AuthResources_ko.java sun/security/util/SCCS/s.AuthResources_sv.java sun/security/util/SCCS/s.AuthResources_zh_TW.java sun/security/util/SCCS/s.BigInt.java sun/security/util/SCCS/s.BitArray.java sun/security/util/SCCS/s.ByteArrayLexOrder.java sun/security/util/SCCS/s.Cache.java sun/security/util/SCCS/s.ByteArrayTagOrder.java sun/security/util/SCCS/s.Debug.java sun/security/util/SCCS/s.DerEncoder.java sun/security/util/SCCS/s.DerIndefLenConverter.java sun/security/util/SCCS/s.DerInputBuffer.java sun/security/util/SCCS/s.DerInputStream.java sun/security/util/SCCS/s.DerOutputStream.java sun/security/util/SCCS/s.DerValue.java sun/security/util/SCCS/s.HostnameChecker.java sun/security/util/SCCS/s.ManifestDigester.java sun/security/util/SCCS/s.ManifestEntryVerifier.java sun/security/util/SCCS/s.ObjectIdentifier.java sun/security/util/SCCS/s.Password.java sun/security/util/SCCS/s.PendingException.java sun/security/util/SCCS/s.PropertyExpander.java sun/security/util/SCCS/s.Resources.java sun/security/util/SCCS/s.ResourcesMgr.java sun/security/util/SCCS/s.PathList.java sun/security/util/SCCS/s.Resources_de.java sun/security/util/SCCS/s.Resources_es.java sun/security/util/SCCS/s.Resources_fr.java sun/security/util/SCCS/s.Resources_it.java sun/security/util/SCCS/s.Resources_ja.java sun/security/util/SCCS/s.Resources_ko.java sun/security/util/SCCS/s.Resources_sv.java sun/security/util/SCCS/s.Resources_zh_CN.java sun/security/util/SCCS/s.Resources_zh_TW.java sun/security/util/SCCS/s.SecurityConstants.java sun/security/util/SCCS/s.SignatureFileVerifier.java sun/security/util/SCCS/s.PolicyUtil.java sun/security/util/AuthResources_de.java sun/security/util/AuthResources.java sun/security/util/DerIndefLenConverter.java sun/security/util/AuthResources_es.java sun/security/util/AuthResources_fr.java sun/security/util/AuthResources_it.java sun/security/util/AuthResources_ja.java sun/security/util/AuthResources_ko.java sun/security/util/AuthResources_sv.java sun/security/util/AuthResources_zh_CN.java sun/security/util/AuthResources_zh_TW.java sun/security/util/BigInt.java sun/security/util/BitArray.java sun/security/util/ByteArrayLexOrder.java sun/security/util/ByteArrayTagOrder.java sun/security/util/Cache.java sun/security/util/Debug.java sun/security/util/DerEncoder.java sun/security/util/DerOutputStream.java sun/security/util/DerInputBuffer.java sun/security/util/DerInputStream.java sun/security/util/HostnameChecker.java sun/security/util/DerValue.java sun/security/util/Resources_zh_CN.java sun/security/util/ManifestDigester.java sun/security/util/ManifestEntryVerifier.java sun/security/util/ObjectIdentifier.java sun/security/util/Password.java sun/security/util/PendingException.java sun/security/util/PropertyExpander.java sun/security/util/Resources.java sun/security/util/ResourcesMgr.java sun/security/util/Resources_de.java sun/security/util/Resources_es.java sun/security/util/Resources_fr.java sun/security/util/Resources_it.java sun/security/util/Resources_ja.java sun/security/util/Resources_ko.java sun/security/util/Resources_sv.java sun/security/util/SignatureFileVerifier.java sun/security/util/Resources_zh_TW.java sun/security/util/SecurityConstants.java sun/security/util/PolicyUtil.java sun/security/util/PathList.java sun/security/validator sun/security/validator/SCCS sun/security/validator/SCCS/s.ValidatorException.java sun/security/validator/SCCS/s.EndEntityChecker.java sun/security/validator/SCCS/s.KeyStores.java sun/security/validator/SCCS/s.PKIXValidator.java sun/security/validator/SCCS/s.SimpleValidator.java sun/security/validator/SCCS/s.Validator.java sun/security/validator/EndEntityChecker.java sun/security/validator/KeyStores.java sun/security/validator/PKIXValidator.java sun/security/validator/SimpleValidator.java sun/security/validator/Validator.java sun/security/validator/ValidatorException.java sun/security/x509 sun/security/x509/SCCS sun/security/x509/SCCS/s.AlgIdDSA.java sun/security/x509/SCCS/s.AVA.java sun/security/x509/SCCS/s.AuthorityKeyIdentifierExtension.java sun/security/x509/SCCS/s.AccessDescription.java sun/security/x509/SCCS/s.AlgorithmId.java sun/security/x509/SCCS/s.AttributeNameEnumeration.java sun/security/x509/SCCS/s.CRLDistributionPointsExtension.java sun/security/x509/SCCS/s.BasicConstraintsExtension.java sun/security/x509/SCCS/s.CRLReasonCodeExtension.java sun/security/x509/SCCS/s.CRLExtensions.java sun/security/x509/SCCS/s.CRLNumberExtension.java sun/security/x509/SCCS/s.CertAndKeyGen.java sun/security/x509/SCCS/s.DNSName.java sun/security/x509/SCCS/s.GeneralNameInterface.java sun/security/x509/SCCS/s.CertAttrSet.java sun/security/x509/SCCS/s.CertException.java sun/security/x509/SCCS/s.CertParseError.java sun/security/x509/SCCS/s.CertificateAlgorithmId.java sun/security/x509/SCCS/s.CertificateExtensions.java sun/security/x509/SCCS/s.CertificateIssuerExtension.java sun/security/x509/SCCS/s.CertificateIssuerName.java sun/security/x509/SCCS/s.CertificateIssuerUniqueIdentity.java sun/security/x509/SCCS/s.CertificatePoliciesExtension.java sun/security/x509/SCCS/s.CertificatePolicyId.java sun/security/x509/SCCS/s.CertificatePolicyMap.java sun/security/x509/SCCS/s.CertificatePolicySet.java sun/security/x509/SCCS/s.CertificateSerialNumber.java sun/security/x509/SCCS/s.CertificateSubjectName.java sun/security/x509/SCCS/s.CertificateSubjectUniqueIdentity.java sun/security/x509/SCCS/s.CertificateValidity.java sun/security/x509/SCCS/s.CertificateVersion.java sun/security/x509/SCCS/s.CertificateX509Key.java sun/security/x509/SCCS/s.EDIPartyName.java sun/security/x509/SCCS/s.DistributionPoint.java sun/security/x509/SCCS/s.Extension.java sun/security/x509/SCCS/s.ExtendedKeyUsageExtension.java sun/security/x509/SCCS/s.GeneralName.java sun/security/x509/SCCS/s.GeneralNames.java sun/security/x509/SCCS/s.GeneralSubtree.java sun/security/x509/SCCS/s.GeneralSubtrees.java sun/security/x509/SCCS/s.OIDMap.java sun/security/x509/SCCS/s.PKIXExtensions.java sun/security/x509/SCCS/s.IPAddressName.java sun/security/x509/SCCS/s.InhibitAnyPolicyExtension.java sun/security/x509/SCCS/s.IssuerAlternativeNameExtension.java sun/security/x509/SCCS/s.KeyIdentifier.java sun/security/x509/SCCS/s.KeyUsageExtension.java sun/security/x509/SCCS/s.NameConstraintsExtension.java sun/security/x509/SCCS/s.NetscapeCertTypeExtension.java sun/security/x509/SCCS/s.OIDName.java sun/security/x509/SCCS/s.OtherName.java sun/security/x509/SCCS/s.RDN.java sun/security/x509/SCCS/s.PolicyConstraintsExtension.java sun/security/x509/SCCS/s.PolicyInformation.java sun/security/x509/SCCS/s.PolicyMappingsExtension.java sun/security/x509/SCCS/s.AuthorityInfoAccessExtension.java sun/security/x509/SCCS/s.PrivateKeyUsageExtension.java sun/security/x509/SCCS/s.README sun/security/x509/SCCS/s.RFC822Name.java sun/security/x509/SCCS/s.ReasonFlags.java sun/security/x509/SCCS/s.SerialNumber.java sun/security/x509/SCCS/s.URIName.java sun/security/x509/SCCS/s.UniqueIdentity.java sun/security/x509/SCCS/s.SubjectAlternativeNameExtension.java sun/security/x509/SCCS/s.SubjectKeyIdentifierExtension.java sun/security/x509/SCCS/s.X400Address.java sun/security/x509/SCCS/s.X500Name.java sun/security/x509/SCCS/s.X500Signer.java sun/security/x509/SCCS/s.X509AttributeName.java sun/security/x509/SCCS/s.X509CRLEntryImpl.java sun/security/x509/SCCS/s.X509CRLImpl.java sun/security/x509/SCCS/s.X509Cert.java sun/security/x509/SCCS/s.X509CertImpl.java sun/security/x509/SCCS/s.X509CertInfo.java sun/security/x509/SCCS/s.X509Key.java sun/security/x509/SCCS/s.certAttributes.html sun/security/x509/AlgIdDSA.java sun/security/x509/AVA.java sun/security/x509/AttributeNameEnumeration.java sun/security/x509/AccessDescription.java sun/security/x509/AlgorithmId.java sun/security/x509/AuthorityKeyIdentifierExtension.java sun/security/x509/BasicConstraintsExtension.java sun/security/x509/CRLDistributionPointsExtension.java sun/security/x509/CRLExtensions.java sun/security/x509/CRLNumberExtension.java sun/security/x509/CRLReasonCodeExtension.java sun/security/x509/CertAndKeyGen.java sun/security/x509/CertAttrSet.java sun/security/x509/CertificateIssuerExtension.java sun/security/x509/CertException.java sun/security/x509/CertParseError.java sun/security/x509/CertificateAlgorithmId.java sun/security/x509/CertificateExtensions.java sun/security/x509/CertificatePoliciesExtension.java sun/security/x509/CertificateIssuerName.java sun/security/x509/DNSName.java sun/security/x509/CertificateIssuerUniqueIdentity.java sun/security/x509/CertificatePolicyId.java sun/security/x509/CertificatePolicyMap.java sun/security/x509/CertificatePolicySet.java sun/security/x509/CertificateSerialNumber.java sun/security/x509/CertificateSubjectName.java sun/security/x509/IssuerAlternativeNameExtension.java sun/security/x509/CertificateSubjectUniqueIdentity.java sun/security/x509/CertificateValidity.java sun/security/x509/CertificateVersion.java sun/security/x509/CertificateX509Key.java sun/security/x509/DistributionPoint.java sun/security/x509/EDIPartyName.java sun/security/x509/ExtendedKeyUsageExtension.java sun/security/x509/Extension.java sun/security/x509/GeneralName.java sun/security/x509/GeneralNameInterface.java sun/security/x509/GeneralNames.java sun/security/x509/GeneralSubtree.java sun/security/x509/GeneralSubtrees.java sun/security/x509/IPAddressName.java sun/security/x509/InhibitAnyPolicyExtension.java sun/security/x509/OIDMap.java sun/security/x509/KeyUsageExtension.java sun/security/x509/KeyIdentifier.java sun/security/x509/ReasonFlags.java sun/security/x509/RDN.java sun/security/x509/NameConstraintsExtension.java sun/security/x509/NetscapeCertTypeExtension.java sun/security/x509/OIDName.java sun/security/x509/OtherName.java sun/security/x509/PKIXExtensions.java sun/security/x509/PolicyConstraintsExtension.java sun/security/x509/PolicyInformation.java sun/security/x509/PolicyMappingsExtension.java sun/security/x509/PrivateKeyUsageExtension.java sun/security/x509/README sun/security/x509/RFC822Name.java sun/security/x509/UniqueIdentity.java sun/security/x509/URIName.java sun/security/x509/SerialNumber.java sun/security/x509/SubjectAlternativeNameExtension.java sun/security/x509/SubjectKeyIdentifierExtension.java sun/security/x509/X509AttributeName.java sun/security/x509/X400Address.java sun/security/x509/X500Name.java sun/security/x509/X500Signer.java sun/security/x509/X509CRLEntryImpl.java sun/security/x509/X509CRLImpl.java sun/security/x509/X509Cert.java sun/security/x509/X509CertImpl.java sun/security/x509/X509CertInfo.java sun/security/x509/X509Key.java sun/security/x509/certAttributes.html sun/security/x509/AuthorityInfoAccessExtension.java sun/security/pkcs11 sun/security/pkcs11/SCCS sun/security/pkcs11/SCCS/s.JarVerifierImpl.java sun/security/pkcs11/SCCS/s.Config.java sun/security/pkcs11/SCCS/s.P11Cipher.java sun/security/pkcs11/SCCS/s.KeyCache.java sun/security/pkcs11/SCCS/s.P11DHKeyFactory.java sun/security/pkcs11/SCCS/s.P11DSAKeyFactory.java sun/security/pkcs11/SCCS/s.P11Digest.java sun/security/pkcs11/SCCS/s.P11Key.java sun/security/pkcs11/SCCS/s.P11KeyAgreement.java sun/security/pkcs11/SCCS/s.P11KeyFactory.java sun/security/pkcs11/SCCS/s.P11KeyGenerator.java sun/security/pkcs11/SCCS/s.P11KeyPairGenerator.java sun/security/pkcs11/SCCS/s.P11KeyStore.java sun/security/pkcs11/SCCS/s.P11Mac.java sun/security/pkcs11/SCCS/s.P11RSACipher.java sun/security/pkcs11/SCCS/s.P11RSAKeyFactory.java sun/security/pkcs11/SCCS/s.P11SecretKeyFactory.java sun/security/pkcs11/SCCS/s.P11SecureRandom.java sun/security/pkcs11/SCCS/s.P11Signature.java sun/security/pkcs11/SCCS/s.P11Util.java sun/security/pkcs11/SCCS/s.Session.java sun/security/pkcs11/SCCS/s.SessionManager.java sun/security/pkcs11/SCCS/s.SunPKCS11.java sun/security/pkcs11/SCCS/s.TemplateManager.java sun/security/pkcs11/SCCS/s.Token.java sun/security/pkcs11/wrapper sun/security/pkcs11/wrapper/SCCS sun/security/pkcs11/wrapper/SCCS/s.CK_CREATEMUTEX.java sun/security/pkcs11/wrapper/SCCS/s.CK_ATTRIBUTE.java sun/security/pkcs11/wrapper/SCCS/s.CK_X9_42_DH1_DERIVE_PARAMS.java sun/security/pkcs11/wrapper/SCCS/s.CK_C_INITIALIZE_ARGS.java sun/security/pkcs11/wrapper/SCCS/s.CK_DATE.java sun/security/pkcs11/wrapper/SCCS/s.CK_DESTROYMUTEX.java sun/security/pkcs11/wrapper/SCCS/s.CK_ECDH1_DERIVE_PARAMS.java sun/security/pkcs11/wrapper/SCCS/s.CK_ECDH2_DERIVE_PARAMS.java sun/security/pkcs11/wrapper/SCCS/s.CK_INFO.java sun/security/pkcs11/wrapper/SCCS/s.CK_LOCKMUTEX.java sun/security/pkcs11/wrapper/SCCS/s.CK_MECHANISM.java sun/security/pkcs11/wrapper/SCCS/s.CK_MECHANISM_INFO.java sun/security/pkcs11/wrapper/SCCS/s.CK_NOTIFY.java sun/security/pkcs11/wrapper/SCCS/s.CK_PBE_PARAMS.java sun/security/pkcs11/wrapper/SCCS/s.CK_SESSION_INFO.java sun/security/pkcs11/wrapper/SCCS/s.CK_PKCS5_PBKD2_PARAMS.java sun/security/pkcs11/wrapper/SCCS/s.CK_RSA_PKCS_OAEP_PARAMS.java sun/security/pkcs11/wrapper/SCCS/s.CK_RSA_PKCS_PSS_PARAMS.java sun/security/pkcs11/wrapper/SCCS/s.CK_SLOT_INFO.java sun/security/pkcs11/wrapper/SCCS/s.CK_TOKEN_INFO.java sun/security/pkcs11/wrapper/SCCS/s.CK_UNLOCKMUTEX.java sun/security/pkcs11/wrapper/SCCS/s.CK_VERSION.java sun/security/pkcs11/wrapper/SCCS/s.CK_X9_42_DH2_DERIVE_PARAMS.java sun/security/pkcs11/wrapper/SCCS/s.Constants.java sun/security/pkcs11/wrapper/SCCS/s.Functions.java sun/security/pkcs11/wrapper/SCCS/s.PKCS11.java sun/security/pkcs11/wrapper/SCCS/s.PKCS11Constants.java sun/security/pkcs11/wrapper/SCCS/s.PKCS11Exception.java sun/security/pkcs11/wrapper/SCCS/s.PKCS11RuntimeException.java sun/security/pkcs11/wrapper/CK_C_INITIALIZE_ARGS.java sun/security/pkcs11/wrapper/CK_ATTRIBUTE.java sun/security/pkcs11/wrapper/CK_CREATEMUTEX.java sun/security/pkcs11/wrapper/CK_DESTROYMUTEX.java sun/security/pkcs11/wrapper/CK_DATE.java sun/security/pkcs11/wrapper/CK_ECDH1_DERIVE_PARAMS.java sun/security/pkcs11/wrapper/CK_ECDH2_DERIVE_PARAMS.java sun/security/pkcs11/wrapper/CK_INFO.java sun/security/pkcs11/wrapper/CK_LOCKMUTEX.java sun/security/pkcs11/wrapper/CK_MECHANISM.java sun/security/pkcs11/wrapper/CK_MECHANISM_INFO.java sun/security/pkcs11/wrapper/CK_NOTIFY.java sun/security/pkcs11/wrapper/CK_PBE_PARAMS.java sun/security/pkcs11/wrapper/CK_PKCS5_PBKD2_PARAMS.java sun/security/pkcs11/wrapper/PKCS11.java sun/security/pkcs11/wrapper/CK_SESSION_INFO.java sun/security/pkcs11/wrapper/CK_RSA_PKCS_OAEP_PARAMS.java sun/security/pkcs11/wrapper/CK_RSA_PKCS_PSS_PARAMS.java sun/security/pkcs11/wrapper/CK_SLOT_INFO.java sun/security/pkcs11/wrapper/CK_TOKEN_INFO.java sun/security/pkcs11/wrapper/CK_UNLOCKMUTEX.java sun/security/pkcs11/wrapper/CK_VERSION.java sun/security/pkcs11/wrapper/CK_X9_42_DH1_DERIVE_PARAMS.java sun/security/pkcs11/wrapper/CK_X9_42_DH2_DERIVE_PARAMS.java sun/security/pkcs11/wrapper/Constants.java sun/security/pkcs11/wrapper/Functions.java sun/security/pkcs11/wrapper/PKCS11RuntimeException.java sun/security/pkcs11/wrapper/PKCS11Constants.java sun/security/pkcs11/wrapper/PKCS11Exception.java sun/security/pkcs11/KeyCache.java sun/security/pkcs11/Config.java sun/security/pkcs11/JarVerifierImpl.java sun/security/pkcs11/P11Cipher.java sun/security/pkcs11/P11DHKeyFactory.java sun/security/pkcs11/P11DSAKeyFactory.java sun/security/pkcs11/P11Digest.java sun/security/pkcs11/P11Key.java sun/security/pkcs11/P11KeyAgreement.java sun/security/pkcs11/P11KeyFactory.java sun/security/pkcs11/P11KeyGenerator.java sun/security/pkcs11/P11KeyPairGenerator.java sun/security/pkcs11/P11KeyStore.java sun/security/pkcs11/P11Mac.java sun/security/pkcs11/P11RSACipher.java sun/security/pkcs11/P11RSAKeyFactory.java sun/security/pkcs11/P11SecretKeyFactory.java sun/security/pkcs11/P11SecureRandom.java sun/security/pkcs11/P11Signature.java sun/security/pkcs11/P11Util.java sun/security/pkcs11/Session.java sun/security/pkcs11/SessionManager.java sun/security/pkcs11/SunPKCS11.java sun/security/pkcs11/TemplateManager.java sun/security/pkcs11/Token.java sun/swing sun/swing/SCCS sun/swing/SCCS/s.PrintColorUIResource.java sun/swing/SCCS/s.BakedArrayList.java sun/swing/SCCS/s.DefaultLookup.java sun/swing/SCCS/s.FilePane.java sun/swing/SCCS/s.SwingLazyValue.java sun/swing/SCCS/s.UIAction.java sun/swing/SCCS/s.WindowsPlacesBar.java sun/swing/SCCS/s.CachedPainter.java sun/swing/SCCS/s.ImageIconUIResource.java sun/swing/plaf sun/swing/plaf/synth sun/swing/plaf/synth/SCCS sun/swing/plaf/synth/SCCS/s.SynthFileChooserUIImpl.java sun/swing/plaf/synth/SCCS/s.DefaultSynthStyle.java sun/swing/plaf/synth/SCCS/s.StyleAssociation.java sun/swing/plaf/synth/SCCS/s.SynthFileChooserUI.java sun/swing/plaf/synth/SCCS/s.SynthIcon.java sun/swing/plaf/synth/SCCS/s.SynthUI.java sun/swing/plaf/synth/SCCS/s.Paint9Painter.java sun/swing/plaf/synth/SynthFileChooserUIImpl.java sun/swing/plaf/synth/DefaultSynthStyle.java sun/swing/plaf/synth/StyleAssociation.java sun/swing/plaf/synth/SynthFileChooserUI.java sun/swing/plaf/synth/SynthIcon.java sun/swing/plaf/synth/SynthUI.java sun/swing/plaf/synth/Paint9Painter.java sun/swing/WindowsPlacesBar.java sun/swing/BakedArrayList.java sun/swing/DefaultLookup.java sun/swing/FilePane.java sun/swing/SwingLazyValue.java sun/swing/UIAction.java sun/swing/PrintColorUIResource.java sun/swing/CachedPainter.java sun/swing/ImageIconUIResource.java sun/text sun/text/SCCS sun/text/SCCS/s.CompactByteArray.java sun/text/SCCS/s.CharTrie.java sun/text/SCCS/s.CodePointIterator.java sun/text/SCCS/s.CompactCharArray.java sun/text/SCCS/s.CompactIntArray.java sun/text/SCCS/s.CompactShortArray.java sun/text/SCCS/s.ComposedCharIter.java sun/text/SCCS/s.ICUBinary.java sun/text/SCCS/s.IntHashtable.java sun/text/SCCS/s.IntTrie.java sun/text/SCCS/s.Normalizer.java sun/text/SCCS/s.NormalizerDataReader.java sun/text/SCCS/s.NormalizerImpl.java sun/text/SCCS/s.NormalizerUtilities.java sun/text/SCCS/s.Trie.java sun/text/SCCS/s.Utility.java sun/text/SCCS/s.SupplementaryCharacterData.java sun/text/SCCS/s.UCharacterIterator.java sun/text/SCCS/s.UCompactIntArray.java sun/text/resources sun/text/resources/SCCS sun/text/resources/SCCS/s.BreakIteratorRules_th.java sun/text/resources/SCCS/s.BreakIteratorInfo.java sun/text/resources/SCCS/s.BreakIteratorInfo_th.java sun/text/resources/SCCS/s.BreakIteratorRules.java sun/text/resources/SCCS/s.DateFormatZoneData.java sun/text/resources/SCCS/s.DateFormatZoneData_ar.java sun/text/resources/SCCS/s.DateFormatZoneData_be.java sun/text/resources/SCCS/s.DateFormatZoneData_bg.java sun/text/resources/SCCS/s.DateFormatZoneData_ca.java sun/text/resources/SCCS/s.DateFormatZoneData_cs.java sun/text/resources/SCCS/s.DateFormatZoneData_da.java sun/text/resources/SCCS/s.LocaleElements.java sun/text/resources/SCCS/s.LocaleData.java sun/text/resources/SCCS/s.DateFormatZoneData_de.java sun/text/resources/SCCS/s.DateFormatZoneData_de_AT.java sun/text/resources/SCCS/s.DateFormatZoneData_de_CH.java sun/text/resources/SCCS/s.DateFormatZoneData_el.java sun/text/resources/SCCS/s.DateFormatZoneData_en.java sun/text/resources/SCCS/s.DateFormatZoneData_en_CA.java sun/text/resources/SCCS/s.DateFormatZoneData_en_GB.java sun/text/resources/SCCS/s.DateFormatZoneData_en_IE.java sun/text/resources/SCCS/s.DateFormatZoneData_en_IN.java sun/text/resources/SCCS/s.DateFormatZoneData_es.java sun/text/resources/SCCS/s.DateFormatZoneData_et.java sun/text/resources/SCCS/s.DateFormatZoneData_fi.java sun/text/resources/SCCS/s.thai_dict sun/text/resources/SCCS/s.DateFormatZoneData_fr.java sun/text/resources/SCCS/s.DateFormatZoneData_fr_BE.java sun/text/resources/SCCS/s.DateFormatZoneData_fr_CA.java sun/text/resources/SCCS/s.DateFormatZoneData_fr_CH.java sun/text/resources/SCCS/s.DateFormatZoneData_hi_IN.java sun/text/resources/SCCS/s.DateFormatZoneData_hr.java sun/text/resources/SCCS/s.DateFormatZoneData_hu.java sun/text/resources/SCCS/s.DateFormatZoneData_is.java sun/text/resources/SCCS/s.DateFormatZoneData_it.java sun/text/resources/SCCS/s.DateFormatZoneData_it_CH.java sun/text/resources/SCCS/s.DateFormatZoneData_iw.java sun/text/resources/SCCS/s.DateFormatZoneData_ja.java sun/text/resources/SCCS/s.unorm.icu sun/text/resources/SCCS/s.DateFormatZoneData_ko.java sun/text/resources/SCCS/s.DateFormatZoneData_lt.java sun/text/resources/SCCS/s.DateFormatZoneData_lv.java sun/text/resources/SCCS/s.DateFormatZoneData_mk.java sun/text/resources/SCCS/s.DateFormatZoneData_nl.java sun/text/resources/SCCS/s.DateFormatZoneData_nl_BE.java sun/text/resources/SCCS/s.DateFormatZoneData_no.java sun/text/resources/SCCS/s.DateFormatZoneData_no_NO_NY.java sun/text/resources/SCCS/s.DateFormatZoneData_pl.java sun/text/resources/SCCS/s.DateFormatZoneData_pt.java sun/text/resources/SCCS/s.DateFormatZoneData_ro.java sun/text/resources/SCCS/s.DateFormatZoneData_ru.java sun/text/resources/SCCS/s.DateFormatZoneData_sk.java sun/text/resources/SCCS/s.DateFormatZoneData_sl.java sun/text/resources/SCCS/s.DateFormatZoneData_sq.java sun/text/resources/SCCS/s.DateFormatZoneData_sv.java sun/text/resources/SCCS/s.DateFormatZoneData_th.java sun/text/resources/SCCS/s.DateFormatZoneData_tr.java sun/text/resources/SCCS/s.DateFormatZoneData_uk.java sun/text/resources/SCCS/s.DateFormatZoneData_zh_CN.java sun/text/resources/SCCS/s.DateFormatZoneData_zh_HK.java sun/text/resources/SCCS/s.DateFormatZoneData_zh_TW.java sun/text/resources/SCCS/s.LocaleElements_ar.java sun/text/resources/SCCS/s.LocaleElements_ar_AE.java sun/text/resources/SCCS/s.LocaleElements_ar_BH.java sun/text/resources/SCCS/s.LocaleElements_ar_DZ.java sun/text/resources/SCCS/s.LocaleElements_ar_EG.java sun/text/resources/SCCS/s.LocaleElements_ar_IQ.java sun/text/resources/SCCS/s.LocaleElements_ar_JO.java sun/text/resources/SCCS/s.LocaleElements_ar_KW.java sun/text/resources/SCCS/s.LocaleElements_ar_LB.java sun/text/resources/SCCS/s.LocaleElements_ar_LY.java sun/text/resources/SCCS/s.LocaleElements_ar_MA.java sun/text/resources/SCCS/s.LocaleElements_ar_OM.java sun/text/resources/SCCS/s.LocaleElements_ar_QA.java sun/text/resources/SCCS/s.LocaleElements_ar_SA.java sun/text/resources/SCCS/s.LocaleElements_ar_SD.java sun/text/resources/SCCS/s.LocaleElements_ar_SY.java sun/text/resources/SCCS/s.LocaleElements_ar_TN.java sun/text/resources/SCCS/s.LocaleElements_ar_YE.java sun/text/resources/SCCS/s.LocaleElements_be.java sun/text/resources/SCCS/s.LocaleElements_be_BY.java sun/text/resources/SCCS/s.LocaleElements_bg.java sun/text/resources/SCCS/s.LocaleElements_bg_BG.java sun/text/resources/SCCS/s.LocaleElements_ca.java sun/text/resources/SCCS/s.LocaleElements_ca_ES.java sun/text/resources/SCCS/s.LocaleElements_cs.java sun/text/resources/SCCS/s.LocaleElements_cs_CZ.java sun/text/resources/SCCS/s.LocaleElements_da.java sun/text/resources/SCCS/s.LocaleElements_da_DK.java sun/text/resources/SCCS/s.LocaleElements_de.java sun/text/resources/SCCS/s.LocaleElements_de_AT.java sun/text/resources/SCCS/s.LocaleElements_de_CH.java sun/text/resources/SCCS/s.LocaleElements_de_DE.java sun/text/resources/SCCS/s.LocaleElements_de_LU.java sun/text/resources/SCCS/s.LocaleElements_el.java sun/text/resources/SCCS/s.LocaleElements_el_GR.java sun/text/resources/SCCS/s.LocaleElements_en.java sun/text/resources/SCCS/s.LocaleElements_en_AU.java sun/text/resources/SCCS/s.LocaleElements_en_CA.java sun/text/resources/SCCS/s.LocaleElements_en_GB.java sun/text/resources/SCCS/s.LocaleElements_en_IE.java sun/text/resources/SCCS/s.LocaleElements_en_IN.java sun/text/resources/SCCS/s.LocaleElements_en_NZ.java sun/text/resources/SCCS/s.LocaleElements_en_US.java sun/text/resources/SCCS/s.LocaleElements_en_ZA.java sun/text/resources/SCCS/s.LocaleElements_es.java sun/text/resources/SCCS/s.LocaleElements_es_AR.java sun/text/resources/SCCS/s.LocaleElements_es_BO.java sun/text/resources/SCCS/s.LocaleElements_es_CL.java sun/text/resources/SCCS/s.LocaleElements_es_CO.java sun/text/resources/SCCS/s.LocaleElements_es_CR.java sun/text/resources/SCCS/s.LocaleElements_es_DO.java sun/text/resources/SCCS/s.LocaleElements_es_EC.java sun/text/resources/SCCS/s.LocaleElements_es_ES.java sun/text/resources/SCCS/s.LocaleElements_es_GT.java sun/text/resources/SCCS/s.LocaleElements_es_HN.java sun/text/resources/SCCS/s.LocaleElements_es_MX.java sun/text/resources/SCCS/s.LocaleElements_es_NI.java sun/text/resources/SCCS/s.LocaleElements_es_PA.java sun/text/resources/SCCS/s.LocaleElements_es_PE.java sun/text/resources/SCCS/s.LocaleElements_es_PR.java sun/text/resources/SCCS/s.LocaleElements_es_PY.java sun/text/resources/SCCS/s.LocaleElements_es_SV.java sun/text/resources/SCCS/s.LocaleElements_es_UY.java sun/text/resources/SCCS/s.LocaleElements_es_VE.java sun/text/resources/SCCS/s.LocaleElements_et.java sun/text/resources/SCCS/s.LocaleElements_et_EE.java sun/text/resources/SCCS/s.LocaleElements_fi.java sun/text/resources/SCCS/s.LocaleElements_fi_FI.java sun/text/resources/SCCS/s.LocaleElements_fr.java sun/text/resources/SCCS/s.LocaleElements_fr_BE.java sun/text/resources/SCCS/s.LocaleElements_fr_CA.java sun/text/resources/SCCS/s.LocaleElements_fr_CH.java sun/text/resources/SCCS/s.LocaleElements_fr_FR.java sun/text/resources/SCCS/s.LocaleElements_fr_LU.java sun/text/resources/SCCS/s.LocaleElements_hi_IN.java sun/text/resources/SCCS/s.LocaleElements_hr.java sun/text/resources/SCCS/s.LocaleElements_hr_HR.java sun/text/resources/SCCS/s.LocaleElements_hu.java sun/text/resources/SCCS/s.LocaleElements_hu_HU.java sun/text/resources/SCCS/s.LocaleElements_is.java sun/text/resources/SCCS/s.LocaleElements_is_IS.java sun/text/resources/SCCS/s.LocaleElements_it.java sun/text/resources/SCCS/s.LocaleElements_it_CH.java sun/text/resources/SCCS/s.LocaleElements_it_IT.java sun/text/resources/SCCS/s.LocaleElements_iw.java sun/text/resources/SCCS/s.LocaleElements_iw_IL.java sun/text/resources/SCCS/s.LocaleElements_ja.java sun/text/resources/SCCS/s.LocaleElements_ja_JP.java sun/text/resources/SCCS/s.LocaleElements_ko.java sun/text/resources/SCCS/s.LocaleElements_ko_KR.java sun/text/resources/SCCS/s.LocaleElements_lt.java sun/text/resources/SCCS/s.LocaleElements_lt_LT.java sun/text/resources/SCCS/s.LocaleElements_lv.java sun/text/resources/SCCS/s.LocaleElements_lv_LV.java sun/text/resources/SCCS/s.LocaleElements_mk.java sun/text/resources/SCCS/s.LocaleElements_mk_MK.java sun/text/resources/SCCS/s.LocaleElements_nl.java sun/text/resources/SCCS/s.LocaleElements_nl_BE.java sun/text/resources/SCCS/s.LocaleElements_nl_NL.java sun/text/resources/SCCS/s.LocaleElements_no.java sun/text/resources/SCCS/s.LocaleElements_no_NO.java sun/text/resources/SCCS/s.LocaleElements_no_NO_NY.java sun/text/resources/SCCS/s.LocaleElements_pl.java sun/text/resources/SCCS/s.LocaleElements_pl_PL.java sun/text/resources/SCCS/s.LocaleElements_pt.java sun/text/resources/SCCS/s.LocaleElements_pt_BR.java sun/text/resources/SCCS/s.LocaleElements_pt_PT.java sun/text/resources/SCCS/s.LocaleElements_ro.java sun/text/resources/SCCS/s.LocaleElements_ro_RO.java sun/text/resources/SCCS/s.LocaleElements_ru.java sun/text/resources/SCCS/s.LocaleElements_ru_RU.java sun/text/resources/SCCS/s.LocaleElements_sk.java sun/text/resources/SCCS/s.LocaleElements_sk_SK.java sun/text/resources/SCCS/s.LocaleElements_sl.java sun/text/resources/SCCS/s.LocaleElements_sl_SI.java sun/text/resources/SCCS/s.LocaleElements_sq.java sun/text/resources/SCCS/s.LocaleElements_sq_AL.java sun/text/resources/SCCS/s.LocaleElements_sv.java sun/text/resources/SCCS/s.LocaleElements_sv_SE.java sun/text/resources/SCCS/s.LocaleElements_th.java sun/text/resources/SCCS/s.LocaleElements_th_TH.java sun/text/resources/SCCS/s.LocaleElements_th_TH_TH.java sun/text/resources/SCCS/s.LocaleElements_tr.java sun/text/resources/SCCS/s.LocaleElements_tr_TR.java sun/text/resources/SCCS/s.LocaleElements_uk.java sun/text/resources/SCCS/s.LocaleElements_uk_UA.java sun/text/resources/SCCS/s.LocaleElements_vi.java sun/text/resources/SCCS/s.LocaleElements_vi_VN.java sun/text/resources/SCCS/s.LocaleElements_zh.java sun/text/resources/SCCS/s.LocaleElements_zh_CN.java sun/text/resources/SCCS/s.LocaleElements_zh_HK.java sun/text/resources/SCCS/s.LocaleElements_zh_TW.java sun/text/resources/BreakIteratorInfo_th.java sun/text/resources/BreakIteratorInfo.java sun/text/resources/BreakIteratorRules.java sun/text/resources/BreakIteratorRules_th.java sun/text/resources/DateFormatZoneData.java sun/text/resources/DateFormatZoneData_ar.java sun/text/resources/DateFormatZoneData_be.java sun/text/resources/DateFormatZoneData_bg.java sun/text/resources/DateFormatZoneData_ca.java sun/text/resources/DateFormatZoneData_cs.java sun/text/resources/DateFormatZoneData_da.java sun/text/resources/DateFormatZoneData_de.java sun/text/resources/thai_dict sun/text/resources/LocaleData.java sun/text/resources/DateFormatZoneData_de_AT.java sun/text/resources/DateFormatZoneData_de_CH.java sun/text/resources/DateFormatZoneData_el.java sun/text/resources/DateFormatZoneData_en.java sun/text/resources/DateFormatZoneData_en_CA.java sun/text/resources/DateFormatZoneData_en_GB.java sun/text/resources/DateFormatZoneData_en_IE.java sun/text/resources/DateFormatZoneData_en_IN.java sun/text/resources/DateFormatZoneData_es.java sun/text/resources/DateFormatZoneData_et.java sun/text/resources/DateFormatZoneData_fi.java sun/text/resources/DateFormatZoneData_fr.java sun/text/resources/DateFormatZoneData_fr_BE.java sun/text/resources/DateFormatZoneData_fr_CA.java sun/text/resources/DateFormatZoneData_fr_CH.java sun/text/resources/DateFormatZoneData_hi_IN.java sun/text/resources/DateFormatZoneData_hr.java sun/text/resources/DateFormatZoneData_hu.java sun/text/resources/DateFormatZoneData_is.java sun/text/resources/DateFormatZoneData_it.java sun/text/resources/DateFormatZoneData_it_CH.java sun/text/resources/DateFormatZoneData_iw.java sun/text/resources/DateFormatZoneData_ja.java sun/text/resources/DateFormatZoneData_ko.java sun/text/resources/DateFormatZoneData_lt.java sun/text/resources/DateFormatZoneData_lv.java sun/text/resources/LocaleElements.java sun/text/resources/DateFormatZoneData_mk.java sun/text/resources/DateFormatZoneData_nl.java sun/text/resources/DateFormatZoneData_nl_BE.java sun/text/resources/DateFormatZoneData_no.java sun/text/resources/DateFormatZoneData_no_NO_NY.java sun/text/resources/DateFormatZoneData_pl.java sun/text/resources/DateFormatZoneData_pt.java sun/text/resources/DateFormatZoneData_ro.java sun/text/resources/DateFormatZoneData_ru.java sun/text/resources/DateFormatZoneData_sk.java sun/text/resources/DateFormatZoneData_sl.java sun/text/resources/DateFormatZoneData_sq.java sun/text/resources/DateFormatZoneData_sv.java sun/text/resources/LocaleElements_ar.java sun/text/resources/DateFormatZoneData_th.java sun/text/resources/DateFormatZoneData_tr.java sun/text/resources/DateFormatZoneData_uk.java sun/text/resources/DateFormatZoneData_zh_CN.java sun/text/resources/DateFormatZoneData_zh_HK.java sun/text/resources/DateFormatZoneData_zh_TW.java sun/text/resources/LocaleElements_ar_AE.java sun/text/resources/LocaleElements_ar_BH.java sun/text/resources/LocaleElements_ar_DZ.java sun/text/resources/LocaleElements_ar_EG.java sun/text/resources/LocaleElements_ar_IQ.java sun/text/resources/LocaleElements_ar_JO.java sun/text/resources/LocaleElements_ar_KW.java sun/text/resources/LocaleElements_be.java sun/text/resources/LocaleElements_ar_LB.java sun/text/resources/LocaleElements_ar_LY.java sun/text/resources/LocaleElements_ar_MA.java sun/text/resources/LocaleElements_ar_OM.java sun/text/resources/LocaleElements_ar_QA.java sun/text/resources/LocaleElements_ar_SA.java sun/text/resources/LocaleElements_ar_SD.java sun/text/resources/LocaleElements_ar_SY.java sun/text/resources/LocaleElements_ar_TN.java sun/text/resources/LocaleElements_ar_YE.java sun/text/resources/LocaleElements_be_BY.java sun/text/resources/LocaleElements_bg.java sun/text/resources/LocaleElements_bg_BG.java sun/text/resources/LocaleElements_ca.java sun/text/resources/LocaleElements_ca_ES.java sun/text/resources/LocaleElements_cs.java sun/text/resources/LocaleElements_cs_CZ.java sun/text/resources/LocaleElements_da.java sun/text/resources/LocaleElements_da_DK.java sun/text/resources/LocaleElements_de.java sun/text/resources/LocaleElements_de_AT.java sun/text/resources/LocaleElements_de_CH.java sun/text/resources/LocaleElements_de_DE.java sun/text/resources/LocaleElements_de_LU.java sun/text/resources/LocaleElements_el.java sun/text/resources/LocaleElements_el_GR.java sun/text/resources/LocaleElements_en.java sun/text/resources/LocaleElements_es.java sun/text/resources/LocaleElements_et.java sun/text/resources/LocaleElements_en_AU.java sun/text/resources/LocaleElements_en_CA.java sun/text/resources/LocaleElements_en_GB.java sun/text/resources/LocaleElements_en_IE.java sun/text/resources/LocaleElements_en_IN.java sun/text/resources/LocaleElements_en_NZ.java sun/text/resources/LocaleElements_en_US.java sun/text/resources/LocaleElements_en_ZA.java sun/text/resources/LocaleElements_es_AR.java sun/text/resources/LocaleElements_es_BO.java sun/text/resources/LocaleElements_es_CL.java sun/text/resources/LocaleElements_es_CO.java sun/text/resources/LocaleElements_es_CR.java sun/text/resources/LocaleElements_es_DO.java sun/text/resources/LocaleElements_es_EC.java sun/text/resources/LocaleElements_es_ES.java sun/text/resources/LocaleElements_es_GT.java sun/text/resources/LocaleElements_es_HN.java sun/text/resources/LocaleElements_es_MX.java sun/text/resources/LocaleElements_es_NI.java sun/text/resources/LocaleElements_es_PA.java sun/text/resources/LocaleElements_es_PE.java sun/text/resources/LocaleElements_es_PR.java sun/text/resources/LocaleElements_es_PY.java sun/text/resources/LocaleElements_es_SV.java sun/text/resources/LocaleElements_es_UY.java sun/text/resources/LocaleElements_es_VE.java sun/text/resources/LocaleElements_et_EE.java sun/text/resources/LocaleElements_fi.java sun/text/resources/LocaleElements_fi_FI.java sun/text/resources/LocaleElements_fr.java sun/text/resources/LocaleElements_fr_BE.java sun/text/resources/LocaleElements_fr_CA.java sun/text/resources/LocaleElements_fr_CH.java sun/text/resources/LocaleElements_fr_FR.java sun/text/resources/LocaleElements_fr_LU.java sun/text/resources/LocaleElements_hi_IN.java sun/text/resources/LocaleElements_hr.java sun/text/resources/LocaleElements_hr_HR.java sun/text/resources/LocaleElements_hu.java sun/text/resources/LocaleElements_hu_HU.java sun/text/resources/unorm.icu sun/text/resources/LocaleElements_is.java sun/text/resources/LocaleElements_is_IS.java sun/text/resources/LocaleElements_it.java sun/text/resources/LocaleElements_it_CH.java sun/text/resources/LocaleElements_it_IT.java sun/text/resources/LocaleElements_iw.java sun/text/resources/LocaleElements_iw_IL.java sun/text/resources/LocaleElements_ja.java sun/text/resources/LocaleElements_ja_JP.java sun/text/resources/LocaleElements_ko.java sun/text/resources/LocaleElements_ko_KR.java sun/text/resources/LocaleElements_lt.java sun/text/resources/LocaleElements_lt_LT.java sun/text/resources/LocaleElements_lv.java sun/text/resources/LocaleElements_lv_LV.java sun/text/resources/LocaleElements_mk.java sun/text/resources/LocaleElements_mk_MK.java sun/text/resources/LocaleElements_nl.java sun/text/resources/LocaleElements_nl_BE.java sun/text/resources/LocaleElements_nl_NL.java sun/text/resources/LocaleElements_no.java sun/text/resources/LocaleElements_no_NO.java sun/text/resources/LocaleElements_no_NO_NY.java sun/text/resources/LocaleElements_pl.java sun/text/resources/LocaleElements_pl_PL.java sun/text/resources/LocaleElements_pt.java sun/text/resources/LocaleElements_pt_BR.java sun/text/resources/LocaleElements_pt_PT.java sun/text/resources/LocaleElements_ro.java sun/text/resources/LocaleElements_ro_RO.java sun/text/resources/LocaleElements_ru.java sun/text/resources/LocaleElements_ru_RU.java sun/text/resources/LocaleElements_sk.java sun/text/resources/LocaleElements_sk_SK.java sun/text/resources/LocaleElements_sl.java sun/text/resources/LocaleElements_sl_SI.java sun/text/resources/LocaleElements_sq.java sun/text/resources/LocaleElements_sq_AL.java sun/text/resources/LocaleElements_sv.java sun/text/resources/LocaleElements_sv_SE.java sun/text/resources/LocaleElements_th.java sun/text/resources/LocaleElements_th_TH.java sun/text/resources/LocaleElements_th_TH_TH.java sun/text/resources/LocaleElements_tr.java sun/text/resources/LocaleElements_uk.java sun/text/resources/LocaleElements_tr_TR.java sun/text/resources/LocaleElements_uk_UA.java sun/text/resources/LocaleElements_vi.java sun/text/resources/LocaleElements_vi_VN.java sun/text/resources/LocaleElements_zh.java sun/text/resources/LocaleElements_zh_CN.java sun/text/resources/LocaleElements_zh_HK.java sun/text/resources/LocaleElements_zh_TW.java sun/text/CodePointIterator.java sun/text/CharTrie.java sun/text/NormalizerDataReader.java sun/text/CompactByteArray.java sun/text/CompactCharArray.java sun/text/CompactIntArray.java sun/text/CompactShortArray.java sun/text/ComposedCharIter.java sun/text/ICUBinary.java sun/text/IntHashtable.java sun/text/IntTrie.java sun/text/Normalizer.java sun/text/NormalizerImpl.java sun/text/Trie.java sun/text/NormalizerUtilities.java sun/text/SupplementaryCharacterData.java sun/text/UCharacterIterator.java sun/text/UCompactIntArray.java sun/text/Utility.java sun/tools sun/tools/asm sun/tools/asm/SCCS sun/tools/asm/SCCS/s.ClassConstantData.java sun/tools/asm/SCCS/s.ArrayData.java sun/tools/asm/SCCS/s.Assembler.java sun/tools/asm/SCCS/s.CatchData.java sun/tools/asm/SCCS/s.ConstantPoolData.java sun/tools/asm/SCCS/s.ConstantPool.java sun/tools/asm/SCCS/s.Cover.java sun/tools/asm/SCCS/s.Instruction.java sun/tools/asm/SCCS/s.FieldConstantData.java sun/tools/asm/SCCS/s.Label.java sun/tools/asm/SCCS/s.LocalVariable.java sun/tools/asm/SCCS/s.LocalVariableTable.java sun/tools/asm/SCCS/s.NameAndTypeConstantData.java sun/tools/asm/SCCS/s.NameAndTypeData.java sun/tools/asm/SCCS/s.NumberConstantData.java sun/tools/asm/SCCS/s.StringConstantData.java sun/tools/asm/SCCS/s.StringExpressionConstantData.java sun/tools/asm/SCCS/s.SwitchData.java sun/tools/asm/SCCS/s.TryData.java sun/tools/asm/ClassConstantData.java sun/tools/asm/ArrayData.java sun/tools/asm/Assembler.java sun/tools/asm/CatchData.java sun/tools/asm/ConstantPoolData.java sun/tools/asm/ConstantPool.java sun/tools/asm/Instruction.java sun/tools/asm/Cover.java sun/tools/asm/NameAndTypeConstantData.java sun/tools/asm/FieldConstantData.java sun/tools/asm/Label.java sun/tools/asm/LocalVariable.java sun/tools/asm/LocalVariableTable.java sun/tools/asm/NameAndTypeData.java sun/tools/asm/NumberConstantData.java sun/tools/asm/StringConstantData.java sun/tools/asm/SwitchData.java sun/tools/asm/TryData.java sun/tools/asm/StringExpressionConstantData.java sun/tools/hprof sun/tools/hprof/SCCS sun/tools/hprof/SCCS/s.Tracker.java sun/tools/hprof/Tracker.java sun/tools/jar sun/tools/jar/SCCS sun/tools/jar/SCCS/s.JarImageSource.java sun/tools/jar/SCCS/s.CommandLine.java sun/tools/jar/SCCS/s.JarException.java sun/tools/jar/SCCS/s.JarVerifierStream.java sun/tools/jar/SCCS/s.Main.java sun/tools/jar/SCCS/s.Manifest.java sun/tools/jar/SCCS/s.SignatureFile.java sun/tools/jar/resources sun/tools/jar/resources/SCCS sun/tools/jar/resources/SCCS/s.jar_zh_CN.properties sun/tools/jar/resources/SCCS/s.jar.properties sun/tools/jar/resources/SCCS/s.jar_de.properties sun/tools/jar/resources/SCCS/s.jar_es.properties sun/tools/jar/resources/SCCS/s.jar_fr.properties sun/tools/jar/resources/SCCS/s.jar_it.properties sun/tools/jar/resources/SCCS/s.jar_ja.properties sun/tools/jar/resources/SCCS/s.jar_ko.properties sun/tools/jar/resources/SCCS/s.jar_sv.properties sun/tools/jar/resources/SCCS/s.jar_zh_TW.properties sun/tools/jar/resources/jar_de.properties sun/tools/jar/resources/jar.properties sun/tools/jar/resources/jar_es.properties sun/tools/jar/resources/jar_fr.properties sun/tools/jar/resources/jar_it.properties sun/tools/jar/resources/jar_ja.properties sun/tools/jar/resources/jar_ko.properties sun/tools/jar/resources/jar_sv.properties sun/tools/jar/resources/jar_zh_CN.properties sun/tools/jar/resources/jar_zh_TW.properties sun/tools/jar/JarVerifierStream.java sun/tools/jar/CommandLine.java sun/tools/jar/JarException.java sun/tools/jar/JarImageSource.java sun/tools/jar/SignatureFile.java sun/tools/jar/Main.java sun/tools/jar/Manifest.java sun/tools/java sun/tools/java/SCCS sun/tools/java/SCCS/s.BinaryConstantPool.java sun/tools/java/SCCS/s.AmbiguousClass.java sun/tools/java/SCCS/s.AmbiguousMember.java sun/tools/java/SCCS/s.ArrayType.java sun/tools/java/SCCS/s.BinaryAttribute.java sun/tools/java/SCCS/s.BinaryClass.java sun/tools/java/SCCS/s.BinaryCode.java sun/tools/java/SCCS/s.Type.java sun/tools/java/SCCS/s.BinaryExceptionHandler.java sun/tools/java/SCCS/s.BinaryMember.java sun/tools/java/SCCS/s.ClassDeclaration.java sun/tools/java/SCCS/s.ClassDefinition.java sun/tools/java/SCCS/s.ClassFile.java sun/tools/java/SCCS/s.ClassNotFound.java sun/tools/java/SCCS/s.ClassPath.java sun/tools/java/SCCS/s.ClassType.java sun/tools/java/SCCS/s.CompilerError.java sun/tools/java/SCCS/s.Constants.java sun/tools/java/SCCS/s.Environment.java sun/tools/java/SCCS/s.Identifier.java sun/tools/java/SCCS/s.IdentifierToken.java sun/tools/java/SCCS/s.Imports.java sun/tools/java/SCCS/s.MemberDefinition.java sun/tools/java/SCCS/s.MethodSet.java sun/tools/java/SCCS/s.MethodType.java sun/tools/java/SCCS/s.Package.java sun/tools/java/SCCS/s.Parser.java sun/tools/java/SCCS/s.ParserActions.java sun/tools/java/SCCS/s.RuntimeConstants.java sun/tools/java/SCCS/s.Scanner.java sun/tools/java/SCCS/s.ScannerInputReader.java sun/tools/java/SCCS/s.SyntaxError.java sun/tools/java/AmbiguousMember.java sun/tools/java/AmbiguousClass.java sun/tools/java/BinaryAttribute.java sun/tools/java/ArrayType.java sun/tools/java/BinaryExceptionHandler.java sun/tools/java/BinaryClass.java sun/tools/java/BinaryCode.java sun/tools/java/BinaryConstantPool.java sun/tools/java/BinaryMember.java sun/tools/java/ClassDeclaration.java sun/tools/java/ClassDefinition.java sun/tools/java/ClassFile.java sun/tools/java/ClassNotFound.java sun/tools/java/ClassPath.java sun/tools/java/ClassType.java sun/tools/java/CompilerError.java sun/tools/java/Constants.java sun/tools/java/Environment.java sun/tools/java/Identifier.java sun/tools/java/IdentifierToken.java sun/tools/java/Imports.java sun/tools/java/MemberDefinition.java sun/tools/java/MethodSet.java sun/tools/java/MethodType.java sun/tools/java/Package.java sun/tools/java/Parser.java sun/tools/java/ParserActions.java sun/tools/java/RuntimeConstants.java sun/tools/java/Scanner.java sun/tools/java/ScannerInputReader.java sun/tools/java/SyntaxError.java sun/tools/java/Type.java sun/tools/javac sun/tools/javac/SCCS sun/tools/javac/SCCS/s.BatchEnvironment.java sun/tools/javac/SCCS/s.BatchParser.java sun/tools/javac/SCCS/s.CompilerMember.java sun/tools/javac/SCCS/s.ErrorConsumer.java sun/tools/javac/SCCS/s.ErrorMessage.java sun/tools/javac/SCCS/s.Main.java sun/tools/javac/SCCS/s.SourceClass.java sun/tools/javac/SCCS/s.SourceMember.java sun/tools/javac/resources sun/tools/javac/resources/SCCS sun/tools/javac/resources/SCCS/s.javac_ja.properties sun/tools/javac/resources/SCCS/s.javac.properties sun/tools/javac/resources/javac.properties sun/tools/javac/resources/javac_ja.properties sun/tools/javac/BatchEnvironment.java sun/tools/javac/BatchParser.java sun/tools/javac/CompilerMember.java sun/tools/javac/ErrorConsumer.java sun/tools/javac/ErrorMessage.java sun/tools/javac/Main.java sun/tools/javac/SourceClass.java sun/tools/javac/SourceMember.java sun/tools/javap sun/tools/javap/SCCS sun/tools/javap/SCCS/s.ClassData.java sun/tools/javap/SCCS/s.AttrData.java sun/tools/javap/SCCS/s.CPX.java sun/tools/javap/SCCS/s.CPX2.java sun/tools/javap/SCCS/s.Constants.java sun/tools/javap/SCCS/s.FieldData.java sun/tools/javap/SCCS/s.InnerClassData.java sun/tools/javap/SCCS/s.JavapEnvironment.java sun/tools/javap/SCCS/s.JavapPrinter.java sun/tools/javap/SCCS/s.LineNumData.java sun/tools/javap/SCCS/s.LocVarData.java sun/tools/javap/SCCS/s.Main.java sun/tools/javap/SCCS/s.MethodData.java sun/tools/javap/SCCS/s.RuntimeConstants.java sun/tools/javap/SCCS/s.Tables.java sun/tools/javap/SCCS/s.TrapData.java sun/tools/javap/SCCS/s.TypeSignature.java sun/tools/javap/oldjavap sun/tools/javap/oldjavap/SCCS sun/tools/javap/oldjavap/SCCS/s.JavaPClassPrinter.java sun/tools/javap/oldjavap/SCCS/s.ConstantPrinter.java sun/tools/javap/oldjavap/SCCS/s.JavaP.java sun/tools/javap/oldjavap/SCCS/s.JavaPBinaryCode.java sun/tools/javap/oldjavap/SCCS/s.JavaPEnvironment.java sun/tools/javap/oldjavap/ConstantPrinter.java sun/tools/javap/oldjavap/JavaP.java sun/tools/javap/oldjavap/JavaPBinaryCode.java sun/tools/javap/oldjavap/JavaPClassPrinter.java sun/tools/javap/oldjavap/JavaPEnvironment.java sun/tools/javap/InnerClassData.java sun/tools/javap/AttrData.java sun/tools/javap/CPX.java sun/tools/javap/CPX2.java sun/tools/javap/ClassData.java sun/tools/javap/Constants.java sun/tools/javap/FieldData.java sun/tools/javap/JavapEnvironment.java sun/tools/javap/JavapPrinter.java sun/tools/javap/LineNumData.java sun/tools/javap/LocVarData.java sun/tools/javap/Main.java sun/tools/javap/MethodData.java sun/tools/javap/RuntimeConstants.java sun/tools/javap/Tables.java sun/tools/javap/TrapData.java sun/tools/javap/TypeSignature.java sun/tools/javazic sun/tools/javazic/SCCS sun/tools/javazic/SCCS/s.DayOfWeek.java sun/tools/javazic/SCCS/s.BackEnd.java sun/tools/javazic/SCCS/s.Checksum.java sun/tools/javazic/SCCS/s.Gen.java sun/tools/javazic/SCCS/s.GenDoc.java sun/tools/javazic/SCCS/s.GenSrc.java sun/tools/javazic/SCCS/s.Main.java sun/tools/javazic/SCCS/s.Mappings.java sun/tools/javazic/SCCS/s.Month.java sun/tools/javazic/SCCS/s.Rule.java sun/tools/javazic/SCCS/s.RuleDay.java sun/tools/javazic/SCCS/s.RuleRec.java sun/tools/javazic/SCCS/s.Simple.java sun/tools/javazic/SCCS/s.Time.java sun/tools/javazic/SCCS/s.Timezone.java sun/tools/javazic/SCCS/s.Zone.java sun/tools/javazic/SCCS/s.ZoneRec.java sun/tools/javazic/SCCS/s.Zoneinfo.java sun/tools/javazic/BackEnd.java sun/tools/javazic/Checksum.java sun/tools/javazic/Gen.java sun/tools/javazic/GenDoc.java sun/tools/javazic/GenSrc.java sun/tools/javazic/Main.java sun/tools/javazic/Mappings.java sun/tools/javazic/Month.java sun/tools/javazic/Rule.java sun/tools/javazic/RuleDay.java sun/tools/javazic/RuleRec.java sun/tools/javazic/Simple.java sun/tools/javazic/Time.java sun/tools/javazic/Timezone.java sun/tools/javazic/Zone.java sun/tools/javazic/ZoneRec.java sun/tools/javazic/Zoneinfo.java sun/tools/javazic/DayOfWeek.java sun/tools/jconsole sun/tools/jconsole/SCCS sun/tools/jconsole/SCCS/s.BorderedComponent.java sun/tools/jconsole/SCCS/s.ClassTab.java sun/tools/jconsole/SCCS/s.ConnectDialog.java sun/tools/jconsole/SCCS/s.ConnectionParameters.java sun/tools/jconsole/SCCS/s.CreateMBeanDialog.java sun/tools/jconsole/SCCS/s.Formatter.java sun/tools/jconsole/SCCS/s.JConsole.java sun/tools/jconsole/SCCS/s.LabeledComponent.java sun/tools/jconsole/SCCS/s.MBeansTab.java sun/tools/jconsole/SCCS/s.MemoryPoolProxy.java sun/tools/jconsole/SCCS/s.MemoryPoolStat.java sun/tools/jconsole/SCCS/s.MemoryTab.java sun/tools/jconsole/SCCS/s.Plotter.java sun/tools/jconsole/SCCS/s.PlotterPanel.java sun/tools/jconsole/SCCS/s.ProxyClient.java sun/tools/jconsole/SCCS/s.VariableGridLayout.java sun/tools/jconsole/SCCS/s.Resources.java sun/tools/jconsole/SCCS/s.SummaryTab.java sun/tools/jconsole/SCCS/s.Tab.java sun/tools/jconsole/SCCS/s.ThreadTab.java sun/tools/jconsole/SCCS/s.TimeComboBox.java sun/tools/jconsole/SCCS/s.VMInternalFrame.java sun/tools/jconsole/SCCS/s.VMPanel.java sun/tools/jconsole/SCCS/s.VMTab.java sun/tools/jconsole/SCCS/s.Version-template.java sun/tools/jconsole/SCCS/s.Worker.java sun/tools/jconsole/SCCS/s.manifest sun/tools/jconsole/inspector sun/tools/jconsole/inspector/SCCS sun/tools/jconsole/inspector/SCCS/s.OperationEntry.java sun/tools/jconsole/inspector/SCCS/s.IconManager.java sun/tools/jconsole/inspector/SCCS/s.XJdmkTreeRenderer.java sun/tools/jconsole/inspector/SCCS/s.TableSorter.java sun/tools/jconsole/inspector/SCCS/s.ThreadDialog.java sun/tools/jconsole/inspector/SCCS/s.Utils.java sun/tools/jconsole/inspector/SCCS/s.XArrayDataViewer.java sun/tools/jconsole/inspector/SCCS/s.XDataViewer.java sun/tools/jconsole/inspector/SCCS/s.XMBeanAttributes.java sun/tools/jconsole/inspector/SCCS/s.XMBean.java sun/tools/jconsole/inspector/SCCS/s.XMBeanNotifications.java sun/tools/jconsole/inspector/SCCS/s.XMBeanInfo.java sun/tools/jconsole/inspector/SCCS/s.XMBeanOperations.java sun/tools/jconsole/inspector/SCCS/s.XMBeanTree.java sun/tools/jconsole/inspector/SCCS/s.XObject.java sun/tools/jconsole/inspector/SCCS/s.XOpenTypeViewer.java sun/tools/jconsole/inspector/SCCS/s.XOperations.java sun/tools/jconsole/inspector/SCCS/s.XPane.java sun/tools/jconsole/inspector/SCCS/s.XPlotter.java sun/tools/jconsole/inspector/SCCS/s.XPlottingViewer.java sun/tools/jconsole/inspector/SCCS/s.XSheet.java sun/tools/jconsole/inspector/SCCS/s.XTabbedPane.java sun/tools/jconsole/inspector/SCCS/s.XTable.java sun/tools/jconsole/inspector/SCCS/s.XTextField.java sun/tools/jconsole/inspector/SCCS/s.XTextFieldEditor.java sun/tools/jconsole/inspector/SCCS/s.XTree.java sun/tools/jconsole/inspector/SCCS/s.XTreeRenderer.java sun/tools/jconsole/inspector/XArrayDataViewer.java sun/tools/jconsole/inspector/IconManager.java sun/tools/jconsole/inspector/OperationEntry.java sun/tools/jconsole/inspector/TableSorter.java sun/tools/jconsole/inspector/ThreadDialog.java sun/tools/jconsole/inspector/Utils.java sun/tools/jconsole/inspector/XMBeanNotifications.java sun/tools/jconsole/inspector/XDataViewer.java sun/tools/jconsole/inspector/XJdmkTreeRenderer.java sun/tools/jconsole/inspector/XMBean.java sun/tools/jconsole/inspector/XMBeanAttributes.java sun/tools/jconsole/inspector/XMBeanInfo.java sun/tools/jconsole/inspector/XMBeanOperations.java sun/tools/jconsole/inspector/XMBeanTree.java sun/tools/jconsole/inspector/XObject.java sun/tools/jconsole/inspector/XOpenTypeViewer.java sun/tools/jconsole/inspector/XPane.java sun/tools/jconsole/inspector/XOperations.java sun/tools/jconsole/inspector/XPlotter.java sun/tools/jconsole/inspector/XPlottingViewer.java sun/tools/jconsole/inspector/XSheet.java sun/tools/jconsole/inspector/XTabbedPane.java sun/tools/jconsole/inspector/XTable.java sun/tools/jconsole/inspector/XTextField.java sun/tools/jconsole/inspector/XTextFieldEditor.java sun/tools/jconsole/inspector/XTree.java sun/tools/jconsole/inspector/XTreeRenderer.java sun/tools/jconsole/resources sun/tools/jconsole/resources/SCCS sun/tools/jconsole/resources/SCCS/s.JConsoleResources.java sun/tools/jconsole/resources/SCCS/s.JConsoleResources_ja.java sun/tools/jconsole/resources/SCCS/s.collapse.png sun/tools/jconsole/resources/SCCS/s.expand.png sun/tools/jconsole/resources/SCCS/s.mbeanserverdelegate.gif sun/tools/jconsole/resources/SCCS/s.mbeantree_root.gif sun/tools/jconsole/resources/SCCS/s.modelmbean.gif sun/tools/jconsole/resources/SCCS/s.openmbean.gif sun/tools/jconsole/resources/SCCS/s.standardmbean.gif sun/tools/jconsole/resources/SCCS/s.xobject.gif sun/tools/jconsole/resources/JConsoleResources_ja.java sun/tools/jconsole/resources/JConsoleResources.java sun/tools/jconsole/resources/mbeanserverdelegate.gif sun/tools/jconsole/resources/collapse.png sun/tools/jconsole/resources/expand.png sun/tools/jconsole/resources/mbeantree_root.gif sun/tools/jconsole/resources/modelmbean.gif sun/tools/jconsole/resources/openmbean.gif sun/tools/jconsole/resources/standardmbean.gif sun/tools/jconsole/resources/xobject.gif sun/tools/jconsole/ConnectionParameters.java sun/tools/jconsole/BorderedComponent.java sun/tools/jconsole/ClassTab.java sun/tools/jconsole/ConnectDialog.java sun/tools/jconsole/CreateMBeanDialog.java sun/tools/jconsole/Formatter.java sun/tools/jconsole/JConsole.java sun/tools/jconsole/LabeledComponent.java sun/tools/jconsole/MBeansTab.java sun/tools/jconsole/MemoryPoolProxy.java sun/tools/jconsole/MemoryPoolStat.java sun/tools/jconsole/MemoryTab.java sun/tools/jconsole/Plotter.java sun/tools/jconsole/PlotterPanel.java sun/tools/jconsole/ProxyClient.java sun/tools/jconsole/Resources.java sun/tools/jconsole/SummaryTab.java sun/tools/jconsole/Tab.java sun/tools/jconsole/ThreadTab.java sun/tools/jconsole/TimeComboBox.java sun/tools/jconsole/VMInternalFrame.java sun/tools/jconsole/VMPanel.java sun/tools/jconsole/VMTab.java sun/tools/jconsole/VariableGridLayout.java sun/tools/jconsole/Version-template.java sun/tools/jconsole/Worker.java sun/tools/jconsole/manifest sun/tools/jps sun/tools/jps/SCCS sun/tools/jps/SCCS/s.Arguments.java sun/tools/jps/SCCS/s.Jps.java sun/tools/jps/Arguments.java sun/tools/jps/Jps.java sun/tools/jstat sun/tools/jstat/SCCS sun/tools/jstat/SCCS/s.Alignment.java sun/tools/jstat/SCCS/s.Arguments.java sun/tools/jstat/SCCS/s.Closure.java sun/tools/jstat/SCCS/s.ColumnFormat.java sun/tools/jstat/SCCS/s.AscendingMonitorComparator.java sun/tools/jstat/SCCS/s.Expression.java sun/tools/jstat/SCCS/s.Jstat.java sun/tools/jstat/SCCS/s.DescendingMonitorComparator.java sun/tools/jstat/SCCS/s.ExpressionEvaluator.java sun/tools/jstat/SCCS/s.ExpressionExecuter.java sun/tools/jstat/SCCS/s.ExpressionResolver.java sun/tools/jstat/SCCS/s.HeaderClosure.java sun/tools/jstat/SCCS/s.Identifier.java sun/tools/jstat/SCCS/s.JStatLogger.java sun/tools/jstat/SCCS/s.SymbolResolutionClosure.java sun/tools/jstat/SCCS/s.Literal.java sun/tools/jstat/SCCS/s.Operator.java sun/tools/jstat/SCCS/s.OptionFinder.java sun/tools/jstat/SCCS/s.OptionFormat.java sun/tools/jstat/SCCS/s.OptionLister.java sun/tools/jstat/SCCS/s.OutputFormatter.java sun/tools/jstat/SCCS/s.OptionOutputFormatter.java sun/tools/jstat/SCCS/s.Parser.java sun/tools/jstat/SCCS/s.ParserException.java sun/tools/jstat/SCCS/s.RawOutputFormatter.java sun/tools/jstat/SCCS/s.RowClosure.java sun/tools/jstat/SCCS/s.Scale.java sun/tools/jstat/SCCS/s.SyntaxException.java sun/tools/jstat/SCCS/s.Token.java sun/tools/jstat/resources sun/tools/jstat/resources/SCCS sun/tools/jstat/resources/SCCS/s.jstat_options sun/tools/jstat/resources/jstat_options sun/tools/jstat/Alignment.java sun/tools/jstat/Arguments.java sun/tools/jstat/Closure.java sun/tools/jstat/ExpressionExecuter.java sun/tools/jstat/Expression.java sun/tools/jstat/AscendingMonitorComparator.java sun/tools/jstat/ColumnFormat.java sun/tools/jstat/DescendingMonitorComparator.java sun/tools/jstat/SymbolResolutionClosure.java sun/tools/jstat/ExpressionEvaluator.java sun/tools/jstat/ExpressionResolver.java sun/tools/jstat/HeaderClosure.java sun/tools/jstat/Identifier.java sun/tools/jstat/JStatLogger.java sun/tools/jstat/Jstat.java sun/tools/jstat/Literal.java sun/tools/jstat/Operator.java sun/tools/jstat/OptionFinder.java sun/tools/jstat/OptionFormat.java sun/tools/jstat/OptionLister.java sun/tools/jstat/OptionOutputFormatter.java sun/tools/jstat/OutputFormatter.java sun/tools/jstat/Parser.java sun/tools/jstat/ParserException.java sun/tools/jstat/RawOutputFormatter.java sun/tools/jstat/RowClosure.java sun/tools/jstat/Scale.java sun/tools/jstat/SyntaxException.java sun/tools/jstat/Token.java sun/tools/jstatd sun/tools/jstatd/SCCS sun/tools/jstatd/SCCS/s.RemoteHostImpl.java sun/tools/jstatd/SCCS/s.Jstatd.java sun/tools/jstatd/SCCS/s.RemoteVmImpl.java sun/tools/jstatd/RemoteHostImpl.java sun/tools/jstatd/Jstatd.java sun/tools/jstatd/RemoteVmImpl.java sun/tools/native2ascii sun/tools/native2ascii/SCCS sun/tools/native2ascii/SCCS/s.A2NFilter.java sun/tools/native2ascii/SCCS/s.Main.java sun/tools/native2ascii/SCCS/s.N2AFilter.java sun/tools/native2ascii/resources sun/tools/native2ascii/resources/SCCS sun/tools/native2ascii/resources/SCCS/s.MsgNative2ascii_ja.java sun/tools/native2ascii/resources/SCCS/s.MsgNative2ascii.java sun/tools/native2ascii/resources/MsgNative2ascii.java sun/tools/native2ascii/resources/MsgNative2ascii_ja.java sun/tools/native2ascii/A2NFilter.java sun/tools/native2ascii/Main.java sun/tools/native2ascii/N2AFilter.java sun/tools/serialver sun/tools/serialver/SCCS sun/tools/serialver/SCCS/s.serialver.properties sun/tools/serialver/SCCS/s.SerialVer.java sun/tools/serialver/SCCS/s.serialver_ja.properties sun/tools/serialver/serialver.properties sun/tools/serialver/SerialVer.java sun/tools/serialver/serialver_ja.properties sun/tools/tree sun/tools/tree/SCCS sun/tools/tree/SCCS/s.ArrayAccessExpression.java sun/tools/tree/SCCS/s.AddExpression.java sun/tools/tree/SCCS/s.AndExpression.java sun/tools/tree/SCCS/s.AssignAddExpression.java sun/tools/tree/SCCS/s.ArrayExpression.java sun/tools/tree/SCCS/s.AssignRemainderExpression.java sun/tools/tree/SCCS/s.AssignBitAndExpression.java sun/tools/tree/SCCS/s.AssignBitOrExpression.java sun/tools/tree/SCCS/s.AssignBitXorExpression.java sun/tools/tree/SCCS/s.AssignDivideExpression.java sun/tools/tree/SCCS/s.AssignExpression.java sun/tools/tree/SCCS/s.AssignMultiplyExpression.java sun/tools/tree/SCCS/s.AssignOpExpression.java sun/tools/tree/SCCS/s.AssignUnsignedShiftRightExpression.java sun/tools/tree/SCCS/s.AssignShiftLeftExpression.java sun/tools/tree/SCCS/s.AssignShiftRightExpression.java sun/tools/tree/SCCS/s.AssignSubtractExpression.java sun/tools/tree/SCCS/s.Node.java sun/tools/tree/SCCS/s.BinaryArithmeticExpression.java sun/tools/tree/SCCS/s.BinaryAssignExpression.java sun/tools/tree/SCCS/s.BinaryBitExpression.java sun/tools/tree/SCCS/s.BinaryCompareExpression.java sun/tools/tree/SCCS/s.BinaryEqualityExpression.java sun/tools/tree/SCCS/s.BinaryExpression.java sun/tools/tree/SCCS/s.BinaryLogicalExpression.java sun/tools/tree/SCCS/s.PositiveExpression.java sun/tools/tree/SCCS/s.BinaryShiftExpression.java sun/tools/tree/SCCS/s.BitAndExpression.java sun/tools/tree/SCCS/s.BitNotExpression.java sun/tools/tree/SCCS/s.BitOrExpression.java sun/tools/tree/SCCS/s.BitXorExpression.java sun/tools/tree/SCCS/s.BooleanExpression.java sun/tools/tree/SCCS/s.BreakStatement.java sun/tools/tree/SCCS/s.ByteExpression.java sun/tools/tree/SCCS/s.CaseStatement.java sun/tools/tree/SCCS/s.CastExpression.java sun/tools/tree/SCCS/s.CatchStatement.java sun/tools/tree/SCCS/s.CharExpression.java sun/tools/tree/SCCS/s.CheckContext.java sun/tools/tree/SCCS/s.CodeContext.java sun/tools/tree/SCCS/s.CommaExpression.java sun/tools/tree/SCCS/s.Context.java sun/tools/tree/SCCS/s.CompoundStatement.java sun/tools/tree/SCCS/s.ConditionVars.java sun/tools/tree/SCCS/s.ConditionalExpression.java sun/tools/tree/SCCS/s.ConstantExpression.java sun/tools/tree/SCCS/s.ContinueStatement.java sun/tools/tree/SCCS/s.ConvertExpression.java sun/tools/tree/SCCS/s.DeclarationStatement.java sun/tools/tree/SCCS/s.DivRemExpression.java sun/tools/tree/SCCS/s.DivideExpression.java sun/tools/tree/SCCS/s.DoStatement.java sun/tools/tree/SCCS/s.DoubleExpression.java sun/tools/tree/SCCS/s.EqualExpression.java sun/tools/tree/SCCS/s.ExprExpression.java sun/tools/tree/SCCS/s.Expression.java sun/tools/tree/SCCS/s.ExpressionStatement.java sun/tools/tree/SCCS/s.FieldExpression.java sun/tools/tree/SCCS/s.FieldUpdater.java sun/tools/tree/SCCS/s.FinallyStatement.java sun/tools/tree/SCCS/s.FloatExpression.java sun/tools/tree/SCCS/s.ForStatement.java sun/tools/tree/SCCS/s.GreaterExpression.java sun/tools/tree/SCCS/s.GreaterOrEqualExpression.java sun/tools/tree/SCCS/s.IdentifierExpression.java sun/tools/tree/SCCS/s.IfStatement.java sun/tools/tree/SCCS/s.IncDecExpression.java sun/tools/tree/SCCS/s.InlineMethodExpression.java sun/tools/tree/SCCS/s.InlineNewInstanceExpression.java sun/tools/tree/SCCS/s.InlineReturnStatement.java sun/tools/tree/SCCS/s.InstanceOfExpression.java sun/tools/tree/SCCS/s.LocalMember.java sun/tools/tree/SCCS/s.IntExpression.java sun/tools/tree/SCCS/s.IntegerExpression.java sun/tools/tree/SCCS/s.LengthExpression.java sun/tools/tree/SCCS/s.LessExpression.java sun/tools/tree/SCCS/s.LessOrEqualExpression.java sun/tools/tree/SCCS/s.LongExpression.java sun/tools/tree/SCCS/s.MethodExpression.java sun/tools/tree/SCCS/s.MultiplyExpression.java sun/tools/tree/SCCS/s.NaryExpression.java sun/tools/tree/SCCS/s.NegativeExpression.java sun/tools/tree/SCCS/s.NewArrayExpression.java sun/tools/tree/SCCS/s.NewInstanceExpression.java sun/tools/tree/SCCS/s.NotExpression.java sun/tools/tree/SCCS/s.NotEqualExpression.java sun/tools/tree/SCCS/s.OrExpression.java sun/tools/tree/SCCS/s.NullExpression.java sun/tools/tree/SCCS/s.PostDecExpression.java sun/tools/tree/SCCS/s.PostIncExpression.java sun/tools/tree/SCCS/s.PreDecExpression.java sun/tools/tree/SCCS/s.PreIncExpression.java sun/tools/tree/SCCS/s.RemainderExpression.java sun/tools/tree/SCCS/s.ReturnStatement.java sun/tools/tree/SCCS/s.ShiftLeftExpression.java sun/tools/tree/SCCS/s.ShiftRightExpression.java sun/tools/tree/SCCS/s.ShortExpression.java sun/tools/tree/SCCS/s.Statement.java sun/tools/tree/SCCS/s.StringExpression.java sun/tools/tree/SCCS/s.SubtractExpression.java sun/tools/tree/SCCS/s.UnsignedShiftRightExpression.java sun/tools/tree/SCCS/s.SuperExpression.java sun/tools/tree/SCCS/s.SwitchStatement.java sun/tools/tree/SCCS/s.SynchronizedStatement.java sun/tools/tree/SCCS/s.ThisExpression.java sun/tools/tree/SCCS/s.ThrowStatement.java sun/tools/tree/SCCS/s.TryStatement.java sun/tools/tree/SCCS/s.TypeExpression.java sun/tools/tree/SCCS/s.UnaryExpression.java sun/tools/tree/SCCS/s.VarDeclarationStatement.java sun/tools/tree/SCCS/s.UplevelReference.java sun/tools/tree/SCCS/s.Vset.java sun/tools/tree/SCCS/s.WhileStatement.java sun/tools/tree/ArrayAccessExpression.java sun/tools/tree/AddExpression.java sun/tools/tree/AndExpression.java sun/tools/tree/AssignAddExpression.java sun/tools/tree/ArrayExpression.java sun/tools/tree/AssignBitAndExpression.java sun/tools/tree/AssignBitOrExpression.java sun/tools/tree/AssignBitXorExpression.java sun/tools/tree/AssignDivideExpression.java sun/tools/tree/AssignExpression.java sun/tools/tree/AssignMultiplyExpression.java sun/tools/tree/AssignOpExpression.java sun/tools/tree/CommaExpression.java sun/tools/tree/BreakStatement.java sun/tools/tree/AssignRemainderExpression.java sun/tools/tree/AssignShiftLeftExpression.java sun/tools/tree/AssignShiftRightExpression.java sun/tools/tree/AssignSubtractExpression.java sun/tools/tree/AssignUnsignedShiftRightExpression.java sun/tools/tree/BinaryArithmeticExpression.java sun/tools/tree/BinaryAssignExpression.java sun/tools/tree/BinaryBitExpression.java sun/tools/tree/BinaryCompareExpression.java sun/tools/tree/BinaryEqualityExpression.java sun/tools/tree/BinaryExpression.java sun/tools/tree/BinaryLogicalExpression.java sun/tools/tree/BinaryShiftExpression.java sun/tools/tree/BitAndExpression.java sun/tools/tree/BitNotExpression.java sun/tools/tree/BitOrExpression.java sun/tools/tree/BitXorExpression.java sun/tools/tree/BooleanExpression.java sun/tools/tree/ByteExpression.java sun/tools/tree/CaseStatement.java sun/tools/tree/CastExpression.java sun/tools/tree/CatchStatement.java sun/tools/tree/CharExpression.java sun/tools/tree/CheckContext.java sun/tools/tree/CodeContext.java sun/tools/tree/ConditionalExpression.java sun/tools/tree/CompoundStatement.java sun/tools/tree/ConditionVars.java sun/tools/tree/ContinueStatement.java sun/tools/tree/Context.java sun/tools/tree/ConstantExpression.java sun/tools/tree/DeclarationStatement.java sun/tools/tree/ConvertExpression.java sun/tools/tree/GreaterOrEqualExpression.java sun/tools/tree/DivRemExpression.java sun/tools/tree/DivideExpression.java sun/tools/tree/DoStatement.java sun/tools/tree/DoubleExpression.java sun/tools/tree/EqualExpression.java sun/tools/tree/ExprExpression.java sun/tools/tree/Expression.java sun/tools/tree/ExpressionStatement.java sun/tools/tree/FieldExpression.java sun/tools/tree/FieldUpdater.java sun/tools/tree/FinallyStatement.java sun/tools/tree/FloatExpression.java sun/tools/tree/ForStatement.java sun/tools/tree/GreaterExpression.java sun/tools/tree/InlineNewInstanceExpression.java sun/tools/tree/IdentifierExpression.java sun/tools/tree/IfStatement.java sun/tools/tree/IncDecExpression.java sun/tools/tree/InlineMethodExpression.java sun/tools/tree/UnsignedShiftRightExpression.java sun/tools/tree/InlineReturnStatement.java sun/tools/tree/InstanceOfExpression.java sun/tools/tree/IntExpression.java sun/tools/tree/IntegerExpression.java sun/tools/tree/LengthExpression.java sun/tools/tree/LessExpression.java sun/tools/tree/LessOrEqualExpression.java sun/tools/tree/LocalMember.java sun/tools/tree/LongExpression.java sun/tools/tree/MethodExpression.java sun/tools/tree/MultiplyExpression.java sun/tools/tree/NaryExpression.java sun/tools/tree/NegativeExpression.java sun/tools/tree/NewArrayExpression.java sun/tools/tree/NewInstanceExpression.java sun/tools/tree/Node.java sun/tools/tree/NotEqualExpression.java sun/tools/tree/NotExpression.java sun/tools/tree/NullExpression.java sun/tools/tree/OrExpression.java sun/tools/tree/PositiveExpression.java sun/tools/tree/PostDecExpression.java sun/tools/tree/PostIncExpression.java sun/tools/tree/PreDecExpression.java sun/tools/tree/PreIncExpression.java sun/tools/tree/RemainderExpression.java sun/tools/tree/ReturnStatement.java sun/tools/tree/ShiftLeftExpression.java sun/tools/tree/ShiftRightExpression.java sun/tools/tree/ShortExpression.java sun/tools/tree/Statement.java sun/tools/tree/StringExpression.java sun/tools/tree/SubtractExpression.java sun/tools/tree/SuperExpression.java sun/tools/tree/SwitchStatement.java sun/tools/tree/SynchronizedStatement.java sun/tools/tree/ThisExpression.java sun/tools/tree/ThrowStatement.java sun/tools/tree/TryStatement.java sun/tools/tree/TypeExpression.java sun/tools/tree/UnaryExpression.java sun/tools/tree/VarDeclarationStatement.java sun/tools/tree/UplevelReference.java sun/tools/tree/WhileStatement.java sun/tools/tree/Vset.java sun/tools/util sun/tools/util/SCCS sun/tools/util/SCCS/s.ModifierFilter.java sun/tools/util/SCCS/s.CommandLine.java sun/tools/util/CommandLine.java sun/tools/util/ModifierFilter.java sun/util sun/util/SCCS sun/util/SCCS/s.BuddhistCalendar.java sun/util/SCCS/s.PreHashedMap.java sun/util/calendar sun/util/calendar/SCCS sun/util/calendar/SCCS/s.AbstractCalendar.java sun/util/calendar/SCCS/s.BaseCalendar.java sun/util/calendar/SCCS/s.CalendarDate.java sun/util/calendar/SCCS/s.CalendarSystem.java sun/util/calendar/SCCS/s.CalendarUtils.java sun/util/calendar/SCCS/s.Era.java sun/util/calendar/SCCS/s.Gregorian.java sun/util/calendar/SCCS/s.JulianCalendar.java sun/util/calendar/SCCS/s.ZoneInfo.java sun/util/calendar/SCCS/s.ZoneInfoFile.java sun/util/calendar/AbstractCalendar.java sun/util/calendar/BaseCalendar.java sun/util/calendar/CalendarDate.java sun/util/calendar/CalendarSystem.java sun/util/calendar/CalendarUtils.java sun/util/calendar/Era.java sun/util/calendar/Gregorian.java sun/util/calendar/JulianCalendar.java sun/util/calendar/ZoneInfo.java sun/util/calendar/ZoneInfoFile.java sun/util/logging sun/util/logging/resources sun/util/logging/resources/SCCS sun/util/logging/resources/SCCS/s.logging_zh_CN.properties sun/util/logging/resources/SCCS/s.logging.properties sun/util/logging/resources/SCCS/s.logging_de.properties sun/util/logging/resources/SCCS/s.logging_es.properties sun/util/logging/resources/SCCS/s.logging_fr.properties sun/util/logging/resources/SCCS/s.logging_it.properties sun/util/logging/resources/SCCS/s.logging_ja.properties sun/util/logging/resources/SCCS/s.logging_ko.properties sun/util/logging/resources/SCCS/s.logging_sv.properties sun/util/logging/resources/SCCS/s.logging_zh_TW.properties sun/util/logging/resources/logging_de.properties sun/util/logging/resources/logging.properties sun/util/logging/resources/logging_es.properties sun/util/logging/resources/logging_fr.properties sun/util/logging/resources/logging_it.properties sun/util/logging/resources/logging_ja.properties sun/util/logging/resources/logging_ko.properties sun/util/logging/resources/logging_sv.properties sun/util/logging/resources/logging_zh_CN.properties sun/util/logging/resources/logging_zh_TW.properties sun/util/BuddhistCalendar.java sun/util/PreHashedMap.java sunw sunw/io sunw/io/SCCS sunw/io/SCCS/s.Serializable.java sunw/io/Serializable.java sunw/util sunw/util/SCCS sunw/util/SCCS/s.EventListener.java sunw/util/SCCS/s.EventObject.java sunw/util/EventListener.java sunw/util/EventObject.java overview-bundled.html jdi-overview.html overview-core.html backport-util-concurrent-3.1-src/test/loops/words/kw.txt0000644001750700037720000000051710256105111022334 0ustar dawidkdclassert abstract default if private this boolean do implements protected throw break double import public throws byte else instanceof return transient case extends int short try catch final interface static void char finally long strictfp volatile class float native super while const for new switch continue goto package synchronized backport-util-concurrent-3.1-src/test/loops/words/class.txt0000644001750700037720000004472510256105111023031 0ustar dawidkdclASCII AWTError AWTEvent AWTEventListener AWTEventListenerProxy AWTEventMulticaster AWTException AWTKeyStroke AWTPermission AbstractChannel AbstractCollection AbstractList AbstractMap AbstractMethodError AbstractPreferences AbstractSelectableChannel AbstractSelectionKey AbstractSelector AbstractSequentialList AbstractSet AccessControlContext AccessControlException AccessController AccessException AccessibleObject Acl AclEntry AclNotFoundException ActionEvent ActionListener Activatable ActivateFailedException ActivationDesc ActivationException ActivationGroup ActivationGroupDesc ActivationGroupID ActivationID ActivationInstantiator ActivationMonitor ActivationSystem Activator ActiveEvent Adjustable AdjustmentEvent AdjustmentListener Adler32 AffineTransform AffineTransformOp AlgorithmParameterGenerator AlgorithmParameterGeneratorSpi AlgorithmParameterSpec AlgorithmParameters AlgorithmParametersSpi AllPermission AlphaComposite AlreadyBoundException AlreadyConnectedException Annotation Applet AppletContext AppletInitializer AppletStub Arc2D ArcIterator Area AreaAveragingScaleFilter ArithmeticException Array ArrayIndexOutOfBoundsException ArrayList ArrayStoreException Arrays AssertionError AssertionStatusDirectives AsynchronousCloseException AttributeValue AttributedCharacterIterator AttributedString Attributes AudioClip Authenticator Autoscroll BackingStoreException BandCombineOp BandedSampleModel Base64 BasicPermission BasicStroke BatchUpdateException BeanContext BeanContextChild BeanContextChildComponentProxy BeanContextChildSupport BeanContextContainerProxy BeanContextEvent BeanContextMembershipEvent BeanContextMembershipListener BeanContextProxy BeanContextServiceAvailableEvent BeanContextServiceProvider BeanContextServiceProviderBeanInfo BeanContextServiceRevokedEvent BeanContextServiceRevokedListener BeanContextServices BeanContextServicesListener BeanContextServicesSupport BeanContextSupport BeanDescriptor BeanInfo Beans Bidi BigDecimal BigInteger BindException BitSet BitSieve Bits Blob Book Boolean BorderLayout BreakDictionary BreakIterator Buffer BufferCapabilities BufferOverflowException BufferStrategy BufferUnderflowException BufferedImage BufferedImageFilter BufferedImageOp BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter Button ButtonPeer Byte ByteArrayInputStream ByteArrayOutputStream ByteBuffer ByteBufferAs-X-Buffer ByteBufferAsCharBufferB ByteBufferAsCharBufferL ByteBufferAsCharBufferRB ByteBufferAsCharBufferRL ByteBufferAsDoubleBufferB ByteBufferAsDoubleBufferL ByteBufferAsDoubleBufferRB ByteBufferAsDoubleBufferRL ByteBufferAsFloatBufferB ByteBufferAsFloatBufferL ByteBufferAsFloatBufferRB ByteBufferAsFloatBufferRL ByteBufferAsIntBufferB ByteBufferAsIntBufferL ByteBufferAsIntBufferRB ByteBufferAsIntBufferRL ByteBufferAsLongBufferB ByteBufferAsLongBufferL ByteBufferAsLongBufferRB ByteBufferAsLongBufferRL ByteBufferAsShortBufferB ByteBufferAsShortBufferL ByteBufferAsShortBufferRB ByteBufferAsShortBufferRL ByteChannel ByteLookupTable ByteOrder CMMException CRC32 CRL CRLException CRLSelector Calendar CallableStatement CancelledKeyException Canvas CanvasPeer CardLayout CertPath CertPathBuilder CertPathBuilderException CertPathBuilderResult CertPathBuilderSpi CertPathParameters CertPathValidator CertPathValidatorException CertPathValidatorResult CertPathValidatorSpi CertSelector CertStore CertStoreException CertStoreParameters CertStoreSpi Certificate CertificateEncodingException CertificateException CertificateExpiredException CertificateFactory CertificateFactorySpi CertificateNotYetValidException CertificateParsingException Channel Channels CharArrayIterator CharArrayReader CharArrayWriter CharBuffer CharConversionException CharSequence CharSet Character CharacterBreakData CharacterCodingException CharacterIterator CharacterIteratorFieldDelegate Charset Charset-X-Coder CharsetDecoder CharsetEncoder CharsetProvider Checkbox CheckboxGroup CheckboxMenuItem CheckboxMenuItemPeer CheckboxPeer CheckedInputStream CheckedOutputStream Checksum Choice ChoiceFormat ChoicePeer Class ClassCastException ClassCircularityError ClassFormatError ClassLoader ClassNotFoundException Clipboard ClipboardOwner Clob CloneNotSupportedException Cloneable ClosedByInterruptException ClosedChannelException ClosedSelectorException CodeSource CollationElementIterator CollationKey CollationRules Collator Collection CollectionCertStoreParameters Collections Color ColorConvertOp ColorModel ColorPaintContext ColorSpace Comparable Comparator Compiler Component ComponentAdapter ComponentColorModel ComponentEvent ComponentListener ComponentOrientation ComponentPeer ComponentSampleModel Composite CompositeContext ConcurrentModificationException Conditional ConnectException ConnectIOException Connection ConnectionPendingException ConsoleHandler Constructor Container ContainerAdapter ContainerEvent ContainerListener ContainerOrderFocusTraversalPolicy ContainerPeer ContentHandler ContentHandlerFactory ContextualRenderedImageFactory ConvolveOp CropImageFilter CubicCurve2D CubicIterator Currency CurrencyData Cursor Customizer DGC DSAKey DSAKeyPairGenerator DSAParameterSpec DSAParams DSAPrivateKey DSAPrivateKeySpec DSAPublicKey DSAPublicKeySpec DataBuffer DataBufferByte DataBufferDouble DataBufferFloat DataBufferInt DataBufferShort DataBufferUShort DataFlavor DataFormatException DataInput DataInputStream DataOutput DataOutputStream DataTruncation DatabaseMetaData DatagramChannel DatagramPacket DatagramSocket DatagramSocketImpl DatagramSocketImplFactory Date DateFormat DateFormatSymbols DecimalFormat DecimalFormatSymbols DefaultFocusTraversalPolicy DefaultKeyboardFocusManager DefaultPersistenceDelegate Deflater DeflaterOutputStream DesignMode Dialog DialogPeer Dictionary DictionaryBasedBreakIterator DigestException DigestInputStream DigestOutputStream DigitList Dimension Dimension2D Direct-X-Buffer Direct-X-Buffer-bin DirectByteBuffer DirectByteBufferR DirectCharBufferRS DirectCharBufferRU DirectCharBufferS DirectCharBufferU DirectColorModel DirectDoubleBufferRS DirectDoubleBufferRU DirectDoubleBufferS DirectDoubleBufferU DirectFloatBufferRS DirectFloatBufferRU DirectFloatBufferS DirectFloatBufferU DirectIntBufferRS DirectIntBufferRU DirectIntBufferS DirectIntBufferU DirectLongBufferRS DirectLongBufferRU DirectLongBufferS DirectLongBufferU DirectShortBufferRS DirectShortBufferRU DirectShortBufferS DirectShortBufferU DisplayMode DnDConstants DomainCombiner Double DoubleBuffer DragGestureEvent DragGestureListener DragGestureRecognizer DragSource DragSourceAdapter DragSourceContext DragSourceContextPeer DragSourceDragEvent DragSourceDropEvent DragSourceEvent DragSourceListener Driver DriverManager DriverPropertyInfo DropTarget DropTargetAdapter DropTargetContext DropTargetContextPeer DropTargetDragEvent DropTargetDropEvent DropTargetEvent DropTargetListener DropTargetPeer EOFException Ellipse2D EllipseIterator EmptyStackException EncodedKeySpec Encoder EntryPair Enumeration Error Event EventDispatchThread EventHandler EventListener EventListenerProxy EventObject EventQueue EventSetDescriptor Exception ExceptionInInitializerError ExceptionListener ExportException Expression Externalizable FeatureDescriptor Field FieldPosition File FileChannel FileDescriptor FileDialog FileDialogPeer FileFilter FileHandler FileInputStream FileLock FileLockInterruptionException FileNameMap FileNotFoundException FileOutputStream FilePermission FileReader FileSystem FileSystemPreferences FileSystemPreferencesFactory FileWriter FilenameFilter Filter FilterInputStream FilterOutputStream FilterReader FilterWriter FilteredImageSource FinalReference Finalizer FlatteningPathIterator FlavorMap FlavorTable Float FloatBuffer FloatingDecimal FlowLayout FocusAdapter FocusEvent FocusListener FocusTraversalPolicy Font FontFormatException FontMetrics FontPeer FontRenderContext Format Formatter Frame FramePeer GZIPInputStream GZIPOutputStream GatheringByteChannel GeneralPath GeneralPathIterator GeneralSecurityException GlyphJustificationInfo GlyphMetrics GlyphVector GradientPaint GradientPaintContext GraphicAttribute Graphics Graphics2D GraphicsCallback GraphicsConfigTemplate GraphicsConfiguration GraphicsDevice GraphicsEnvironment GregorianCalendar GridBagConstraints GridBagLayout GridLayout Group Guard GuardedObject Handler HashMap HashSet Hashtable HeadlessException Heap-X-Buffer HeapByteBuffer HeapByteBufferR HeapCharBuffer HeapCharBufferR HeapDoubleBuffer HeapDoubleBufferR HeapFloatBuffer HeapFloatBufferR HeapIntBuffer HeapIntBufferR HeapLongBuffer HeapLongBufferR HeapShortBuffer HeapShortBufferR HierarchyBoundsAdapter HierarchyBoundsListener HierarchyEvent HierarchyListener HttpURLConnection ICC_ColorSpace ICC_Profile ICC_ProfileGray ICC_ProfileRGB IOException Identity IdentityHashMap IdentityHashtable IdentityScope IllegalAccessError IllegalAccessException IllegalArgumentException IllegalBlockingModeException IllegalCharsetNameException IllegalComponentStateException IllegalMonitorStateException IllegalPathStateException IllegalSelectorException IllegalStateException IllegalThreadStateException Image ImageCapabilities ImageConsumer ImageFilter ImageGraphicAttribute ImageObserver ImageProducer ImagingOpException InaccessibleBufferIndexException IncompatibleClassChangeError IndexColorModel IndexOutOfBoundsException IndexedPropertyDescriptor Inet4Address Inet6Address InetAddress InetSocketAddress Inflater InflaterInputStream InheritableThreadLocal InputContext InputEvent InputMethod InputMethodContext InputMethodDescriptor InputMethodEvent InputMethodHighlight InputMethodListener InputMethodRequests InputStream InputStreamReader InputSubset Insets InstantiationError InstantiationException IntBuffer Integer InternalError InterruptedException InterruptedIOException IntrospectionException Introspector InvalidAlgorithmParameterException InvalidClassException InvalidDnDOperationException InvalidKeyException InvalidKeySpecException InvalidMarkException InvalidObjectException InvalidParameterException InvalidParameterSpecException InvalidPreferencesFormatException InvocationEvent InvocationHandler InvocationTargetException ItemEvent ItemListener ItemSelectable Iterator JarEntry JarException JarFile JarInputStream JarOutputStream JarURLConnection JarVerifier JobAttributes Kernel Key KeyAdapter KeyEvent KeyEventDispatcher KeyEventPostProcessor KeyException KeyFactory KeyFactorySpi KeyListener KeyManagementException KeyPair KeyPairGenerator KeyPairGeneratorSpi KeySpec KeyStore KeyStoreException KeyStoreSpi KeyboardFocusManager LDAPCertStoreParameters Label LabelPeer LastOwnerException LayoutManager LayoutManager2 Lease Level LightweightPeer Line2D LineBreakData LineBreakMeasurer LineIterator LineMetrics LineNumberInputStream LineNumberReader LinkageError LinkedHashMap LinkedHashSet LinkedList List ListIterator ListPeer ListResourceBundle LoaderHandler Locale LocateRegistry LogManager LogRecord LogStream Logger LoggingPermission Long LongBuffer LookupOp LookupTable MalformedInputException MalformedURLException Manifest Map MappedByteBuffer MarshalException MarshalledObject Matcher Math MediaTracker Member MemoryHandler MemoryImageSource Menu MenuBar MenuBarPeer MenuComponent MenuComponentPeer MenuContainer MenuItem MenuItemPeer MenuPeer MenuShortcut MergeCollation MessageDigest MessageDigestSpi MessageFormat MetaData Method MethodDescriptor MimeType MimeTypeParameterList MimeTypeParseException MissingResourceException Modifier MouseAdapter MouseDragGestureRecognizer MouseEvent MouseListener MouseMotionAdapter MouseMotionListener MouseWheelEvent MouseWheelListener MultiPixelPackedSampleModel MulticastSocket MultipleMaster MutableBigInteger NameGenerator Naming NativeLibLoader NegativeArraySizeException NetPermission NetworkInterface NoClassDefFoundError NoConnectionPendingException NoRouteToHostException NoSuchAlgorithmException NoSuchElementException NoSuchFieldError NoSuchFieldException NoSuchMethodError NoSuchMethodException NoSuchObjectException NoSuchProviderException NodeChangeEvent NodeChangeListener NonReadableChannelException NonWritableChannelException NoninvertibleTransformException Normalizer NotActiveException NotBoundException NotOwnerException NotSerializableException NotYetConnectedException NullPointerException Number NumberFormat NumberFormatException NumericShaper ObjID Object ObjectInput ObjectInputStream ObjectInputValidation ObjectOutput ObjectOutputStream ObjectStreamClass ObjectStreamConstants ObjectStreamException ObjectStreamField Observable Observer OpenType Operation OptionalDataException OutOfMemoryError OutputStream OutputStreamWriter OverlappingFileLockException Owner PKCS8EncodedKeySpec PKIXBuilderParameters PKIXCertPathBuilderResult PKIXCertPathChecker PKIXCertPathValidatorResult PKIXParameters Package PackedColorModel PageAttributes PageFormat Pageable Paint PaintContext PaintEvent Panel PanelPeer Paper ParameterBlock ParameterDescriptor ParameterMetaData ParseException ParsePosition PasswordAuthentication PathIterator Pattern PatternEntry PatternSyntaxException Permission PermissionCollection Permissions PersistenceDelegate PhantomReference Pipe PipedInputStream PipedOutputStream PipedReader PipedWriter PixelGrabber PixelInterleavedSampleModel PlainDatagramSocketImpl PlainSocketImpl Point Point2D Policy PolicyNode PolicyQualifierInfo Polygon PopupMenu PopupMenuPeer PortUnreachableException PreferenceChangeEvent PreferenceChangeListener Preferences PreferencesFactory PreparedStatement Principal PrintGraphics PrintJob PrintStream PrintWriter Printable PrinterAbortException PrinterException PrinterGraphics PrinterIOException PrinterJob PrivateKey PrivilegedAction PrivilegedActionException PrivilegedExceptionAction Process ProfileDataException Properties PropertyChangeEvent PropertyChangeListener PropertyChangeListenerProxy PropertyChangeSupport PropertyDescriptor PropertyEditor PropertyEditorManager PropertyEditorSupport PropertyPermission PropertyResourceBundle PropertyVetoException ProtectionDomain ProtocolException Provider ProviderException Proxy PublicKey PushbackInputStream PushbackReader QuadCurve2D QuadIterator RBCollationTables RBTableBuilder RGBImageFilter RMIClassLoader RMIClassLoaderSpi RMIClientSocketFactory RMIFailureHandler RMISecurityException RMISecurityManager RMIServerSocketFactory RMISocketFactory RSAKey RSAKeyGenParameterSpec RSAPrivateCrtKey RSAPrivateCrtKeySpec RSAPrivateKey RSAPrivateKeySpec RSAPublicKey RSAPublicKeySpec Random RandomAccess RandomAccessFile Raster RasterFormatException RasterOp ReadOnlyBufferException ReadableByteChannel Reader RectIterator Rectangle Rectangle2D RectangularShape Ref Reference ReferenceQueue ReflectAccess ReflectPermission Registry RegistryHandler Remote RemoteCall RemoteException RemoteObject RemoteRef RemoteServer RemoteStub RenderContext RenderableImage RenderableImageOp RenderableImageProducer RenderedImage RenderedImageFactory RenderingHints ReplicateScaleFilter RescaleOp ResourceBundle ResultSet ResultSetMetaData Robot RobotPeer RoundRectIterator RoundRectangle2D RuleBasedBreakIterator RuleBasedCollator Runnable Runtime RuntimeException RuntimePermission SQLData SQLException SQLInput SQLOutput SQLPermission SQLWarning SampleModel Savepoint ScatteringByteChannel ScrollPane ScrollPaneAdjustable ScrollPanePeer Scrollbar ScrollbarPeer SecureClassLoader SecureRandom SecureRandomSpi Security SecurityException SecurityManager SecurityPermission SelectableChannel SelectionKey Selector SelectorProvider SentEvent SentenceBreakData SequenceInputStream SequencedEvent Serializable SerializablePermission SerializationTester ServerCloneException ServerError ServerException ServerNotActiveException ServerRef ServerRuntimeException ServerSocket ServerSocketChannel Set Shape ShapeGraphicAttribute Short ShortBuffer ShortLookupTable Shutdown Signature SignatureException SignatureSpi SignedMutableBigInteger SignedObject Signer SimpleBeanInfo SimpleDateFormat SimpleFormatter SimpleTextBoundary SimpleTimeZone SinglePixelPackedSampleModel Skeleton SkeletonMismatchException SkeletonNotFoundException Socket SocketAddress SocketChannel SocketException SocketHandler SocketImpl SocketImplFactory SocketInputStream SocketOptions SocketOutputStream SocketPermission SocketSecurityException SocketTimeoutException SocksConsts SocksSocketImpl SocksSocketImplFactory SoftReference SortedMap SortedSet SpecialMapping Stack StackOverflowError StackTraceElement Statement StreamCorruptedException StreamHandler StreamTokenizer StrictMath String StringBuffer StringBufferInputStream StringCharBuffer StringCharacterIterator StringCoding StringIndexOutOfBoundsException StringReader StringSelection StringTokenizer StringWriter Stroke Struct StubNotFoundException StyledParagraph SyncFailedException System SystemColor SystemFlavorMap Terminator TextArea TextAreaPeer TextAttribute TextBoundaryData TextComponent TextComponentPeer TextEvent TextField TextFieldPeer TextHitInfo TextJustifier TextLayout TextLine TextListener TextMeasurer TexturePaint TexturePaintContext Thread ThreadDeath ThreadGroup ThreadLocal Throwable TileObserver Time TimeZone TimeoutException Timer TimerTask Timestamp TooManyListenersException Toolkit Transferable TransformAttribute Transparency TreeMap TreeSet TrustAnchor Types UID UNIXProcess URI URISyntaxException URL URLClassLoader URLConnection URLDecoder URLEncoder URLStreamHandler URLStreamHandlerFactory UTFDataFormatException UnconnectedChannelException UndeclaredThrowableException UnexpectedException UnicastRemoteObject UnicodeClassMapping UnixFileSystem UnknownError UnknownGroupException UnknownHostException UnknownObjectException UnknownServiceException UnmappableCharacterException UnmarshalException UnrecoverableKeyException Unreferenced UnresolvedPermission UnresolvedPermissionCollection UnsatisfiedLinkError UnsupportedCharsetException UnsupportedClassVersionError UnsupportedEncodingException UnsupportedFlavorException UnsupportedOperationException VMID Vector VerifyError VetoableChangeListener VetoableChangeListenerProxy VetoableChangeSupport VirtualMachineError Visibility Void VolatileImage WeakHashMap WeakReference Window WindowAdapter WindowEvent WindowFocusListener WindowListener WindowPeer WindowStateListener WordBreakData WordBreakTable WritableByteChannel WritableRaster WritableRenderedImage WriteAbortedException Writer X-Buffer X-Buffer-bin X509CRL X509CRLEntry X509CRLSelector X509CertSelector X509Certificate X509EncodedKeySpec X509Extension XMLDecoder XMLEncoder XMLFormatter XmlSupport ZipConstants ZipEntry ZipException ZipFile ZipInputStream ZipOutputStream acl activation applet awt beancontext beans cert channels charset color datatransfer dgc dnd event font geom im image interfaces io jar lang logging math net nio peer prefs print ref reflect regex registry renderable rmi security server spec spi sql text util zip backport-util-concurrent-3.1-src/test/loops/words/ids.txt0000644001750700037720000105500710256105111022477 0ustar dawidkdcl 0 00 000 0000 000000000 000000000000000000000000000000000000000000000000000000000000000 0001 0009 000D 000a 000ms 0010 00123 002 0020 0021 002F 003 003A 004 0040 005 005B 006 0060 007 007B 007E 00am 01 010 01004 011 012 01234 01234567 0123456789 0123456789abcdef 0123456789abcdefghijklmnopqrstuvwxyz 013 014 015 016 017 02 020 0200 0201 0208 021 0212 022 023 024 025 026 027 03 030 031 032 033 034 035 036 0369 037 04 040 042 0430 044 046 05 050 052 054 056 06 060 062 064 066 07 070 072 074 076 08 08001 09 092 096139210x 0D 0F 0L 0X 0d 0e0 0e0f 0e1 0e10 0e10f 0e11 0e12 0e13 0e14 0e15 0e16 0e17 0e18 0e19 0e1f 0e2 0e20 0e21 0e22 0e2f 0e3 0e300 0e3f 0e4 0e4f 0e5 0e5f 0e6 0e6f 0e7 0e7f 0e8 0e8f 0e9 0e9f 0f 0s 0t 0th 0x 0x0 0x00 0x0000 0x00000000 0x00000001 0x000000FF 0x000000ff 0x00000100 0x00000400 0x00000800 0x00000C00 0x00001000 0x00003000 0x00004000 0x00005000 0x00007000 0x00008000 0x0000FF00 0x0000ff00 0x0000ffff 0x0001 0x00010000 0x00020000 0x0008 0x0009 0x000A 0x000C 0x000D 0x000F 0x000FFFFFFFFFFFFFL 0x000fffff 0x000fffffffffffffL 0x0010 0x001F 0x0020 0x0027 0x0060 0x007F 0x007e 0x007fffff 0x0080 0x009F 0x00F6 0x00FF0000 0x00ff 0x00ff0000 0x00s 0x01 0x0102030405060708L 0x02 0x03 0x04 0x0409 0x05 0x07FC0000 0x07FF 0x07ffffff 0x08 0x08000000 0x0F 0x0f 0x0f0f0f0f 0x0f0f0f0f0f0f0f0fL 0x0ff 0x1 0x10 0x100 0x1000 0x10000 0x10000000 0x1000000000000000L 0x10000000000000L 0x1001 0x1002 0x1003 0x1006 0x11 0x1100 0x1161 0x11a7 0x12 0x1269ae40 0x12bf307ae81ffd59L 0x14adf4b7320334b9L 0x159fd800 0x16bcc41e90000000L 0x17179149 0x172588ad4f5f0981L 0x18754571 0x19a10000 0x1A 0x1C 0x1E 0x1F 0x1L 0x1cb91000 0x1e39a5057d810000L 0x1eca170c00000000L 0x1f 0x2 0x20 0x200 0x2000 0x20000 0x211e44f7d02c1000L 0x226ed36478bfa000L 0x23744899 0x247dbc80 0x2700 0x27b95e997e21d9f1L 0x2E 0x2b73a840 0x2d04b7fdd9c0ef49L 0x2ee56725f06e5c71L 0x3 0x30 0x309f1021 0x33333333 0x3333333333333333L 0x34e63b41 0x3547667b 0x3642798750226111L 0x383d9170b85ff80bL 0x39aa400 0x3E0 0x3F 0x3b9aca00 0x3f 0x4 0x40 0x400 0x4000 0x40000 0x40000000 0x4000000000000000L 0x41c21cb8e1000000L 0x45 0x4546b3db 0x48c27395 0x4c4b4000 0x4c650 0x4cfa3cc1 0x4d28cb56c33fa539L 0x4e900abb53e6b71L 0x50 0x53 0x54 0x56 0x5658597bcaa24000L 0x57f6c100 0x5B 0x5DEECE66DL 0x5a3c23e39c000000L 0x5b27ac993df97701L 0x5c13d840 0x5da0e1e53c5c8000L 0x61 0x64 0x6765c793fa10079dL 0x6E 0x6b5a6e1d 0x6c20a40 0x6d91b519 0x6feb266931a75b7L 0x7 0x70 0x70000000 0x71 0x72 0x73 0x74 0x75 0x75db9c97 0x76 0x7600ec618141000L 0x77 0x78 0x78000000 0x780c7372621bd74dL 0x79 0x7A 0x7B 0x7C 0x7D 0x7E000000 0x7F 0x7F000000 0x7FF0000000000000L 0x7FFF0000 0x7FFFFFFF 0x7e0000 0x7f 0x7f7fffff 0x7f800000 0x7f800001 0x7fc00000 0x7fefffffffffffffL 0x7ff0000000000000L 0x7ff0000000000001L 0x7ff8000000000000L 0x7ffL 0x7fffff 0x7fffffff 0x7fffffffffffffffL 0x8 0x80 0x800 0x8000 0x80000 0x800000 0x80000000 0x8000000000000000L 0x85 0x8d2d931 0xA1 0xAA 0xAC 0xB 0xB1 0xBA 0xBE 0xBL 0xC 0xC0 0xC00 0xC1 0xCA 0xCAFEBABE 0xCE 0xCF 0xD0 0xD8 0xD800 0xDBFF 0xDC00 0xDFFF 0xE0 0xE1 0xED 0xEE 0xF 0xF9 0xFE 0xFF 0xFF00 0xFF0000 0xFF000000 0xFF000080 0xFF005C5C 0xFF808080 0xFFC0C0C0 0xFFE0E000 0xFFE0E0E0 0xFFFF 0xFFFFFFFF 0xFFFFFFFFL 0xFFFFL 0xFFL 0xa2f1b6f 0xaaaaaaaa 0xaaaaaaaaaaaaaaaaL 0xac00 0xaced 0xaee5720ee830681L 0xb16a458ef403f19L 0xb640000 0xc0 0xc29e98000000000L 0xcc6db61 0xd7a4 0xde0b6b3a7640000L 0xe0 0xe0000000 0xe8d4a51 0xf0000000 0xfe 0xff 0xff00 0xff0000 0xff000000 0xff00000000000000L 0xff800000 0xff800001 0xfff0000000000000L 0xfff0000000000001L 0xffff 0xffff0000 0xffffff00 0xfffffffL 0xfffffffe 0xffffffff 0xffffffffL 0xfffffffffffffL 0xffffffffffffffffL 0xxxxxxx 1 10 100 1000 10000 100000 1000000 100000000 1000000000 1000000000000000055511151231257827021181583404541015625 1000070633030801713L 1001 1002 1003 1004 1005 1006 1007 1008 100850 1009 1009836000000L 1009839600000L 1009843200000L 100ms 100x100 101 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 102 1020 1021 1022 1023 1024 1025 102L 1030 1034234728574286014L 104 105 106 10646 106749550580L 106751991168 1075 108 1080 1098 1099 10L 10x13 10x14 10x15 10xx 10xxxxxx 11 110 1100110 110592 110L 110x 110xxxxx 111 1110 1110xxxx 1111 1111xxxx 112 1125 114 116 117 118 118526816881161077L 1189 11PM 12 120 121 122 12219292800000L 1224463164541339165L 123 1231 1234 1234321 12345 123456 1234567 1237 12373 124 12472 1249 125 126 1265 127 128 1297 13 130 132 134 1349 1356099454469L 136 1360826667806852920L 137 14 140 1414 1415 14159265358979323846 142 1421746759512286392L 143 143448358473180225L 144 1456 146 146097 1461 1464 148 15 150 1500 151 152 1521711792217232256L 153833 154 156 1582 1582296315990362920L 16 160 162 1624 163 164 166 167 168 1681126225205050147L 1682 169 16BE 16LE 16x16 17 170 172 1721426 174 175 176 176091259 179 1793 18 180 1800000 1800467484195073863L 1807547505821590642L 181 1819846354050686206L 182 1820017752578914078L 1825314779160409405L 1857741824849069317L 186 1889339587208144238L 189 19 1900 1900414231151323879L 1903 1904 1905 1918 1919 192 1928 1947 1949 195 1952 1964 1969 1970 1978198479659022715L 1986 1993 1994 1995 1996 1997 1998 1999 19991101 19991106 1L 1e 1e128 1e16 1e256 1e32 1e64 1f 1st 1xx 2 20 200 2000 2001 2002 2003 2004 2005 2006 201 2010 2012 2018 202 2022 203 204 2048 205 2053 206 21 210 212 213 2130706433 214 2147483647 2147483648 215 216 21757335363267194L 21st 22 220 2214773872412987419L 222 224 225 2250 226 2272572637695466749L 2278 2279 228 2284879212465893870L 229 2299161 23 230 230798 2308460125733713944L 231 232 234 234E3 236 2373 2378 238 239 2396 23E4 23E45 24 240 241 242 243 244 2440588 246 2491878825643557906L 25 250 252 253 254 255 255L 255f 256 257 259 25th 26 260 262 264 2648 266 2671257302660747028L 2673458971256075116L 27 270 270799 2712 272 2728009084054400034L 273 2732 2739099268398711800L 274 2745179027874758501L 275 276 2764017481108945198L 2767605614048989439L 2781 28 283967356065247728L 2875 28800000 289529654D 29 292269054 292269055 292272993 292275056 292278994 2966288784432217853L 297 299 299282585814624189L 2A0 2D 2FCS 2XX 2a0 2b4 2e 2h 2nd 2v 2xx 3 30 300 301 301029995663981 301077366599181567L 302 303 304 3042686055658047285L 305 3053995032091335093L 306 3072 308 309 3093736618740652951L 3094126758329070636L 30F3 30pm 31 310 312 314 316 3166 3193687207550431679L 32 320 3200 3206093459760846163L 322 324 3247 326 32767 32768 3286316764910316507L 32pm 32x32 33 330 3304312411574666869L 331 332 3326426625597282442L 334 335 3359745691033257079L 336 3387516993124229948L 3388685877147921107L 34 340 3402 342 344 345 3456 345E3 346 34e 35 350 352 353 354 3543 355 356 3581463369166924961L 359 36 360 3600000 36000000 3609922007826600659L 362 362498820763181265L 364 365 36524 365L 366 3665804199014368530L 367 3672 3692302836626095722L 37 370 371 372 3729780091441768983L 374 375 376 377 3786198910865385080L 3790 38 3856 3899 38f 39 3905348978240129619L 3D 3E 3E3 3L 3XX 3b 3xx 4 40 400 4001 4006245 401 402 4023755556366636806L 4028235e 403 403250971215465050L 404 405 4059614 406 4061116 407 4075310674757313071L 408 409 4096 40foo 41 410 4106658 4106667 411 4112352 4112578634029874840L 4114077 411787 412 4122683 4124460 4128923 413 414 4147706 4149677 415 4153860 4154308 4155217 4162852 4173516 4173604 4178589 4179 4181562 4186 42 420 4206021311591459213L 4217 4271 4285201 4290774380558885855L 4298000515446427739L 42pm 43 4300693 4301064 4320890 4328196481005934313L 4345857070255674764L 4348425 4350 4352819 4360508 4389284 4390019 4395290 44 4407610 4408108 4418903 4426 4450867 4461737 4497834738069338734L 4498 45 4503142729533789064L 4536902356223894379L 456 4567 456E3 456e 458 45f 46 4613797578919906343L 4620452533522760060L 4633 4696 47 4723952579491349524L 4724086851538908602L 473 4739377000350280650L 473L 4756 477 4774881970558875024L 4775845313121906682L 48 4814 48282 483174189758638095L 4863550261346652506L 4870 49 4923 4930327919388951260L 4940670005562187L 4975 4980196508277280342L 4A0 4E 4HEXDIG 4XX 4a0 4e 4x 4xx 5 50 500 5000 500000 501 502 5024744406713321676L 5025 503 5035145889651310422L 504 505 5074 509 5090210921595982017L 51 510 512 5120 513 5148567311918794206L 515 5166 5184291520170872969L 52 5210 52429 5253 5276940640259749850L 5295 53 535 54 5488922509400504703L 55 56 567 57 5772796243397350300L 58 5836846270535785031L 59 5920926903803293709L 594 594380845140740218L 597 5987973545549424702L 5B 5D 5L 5XX 5d 5f 5xx 6 60 600 60000 6034044314589513430L 6052424284110960213L 61 6108874887143696463L 6120832682080437368L 6190621106981774043L 62 6223554758134037936L 63 6314925228044966088L 639 64 6401253773779951803L 6460061437900069969L 6479157306784022952L 648 64K 65 6520786458950516097L 65535 65536 66 6603384152749567654L 6619395951570472985L 6640330810709497518L 67 673 678 6789 68 6849794470754667710L 69 6a 6b 6c 6g 6th 6x9 7 70 700 701 7034897190745766939L 7054464920481467219L 707 7088199405468872373L 71 7182818284590452354 7183698231559129828L 7187392471159151072L 72 7200000 7207038068494060240L 7218322306649953788L 7262534875583282631L 7270714317450821763L 728 73 74 75 7515723908773894738L 7523967970034938905L 754 7589 75f 76 7627629688361524110L 7644114512714619750L 768 77 7712 7754090372962971524L 7777 78 7930732926638008763L 7956609840827222915L 7976931348623157e 7997698588986878753L 7days 7th 7x9 8 80 800 8028237497568985504L 8080 8087809532704668744L 81 8125100834729963327L 8152710247442114228L 8192 82 822 8287574255936472291L 83 836B 837039928046 84 841 8433406075740433514L 8451667562882310543L 8455284893909696482L 85 8575799808933029326L 8601 86400 864000000L 864413376551465018L 8658291919501921765L 8683452581122892189L 87 8742448824652078965L 876323262645176354L 8774683716313001058L 88 8809584163345499784L 8838754796412211005L 8842843931221139166L 8859 8859_1 8888 8890392402588814465L 8988374069173025854L 8th 9 90 901 9090 91 9142742483513960612L 9149081749638150636L 917 9172774392245257468L 9176873029745254542L 919286545866124006L 92 9218657361741657110L 9223372036794351616 9223372036854775807 9223372036854775807L 9223372036854775808 93 94 941st 942 94303 95 96 97 978 98 99 999 9999 999999 999999999 9e 9x11 9x12 A A0 A1 A10 A2 A3 A4 A5 A6 A7 A8 A9 AA AAA AAD ABC ABCDEFGHIJKLMNOPQRSTUVWXYZ ABORT ABORTED ABSTRACT ACC ACCEPT ACCESS ACCESSIBLE_CHILD_PROPERTY ACCESSIBLE_STATE_PROPERTY ACCESSIBLE_TEXT_PROPERTY ACCESSIBLE_VALUE_PROPERTY ACK ACM ACP ACTION_EVENT ACTION_EVENT_MASK ACTION_FIRST ACTION_LAST ACTION_PERFORMED ACTIVE ACTIVE_CAPTION ACTIVE_CAPTION_BORDER ACTIVE_CAPTION_TEXT AD ADAND ADDRESS_BITS_PER_UNIT ADDR_TYPE_NOT_SUP ADJUSTMENT_EVENT_MASK ADJUSTMENT_FIRST ADJUSTMENT_LAST ADJUSTMENT_VALUE_CHANGED ADP ADisk AE AEARE AFAFG AFTER AFTER_LAST_LINE AFTER_LINE_ENDS AGATG AGP AIAIA AINSWORTH AL ALALB ALIAS ALIGN ALL ALLBITS ALL_FLAGS ALPHABETIC_PRESENTATION_FORMS ALPHA_INTERPOLATION_DEFAULT ALPHA_INTERPOLATION_QUALITY ALPHA_INTERPOLATION_SPEED ALREADY ALT ALTER ALT_DOWN_MASK ALT_GRAPH_MASK ALT_MASK ALWAYS AM AMARM AM_PM AM_PM_FIELD AN ANANT ANCESTOR_MOVED ANCESTOR_RESIZED AND ANSI ANSI92 ANY ANY_EVENT AOAGO API APIs APRIL AQATA ARABIC ARABIC_DECIMAL_SEPARATOR ARABIC_PERCENT_SIGN ARABIC_PRESENTATION_FORMS_A ARABIC_PRESENTATION_FORMS_B ARARG ARGB ARGUMENT ARMENIAN ARRAY ARRAYS ARRAY_SIZE_INCREMENT ARROWS ARchive AS ASASM ASCII ASCII_AMPERSAND ASCII_APOSTROPHE ASCII_CARRIAGE_RETURN ASCII_CENT_SIGN ASCII_COLON ASCII_COMMA ASCII_DOLLAR_SIGN ASCII_END_OF_TEXT ASCII_EXCLAMATION_MARK ASCII_FORM_FEED ASCII_FULL_STOP ASCII_HORIZONTAL_TABULATION ASCII_LINEFEED ASCII_NONBREAKING_SPACE ASCII_NUMBER_SIGN ASCII_PERCENT ASCII_POUND_SIGN ASCII_QUESTION_MARK ASCII_QUOTATION_MARK ASCII_SEMICOLON ASCII_SPACE ASCII_VERTICAL_TABULATION ASCII_YEN_SIGN ASC_OR_DESC ASN ASSERT AST AT ATAUT ATHLETES ATS ATTN ATTR_DEF ATTR_NAME ATTR_SIZE ATTR_TYPE_NAME AUAUS AUD AUGUST AUTOMATICALLY AUTO_INCREMENT AWABW AWT AWTAutoShutdown AWTError AWTEvent AWTEventListener AWTEventListenerProxy AWTEventListeners AWTEventMulticaster AWTEvents AWTException AWTInvocationLock AWTKeyStroke AWTKeyStrokes AWTPermission AWTTreeLock AWT_COMPONENT AZ AZAZE A_DATA A_TO_Z Abbrechen Aboriginal Above Absolute Absract Abstract AbstractButton AbstractChannel AbstractCollection AbstractList AbstractMap AbstractMethodError AbstractSelectableChannel AbstractSequentialList AbstractSet Accents Accept Acceptable Accepted Accepts Access AccessControl AccessControlContext AccessControlException AccessController AccessException Accessibility Accessible AccessibleAWTButton AccessibleAWTCanvas AccessibleAWTCheckbox AccessibleAWTCheckboxMenuItem AccessibleAWTChoice AccessibleAWTComponent AccessibleAWTComponentHandler AccessibleAWTContainer AccessibleAWTDialog AccessibleAWTFocusHandler AccessibleAWTFrame AccessibleAWTLabel AccessibleAWTList AccessibleAWTListChild AccessibleAWTMenu AccessibleAWTMenuBar AccessibleAWTMenuComponent AccessibleAWTMenuItem AccessibleAWTPanel AccessibleAWTPopupMenu AccessibleAWTScrollBar AccessibleAWTScrollPane AccessibleAWTTextArea AccessibleAWTTextComponent AccessibleAWTTextField AccessibleAWTWindow AccessibleAction AccessibleApplet AccessibleComponent AccessibleContainer AccessibleContainerHandler AccessibleContext AccessibleObject AccessibleRole AccessibleSelection AccessibleState AccessibleStateSet AccessibleStates AccessibleText AccessibleValue Accessing Accessor According Accumulating Accuracy Acme Acquires Action ActionEvent ActionListener ActionListenerK ActionListeners Actions Activatable Activate Activation ActivationSystem ActiveEvent Actually Ad Adapted Add Added Adding Addison Addition Additional Additionally Address Addresses Addressing Adds Adjacent Adjust AdjustForGravity Adjustable Adjustables Adjusting Adjustment AdjustmentEvent AdjustmentListener AdjustmentListeners Adjustments Adjusts Advance Advanced Advances AffineTransform AffineTransformOp After Again Aggressively Agreement Aho Akira Alan Alg Algorithm AlgorithmObject AlgorithmParameterGenerator AlgorithmParameterGeneratorSpi AlgorithmParameterSpec AlgorithmParameters AlgorithmParametersSpi Algorithms Alias Alice All AllPermission AllPermissionCollection AllPermissions Allocate Allocates Allow AllowUserInteraction Allowed Allowing Allows Almost Alpha AlphaComposite Alphabet Alphabetic Alphanumerics Already AlreadyBoundException Also Alt Alternate Alternatively Although Alto Always AmPmMarkers Ambiguity Amendment America American Among Amy An And Angles Ann Annex Anno Annotation Another Answer Antarctica Antialiasing Antonio Any AnyLocal Anything AppA AppContext AppContexts Appease Append Appendix Appends Applet AppletAudioClip AppletContext AppletInitializer AppletStub Applets Application Applications Applies Apply Applying Appropriate Approximate Apr April Arabic Architecture Are Area AreaAveragingScaleFilter Argh Argument ArgumentIndex Arial Arithmetic ArithmeticException Armenian Arnaud Arnold Arrange ArrangeGrid Array ArrayIndexOutOfBoundsException ArrayList ArrayPersistenceDelegate ArrayStoreException Arrays Arrow Arrows Art Arthur As Ascii Asian Aside Ask Asmus Assert Assertion AssertionError AssertionStatusDirectives Assign Assigns Assistive Associate Associated Associates Asssume Assume Assumes AsynchronousCloseException At Athletes Atomically Atop Attaches Attachments Attatching Attempt Attempted Attempting Attempts Attribute AttributeEntry AttributeList AttributeMap AttributeSet AttributeStrings AttributeValue AttributedCharacterIterator AttributedCharacterIterators AttributedString AttributedStringIterator AttributedStrings Attributes AudioClip Aug August Authentication Authenticator Author Authoritative Authorities Authority Automatic Automatically Averaging Avoid Away Axis B B0 B1 B10 B2 B3 B4 B5 B6 B7 B8 B9 BABIH BACKGROUND BACKWARD_TRAVERSAL_KEY BACKWARD_TRAVERSAL_KEYS BACK_SPACE BASE BASE_TYPE BASIC_LATIN BA_DIRECTORY BA_EXISTS BA_HIDDEN BA_REGULAR BBB BBBRB BC BCE BDBGD BDK BEBEL BEF BEFORE BEFORE_FIRST_LINE BEFORE_LINE_BEGINS BEGIN BEGINNING BEHK BENGALI BEVEL BFBFA BGBGR BGL BHBHR BIBDI BIDI_EMBEDDING BIGINT BIG_ENDIAN BIN BINARY BINARYSEARCH_THRESHOLD BIND BIRs BIT BITARRAYMASK BITMASK BITS_PER_BYTE BITS_PER_UNIT BIT_DEPTH_MULTI BIT_INDEX_MASK BJBEN BL BLACK BLOB BLOCK_DECREMENT BLOCK_ELEMENTS BLOCK_INCREMENT BLUE BMBMU BMP BN BNBRN BO BOBOL BOLD BOLDITALIC BOOLEAN BOPOMOFO BOPOMOFO_EXTENDED BORDER BOTH BOTTOM_ALIGNMENT BOV BOX_DRAWING BR BRAILLE_PATTERNS BRBRA BREAK BREAKING BSBHS BSD BTBTN BUFFER_LENGTH BUNDLED BUSY BUTT BUTTON1_DOWN_MASK BUTTON1_MASK BUTTON2_DOWN_MASK BUTTON2_MASK BUTTON3_DOWN_MASK BUTTON3_MASK BVBVT BWBWA BY BYB BYBLR BYTEMASK BYTEPOWER BYTES_PER_INT BYTES_PER_VALUE BZBLZ Back BackSpace Backing Backward Backwards Bad Bags Bail Balancing Ball Bar Base Basic BasicPermission BasicPermissionCollection BasicPermissions BasicSplitPaneUI BasicStroke BasicVerticalLayoutManager Basically BatchUpdateException Bbits Be Bean BeanBox BeanContext BeanContextChild BeanContextMembershipListener BeanContextMembershipListeners BeanDescriptor BeanInfo Beans BeansAppletContext BeansAppletStub Beauty Because Before Begin Beginning Behaves Behavior Being Below Bengali Benjamin Bentley Besides Best BevelBorder BevelBorderUIResource Bidi Big BigDecimal BigDecimals BigDecmal BigInteger BigIntegers BigObjectThatShouldNotBeSerializedWithAButton Bill Binary Bind BindException Binding Binds Bit BitSet BitSets BitSieve Bits Bitset Bitwise Black Blank Blends Blob Bloch Block BlockDataInputStream BlockDataOutputStream Blocking BltBufferStrategy Blue Bob Bold Bonus BoolEditor Boolean Booleans Bopomofo BorderLayout BorderUIResource Both Bottom Bounds Box BoxLayout Boynton Braille Break BreakDictionary BreakIterator BreakIteratorCache BreakIteratorClasses BreakIteratorRules BreakIterators Breaking Breaks Brown BuddhistCalendar Buffer BufferB BufferCapabilities BufferOverflowException BufferS BufferStrategy BufferU BufferUnderflowException Buffered BufferedImage BufferedImageOp BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter Buffering Bug BugTraq Build BuildAPI BuildDictionaryFile Builder Builds Bulk Bump Business But Button Button1 Button10 Button2 Button3 Button4 Button5 Button6 Button7 Button8 Button9 ButtonGrid ButtonPeer Buttons Bval By Byrne Byte ByteArrayInputStream ByteArrayOutputStream ByteBuffer ByteBufferAs ByteBufferAsCharBuffer ByteBufferAsCharBufferB ByteBufferAsCharBufferL ByteBufferAsCharBufferRB ByteBufferAsCharBufferRL ByteBufferAsDoubleBufferB ByteBufferAsDoubleBufferL ByteBufferAsDoubleBufferRB ByteBufferAsDoubleBufferRL ByteBufferAsFloatBufferB ByteBufferAsFloatBufferL ByteBufferAsFloatBufferRB ByteBufferAsFloatBufferRL ByteBufferAsIntBufferB ByteBufferAsIntBufferL ByteBufferAsIntBufferRB ByteBufferAsIntBufferRL ByteBufferAsLongBufferB ByteBufferAsLongBufferL ByteBufferAsLongBufferRB ByteBufferAsLongBufferRL ByteBufferAsShortBufferB ByteBufferAsShortBufferL ByteBufferAsShortBufferRB ByteBufferAsShortBufferRL ByteChannel ByteEditor ByteFilter ByteInterleavedRaster ByteOrder ByteOutputter ByteToCharConverter Bytes C C0 C1 C10 C2 C3 C4 C5 C6 C7 C8 C9 CA CACAN CACHE_LOAD_FACTOR CANADA CANADA_FRENCH CANCEL CANCELLED CANONICAL_DECOMPOSITION CANVAS CAPITAL CAPS_LOCK CAP_BUTT CAP_ROUND CAP_SQUARE CARDINALITY CARET_POSITION_CHANGED CARON CARRIAGE CASE_INSENSITIVE_ORDER CASE_SENSITIVE CCCCK CDT CE CEASE CENTER CENTER_ALIGNMENT CENTER_BASELINE CERTIFICATES CFCAF CGCOG CH CHANGE CHAR CHARACTER CHARACTER_INDEX CHARINDEX CHAR_BUF_SIZE CHAR_ERROR CHAR_OCTET_LENGTH CHAR_UNDEFINED CHCHE CHECKED CHECK_BOX CHEROKEE CHF CHINA CHINESE CICIV CJK CJK_COMPATIBILITY CJK_COMPATIBILITY_F900 CJK_COMPATIBILITY_FA2D CJK_COMPATIBILITY_FORMS CJK_COMPATIBILITY_IDEOGRAPHS CJK_RADICALS_SUPPLEMENT CJK_SYMBOLS_AND_PUNCTUATION CJK_UNIFIED_IDEOGRAPHS CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A CKCOK CLASSPATH CLASS_NAME CLCHL CLEAR CLEAR_GLOBAL_FOCUS_OWNER CLF CLI CLIENT CLOB CLOSE_ALL_RESULTS CLOSE_CURRENT_RESULT CLOSE_CURSORS_AT_COMMIT CLR CMCMR CMD_NOT_SUPPORTED CMYK CN CNCHN CNFException COCOL CODE COLLATIONKEYOFFSET COLON COLOR COLOR_RENDER_DEFAULT COLOR_RENDER_QUALITY COLOR_RENDER_SPEED COLS COLUMN_DEF COLUMN_NAME COLUMN_SIZE COLUMN_TYPE COL_COUNT COM COMBINING_DIACRITICAL_MARKS COMBINING_HALF_MARKS COMBINING_KATAKANA_HIRAGANA_VOICED_SOUND_MARK COMBINING_MARKS_FOR_SYMBOLS COMBINING_SPACING_MARK COMBO_BOX COMMON COMPLETE COMPLETELY COMPONENT_ADDED COMPONENT_EVENT_MASK COMPONENT_FIRST COMPONENT_HIDDEN COMPONENT_LAST COMPONENT_MOVED COMPONENT_REMOVED COMPONENT_RESIZED COMPONENT_SHOWN COMPOSE CONCUR_READ_ONLY CONCUR_UPDATABLE CONNECT CONNECTOR_PUNCTUATION CONN_REFUSED CONSTANTS CONSTRUCTOR CONTAINER_EVENT_MASK CONTAINER_FIRST CONTAINER_LAST CONTRACTCHARINDEX CONTROL CONTROL_DK_SHADOW CONTROL_HIGHLIGHT CONTROL_LT_HIGHLIGHT CONTROL_PICTURES CONTROL_SHADOW CONTROL_TEXT CONVERSION CONVERSIONS CONVERT COPIED COPY_THRESHOLD COUNTRY_TYPE_MASK COUNTRY_WITHOUT_CURRENCY_ENTRY CR CRCRI CREATE CREATED CREATE_PARAMS CROSSHAIR_CURSOR CRs CS CST CS_sRGB CTRL CTRL_DOWN_MASK CTRL_MASK CTT CT_ALPHA CT_COMMENT CT_DIGIT CT_QUOTE CT_WHITESPACE CUCUB CURRENCY CURRENCYSTYLE CURRENCY_SIGN CURRENCY_SYMBOL CURRENCY_SYMBOLS CUSTOM_CURSOR CUSTOM_ID CVCPV CXCXR CYAN CYCYP CYRILLIC CZCZE Cable Cache CacheEntry Cached Caches Caculate Calculate Calculates Calendar CalendarDate Calendars California Call CallableStatement Callback Callbacks Called Callers Calling Calls Can Canada Canadian Cancel CancelKey Cancelled CancelledKeyException Cancelling Cancels Candidate Candidates Cannot Canonical Canvas CanvasPeer Canvases Capabilities Capacity Caps CarSet Card CardLayout Care Careful Carl Carry Cartesian Case CaseInsensitiveComparator Cause Caused Causes Caution Caveats Cc Cd Center Centers Central CertPathBuilder CertPathValidator CertStore CertStoreParameters Certain Certificate CertificateEncodingException CertificateException CertificateFactory Cerven Cervenec Cf Ch Chaining Chamness Change Changes Changing Channel Channels Char CharArrayReader CharArrayWriter CharBuffer CharConversionException CharSequence CharSet CharSets CharToByteConverter Character CharacterBreakData CharacterBreakDictionary CharacterBreakRules CharacterCodingException CharacterExceptionFlags CharacterIterater CharacterIterator CharacterIteratorFieldDelegate CharacterIterators Characters Chararcter Charset CharsetByteOutputter CharsetDecoder CharsetEncoder CharsetFiller CharsetProvider CharsetSD CharsetSE Charsets Cheap Check CheckBoxMenuItem Checkbox CheckboxGroup CheckboxMenuItem CheckboxMenuItemPeer CheckboxPeer Checked Checking Checks Chen Cherokee Child China Chinese Choice ChoiceFormat ChoicePeer Choices Choose Chris Christ Christophe Cipher Circumvent Claim Class ClassCastException ClassCircularityError ClassDataSlot ClassDataSlots ClassDescriptor ClassFormatError ClassID ClassLoader ClassLoaders ClassName ClassNotFoundException ClassNotFoundExceptions Classes Clean Cleans Clear ClearInterrupted Clearing Clears Clicking Client Clients Clip Clipboard Clob Clock Clone CloneNotSupportedException Cloneable Clones Cloning Close Closed ClosedByInterruptException ClosedChannelException ClosedSelectorException Closes Closing ClsID Cn Co Code CodeSource Coder Col Colin CollatinKey Collation CollationDecomp CollationElementIterator CollationElementIterators CollationElements CollationKey CollationKeys CollationRules Collator Collators Collect Collection Collections Collects Collet Color ColorChooser ColorModel ColorPaintContext ColorSpace ColorType ColorUIResource Colors Column Columns Combinations Combine Combiner Combining Command Comments Common CompactArray CompactByteArray CompactIntArray CompactShortArray Compacts Company Comparable Comparator Comparators Compare Compares Comparing Comparison Compatibility Compiler Compiles Complements Complete Completes Compliant Component ComponentEvent ComponentEvents ComponentFactory ComponentListener ComponentOrienation ComponentOrientation ComponentPeer Components Compose ComposedCharIter Composes Composite CompositeContext Compositing CompositionArea CompoundBorder CompoundBorderUIResource CompoundEnumeration Comprehensive Compute Computed Computer Computes Concatenates Conceptually Concrete Concurrency Concurrent ConcurrentModificationException ConcurrentModificationExceptions Conditional Condtional Confidential Conflict Conformant Conjoining Connect ConnectException ConnectIOException Connection Connects Connelly Consecutive Consequently Consider Consortium Constant Constants Constrain ConstrainableGraphics Constrained Construct Constructed Constructor Constructors Constructs Consult Consumes Contact Container ContainerEvent ContainerListener ContainerListner ContainerOrderFocusTraversalPolicy ContainerPeer Containers Contains Content ContentHandler ContentHandlerFactory Contents Context Continue Continues Continuing Control Controls Convenience ConversionBufferFullException Convert Converted Converter ConverterByteOutputter ConverterFiller ConverterSD ConverterSE Converters Converts Coordinate Coordinates Copies CopiesList Copy Copying Copyright Core Cormen Corp Correct Corresponding Corresponds Could Couldn Count Countries Country Counts Courier Create Created Creates Creating Creation Credit Croatia Croatian Crosshair CrosshairCursor Crossings CryptoSpec Cryptogaphy Cryptographic Cryptography Cs Ctrl Cubic Currencies Currency CurrencyData CurrencySymbols Current Currently Curso Cursor CursorDotPrefix Custom Customizer Cut Cx Cycle Cyrillic Czech D D1 D2 D3 D4 D5 D6 D7 D8 DARK_GRAY DASH_PUNCTUATION DATALINK DATA_TYPE DATE DATE_FIELD DAY DAY_OF_MONTH DAY_OF_WEEK DAY_OF_WEEK_FIELD DAY_OF_WEEK_IN_MONTH DAY_OF_WEEK_IN_MONTH_FIELD DAY_OF_YEAR DAY_OF_YEAR_FIELD DBL_DIG DBMS DBMSs DC DD DDD DDDD DDDDD DDDDDE DDL DE DEBUG DEBUGGING DECEMBER DECIMA DECIMAL DECIMAL_DIGITS DECIMAL_DIGIT_NUMBER DECIMAL_SEPARATOR DECLARATIONS DECLARED DEDEU DEFAULT DEFAULTRULES DEFAULT_CAPACITY DEFAULT_CURSOR DEFAULT_NOT_FOUND DEFAULT_PORT DEFAULT_VISIBLE_ROWS DEFERRABILITY DEGREE_CELSIUS DEGREE_FAHRENHEIT DELETE DELETED DELETEDs DELETE_RULE DEM DEPRECATE DERIVED DESCRIPTION DESELECTED DESKTOP DEVANAGARI DEVIATION DIALOG DIDN DIFFERENT DIGITS DIN DINGBATS DIRECTION DIRECTIONALITY_ARABIC_NUMBER DIRECTIONALITY_BOUNDARY_NEUTRAL DIRECTIONALITY_COMMON_NUMBER_SEPARATOR DIRECTIONALITY_EUROPEAN_NUMBER DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR DIRECTIONALITY_LEFT_TO_RIGHT DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE DIRECTIONALITY_NONSPACING_MARK DIRECTIONALITY_OTHER_NEUTRALS DIRECTIONALITY_PARAGRAPH_SEPARATOR DIRECTIONALITY_POP_DIRECTIONAL_FORMAT DIRECTIONALITY_RIGHT_TO_LEFT DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE DIRECTIONALITY_SEGMENT_SEPARATOR DIRECTIONALITY_UNDEFINED DIRECTIONALITY_WHITESPACE DIR_MIXED DISPLAYABILITY_CHANGED DISTINCT DJDJI DK DKDNK DKK DL DMDMA DNS DO DODOM DOES DOESN DOM DOMAIN_NAME DOM_MODE DON DONE DONT_LOOP_FLAG DOS DOUBLE DOUBLE_FRACTION_DIGITS DOUBLE_INTEGER_DIGITS DOUBLE_PRIME DOW DOWN DOWN_CYCLE_TRAVERSAL_KEY DOWN_CYCLE_TRAVERSAL_KEYS DOW_AFTER_DOM DOW_BEFORE_DOM DOW_GE_DOM_MODE DOW_IN_MONTH DOW_IN_MONTH_MODE DOW_LE_DOM_MODE DOY DRAFT DSA DSAParameterSpec DSAPrivateKey DSAPublicKey DSAPublicKeySpec DST DST_ATOP DST_IN DST_OFFSET DST_OUT DST_OVER DT DZDZA Dash Data DataBufferInt DataFlavor DataFlavors DataInput DataInputStream DataInputStreams DataOuputStream DataOutput DataOutputStream DataSource DataTruncation Database DatabaseMetaData Datagram DatagramChannel DatagramPacket DatagramSocket DatagramSocketImpl DatagramSocketImplFactory DatagramSockets Date DateFormat DateFormatSymbols DateFormatZoneData DateFormats DateFormatters DateTimeElements DateTimePatterns Datei Dateien Dates David Davidson Davis Day DayAbbreviations DayNames Daylight Daylignt Days De Deal Debug DebugHelper Debugging Dec December Deciding Decimal DecimalFormat DecimalFormatSymbols DecimalNumeral Declarations Declare DecodableString Decode Decodes Decoding DecompIterator Decompose Decomposes Decomposition Decrements Default DefaultBufferCapabilities DefaultCellEditor DefaultComboBoxModel DefaultCursor DefaultFocusTraversalPolicy DefaultKeyboardFocusManager DefaultKeyboardFocusManagerSentEvent DefaultKeyboardFocusManagers DefaultListModel DefaultListSelectionModel DefaultPersistenceDelegate DefaultSelectionType DefaultTreeModel DefaultUseCaches Defaults Define Defines Definition Definitive DefulatPD Delay Delays Delegate Delegates Delete Deletes Deletion Delimiter Deliver Delivers Delta Denver Deny Depending Deprecated Derive Describes Description Descriptions Descriptive Descriptor Descriptors Deselects Deserialization Deserialized Deserializes Deserializing Design DesignMode Designated DesintationType Desired Despite DessertTopping Destination DestinationType Destroy DestroyJavaVM Destroys Detailed Details Detect Detecting Determine Determines DevAxisVec Devanagari Devanigiri Developers Deviation Device Dewey Diacritical Dialog DialogInput DialogPeer DialogType Dialogs Dick Dictionary DictionaryBasedBreakIterator Didn Die Different Differs Diffie Digest DigestException DigestInputStream DigestOutputStream Digit DigitList DigitOnes DigitTens Digital Digits Dimension Dimension2D Dingbats Direct DirectBuffer DirectByteBuffer DirectByteBufferR DirectCharBuffer DirectCharBufferRS DirectCharBufferRU DirectCharBufferS DirectCharBufferU DirectColorModel DirectDoubleBufferRS DirectDoubleBufferRU DirectDoubleBufferS DirectDoubleBufferU DirectFloatBufferRS DirectFloatBufferRU DirectFloatBufferS DirectFloatBufferU DirectIntBufferRS DirectIntBufferRU DirectIntBufferS DirectIntBufferU DirectLongBufferRS DirectLongBufferRU DirectLongBufferS DirectLongBufferU DirectShortBufferRS DirectShortBufferRU DirectShortBufferS DirectShortBufferU Directorate Directory Disable Disables Disabling Disallow Discard Discards Disconnects Discover Disk Dispatch Dispatched Dispatches Dispatching Display DisplayMode Disposal DisposeAction Disposes Disposing Dissect Distinct Distinguish Distributable Distribute Dithering Divide Dividend Division Diwanji DnD DnDConstants Do DoInput DoOutput Document Does Doing Dollar DomainCombiner DomainCombiners Domini Don Donald Dot DotFileSuffix DotHotspotSuffix DotNameSuffix Double DoubleBuffer DoubleEditor Doubles Doug Douglas Down DragGestureEvent DragGestureListener DragGestureRecognizer DragSource DragSourceContext DragSourceContextPeer DragSourceListener Drain Drawing Draws Driver DriverInfo DriverManager DriverPropertyInfo Drivers Drop DropTarget DropTargetEventTargetFilter Drops Dst DstAtop DstIn DstOut DstOver Due Duff Dummy Dump DumpConstraints DumpLayoutInfo Duplicate During Dynamic E E0 EAST ECECU EDITABLE EDT EEE EEEST EFFECT EG EGEGY EHESH EIGHTY EMPLOYEES EMPTY EMPTY_LIST EMPTY_MAP EMPTY_SET EN ENABLED ENCLOSED_ALPHANUMERICS ENCLOSED_CJK_LETTERS_AND_MONTHS ENCLOSING_MARK ENCODED END END_OF_STRING END_PUNCTUATION END_STATE END_STATE_FLAG ENGLISH ENTER ENTRIES ENV_10 ENV_10X13 ENV_10X14 ENV_10X15 ENV_11 ENV_12 ENV_14 ENV_6X9 ENV_7X9 ENV_9 ENV_9X11 ENV_9X12 ENV_INVITE ENV_ITALY ENV_MONARCH ENV_PERSONAL EOF EOFException EOL EOS EPOCH_JULIAN_DAY EPOCH_YEAR EQUAL ERA ERA_FIELD ERERI ERROR ERRORED EResizeCursor ES ESCAPE ESESP ESP EST ET ETETH ETHIOPIC EUC EUR EVEN EXACT EXECUTE EXECUTED EXECUTE_FAILED EXECUTIVE EXIST EXISTS EXPANDCHARINDEX EXPECTED_MAX EXPONENT EXPONENT_SIGN EXPONENT_SYMBOL E_RESIZE_CURSOR Each Earth Ease East Eastern Easy Ecks Edh Edition Editor Ee Effective Effectively Eight Either Element Elements Eliminate Ellison Else Emits Empties Empty EmptyBorder EmptyBorderUIResource EmptyEnumerator EmptyEvent EmptyFieldPositionArray EmptyIterator EmptyList EmptyMap EmptySet EmptyStackException Enable Enables Enabling Encapsulates Enclosed Encloses Encoded Encoder Encodes Encoding EncryptedPrivateKeyInfo End Ends Enforces Eng Engineering English Enhancement Ensure Ensures Enter Entering Enters Entity Entries Entry EntryIterator EntryPair EntrySet EntrySetView Enum Enumerate Enumerates Enumeration Enumerations Enumerator Envelope Environment Equal Equality Equivalent Equivalently Era Eras Error Errors Escape Establish Establishes Estimate Etats EtchedBorder EtchedBorderUIResource Ethernet Ethiopic Euclid Euclidean Euler Euro Europe European Evaluates Even EvenOdd Event EventDispatchThread EventHandler EventHandlers EventListener EventListenerProxy EventListerProxy EventObject EventQueue EventQueueItem EventQueues EventSetDescriptor EventSetDescriptors EventTargetFilter Events Eventually Every Ex Exact Exactly Examine Examines Examining Example Examples Except Exception ExceptionInInitializerError ExceptionListener ExceptionResources ExceptionResources_de ExceptionResources_fr Exceptional Exceptions Excludes Execute Executes Executing Execution Executive Existing Exists Expand Expanding Expands Expected Expecting Expects Experience ExpiredKeyException Explicitly Explorer Exponential Expression Expressions Extended Extension Extensions Externalizable Extract Extracts Extreme F F1 F10 F11 F12 F2 F3 F4 F5 F6 F7 F8 F9 FACTOR FAHRVERGN FALL FALLTHROUGH FALSE FAMILY FAQ FCS FDBigInt FDBigInts FEBRUARY FEED FETCH_FORWARD FETCH_REVERSE FETCH_UNKNOWN FF FFFF FIELD_COUNT FIELD_NAME FIFIN FIFTY FIGURE_SPACE FILE FILES FILL_THRESHOLD FILTER FILTER_CONDITION FIM FINAL FINALIZERS FINALLY FINAL_QUOTE_PUNCTUATION FIPS FIRST FIRST_LINE_END FIRST_LINE_START FIVE FIX FIXED_PREC_SCALE FIXME FJFJI FKCOLUMN_NAME FKFLK FKP FKTABLE_CAT FKTABLE_NAME FKTABLE_SCHEM FK_NAME FLAG_DIR_DEFAULT_LTR FLAG_DIR_DEFAULT_RTL FLAG_DIR_LTR FLAG_DIR_RTL FLOAT FMFSM FOCUSABLE FOCUSED FOCUS_EVENT_MASK FOCUS_FIRST FOCUS_GAINED FOCUS_LAST FOCUS_LOST FOCUS_TRAVERSABLE_DEFAULT FOCUS_TRAVERSABLE_SET FOCUS_TRAVERSABLE_UNKNOWN FOFRO FOLIO FOLLOWING FONT FOR FOREVER FORM FORMAT FORTY FORWARD_TRAVERSAL_KEY FORWARD_TRAVERSAL_KEYS FQDN FR FRACTION FRACTION_FIELD FRAME FRAMEBITS FRANCE FRENCH FRF FRFRA FRIDAY FROM FSS_UTF FULL FULLWIDTH_COMMA FULLWIDTH_EXCLAMATION_MARK FULLWIDTH_FULL_STOP FULLWIDTH_QUESTION_MARK FULL_DECOMPOSITION FXFXX Facility Factory FactoryURLClassLoader Fahrvergn Failed Failure Fall False Far Fast FastPathProducer Fault Fd FeatureDescriptor FeatureDescriptors Feb February Fell Fetch Fetches Fetchs Fett Few Fewer Fialli Field FieldDelegate FieldInfo FieldPosition FieldPositions FieldReflector FieldReflectorKey Fields Figure File FileChannel FileChannelImpl FileDescriptor FileDesecriptor FileDialog FileDialogPeer FileFilter FileInputStream FileNameFilter FileNameMap FileNotFoundException FileOutputStream FilePermission FilePermissionCollection FilePermissions FileReader FileReaders FileSystem FileWriter FileWriters Filename FilenameFilter Filesystem Fill FillAdapter Filler Filling Fills Filter FilterInputStream FilterOutputStream FilterReader FilterWriter FilteredImageSource Filtering Finalizer Finally Find Finds Finish Finishes Fire Fires First Fish Fist Fix Fixed Fixes Fixup Flag Flags FlashPix FlatteningPathIterator FlipBufferStrategy FlipContents Flipping Flips Float FloatBuffer FloatEditor FloatValue FloatingDecimal FloatingPointLiteral FloorWax Flow FlowLayout Flush Flushes Focus FocusEvent FocusEvents FocusListener FocusManager FocusTraversalPolicy Focuses Folio Following Font FontFormatException FontLineMetrics FontMetrics FontNameAliases FontPeer FontRenderContext FontSupport FontUIResource Foo FooBah FooBeanInfo FooServerSocket FooSocket Foote For Forbidden Force Forces Forcibly Form Format FormatElement FormatStyle FormatType Formats Formatted Formatter Formatters Forms Formulate Fortunately Forward Forwards Found Four Fowler FozEditor Fpx FpxClsidOffset Fraction Fragment Frame FramePeer Frames France Frank Fred FredEditor FredEvent FredListener Freely French Freytag Fri Friday Fries From Fs Full Fulltype Fullwidth Function Functions Fundamentally Funnel Further Furthermore Future G GAGAB GB GBGBR GBP GC GCD GDGRD GEGEO GEN GENERAL_FAILURE GENERAL_PUNCTUATION GENERATED GENERATION GEOMETRIC_SHAPES GEORGIAN GERMAN GERMANY GET GFGUF GGG GHGHA GIF GIFs GIGIB GLGRL GLOBAL GMGMB GMT GMT_ID GMT_ID_LENGTH GMT_MINUS GMT_PLUS GNGIN GOT_FOCUS GPGLP GPS GQGNQ GRANTEE GRANTOR GRAY GRD GREATER GREEK GREEK_EXTENDED GREEN GRGRC GROUP GROUPING_SEPARATOR GSSAPI GSSGS GTGTM GUGUM GUI GUIs GUJARATI GURMUKHI GV GWGNB GYGUY Gary Gateway GatheringByteChannel Gaussian General GeneralPath GeneralSecurityException Generally Generate GenerateCharacter GenerateCurrencyData Generates Generating Generator Generic GenericBeanInfo Geometric Georgian German Get GetBooleanAction GetField GetFieldImpl GetHeaderField GetLayoutInfo GetMinSize GetPropertyAction GetReflectionFactoryAction GetUnsafeAction Gets Getter Getters Gigantic Gillam Give Given Gives GlobalCursorManager GlobalCursormanager Glyph GlyphVector Go Goldsmith Gone Gong Gosling Gotcha GradientPaint GradientPaintContext Graham Gralund Granting Graphic Graphical Graphics Graphics2D GraphicsCallback GraphicsConfigTemplate GraphicsConfiguration GraphicsDevice GraphicsEnvironment Graphs Great Greater Greatest Greek Green Greenwich Gregorian GregorianCalendar GridBag GridBagConstraint GridBagConstraints GridBagEx1 GridBagLayout GridBagLayoutInfo GridLayout Group Grouping Grow Guaranteed Guard GuardedObject Gui Guide Gujarati Gurmukhi Guy GyMdkHmsSEDFwWahKz H HACK HALFWIDTH_AND_FULLWIDTH_FORMS HAND_CURSOR HANGING_BASELINE HANGUL_BASE HANGUL_CHOSEONG_HIGH HANGUL_CHOSEONG_LOW HANGUL_COMPATIBILITY_JAMO HANGUL_JAMO HANGUL_JONGSEONG_HIGH HANGUL_JONGSEONG_LOW HANGUL_JUNGSEONG_HIGH HANGUL_JUNGSEONG_LOW HANGUL_LIMIT HANGUL_SYLLABLES HANGUL_SYL_HIGH HANGUL_SYL_LOW HEAD HEADER_BLOCKED HEAVYWEIGHTS HEBREW HERE HH HIERARCHY_BOUNDS_EVENT_MASK HIERARCHY_CHANGED HIERARCHY_EVENT_MASK HIGH HIGH_PRIORITY HIRAGANA HIRAGANA_ITERATION_MARK HIRAGANA_LETTER_A HIRAGANA_LETTER_DI HIRAGANA_LETTER_E HIRAGANA_LETTER_I HIRAGANA_LETTER_MO HIRAGANA_LETTER_O HIRAGANA_LETTER_RO HIRAGANA_LETTER_SMALL_A HIRAGANA_LETTER_SMALL_E HIRAGANA_LETTER_SMALL_I HIRAGANA_LETTER_SMALL_O HIRAGANA_LETTER_SMALL_TU HIRAGANA_LETTER_SMALL_U HIRAGANA_LETTER_SMALL_WA HIRAGANA_LETTER_SMALL_YA HIRAGANA_LETTER_SMALL_YO HIRAGANA_LETTER_SMALL_YU HIRAGANA_LETTER_TU HIRAGANA_LETTER_U HIRAGANA_LETTER_VU HIRAGANA_LETTER_WA HIRAGANA_LETTER_YA HIRAGANA_LETTER_YO HIRAGANA_LETTER_YU HIRAGANA_SEMIVOICED_SOUND_MARK HIRAGANA_VOICED_ITERATION_MARK HKHKG HMHMD HNHND HOLD_CURSORS_OVER_COMMIT HOME HOOKS HORIZONTAL HORIZ_BIT HOST_UNREACHABLE HOUR HOUR0 HOUR0_FIELD HOUR1 HOUR1_FIELD HOUR_OF_DAY HOUR_OF_DAY0 HOUR_OF_DAY0_FIELD HOUR_OF_DAY1 HOUR_OF_DAY1_FIELD HREF HRHRV HSB HSBtoRGB HSPACE HShih HTHTI HTML HTTP HTTP_ACCEPTED HTTP_BAD_GATEWAY HTTP_BAD_METHOD HTTP_BAD_REQUEST HTTP_CLIENT_TIMEOUT HTTP_CONFLICT HTTP_CREATED HTTP_ENTITY_TOO_LARGE HTTP_FORBIDDEN HTTP_GATEWAY_TIMEOUT HTTP_GONE HTTP_INTERNAL_ERROR HTTP_LENGTH_REQUIRED HTTP_MOVED_PERM HTTP_MOVED_TEMP HTTP_MULT_CHOICE HTTP_NOT_ACCEPTABLE HTTP_NOT_AUTHORITATIVE HTTP_NOT_FOUND HTTP_NOT_IMPLEMENTED HTTP_NOT_MODIFIED HTTP_NO_CONTENT HTTP_OK HTTP_PARTIAL HTTP_PAYMENT_REQUIRED HTTP_PRECON_FAILED HTTP_PROXY_AUTH HTTP_REQ_TOO_LONG HTTP_RESET HTTP_SEE_OTHER HTTP_SERVER_ERROR HTTP_UNAUTHORIZED HTTP_UNAVAILABLE HTTP_UNSUPPORTED_TYPE HTTP_USE_PROXY HTTP_VERSION HUHUN HUMBUG HUNDRED HUP HW HYPHEN H_ALPHA H_ALPHANUM H_DASH H_DIGIT H_DOT H_ESCAPED H_HEX H_LOWALPHA H_MARK H_PATH H_PCHAR H_REG_NAME H_RESERVED H_SCHEME H_SERVER H_UNRESERVED H_UPALPHA H_URIC H_URIC_NO_SLASH H_USERINFO Half Halfwidth Hall Halt Halting Han Hand HandCursor Handle HandleList HandleTable Handler HandlerBase Handles Handling Hangul Hanpeter Hans Harbison Harder Harry Has HasNext Hash HashIterator HashMap HashSet HashSortedMap HashSortedSet Hashcode Hashtable Hastable Have Having Hazelnut HeadlessException HeadlessGraphicsEnvironment HeadlessToolkit Heap HeapByteBuffer HeapByteBufferR HeapCharBuffer HeapCharBufferR HeapDoubleBuffer HeapDoubleBufferR HeapFloatBuffer HeapFloatBufferR HeapIntBuffer HeapIntBufferR HeapLongBuffer HeapLongBufferR HeapShortBuffer HeapShortBufferR Heavyweight HeavyweightFocusRequest Hebrew Height Held Helena Hellman Hello Helper Helvetica Hence Herb Here HexDigits Hi Hide Hides Hierarchical Hierarchy HierarchyBoundsListener HierarchyEvent HierarchyEvents HierarchyListener High HighLevelException Higher Hindi Hinrichs Hint Hiragana Historically HistoricallyNamedCharset Hoff Holds Home Honolulu Hook Hope Hopefully Horizontal HorizontalLines Host HotSpot Hours How However HttpURLConnection Huang Hybrid HyperText I I18N IANA IBM IBME ICMP ICONIFIED ICON_COLOR_16x16 ICON_COLOR_32x32 ICON_MONO_16x16 ICON_MONO_32x32 ID IDENTICAL IDENT_TX_ATTRIBUTE IDEOGRAPHIC_DESCRIPTION_CHARACTERS IDEOGRAPHIC_ITERATION_MARK IDIDN IDs IEC IEEE IEEEremainder IEIRL IEP IETF IGNORABLEMASK IGNORABLES IGNORE IGNORE_ALL_BEANINFO IGNORE_HANGUL IGNORE_IMMEDIATE_BEANINFO IIOP ILISR ILS IMAGE_INCOMPATIBLE IMAGE_RESTORED IMF IMG IMPLEMENTATION IMPLEMENTATION_TITLE IMPLEMENTATION_VENDOR IMPLEMENTATION_VERSION IMPORTANT IN INACTIVE_CAPTION INACTIVE_CAPTION_BORDER INACTIVE_CAPTION_TEXT INADDRSZ INADDR_ANY INCLUDE_SELF INDEXOFSUBLIST_THRESHOLD INDEX_MASK INDEX_NAME INDEX_QUALIFIER INDICATE INF INFINITY INFO INFO_TEXT ININD INITIAL INITIALTABLESIZE INITIAL_CACHE_SIZE INITIAL_FORMATS INITIAL_QUOTE_PUNCTUATION INITIAL_STATE INOUT INPUT_METHODS_ENABLED_MASK INPUT_METHOD_EVENT_MASK INPUT_METHOD_FIRST INPUT_METHOD_LAST INPUT_METHOD_SEGMENT INPUT_METHOD_TEXT_CHANGED INSERT INSTALLED INSTANCE INT INT16SZ INTEGER INTEGERSTYLE INTEGER_FIELD INTERFACE INTERNAL INTERNALLY_SET INTERPOLATION_BICUBIC INTERPOLATION_BILINEAR INTERPOLATION_NEAREST_NEIGHBOR INVALIDATED INVALID_COUNTRY_ENTRY INVALID_FIELD_OFFSET INVARIANT INVITE INVITE_ENVELOPE INVOCATION_EVENT_MASK INVOCATION_FIRST INVOCATION_LAST INVOICE INVOKE IN_PROGRESS IO IOException IOExceptions IOIOT IP IPA IPA_EXTENSIONS IPP IPTOS_LOWCOST IPTOS_LOWDELAY IPTOS_RELIABILITY IPTOS_THROUGHPUT IPV4 IPV6 IP_MULTICAST_IF IP_MULTICAST_IF2 IP_MULTICAST_LOOP IP_TOS IPaddress IPs IPv4 IPv4address IPv6 IPv6address IQIRQ IRIRN ISISL ISO ISO646 ISO_2A0 ISO_3166 ISO_4A0 ISO_A0 ISO_A1 ISO_A10 ISO_A2 ISO_A3 ISO_A4 ISO_A5 ISO_A6 ISO_A7 ISO_A8 ISO_A9 ISO_B0 ISO_B1 ISO_B10 ISO_B2 ISO_B3 ISO_B4 ISO_B4_ENVELOPE ISO_B5 ISO_B5_ENVELOPE ISO_B6 ISO_B7 ISO_B8 ISO_B9 ISO_C0 ISO_C0_ENVELOPE ISO_C1 ISO_C10 ISO_C10_ENVELOPE ISO_C1_ENVELOPE ISO_C2 ISO_C2_ENVELOPE ISO_C3 ISO_C3_ENVELOPE ISO_C4 ISO_C4_ENVELOPE ISO_C5 ISO_C5_ENVELOPE ISO_C6 ISO_C6_ENVELOPE ISO_C7 ISO_C7_ENVELOPE ISO_C8 ISO_C8_ENVELOPE ISO_C9 ISO_C9_ENVELOPE ISO_DESIGNATED_LONG ISO_DESIGNATED_LONG_ENVELOPE IS_GRANTABLE IS_NULLABLE IT ITALIAN ITALIC ITALY ITALY_ENVELOPE ITEM_EVENT_MASK ITEM_FIRST ITEM_LAST ITEM_STATE_CHANGED ITITA ITL I_A I_ALL I_B I_BACKGROUND I_C I_COLOR I_COMMON I_COPIED I_D I_DRAFT I_E I_EXECUTIVE I_FILE I_FOLIO I_HIGH I_INVITE_ENVELOPE I_INVOICE I_ISO_2A0 I_ISO_4A0 I_ISO_A0 I_ISO_A1 I_ISO_A10 I_ISO_A2 I_ISO_A3 I_ISO_A4 I_ISO_A5 I_ISO_A6 I_ISO_A7 I_ISO_A8 I_ISO_A9 I_ISO_B0 I_ISO_B1 I_ISO_B10 I_ISO_B2 I_ISO_B3 I_ISO_B4 I_ISO_B5 I_ISO_B6 I_ISO_B7 I_ISO_B8 I_ISO_B9 I_ISO_C0 I_ISO_C1 I_ISO_C10 I_ISO_C2 I_ISO_C3 I_ISO_C4 I_ISO_C5 I_ISO_C6 I_ISO_C7 I_ISO_C8 I_ISO_C9 I_ISO_DESIGNATED_LONG I_ITALY_ENVELOPE I_JIS_B0 I_JIS_B1 I_JIS_B10 I_JIS_B2 I_JIS_B3 I_JIS_B4 I_JIS_B5 I_JIS_B6 I_JIS_B7 I_JIS_B8 I_JIS_B9 I_LANDSCAPE I_LEDGER I_MONARCH_ENVELOPE I_MONOCHROME I_NATIVE I_NA_10X13_ENVELOPE I_NA_10X14_ENVELOPE I_NA_10X15_ENVELOPE I_NA_6X9_ENVELOPE I_NA_7X9_ENVELOPE I_NA_9X11_ENVELOPE I_NA_9X12_ENVELOPE I_NA_LEGAL I_NA_LETTER I_NA_NUMBER_10_ENVELOPE I_NA_NUMBER_11_ENVELOPE I_NA_NUMBER_12_ENVELOPE I_NA_NUMBER_14_ENVELOPE I_NA_NUMBER_9_ENVELOPE I_NONE I_NORMAL I_ONE_SIDED I_PERSONAL_ENVELOPE I_PHYSICAL I_PORTRAIT I_PRINTABLE I_PRINTER I_PRIOR I_QUARTO I_RANGE I_SELECTION I_SEPARATE_DOCUMENTS_COLLATED_COPIES I_SEPARATE_DOCUMENTS_UNCOLLATED_COPIES I_TWO_SIDED_LONG_EDGE I_TWO_SIDED_SHORT_EDGE I_UNDEFINED Icon Id Ideally Identical Identically Identifier Identifiers Identifies Identify Identities Identity IdentityHashMap IdentityHashMapEntry IdentityHashMapIterator IdentityHashtable IdentityScope Ideographic Ideographs If Ignorable Ignore Ignored Ignores Illegal IllegalAccessError IllegalAccessException IllegalArgumentException IllegalBlockingModeException IllegalCharsetNameException IllegalComponentStateException IllegalMonitorStateException IllegalStateException IllegalThreadStateException Image ImageBlaster ImageCapabilities ImageFilter ImageIcon ImageMediaEntry ImageObserver ImageProducer Images Immutable ImmutableEntry Impl Implement Implementation Implementations Implemented ImplementedIn Implementing Implementors Implements Important Imports In InaccessibleBufferIndexException Inc Includes IncompatibleClassChangeError Incomplete Inconsistent Incorrect Increase Increases Increasing Increment Increments Independent Index IndexColorModel IndexOutOfBoundsException IndexedPropertyDescriptor Indexes Indic Indicate Indicates Individual Inet4Address Inet4AddressImpl Inet6Address Inet6AddressImpl InetAddress InetAddressCachePolicy InetAddressContainer InetAddressImpl InetAddressImplFactory InetAddresses InetAdress InetSocketAddress Inetaddress Inf Infinite Infinity Informally Information Informational Informative Inheritable InheritableThreadLocal Initial Initialization Initialize Initialized Initializes Initializing Initially Initiate Initiation Inner Input InputContext InputEvent InputListener InputMethodEvent InputMethodEvents InputMethodHighlight InputMethodListener InputMethodRequests InputMethodSupport InputStream InputStreamReader InputStreamReaders Inputstream Insert Insertion Inserts Insets Inside Installs Instance InstanceWrapper Instances Instantiate Instantiates Instantiating InstantiationError InstantiationException Instead Insufficient Int IntBuffer IntEditor IntHashtable Integer IntegerComponentRaster IntegerInterleavedRaster IntegerOnly Integers Integrity Intel Intended Intenet Interact Interestingly Interface Interfaces Internal InternalError Internally International Internet Interpolation Interpretation InterruptedException InterruptedIOException Interruptible Interrupts Intersects Introduction Intropector Introspect Introspected Introspection IntrospectionException Introspector Invalid InvalidAlgorithmParameterException InvalidClassException InvalidDnDOperationException InvalidDndOperationException InvalidKeyException InvalidKeySpecException InvalidMarkException InvalidObjectException InvalidParameterException InvalidParameterSpecException Invalidate Invalidates Invariant Invariants Inverse Invitation Invocation InvocationEvent InvocationHandler InvocationTargetException Invocations Invoice Invoke Invoked Invoker Invokes Invoking Is Isn Issues It Italic Italy Item ItemEvent ItemListener ItemListeners ItemSelectable Items Iterate Iterating Iteration Iterations Iterator Iterators Itr Its Itype ItypesPerOtype J J2SE JAMO_LBASE JAMO_LCOUNT JAMO_NCOUNT JAMO_TBASE JAMO_TCOUNT JAMO_VBASE JAMO_VCOUNT JANUARY JAN_1_1_JULIAN_DAY JAPAN JAPANESE JAR JAVA_HOME JAVA_OBJECT JButton JCA JCE JCheckBox JComboBox JComponent JComponents JDBC JDK JDK1 JDKClassLoader JDialog JFrame JIS JIS_B0 JIS_B1 JIS_B10 JIS_B2 JIS_B3 JIS_B4 JIS_B5 JIS_B6 JIS_B7 JIS_B8 JIS_B9 JIT JITing JITs JKS JLS JLabel JLayeredPane JList JMJAM JMenu JMenuBar JMenuItem JMenuItems JNI JNI_Load JNI_OnLoad JNI_Unload JO JOIN_BEVEL JOIN_MITER JOIN_ROUND JOJOR JP JPEG JPJPN JRE JRootPane JSR JSSE JScrollPane JSplitPane JTabbedPane JTable JTableHeader JTextComponent JTextField JULY JUNE JVM JVMs JViewport Jacobi James Jamo Jan January Japan Japanese Jar JarEntry JarException JarFile JarInputStream JarURLConnection Jaunary Java JavaBean JavaBeans JavaSoft Jean Jellinek Jim JobAttribute JobAttributes Joe John Join Joins Jon JonL Jonathan Jones Jonni Josh Joy Jsafe Jul Julian July Jun June Junk Jupiter Jurg Just K KANBUN KANGXI_RADICALS KANNADA KATAKANA KATAKANA_HIRAGANA_PROLONGED_SOUND_MARK KATAKANA_ITERATION_MARK KATAKANA_LETTER_A KATAKANA_LETTER_DI KATAKANA_LETTER_E KATAKANA_LETTER_I KATAKANA_LETTER_MO KATAKANA_LETTER_O KATAKANA_LETTER_RO KATAKANA_LETTER_SMALL_A KATAKANA_LETTER_SMALL_E KATAKANA_LETTER_SMALL_I KATAKANA_LETTER_SMALL_KA KATAKANA_LETTER_SMALL_KE KATAKANA_LETTER_SMALL_O KATAKANA_LETTER_SMALL_TU KATAKANA_LETTER_SMALL_U KATAKANA_LETTER_SMALL_WA KATAKANA_LETTER_SMALL_YA KATAKANA_LETTER_SMALL_YO KATAKANA_LETTER_SMALL_YU KATAKANA_LETTER_TU KATAKANA_LETTER_U KATAKANA_LETTER_VA KATAKANA_LETTER_VO KATAKANA_LETTER_VU KATAKANA_LETTER_WA KATAKANA_LETTER_YA KATAKANA_LETTER_YO KATAKANA_LETTER_YU KATAKANA_VOICED_ITERATION_MARK KEEP_CURRENT_RESULT KEKEN KEYS KEYSTORE_TYPE KEY_ACTION KEY_ACTION_RELEASE KEY_ALPHA_INTERPOLATION KEY_ANTIALIASING KEY_COLOR_RENDERING KEY_DITHERING KEY_EVENT KEY_EVENT_MASK KEY_FIRST KEY_FRACTIONALMETRICS KEY_INTERPOLATION KEY_LAST KEY_PRESS KEY_PRESSED KEY_RELEASE KEY_RELEASED KEY_RENDERING KEY_SEQ KEY_STROKE_CONTROL KEY_TEXT_ANTIALIASING KEY_TYPED KGKGZ KHKHM KHMER KIKIR KMCOM KNKNA KOREA KOREAN KPPRK KR KRKOR KWKWT KYCYM KZKAZ Kana Kanbun Kanerva Kangxi Kanji Kannada Katakana Keep Kejriwal Ken Kestrel Key KeyAdapter KeyAuthorizationFailureException KeyEvent KeyEventDispatcher KeyEventDispatchers KeyEventPostProcessor KeyEventPostProcessors KeyEvents KeyException KeyFactory KeyFactorySpi KeyIDConflictException KeyIterator KeyListener KeyManagementException KeyPair KeyPairGenerator KeyPairGeneratorSpi KeyPressed KeyReleased KeySet KeySize KeySpec KeyStore KeyStoreException KeyStoreSpi KeyStroke KeyTyped KeyUsage Keyboard KeyboardFocusManager KeyboardFocusManagers Keyed Keymap Keys Khan Khmer Kills Klaus Knippel Knowledgeable Known Knuth Kona Korean L LABEL LALAO LANDSCAPE LANGUAGE LAO LAST_LINE_END LAST_LINE_START LATIN LATIN1_DEGREE_SIGN LATIN1_SOFTHYPHEN LATIN_1_SUPPLEMENT LATIN_EXTENDED_A LATIN_EXTENDED_ADDITIONAL LATIN_EXTENDED_B LAYOUT_LEFT_TO_RIGHT LAYOUT_NO_LIMIT_CONTEXT LAYOUT_NO_START_CONTEXT LAYOUT_RIGHT_TO_LEFT LBLBN LC LCID LCLCA LD LEADING LEAP_MONTH_LENGTH LEAP_NUM_DAYS LEAST_MAX_VALUES LEDGER LEFT LEFT_ALIGNMENT LEFT_TO_RIGHT LEGAL LEGAL_BUTTON_MASK LENGTH LESS LETTER LETTERLIKE_SYMBOLS LETTER_NUMBER LF LFs LG_BYTES_PER_VALUE LI LIFO LIGHTWEIGHTS LIGHT_GRAY LIKE LILIE LINE LINENO LINES LINE_END LINE_INDEX LINE_SEPARATOR LINE_START LIST LISTEN LIST_DESELECT LIST_EVENT LIST_ITEM LIST_SELECT LITERAL_PREFIX LITERAL_SUFFIX LITTLE_ENDIAN LIU LJ LKLKA LOAD LOADING LOADSTARTED LOAD_FILE LOCAL LOCALIZE LOCALIZED LOCAL_TYPE_NAME LOCATOR LOCK LOG10 LONG LONGEST LONGVARBINARY LONGVARCHAR LONG_BITS LONG_MASK LONG_MIN LONG_MIN_REP LOOKAHEAD_STATE_FLAG LOST_FOCUS LOW LOWERCASE_LETTER LOW_PRIORITY LRE LRLBR LRO LRU LSD LSLSO LT LTLTU LTR LTR_BIT LUF LULUX LVLVA LWD_MOUSE_DRAGGED_OVER LWS LYLBY L_ALPHA L_ALPHANUM L_DASH L_DIGIT L_DOT L_ESCAPED L_HEX L_LOWALPHA L_MARK L_PATH L_PCHAR L_REG_NAME L_RESERVED L_SCHEME L_SERVER L_UNRESERVED L_UPALPHA L_URIC L_URIC_NO_SLASH L_USERINFO Label LabelPeer Labels Lacking Langley Language Languages Lao Large Larger Last Later Latin Latin1 Launcher Laura Laurence Lay Layout LayoutManager LayoutManager2 LayoutManagers Lays Le Lea Leading Leap Least Leave Ledger Lee Left Legacy Legal Lehmer Leiserson Len LenSquared Length Less Let Lets Letter Letterlike Letters Level Li LibFile Library License Lieh Lightweight LightweightDispatcher LightweightFocusRequest LightweightPeer Like Likewise Limit Line LineBorder LineBorderUIResource LineBreak LineBreakData LineBreakDictionary LineBreakRules LineExceptionFlags LineMetrics LineNumberInputStream LineNumberReader LineNumberTable Linear Lines Linger Link LinkageError Linked LinkedHashIterator LinkedHashMap LinkedHashSet LinkedList Links List ListIterator ListItr ListPeer ListResourceBundle Listen Listener Listeners Listens Lists Literal Liu Lj Ljava Ll Lm Lo Load LoadLibraryAction Loader Loads Locale LocaleData LocaleElements LocaleElements_ LocaleElements_fr_BE LocaleID LocaleNamePatterns LocaleString Locales Localization Localized Locate LocateRegistry Locates Location Locator Lock Locking Long LongBuffer LongEditor Look Looking Looks Lookup Loop Looping Loops Loosely Los_Angeles LowLevelException Lower Lt Ltd Lu Lucas Luehe M M2 M5 MAC MAD MAGENTA MAKE MALAYALAM MAMAR MAP_COW MAP_RO MAP_RW MARCH MARK MARK_MASK MATERIAL MATHEMATICAL_OPERATORS MATH_SYMBOL MAX MAXGRIDSIZE MAXIMIZED_BOTH MAXIMIZED_HORIZ MAXIMIZED_VERT MAXIMUM_CAPACITY MAXIMUM_SCALE MAXKEYSIZE MAX_BLOCK_SIZE MAX_BUNDLES_SEARCHED MAX_CONSTANT MAX_COUNT MAX_DELAY MAX_HEADER_SIZE MAX_PRIORITY MAX_RADIX MAX_RULE MAX_TARDINESS MAX_VALUE MAX_VALUES MAY MBZ MCMCO MD2 MD2withRSA MD5 MD5withRSA MDMDA MDT ME MEDIUM MENU MENU_BAR MENU_ITEM MENU_TEXT MESSAGE_ARGUMENT META_DOWN_MASK META_MASK METHOD MGMDG MHMHL MILLISECOND MILLISECOND_FIELD MIME MINIMUM_CAPACITY MINIMUM_SCALE MINIMUM_USER_SET MINIMUM_USER_STAMP MINSIZE MINUS MINUTE MINUTE_FIELD MIN_PRIORITY MIN_RADIX MIN_RULE MIN_VALUE MIN_VALUES MISCELLANEOUS_SYMBOLS MISCELLANEOUS_TECHNICAL MISC_EVENT MITER MKMKD MLMLI MM MMM MMMM MMMMM MMMMMx10 MMMMR MNMNG MODAL MODE MODIFIER MODIFIER_LETTER MODIFIER_SYMBOL MOMAC MONARCH MONARCH_ENVELOPE MONDAY MONGOLIAN MONOCHROME MONTH MONTH_FIELD MONTH_LENGTH MORE MOUSE_CLICKED MOUSE_DOWN MOUSE_DRAG MOUSE_DRAGGED MOUSE_ENTER MOUSE_ENTERED MOUSE_EVENT MOUSE_EVENT_MASK MOUSE_EXIT MOUSE_EXITED MOUSE_FIRST MOUSE_LAST MOUSE_MASK MOUSE_MOTION_EVENT_MASK MOUSE_MOVE MOUSE_MOVED MOUSE_PRESSED MOUSE_RELEASED MOUSE_UP MOUSE_WHEEL MOUSE_WHEEL_EVENT_MASK MOVE MOVE_CURSOR MPMNP MQMTQ MRMRT MSB MSD MSMSR MST MTMLT MToolkit MULTISELECTABLE MULTI_LINE MUMUS MUST MVMDV MWMWI MXMEX MXV MYANMAR MYMYS MZMOZ Ma Mac Machine Machines Macintosh Magic Magnitude Main MainName Maintained Make Makes Making Malayalam Malformed MalformedInputException MalformedURLException Malicious Management Manifest Manipulate Mantissa Many Map Mapped MappedByteBuffer Mapping Mappings Maps Mar March Marianne Mario Mark Marked Marker Marking Marks Mars Marsaglia MarshalException MarshalInputStream MarshalOutputStream MarshalledObject MarshalledObjectInputStream MarshalledObjectOutputStream Martak Mask Massachusetts Master Matched Matcher Matches Materials Math Mathematical MatteBorder MatteBorderUIResource Max Maximized Maximum May Mc McCloskey McIlroy Me Mean Meaning Measuring Media MediaEntry MediaTracker MediaType Meine Member MemberSignature Memory Mendenhall Menu MenuBar MenuBarPeer MenuComponent MenuComponentPeer MenuComponents MenuContainer MenuItem MenuItemPeer MenuPeer MenuShortcut MenuShortcuts Menubar Menus Mercury Merge MergeCollation Message MessageDigest MessageDigestSpi MessageFormat MessageFormatPattern Meta MetaData Method MethodDescriptor MethodDescriptors MethodInfo Methods Metrics Michael Microsoft Microsystems Mid MidLevelException Middle Midnight Might Mike Miller Millis Milne MimeTable Min MinimalDaysInFirstWeek Minimum Minus Mirrored Misc Miscellaneous Misplaced MissingResourceException Mixing Mn Mode Models Modes Modification Modifications Modified Modifier Modifiers Modifies Modify Modular Module Modulus Mon Monarch Monday Monetary Mongolian Monitor MonochromeExample Monospaced Montgomery Month MonthAbbreviations MonthNames Months More Moreover Most Mostly Motif Motion Mouse MouseAdapter MouseEvent MouseEventTargetFilter MouseEvents MouseListener MouseMotionEvent MouseMotionListener MouseWheel MouseWheelEvent MouseWheelEvents MouseWheelListener Move MoveCursor Moved Moves Moving Mr Mueller MulitcastSocket Muller Multi MultiScreen Multicast MulticastSocket MulticastSockets Multiple MultipleDocumentHandlingType Multiplication Multiplies Multiply Must MutableBigInteger MutableBigIntegers MutableBoolean MutableExpression Mval My MyActionListener MyApp MyClass MyDisk MyResources MyResources_de MyResources_de_CH MyResources_en MyResources_es_ES MyResources_fr MyResources_fr_CH Myanmar N NAME NAMES NAN NANAM NATIVE NA_10X13_ENVELOPE NA_10X14_ENVELOPE NA_10X15_ENVELOPE NA_6X9_ENVELOPE NA_7X9_ENVELOPE NA_9X11_ENVELOPE NA_9X12_ENVELOPE NA_LEGAL NA_LETTER NA_NUMBER_10_ENVELOPE NA_NUMBER_11_ENVELOPE NA_NUMBER_12_ENVELOPE NA_NUMBER_14_ENVELOPE NA_NUMBER_9_ENVELOPE NCNCL NEED_CHAR NEGATIVE NEGATIVE_INFINITY NEG_ZERO_BITS NENER NEResizeCursor NET_UNREACHABLE NEVER NEW NEXT NE_RESIZE_CURSOR NFNFK NFS NGNGA NINETY NINIC NIO NIST NLG NLNLD NO NOK NON NONBREAKING_HYPHEN NONE NONOR NON_SPACING_MARK NON_UNIQUE NOOP NOP NORMAL NORM_PRIORITY NORTH NORTHEAST NORTHWEST NOT NOTE NOTES NOTFOUND NOTHING NOT_ALLOWED NOV NOVEMBER NO_AUTH NO_DECOMPOSITION NO_FIELDS NO_GENERATED_KEYS NO_HANDLER NO_METHODS NO_ORIENTATION NPE NPNPL NRNRU NResizeCursor NSM NT NULL NULLABLE NULLORDER NULL_HANDLE NUMBER NUMBERSTYLE NUMBER_FORMS NUMERAL NUMERATOR NUMERIC NUMERICS NUMERIC_SHAPING NUMLEVELS NUM_COLORS NUM_DAYS NUM_LOCK NUM_PREC_RADIX NUM_PRIORITIES NUNIU NWResizeCursor NW_RESIZE_CURSOR NYI NZD NZNZL N_RESIZE_CURSOR NaN Nagle Naively Nakul Name NameGenerator NameService NameServiceDescriptor Names Naming Nan Native NativeFontWrapper NativeInLightFixer NativeLibrary Naval Nd Nearly Need Needn Needs Negative NegativeArraySizeException Neither Neptune Nested Net NetPerm NetPermission Netscape Network NetworkClassLoader NetworkInterface NetworkInterfaces Neutral Never Nevertheless New NewDirectByteBuffer Newly Newton Next Nievergelt Nl No NoClassDefFoundError NoRouteToHostException NoSuchAlgorithmException NoSuchElementException NoSuchFieldError NoSuchFieldException NoSuchMethodError NoSuchMethodException NoSuchObjectException NoSuchProviderException Nobody Node Non NonReadableChannelException NonSerializable NonWritableChannelException None Nonetheless NoninvertibleTransformException Nope Normal Normalization Normalize Normalizer NormalizerUtilities Normalizes Normally Normative North Northeast Northwest Norwegian Not NotActiveException NotBoundException NotSerializableException NotYetConnectedException Notation Note Noted Notes Nothing Notice Notifications Notified Notifies Notify Nov November Now Null NullComponentPeer NullPersistenceDelegate NullPointerException NullReferenceException Nullary Nullify Num Number NumberElements NumberFormat NumberFormatException NumberFormats NumberPattern NumberPatterns Numbers NumericShaper O OCO OCTOBER ODBC OE OF OFF OGHAM OID OK OL OLD OMOMN ON ONE ONEDAY ONE_DAY ONE_HOUR ONE_MINUTE ONE_SECOND ONE_SIDED ONE_WEEK ONLY ONSET OOBINLINE OOS OPAQUE OPEN OPENED OPERATION OPTICAL_CHARACTER_RECOGNITION OPTIONAL OPTIONS OP_ACCEPT OP_CONNECT OP_READ OP_WRITE OR ORANGE ORDER ORDINAL_POSITION ORIYA ORed OS OTHER OTHER_LETTER OTHER_NUMBER OTHER_PUNCTUATION OTHER_SYMBOL OUT OUT_BOTTOM OUT_LEFT OUT_RIGHT OUT_TOP ObejctStreamClass Obeys Object ObjectHandler ObjectInput ObjectInputStream ObjectInputStreamWithLoader ObjectInputStreams ObjectInputValidation ObjectInputstream ObjectOutput ObjectOutputStream ObjectStream ObjectStreamClass ObjectStreamConstants ObjectStreamException ObjectStreamExceptions ObjectStreamField ObjectStreamFields Objects Observable Observatory Observer Observerable Observers Obsolete Obtains Obvious Occasionally Occurs Oct Octal OctalDigits October Odd Of Offset Often Ogham Ok OkKey Okay Old On Once One Only Oops Opaque Open Opening Opens Operating Operation Operations Operators Ops Optical Optimization Optional OptionalDataException Optionally Or Oracle Order Ordering Ordinarily Orientation OrientationRequestedType Origin OriginType Originally Oriya Other OtherCoder Others Otherwise Otype Our OurButton OurButtonBeanInfo OurButtonCustomizer Out OutOfMemoryError Output OutputSteam OutputStream OutputStreamWriter OutputStreamWriters OutputStreams Over Overall Overflow OverlayLayout Overridden Override Overrides Overriding Overwrites Owing P P1 P2 P316 PAGES PAGE_END PAGE_START PAINT PAINT_EVENT_MASK PAINT_FIRST PAINT_LAST PANEL PAPAN PARAGRAPH_SEPARATOR PARAMS0 PARAMS1 PARAMS2 PARENTHESIS PARENT_CHANGED PATTERN_DECIMAL_SEPARATOR PATTERN_DIGIT PATTERN_EXPONENT PATTERN_GROUPING_SEPARATOR PATTERN_INDEX_TO_CALENDAR_FIELD PATTERN_INDEX_TO_DATE_FORMAT_FIELD PATTERN_INDEX_TO_DATE_FORMAT_FIELD_ID PATTERN_MINUS PATTERN_PERCENT PATTERN_PER_MILLE PATTERN_SEPARATOR PATTERN_ZERO_DIGIT PAUSE PB PD PDF PDT PDs PENDING PEPER PERCENT PERCENTSTYLE PERMILLE PERSONAL PERSONAL_ENVELOPE PER_MILLE_SIGN PER_TEN_THOUSAND_SIGN PFPYF PGDN PGP PGPNG PGUP PHPHL PHYSICAL PI PINK PIPE_SIZE PKCOLUMN_NAME PKCS PKPAK PKTABLE_CAT PKTABLE_NAME PKTABLE_SCHEM PK_NAME PLAIN PLDI PLPOL PM PMSPM PNG PNPCN POPUP_MENU PORTRAIT PORT_MAX PORT_MIN POSITIVEINFINITY POSITIVE_INFINITY POSIX POSSIBLY POST POSTURE POSTURE_OBLIQUE POSTURE_REGULAR PRC PRE PRECISION PREFERRED PREFERREDSIZE PRESENT PRIMALITY PRIMARY PRIMARYDIFFERENCEONLY PRIMARYORDERINCREMENT PRIMARYORDERMASK PRIMARYORDERSHIFT PRIME PRINTABLE PRINTER PRINT_SCREEN PRIOR PRIORITY_EVENT PRIVATE PRIVATES PRIVATE_USE PRIVATE_USE_AREA PRIVILEGE PRIV_PORT_MAX PRNG PROCEDURE_CAT PROCEDURE_NAME PROCEDURE_SCHEM PROCEDURE_TYPE PROPERTYNAME PROTECTED PROTOCOL_VERSION_1 PROTOCOL_VERSION_2 PROTO_VERS PROTO_VERS4 PROXY_EVENT_MASK PRPRI PSEUDO_COLUMN PST PTE PTPRT PUBLIC PUNCTUATION_HYPHENATION_POINT PUNCTUATION_IDEOGRAPHIC_COMMA PUNCTUATION_IDEOGRAPHIC_FULL_STOP PUNCTUATION_LINE_SEPARATOR PUNCTUATION_PARAGRAPH_SEPARATOR PUSH_BUTTON PUT PWPLW PYPRY Pacific Pack Package Packages Packet Pad Page PageAttribute PageAttributes Paint PaintAllCallback PaintCallback PaintContext PaintEvent PaintHeavyweightComponentsCallback Paints Palo Panel PanelPeer Panels Parameter ParameterDescriptor ParameterMetaData Parameters Parens Parentheses Paris Parry Parse ParseException ParseInfo ParseIntegerOnly ParsePosition ParseUtil ParsedNamingURL Parser ParserConfigurationException Parses Parsing Part Partial Pass Passes Passing PasswordAuthentication Past Path PathConsumer PathDasher PathException PathIterator PathStroker Pathname Pathnames Pattern PatternEntries PatternEntry PatternSyntaxException Patterns Pause Pavani Payment Payne Pc Pd Pe Pearls Peek PeekInputStream Peeks Peer PeerEvent PeerFixer PeerPaintCallback PeerPrintCallback Pending Per Perform Performance Performing Performs Perhaps Period Permanently Permission PermissionCollection PermissionCollections Permissions PermissionsEnumerator PermissionsHash PermissionsImpl PersistenceDelegate Persistent Peter Pf Phase Philip Phoenix Pi Pictures Pipe Piped PipedInputStream PipedOutputStream PipedReader PipedWriter PixelFormats PixelOf Pixels Place Placeholder Places Plain PlainDatagramSocketImpl PlainSocketImpl Platform PlatformFont Platte Plays Please Plumb Pluto Po Point Point2D Points Policy PolicyFile PolicyTool Polygon PolygonPathIterator Pop Populate Populates PopupMenu PopupMenuPeer PopupMenus Port PortUnreachableException Portable Porter Portions Pos Positional Positioning Positive Possible Post PostEventQueue Postal Postconditions Posting Postprocessing Posts Potential Potentially Practice Pre Precompute Precondition Preconditions Prefix Preliminary Prentice PreparedStatement PreparedStatements Prepares Prepend Preprocess Preprocessing Presentation Preserve Presses Presumably Prevent Prevents Previous Primality PrimeRun PrimeThread Primitive PrimitivePersistenceDelegate Principal Principals Principles Print PrintAllCallback PrintCallback PrintGraphics PrintHeavyweightComponentsCallback PrintJob PrintJobs PrintQualityType PrintStackTrace PrintStream PrintWriter Printer PrinterIOException Printing Prints Prinzing Prior Prioritized Priority Private PrivateKey PrivateKeyInfo Privates Privileged PrivilegedAction PrivilegedActionException PrivilegedExceptionAction PrivilgedActionException Probably Procedures Process Processes Processor Proclaim Produce Produces Programmatically Programming Programs Prohibited Prompts Propagation Proper Properly Properties Property PropertyChange PropertyChangeEvent PropertyChangeEvents PropertyChangeListener PropertyChangeListenerProxy PropertyChangeListenerProxys PropertyChangeListeners PropertyChangeSupport PropertyDescriptor PropertyDescriptors PropertyEditor PropertyEditorManager PropertyEditorSupport PropertyEditors PropertyExpander PropertyPermission PropertyPermissionCollection PropertyPermissions PropertyResourceBundle PropertyVetoException Proposed Protected ProtectionDomain ProtectionDomains Protocol ProtocolException ProtocolVersion Protocols Provide Provided Provider ProviderException ProviderProperty Providers Provides Proxy ProxyPersistenceDelegate Ps Pseudo Public PublicKey Punctuation PureJavaPrintDialogExample Purpose Push Pushback PushbackInputStream PushbackReader Pushes Pushing Put PutField PutFieldImpl Putfield Puts Putting Q QAQAT QCQCJ QUARTO QUOTE Quadratic Qualifier Quarto Queries Query Question Queue Queues Quinn Quit Quote QuotedPattern QuotedString Quux R RADIX RANGE RBCollationTables RBTableBuilder RCSFile RDBMSs RE READ READING REAL RECORD RECURSIVE RED REF REFERENCE_GENERATION REFRENCES REFRESH_RATE_UNKNOWN REF_GENERATION REGISTRY_PORT RELATIVE REMAINDER REMARKS REMIND REMOVE REPLACEALL_THRESHOLD REPRESENTATION REQUEST_OK REQUIRED REREU RESERVED_ID_MAX RESET RESIZABLE RESOLVE RETURN RETURN_GENERATED_KEYS REVERSE_ORDER REVERSE_THRESHOLD RFC RFC1323 RFC2373 RFC2396 RFC2732 RGB RGBA RGBtoHSB RIFF RIGHT RIGHT_ALIGNMENT RIGHT_TO_LEFT RLE RLEStringToByteArray RLEStringToShortArray RLO RMASK RMI RMISecurityException RMISecurityManager ROMAN ROMAN_BASELINE ROROM ROTATE_THRESHOLD ROUND ROUNDING ROUND_CEILING ROUND_DOWN ROUND_FLOOR ROUND_HALF_DOWN ROUND_HALF_EVEN ROUND_HALF_UP ROUND_UNNECESSARY ROUND_UP ROWID RSA RSAPrivateCrtKey RSAPrivateKey RSAPublicKey RST RT RTL RUB RUN RUNIC RUNNING RUN_DIRECTION RUN_DIRECTION_LTR RURUS RWRWA Rabin Radicals Radix Random RandomAccess RandomAccessFile RandomAccessSubList Randomly RangeCheck Ranges Raster RasterOutputManager Rasterizer RasterizerCaps RasterizerCorners Rasters Rather Raw Re Read ReadMethod ReadOnlyBufferException ReadableByteChannel Readback Reader Reading Reads Reallocate Reason Reassigns Rebinds Rebuild Recalculate Recall Receive Received Receives Reciprocals Recognition Recombine Recommendation Recomputation Recompute Reconstitute Reconstitutes Record Recover Rect Rectangle Rectangle2D RectangularShape Recurse Recursive Recursively Red Redirect Redirection Redispatches Reduction Ref Refer Reference ReferenceQueue References Refills Reflect ReflectPermission Reflection ReflectionFactory Refreshes Regardless Regex Register Registers Registration Registry Regular Rehash Rehashes Reilly Reinhold Rejections Relation Relative Relativization Relativizes Release Releases Reload Remainder Remaining Remember Remote RemoteException RemoteObject Removal Remove Removed Removes Removing Rename Renames Renaud Render RenderableImage RenderedImage Renderers RenderinHints Rendering RenderingHints Renders Reorder Rep RepaintArea Repaints Reparent Repeat Repeating ReplaceTable Replaced Replaces Replacing Replay ReplicateScaleFilter Reply Report Reports Repositions Representation Represents Reprocess Request Requests Required Requires Rescale Reseeds Reserved Reset Resets Resetting Resizable Resize Resizes Resolution Resolve Resolved Resolves Resolving Resource ResourceBundle ResourceBundles ResourceCacheKey Resources Respect Restore Restores Restrict ResulSetMetaData Result ResultSet ResultSetMetaData Resulting Results Resumes Retain Retains Retargets Retreives Retrieval Retrieve Retrieves Retrive Return Returned Returns Reuse ReuseAddr Reverse ReverseComparator Reverses Revision Rewinds Rewritten Richard Riggs Right Rights Risks Rivest Road Robi Robot RobotPeer Roger Roland Roll Rolling Roman Rose Ross Rotates Rotating Round Rounded Rounding Route Row Rows Rule RuleBasedBreakIterator RuleBasedCollator RuleBasedCollators Rules Run Runic Runnable Running Runs Runtime RuntimeException RuntimePermission S S2 S5 SALARY SAME SASAU SATURDAY SAVE SAVE_FILE SAXException SAXParser SAXParserFactory SBSLB SCALE SCALE_AREA_AVERAGING SCALE_DEFAULT SCALE_FAST SCALE_REPLICATE SCALE_SMOOTH SCHEDULED SCIENTIFICSTYLE SCOPE SCOPE_CATALOG SCOPE_CATLOG SCOPE_SCHEMA SCOPE_TABLE SCROLLBAR SCROLLBARS_ALWAYS SCROLLBARS_AS_NEEDED SCROLLBARS_BOTH SCROLLBARS_HORIZONTAL_ONLY SCROLLBARS_NEVER SCROLLBARS_NONE SCROLLBARS_VERTICAL_ONLY SCROLLPANE_ONLY SCROLL_ABSOLUTE SCROLL_BAR SCROLL_BEGIN SCROLL_END SCROLL_EVENT SCROLL_LINE_DOWN SCROLL_LINE_UP SCROLL_LOCK SCROLL_PAGE_DOWN SCROLL_PAGE_UP SCROLL_PANE SCSYC SC_BLOCK_DATA SC_EXTERNALIZABLE SC_SERIALIZABLE SC_WRITE_METHOD SDK SDSDN SDSI SE SEALED SEARCHABLE SEARCH_HEAVYWEIGHTS SECOND SECONDARY SECONDARYDIFFERENCEONLY SECONDARYORDERINCREMENT SECONDARYORDERMASK SECONDARYORDERSHIFT SECOND_FIELD SEG_CLOSE SEG_CUBICTO SEG_LINETO SEG_MOVETO SEG_QUADTO SELECT SELECTABLE SELECTED SELECTION SELF_REFERENCING_COLUMN SELF_REFERENCING_COL_NAME SENTENCE SENTENCE_INDEX SEPARATE_DOCUMENTS_COLLATED_COPIES SEPARATE_DOCUMENTS_UNCOLLATED_COPIES SEPARATOR SEPTEMBER SEP_RECURSIVE SEP_WILD SEResizeCursor SESWE SET SET_LOG_PERMISSION SEVENTY SE_RESIZE_CURSOR SGSGP SH SHA SHA1PRNG SHA1withDSA SHA1withRSA SHIFT SHIFT_DOWN_MASK SHIFT_MASK SHORT SHORTEN SHORTEST SHORT_MAX_VALUE SHOULD SHOWING SHOWING_CHANGED SHSHN SHUFFLE_THRESHOLD SHUT_RD SHUT_WR SI SIDE SIGGRAPH SIGINT SIGKILL SIGN SIGNED SIGNIFICAND SIGTERM SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_SHIFT SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK SIMPLE_CASE_COUNTRY_MASK SIMPLIFIED_CHINESE SINGLE SINGLE_LINE SINHALA SISVN SIXTY SIZE SI_STOP SJSJM SKIP_BUFFER_SIZE SKIP_LF SKSVK SLSLE SMALL SMALLINT SMALL_FORM_VARIANTS SMALL_PRIME_PRODUCT SMALL_PRIME_THRESHOLD SMB SMSMR SNFH_FAILURE SNFH_SUCCESS_HANDLED SNFH_SUCCESS_PROCEED SNSEN SOCKS SOCKS5 SOMEBITS SOSOM SOURCE_DATA_TYPE SOUTH SOUTHEAST SOUTHWEST SO_BINDADDR SO_BROADCAST SO_KEEPALIVE SO_LINGER SO_OOBINLINE SO_RCVBUF SO_REUSEADDR SO_SNDBUF SO_TIMEOUT SPACE SPACE_SEPARATOR SPACING_MODIFIER_LETTERS SPECIALS SPECIAL_CASE_COUNTRY_INDEX_DELTA SPECIAL_CASE_COUNTRY_INDEX_MASK SPECIAL_CASE_COUNTRY_MASK SPECIFICATION_TITLE SPECIFICATION_VENDOR SPECIFICATION_VERSION SPI SQL SQL92 SQL99 SQLData SQLException SQLExceptions SQLInput SQLOutput SQLPermission SQLSTATE SQLSTATEs SQLState SQLWarning SQL_DATA_TYPE SQL_DATETIME_SUB SQLstate SQUARE SRC SRC_ATOP SRC_IN SRC_OUT SRC_OVER SRSUR SResizeCursor SS STANDARD_TIME START START_PUNCTUATION START_STATE STATEMENT STATIC STATUS_EXCEPTION STATUS_INFINITE STATUS_LENGTH STATUS_OK STATUS_POSITIVE STATUS_UNKNOWN STERMINATOR STOP STOPPED STOP_STATE STREAMED STREAM_MAGIC STREAM_VERSION STROKE_DEFAULT STROKE_NORMALIZE STROKE_PURE STRONG STRUCT STSTP SUBCLASS_IMPLEMENTATION_PERMISSION SUBSTITUTION_PERMISSION SUCCESS_NO_INFO SUID SUN SUNDAY SUPERSCRIPTS_AND_SUBSCRIPTS SUPERTABLE_NAME SUPERTYPE_CAT SUPERTYPE_NAME SUPERTYPE_SCHEM SURROGATE SURROGATES_AREA SVSLV SWResizeCursor SW_RESIZE_CURSOR SYNCHRONIZATION SYNONYM SYRIAC SYSTEM SYSYR SZSWZ S_RESIZE_CURSOR Safe SafeCharIterator SafeKeyper Same Sami Sample San Sanity SansSerif Saraiya Sat Saturday Saturn Save Savepoint Savepoints Saves Saving Savings Sc Scale Scaling Scan Scanning Scattering ScatteringByteChannel Schedule Schedules Schema Scheme Schemers Schroeppel Scientific Screen Scroll ScrollBar ScrollPane ScrollPaneAdjustable ScrollPanePeer ScrollPaneWheelScroller ScrollPanes ScrollPosition Scrollbar ScrollbarDisplayPolicy ScrollbarPeer Scrollbars Scrolling Scrolls Search Searches Searching Second Secondly Section Sections Secure SecureClassLoader SecureRandom SecureRandomSpi Security SecurityException SecurityExceptions SecurityManager SecurityPermission Sedgewick See Seed Seek Segment Select Selectable SelectableChannel Selecting Selection SelectionKey SelectiveAWTEventListener Selector SelectorProvider Selectors Selects Self Semantic Semantics Seminumerical Send SendMessage Sends SentEvent Sentence SentenceBreak SentenceBreakBoundary SentenceBreakData SentenceBreakDictionary SentenceBreakRules SentenceExceptionFlags Sentinel Sep Separate Separates Separating Sept September SequenceInputStream SequencedEvent SequencedEvents Sequences Sequentially Serial SerialNum SerialVersionUID Serializability Serializable SerializablePermission Serialization Serialized SerializedDataVersion Serializes Serif Server ServerError ServerException ServerRuntimeException ServerSocket ServerSocketChannel ServerSockets Service Set SetScale Sets Setters Setting Setup Seven Several Shaio Shape Shapes Shared Shift Shifts Shih Shimmer Short ShortBuffer ShortCountry ShortEditor ShortLanguage Shorten Shorter Should Shouldn Show Shows Shuffle Shutdown Shuts Shutting Sides SidesType Sieve Sign Signal SignalHandler Signals Signature SignatureException SignatureIterator SignatureSpi Signed SignedMutableBigInteger SignedMutableBigIntegers SignedObject SignedObjects Signer Signers Signifies Signing Signs Signum Silently Similar Similarly Simple SimpleBeanInfo SimpleDateFormat SimpleTextBoundary SimpleTimeZone Simulate Simulates Since Single SingleBufferStrategy Singleton SingletonList SingletonMap SingletonSet Sinhala SinkChannel Sixteen Size Sk Skip Skips Sleeps Slurp Sm Small Smart Smith Snapshot Snarf So Socket SocketAddress SocketChannel SocketException SocketImpl SocketImplFactory SocketInputStream SocketOptions SocketOutputStream SocketPermission SocketPermissionCollection SocketPermissions SocketTimeoutException Sockets Socks SocksConsts SocksSocketImpl SocksSocketImplFactory SoftBevelBorder SoftBevelBorderUIResource SoftCache SoftReference Software Solaris Sole Some Someday Something Sometimes Somewhat Somone Sort Sorted SortedMap SortedSet Sorting Sorts Source SourceChannel SourceFile South Southeast Southwest Space Spaces Spacing Spanish Spec Special SpecialCasing SpecialMapping Specialization Specials Specific Specifically Specification Specified Specifies Specify Specifying Spi Split Splits Square Squares Src SrcAtop SrcIn SrcOut SrcOver Stack StackOverflowError StackTraceElement Stall Standard StandardCharsets StandardGlyphVector Start Starting Starts Stash State Statement Statements States Static StaticFieldsPersistenceDelegate Statment Status Std Steele Stein Step Steve Steven Still Stop Stopping Stops Storage Store Stored Stores Storing Strategy Stream StreamCorruptedException StreamTokenizer StrictMath String StringBuffer StringBufferInputStream StringCharBuffer StringCharacterIterator StringCoding StringDecoder StringEncoder StringIndexOutOfBoundsException StringPart StringReader StringSelection StringTokenizer StringWriter Strings Strip Stroke Strokes Stroking Strong Struct Structural Structurally Structured StubNotFoundException Stuff Style SubFormatPatternPart SubList SubMap Subclass Subclasses Subclassing Subformat SubformatPattern SubformatPatternPart SubjectPublicKeyInfo Submits Subpattern Subscripts Subsequent Subset Substitution Substitutions Subtract Subtracts Success Successive Such Sun SunCompositeContext SunDropTargetEvent SunDropTargetEvents SunGraphicsCallback SunGraphicsEnvironment SunHints SunToolkit Sunday Superclass Superscripts Supertables Supplement Support Supported Suppose Suppress Suppresses Surrogates Suspends Sval Swap Swapping Swaps Swing SwingSet2 Switzerland Syllabics Syllables Symbol Symbols SyncFailedException Synch Synchronization Synchronize Synchronized SynchronizedCollection SynchronizedList SynchronizedMap SynchronizedRandomAccessList SynchronizedSet SynchronizedSortedMap SynchronizedSortedSet Synchronizes Synchronizing Synchronously Synonym Syntax Synthesizes Syriac System SystemColor Systems T TAB TABLE TABLE2 TABLE_CAT TABLE_CATALOG TABLE_NAME TABLE_SCHEM TABLE_TYPE TABLOID TABULATION TAIWAN TAMIL TCP TCP_NODELAY TCTCA TC_ARRAY TC_BASE TC_BLOCKDATA TC_BLOCKDATALONG TC_CLASS TC_CLASSDESC TC_ENDBLOCKDATA TC_EXCEPTION TC_LONGSTRING TC_MAX TC_NULL TC_OBJECT TC_PROXYCLASSDESC TC_REFERENCE TC_RESET TC_RESETs TC_STRING TDTCD TELUGU TEMPORARY TEN TERM TERTIARY TERTIARYORDERINCREMENT TERTIARYORDERMASK TESTING TEXT TEXT_CURSOR TEXT_EVENT_MASK TEXT_FIRST TEXT_HIGHLIGHT TEXT_HIGHLIGHT_TEXT TEXT_INACTIVE_TEXT TEXT_LAST TEXT_TEXT TEXT_VALUE_CHANGED TFATF TGTGO TH THAANA THAI THE THEN THEORY THESE THIS THOUSAND THREAD THROUGH THTHA THURSDAY TIBETAN TIME TIMESTAMP TIMEZONE TIMEZONE_FIELD TIME_ZONE TINYINT TITLECASE_LETTER TJTJK TKTKL TL TM TMTKM TNTUN TO TODO TOP_ALIGNMENT TOS TOTON TPTMP TR TRACE TRACK TRADITIONAL_CHINESE TRAILING TRANSACTION_NONE TRANSACTION_READ_COMMITTED TRANSACTION_READ_UNCOMMITTED TRANSACTION_REPEATABLE_READ TRANSACTION_SERIALIZABLE TRANSFORM TRANSIENT TRANSLUCENT TRAVERSAL_KEY_LENGTH TRIPLE_PRIME TRTUR TRUE TRUETYPE TRUETYPE_FONT TT TTL TTL_EXPIRED TTTTO TT_EOF TT_EOL TT_NOTHING TT_NUMBER TT_WORD TUE TUESDAY TVTUV TW TWO TWO_PASSES TWO_SIDED_LONG_EDGE TWO_SIDED_SHORT_EDGE TWTWN TYPE TYPE_CAT TYPE_FORWARD_ONLY TYPE_IMAGE_BUFFER TYPE_NAME TYPE_PRINTER TYPE_RASTER_SCREEN TYPE_SCHEM TYPE_SCROLL_INSENSITIVE TYPE_SCROLL_SENSITIVE TZTZA Tab Table Tags Take Taken Takes Taking Taligent Tamil Tanaka Target Task TaskQueue Tasks Tear Technical Technique Technology Tell Tells Telugu Temporary Terminate TerminateProcess Terminates Termination Terminator Terminology Test Testing Tests Text TextArea TextAreaPeer TextAttribute TextBoundaryData TextComponent TextComponentPeer TextComponents TextCursor TextEvent TextField TextFieldPeer TextLayout TextListener Texture TexturePaint TexturePaintContext Thaana Thai That The Their Then Theorem There Therefore These They Think This Thomas Thorn Those Though Thread ThreadDeath ThreadDeathError ThreadGroup ThreadLocal Threads Three Throw Throwable Throwing Thrown Throws Ths Thu Thur Thurs Thursday Thus Tibetan Tim Time TimeZone Timeout TimeoutException Timer TimerTask TimerTasks TimerThread TimesRoman Timestamp Timestamps Timothy Tiny Titlebar TitledBorder TitledBorderUIResource To ToDefault ToIndex Today Together Token Tom Too TooManyListenersException Took Tool ToolTipManager Toolkit ToolkitEventMulticaster Top Tous Towards Track Tracks Traditional Traditional_WIN Trailing Transaction Transfer Transferable Transferring Transfers Transform TransformAttribute Transformation Transforming Transforms Transient Transition Translate Translates Transparency Transparent Traversal Traverse Treat Tree TreeMap TreePath TreeSet Tries Trim Trims Trivial True TrueType Truetype Truncates Trusted Truth Try Trying Tue Tuesday Tuning Turkey Turkish Turns Twice Two Tx Type TypeAheadMarker TypeMap TypeName Types Typical Typically U U0E01 U0E2E U0E40 U0E44 U0E81 U0EAE U0EC0 U0EC4 UAUKR UCS UDP UDP_ASSOC UDT UDTs UGUGA UI UID UK UL ULP UMUMI UNASSIGNED UNC UNDECIMBER UNDEFINED UNICODE UNICODE_HIGH_BOUND_HAN UNICODE_LOW_BOUND_HAN UNICODE_ZERO_WIDTH_NON_BREAKING_SPACE UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS UNINITIALIZED UNION UNIT UNIT_DECREMENT UNIT_INCREMENT UNIX UNIXProcess UNKNOWN UNK_BIT UNMAPPED UNMAPPEDCHARVALUE UNMARKED UNNECESSARY UNSET UNSIGNED UNSIGNED_ATTRIBUTE UP UPDATE UPDATE_RULE UPPERCASE_LETTER UP_CYCLE_TRAVERSAL_KEY UP_CYCLE_TRAVERSAL_KEYS URI URISyntaxException URIs URL URLClassLoader URLClassPath URLConnection URLConnections URLDecoder URLEncoder URLStreamHandler URLStreamHandlerFactory URLStreamHandlers URLs URNs US USD USER USER_DEFINED USER_PASSW USE_ALL_BEANINFO USN USS USUSA UT UT1 UTC UTC_TIME UTF UTFDataFormatError UTFDataFormatException UYURY UZUZB U_ARABIC_NUMBER U_RIGHT_TO_LEFT U_RIGHT_TO_LEFT_ARABIC U_RIGHT_TO_LEFT_EMBEDDING U_RIGHT_TO_LEFT_OVERRIDE Ullman Ulp2 Unable Unauthorized Unavailable Unbalanced Unbound Uncaught Unchecked UnconnectedChannelException UnconnectedSocketException UndeclaredThrowableException Undefined UndefinedProperty Under Underlying Undo Undoes Unexpected UnexpectedException Unfinished Unfortunately Unicast UnicastRemoteObject Unicode UnicodeBlock UnicodeClassMapping UnicodeData UnicodeLittle Unified Uniform Uninitialized Union Unique UniqueMethodInfo Unis Unit United Unix UnixFileSystem Unknown UnknownContentHandler UnknownContentHandlerP UnknownError UnknownHostException UnknownServiceException Unkonwn Unless Unlike Unlikely Unlocalized UnmappableCharacterException UnmarshalException Unmatched Unmodifiable UnmodifiableCollection UnmodifiableEntry UnmodifiableEntrySet UnmodifiableList UnmodifiableMap UnmodifiableRandomAccessList UnmodifiableSet UnmodifiableSortedMap UnmodifiableSortedSet Unnamed Unnecessary Unnormalize Unpack Unparseable Unquoted UnquotedPattern UnquotedString Unreachable Unrecognized UnrecoverableKeyException Unreserved Unresolved UnresolvedPermission UnresolvedPermissionCollection UnresolvedPermissions Unroll Unsafe UnsatisfiedLinkError Unsupported UnsupportedCharsetException UnsupportedClassVersionError UnsupportedEncodingException UnsupportedOperationException Unsynchronized Until Untitled Unused Up Update UpdaterInputStream Updates Updating Upon Upper Uranus Urgent Usage Use UseCaches Used Useful User UserVec Users Uses Using Usually Utilities Utility Uuml V V4 V5 VALUES VALUE_ALPHA_INTERPOLATION_DEFAULT VALUE_ALPHA_INTERPOLATION_QUALITY VALUE_ALPHA_INTERPOLATION_SPEED VALUE_ANTIALIAS_DEFAULT VALUE_ANTIALIAS_OFF VALUE_ANTIALIAS_ON VALUE_COLOR_RENDER_DEFAULT VALUE_COLOR_RENDER_QUALITY VALUE_COLOR_RENDER_SPEED VALUE_DITHER_DEFAULT VALUE_DITHER_DISABLE VALUE_DITHER_ENABLE VALUE_FRACTIONALMETRICS_DEFAULT VALUE_FRACTIONALMETRICS_OFF VALUE_FRACTIONALMETRICS_ON VALUE_INTERPOLATION_BICUBIC VALUE_INTERPOLATION_BILINEAR VALUE_INTERPOLATION_NEAREST_NEIGHBOR VALUE_RENDER_DEFAULT VALUE_RENDER_QUALITY VALUE_RENDER_SPEED VALUE_STROKE_DEFAULT VALUE_STROKE_NORMALIZE VALUE_STROKE_PURE VALUE_TEXT_ANTIALIAS_DEFAULT VALUE_TEXT_ANTIALIAS_OFF VALUE_TEXT_ANTIALIAS_ON VARBINARY VARCHAR VARIABLES VARIANT VAVAT VCVCT VERIFY VERTICAL VEVEN VGVGB VIEW VIRGIN VISIBLE VIVIR VK VK_ VK_A VK_ALT VK_CAPS_LOCK VK_CONTROL VK_DELETE VK_DOWN VK_END VK_ENTER VK_F1 VK_F10 VK_F11 VK_F12 VK_F2 VK_F3 VK_F4 VK_F5 VK_F6 VK_F7 VK_F8 VK_F9 VK_HOME VK_INSERT VK_KANA_LOCK VK_LEFT VK_NUM_LOCK VK_PAGE_DOWN VK_PAGE_UP VK_PAUSE VK_PRINTSCREEN VK_RIGHT VK_SCROLL_LOCK VK_SHIFT VK_SPACE VK_TAB VK_UNDEFINED VK_UP VK_X VK_XXX VM VMs VNVNM VRAM VSPACE VUVUT Valid Validate Validates ValidationList Value ValueCollection ValueData ValueIterator Values Variables Variants Various Vector Venus Verifies Verify VerifyError Verifying Verisign Version Versions Vertical Very VetoableChange VetoableChangeListener VetoableChangeListenerProxy VetoableChangeListenerProxys VetoableChangeListeners VetoableChangeSupport VetoableListener View Viewer Viewing Views Violation Virtual VirtualMachineError Virtually Visibility Vliet Void Vol VolatileImage Volume W WAIT_CURSOR WALL_TIME WARNING WAS WDW WEDNESDAY WEEK_OF_MONTH WEEK_OF_MONTH_FIELD WEEK_OF_YEAR WEEK_OF_YEAR_FIELD WEIGHT WEIGHT_BOLD WEIGHT_REGULAR WEST WFWLF WHERE WHITE WIDTH WILD WILL WIN WINDOW WINDOW_ACTIVATED WINDOW_BORDER WINDOW_CLOSED WINDOW_CLOSING WINDOW_DEACTIVATED WINDOW_DEICONIFIED WINDOW_DEICONIFY WINDOW_DESTROY WINDOW_EVENT WINDOW_EVENT_MASK WINDOW_EXPOSE WINDOW_FIRST WINDOW_FOCUS_EVENT_MASK WINDOW_GAINED_FOCUS WINDOW_ICONIFIED WINDOW_ICONIFY WINDOW_LAST WINDOW_LOST_FOCUS WINDOW_MOVED WINDOW_OPENED WINDOW_STATE_CHANGED WINDOW_STATE_EVENT_MASK WINDOW_TEXT WIND_EVEN_ODD WIND_NON_ZERO WITH WM WORD WORD_INDEX WORD_MASK WRITE WRONG WResizeCursor WS WSWSM WWW W_RESIZE_CURSOR Wait WaitCursor Waits Wake Wakes Walk Wall Wang Want Warning Warnings Warres Warth Was Wasn Watch We Weak WeakHasMap WeakHashMap WeakKey WeakKeys WeakReference WeakReferences Web Weber Wed Wednesday Weed Week Weekday Weeks Weights Well Werner Wesley West Western What Whatever Wheel When Whenever Where Whether Which While White Why Wide WidgetResource WidgetResources_de WidgetResources_fr Width Will Win16 Win32 Window WindowActivated WindowAdapter WindowClosed WindowClosing WindowClosingListener WindowClosingSupport WindowDeactivated WindowEvent WindowEvents WindowFocusListener WindowGainedFocus WindowListener WindowLostFocus WindowOpened WindowPeer WindowStateListener Windows With Within Without Wolczko Wollrath Won Word WordBreak WordBreakData WordBreakDictionary WordBreakRules WordBreakTable WordExceptionFlags Workaround Worker World Wormhole Wraparound WrappedHook Wrapper Wrappers Wrapping Wraps WritableByteChannel WritableRaster Write WriteAbortedException WriteObject Writer Writers Writes Writing Written Wrong X X11 X509Certificate X509EncodedKeySpec X9 XAF XAG XAU XB5 XBA XBB XBC XCD XDR XFO XFU XML XMLDecoder XMLEncoder XOF XOPEN XOR XPD XPF XPT XTEST XTS XXX X_DATA Xerces Xor XyZDescriptor Xz Y YEAR YEAR_FIELD YELLOW YES YET YEYEM YI_RADICALS YI_SYLLABLES YTMYT YUYUG Y_DATA Year Years Yellin Yen Yi Yingxian You Your YoyoDyne Z ZAZAF ZERO ZMZMB ZONE ZONE_OFFSET ZRZAR ZWZWE Zap ZapfDingbats Zero ZipEntry Zl ZoneInfo Zp Zs _ _DOWN_ _FIELD _GB _PersistenceDelegate __ ___ ____ ________ ____________ _________________________ _and_ _any_ _beginning_ _blank _g _get _last_ _parent _put _self _shortest_ _that_ _top _variant a a0 a1 a10 a2 a3 a4 a5 a6 a7 a8 a9 aB aButton aChar aClassCastException aComponent aContainer aCopy aKey aKeyFormat aLocale aPattern aRef aStart aStrength aWindow aZeros a_nanos aa aaa aaaabc aaaar ab ababk abandon abbreviated abbreviation abbreviations abc abcd abcde abcdefghijklmnopqrstuvwxyz ability able abnormal abnormally abort aborted aborting aborts about above abs abscissa absence absent absolute absolutely absolved absorb abstract abstractRecognizerClass abstraction abstractly abuse abuts ac acc accelKey accelerate accelerated acceleration accelerator accelerators accent accent_diacritic accented accents accept acceptDuplicates acceptable accepted accepting accepts acceptsURL access accessClassInPackage accessClipboard accessClipboardPermission accessDeclaredMembers accessEventQueue accessOrder accessable accessed accesses accessibility accessible accessibleAWTComponentHandler accessibleAWTFocusHandler accessibleContainerHandler accessibleContext accessibleDescription accessibleName accessibleParent accessing accessor accessors accidental accommodate accomodate accompanied accompany accompanying accomplish accomplished accordance according accordingly account accounted accounting acct accum accumA accumB accumG accumR accumlated accumulate accumulateLine accumulated accumulating accuracy accurate accurately achieve achieved achieves ackbarfaccept acknowledged acknowledgement acl acmp acos acquireFD acquired acquiring acronym across act action actionCommand actionKeyCodes actionL actionListener actionListenerK actionPerformed actions activatable activate activated activates activating activation active activeCaption activeCaptionBorder activeCaptionText activeCount activeGroupCount activeWindow actively activities activity acts actual actualGetExp actually acute acyclic ad adaptations adapted adapters adaptors add addAWTEventListener addAccessibleSelection addActionListener addAdjustmentListener addAll addAllForTreeSet addArg addAttribute addAttributeImpl addAttributeRunData addAttributes addBatch addBefore addCertificate addChildren addClass addComponentListener addComposedChars addContainerListener addContractFlags addContractOrder addElement addEvent addExpandOrder addExpansion addFirst addFocusListener addFooListener addFredListener addHelpMenu addHierarchyBoundsListener addHierarchyListener addIdentity addIdentityCertificate addImage addImpl addInputMethodListener addInternal addItem addItemListener addItemNoInvalidate addKeyEventDispatcher addKeyEventPostProcessor addKeyListener addLast addLayoutComponent addLightweightRequest addListenerMethod addListenerMethodName addMenu addMethod addMethodName addMouseListener addMouseMotionListener addMouseWheelListener addNotify addObserver addOn addOne addOrder addOwnedWindow addPattern addPoint addProperty addPropertyChangeListener addProvider addProviders addRenderingHints addRequestProperty addRules addSeparator addShutdownHook addTab addTable addTextListener addToBuffer addToCache addToFrameList addURL addVetoableChangeListener addWindowFocusListener addWindowListener addWindowStateListener addXyzEventListener added addedDecimalSeparator addedSerial addend adder adding addition additional additionalBeanInfo additionally additions addnotify addr addr1 addr_array address addressCache addressed addresses addressing addrs adds adequate adequately adhere adhered adherence adj adjacent adjust adjustDST adjustDecendantsOnParent adjustDescendants adjustForCurrencyDefaultFractionDigits adjustForGravity adjustListeningChildren adjustListeningChildrenOnParent adjustStamp adjustable adjustables adjusted adjusting adjustment adjustmentL adjustmentListener adjustmentListenerK adjustmentValueChanged adjustments adjusts administrative administrators admits adopted adoption adopts advance advanced advances advancing advantage advantages advertized advice advisable advise advised advises ae aeiou afafr affect affected affecting affects affix affixPattern affords aforementioned afresh after afterEvent afterLast afternoon afterwards again against age agency aggregate aggregateStamp aggressively agrave agree agreement aground ahead aid aim aimed aje ajust al algIndex algName algOID algorithm algorithm_or_provider algorithm_or_type algorithms algorythm alias aliasSet aliased aliases aliasing align aligned aligning alignment aligns alive all allChars allMethods allPermDomain allPermission allProceduresAreCallable allProviders allTablesAreSelectable allThere all_allowed allocate allocateDirect allocateMemory allocateNewInstance allocated allocates allocating allocation allocations allotted allow allowThreadSuspension allowUserInteraction allowable allowed allowing allows allowsMultipleSelections allowuserinteraction alluded allzero almost alone along alpha alphabet alphabetic alphabetical alphabets alphanum alphanumeric already alreadySelected als also alt alter altered altering alternate alternately alternates alternating alternation alternative alternatives alters although always am amamh ambTerm ambiguities ambiguity ambiguosTerm ambiguous ambiguousTwoDigitYear ambiguousYear amenable amended amiss ammended among amongst amortized amoung amount amounts amp ampersand ampm ampms an anArray anEvent anObject anOrder analog analogous analogue analogues analysis analyze analyzed analyzing anc ancestor ancestorMoved ancestorResized ancestors anchor anchorSelectionIndex anchored anchors and andNot angdeg anglais angle angles angrad angular anim animation animations animator annotate annotateClass annotateProxyClass annotated annotation annotations anomalous anonymous another anotherBits anotherByte anotherCharacter anotherDate anotherDouble anotherFloat anotherInteger anotherKey anotherKeyFormat anotherLong anotherShort anotherString anotherTime anotherVal answer antaliased ante anti antialiased antialiasing anticount any anyLocalAddress anymore anyone anything anyway anyways anywhere ap apart apostrophe apostrophes app appContext appRandom apparently appcontext appear appearance appearances appeared appearing appears append appendAffix appendAuthority appendContents appendCubic appendFragment appendLine appendQuadratic appendQuoted appendQuotedChars appendQuotedExtension appendSchemeSpecificPart appendText appended appending appendix appends apple applet appletResize appletWarning applets appletviewer applicable application applications applied applies apply applyComponentOrientation applyGetters applyLocalizedPattern applyPattern applyResourceBundle applySize applyStyle applyTransform applying appreciate approach approaches appropriate appropriately approval approved approx approximate approximately approximates approximating approximation approximations april ar arabic arara arary arbitrarily arbitrary arc arcAngle arcHeight arcWidth arcane arch architecture archive archived archives archiving are areAllFieldsSet areFieldsSet areFocusTraversalKeysSet areInputMethodsEnabled area areas aren arg arg1 arg2 argClasses argCount argRecursion argType argTypes argV argbRasRef argbmodel args arguably argumens argument argumentIndex argumentNumber argumentNumbers arguments argumnnt arise arises arithmetic arnold around arr arrLocal arrange arrangeGrid arranges arranging arrary array arrayClass arrayContentsEq arrayEquals arrayHandle arrayLen arrayLength arrayNameDiff arrayPersistenceDelegate arraycopy arrays arrive arrived arrives arrow arrows artifact as asCharBuffer asDoubleBuffer asFloatBuffer asIndex asIntBuffer asList asLongBuffer asReadOnlyBuffer asShortBuffer asasm ascending ascends ascent ascii ascii2ebcdic asciiValues asin ask asked asking asks aspect aspects assembled assert assertion assertionStatus assertions asserts assign assignable assigned assignedDomains assigning assignment assignments assigns assist assistive assistive_technologies associate associated associates associating association assume assumed assumes assuming assumption assumptions assurance assuring assymetry asterisk astronomical asymmetric asymptotically asynchronous asynchronously at atEnd atName atNames atan atan2 atomic atomicity atop attach attached attaching attachment attachments attack attacker attackers attacks attempt attempted attempting attempts attended attention attr attrIndex attrName attribure attribute attributeCount attributeIndex attributeKey attributeName attributeNamePattern attributeNames attributeNoNulls attributeNullable attributeNullableUnknown attributeValuesMatch attribute_name attribute_value attributed attributedStrings attributes attribution attrinute attrs attrsToString atttribute au audience audio audit auditSubclass aug augment august auml auromatically authentic authenticate authenticated authentication authenticator authenticity author authorities authority authorization auto autoCommit autoDelay autoFlush autoGeneratedKeys autoProcessMouseWheel autoTransferFocus autoWaitForIdle automagically automated automatic automatically automation autonumbering aux auxiliary avail available availableCharsets availableProcessors avaliable average averageBytesPerChar averageCharsPerByte avh avoid avoided avoiding avoidingGui avoids aw awakened aware away awriter awry awt axes axis ayaym az azaze b b0 b1 b10 b2 b3 b4 b5 b5p b6 b7 b8 b9 bCtxt bHeight bWidth bZeros ba babak back backBuffers backCaps backTableOffset backed backfill backfillLoopingStates backfilled backfilling backfills background backgroundSetByClientCode backing backlog backrefs backs backslash backtrace backup backward backwardDefaultFocusTraversalKeys backwardFocusTraversalKeys backwardStateTable backwardTextAreaFocusTraversalKey backwardTraversalKeys backwards backwardsStateTable bad badComponentString baddr badly bag baggage bah baht bail bais balanced banana bandmasks banner baos bar baronets bars base base2 baseCR baseForm baseIsLTR baseLF baseLevel baseName baseState baseToPow2 baseWireHandle baseclass baseclasses based baselevel baseline baselineIndex baselineOffsets baselines bases basic basing basis batch bathroom bayonets baz bb bc bcd bd bdata bdl be bean beanClass beanClassName beanContext beanDescriptor beanInfoCache beanName beanbox beancontext beaninfo beans bebel because become becomes becoming been beep befoer before beforeFirst began begin beginIndex beginLayout beginOffset beginPath beginRunIndex beginSubpath beginValidate begining beginning begins begun behalf behave behaved behaves behavior behavioral behaviors behaviour behind bein being beingBuilt believes believing bell belong belonged belonging belongs below bend beneath benefit bequeath berlin bert besides best bestBreakPositions bestMatch bestMatchLength bestNumber bestRowNotPseudo bestRowPseudo bestRowSession bestRowTemporary bestRowTransaction bestRowUnknown bestStamp beta better between bevelType beveled beyond bg bgbul bgcolor bhbih bi biRas bias bibis bidi bidirectional big big10pow big5pow bigB bigD bigD0 bigDecimalExponent bigEndian bigIndex bigIntExp bigIntNBits bigOne bigger bigint bigq bigr billion bin binExp binary binaryGCD binaryGcd binarySearch bind bindAddr bindV4 bindaddr binding bindings bindpoint binds binexp bir birds bis bison bit bitClump bitCnt bitCount bitDepth bitIndex bitLen bitLength bitMask bitSieve bitcount bitlen bitlength bitlengths bitmap bitmask bitmasks bitpos bits bitsInHighWord bitsLeftOf bitsPerDigit bitsRightOf bitset bitwise bl black blah blank blen blend blending bless blessing blindly blinking blitted blitting blk blkmode block blockIncrement blockStarts blocked blockedOn blocker blocking blockingLock blockquote blocks blt blue bluec bm bnExpModThreshTable bnben bnf bo bobEncodedPubKey bobPubKey bobPubKeySpec bobod body bogus boilerplate bold bolditalic bonus boo book bookkeeping books bool boolean booleanValue booleans boot bootclasspath bootstrap bootstrapClassPath border borders boring borrow borrowed botch both bother bothered bottom bottommost bound boundFields boundaries boundary bounded bounding bounds boundsCheck boundsMaxX boundsMaxY boundsMinX boundsMinY bout box boxes bp br brace braceStack braces bracket bracketLevel bracketed brackets brain branch branches brbre break breaker breaking breaks breve brevity brhavior bridge brief briefly briefs brighter brightness bring bringing brings brk broadcast broadcasts broke broken brown browser browsers brute bs bsi btc bubble bucket buckets buf bufImg bufLength bufSize buffer bufferCaps bufferFlushed bufferFull bufferLoop bufferStrategy bufferUnderflowException buffered bufferedStream buffering buffers buflen bug bugfix buggy bugs build buildBackwardsStateTable buildBreakIterator buildCharCategories buildFromSorted buildRuleList buildStateTable buildTree builder builders building builds built bulk bullet bummer bump bunch bunching bundle bundleClass bundleName bundles bundlesFound bursts busy but button button1 button2 button3 buttonDir buttonSerializedDataVersion buttons bw bwd by bypass bypasses bypassing byte byteAddr byteArray byteLen byteLength byteOrder byteOutputter byteVal byteValue byte_array bytearr bytes bytesCopied bytesRead bytesRemaining bytesToDoubles bytesToFloats bytesToTransfer bytesTransferred bytesWidth bytewise c c0 c1 c10 c2 c3 c4 c5 c6 c7 c8 c9 cFlgs cH cPeer cSize cTbl ca cacat cache cacheAddress cacheInitIfNeeded cacheKey cacheList cacheLookup cached cachedBreakPositions cachedConstructor cachedLocaleData cachedMat cachedModel cachedNumberFormatData cachedZoneData caches caching cal calc calculate calculateBounds calculateBundleNames calculateChildSize calculated calculates calculating calculation calculations calendar calendarField calendarToFieldMapping calendars call callable callback callbacks called caller callerC callerCL callerClassLoader callers calling calls came can canAccessClipboard canBlock canDisplay canDisplayUpTo canEncode canRead canRotate canWrite canbezero cancel cancelKey cancelRowUpdates canceling cancellation cancelled cancels cand candidate candidates candidatesArray cannot cannotHappen canonical canonicalHostName canonicalName canonical_path canonicalization canonicalize canonicalize_md canonicalized canonically canonicals cansIte cantaloupe canvas canvases cap capabilites capabilities capability capable capacity capacityIncrement capchi capiota capital capitalization capitalize capitalized capitals caps capsigma captheta capture captured capupsil card cardComponent cardName cardinality cards care careful cares caress caret caretPosition caretPositionChanged carol caron carriage carried carries carry carryout cascade case caseDiff cased cases cash casing cast casting casts catalog cataloging catalogs catch catches catching catchs categories category categoryFlags categoryMap cats caught causation causative cause caused causedTrace causes causing caution caveat caveats cb cbg cbuf cc ccl cd cdate cde cdt ce cease ceased ceases cector cedilla cee ceil cell cellIsPopulated cellRenderer cellValue cellar cellpadding cells cellspacing cent center centered centering centers centimeter central centralized centralizes cents century cert certType certain certainly certainty certificate certificates certifies certifying certs cf cfilorux cfs cg ch ch1 ch2 ch3 ch4 cha chacters chain chained chaining chains chance chandrabindu change changeFlags changeLastEntry changeSupport changed changedParent changeover changes changing channel channels channelsAvailable chaotic chapter chapter1 char char0 char1 char2 char3 charAt charCategoryTable charLength charLoop charMap charOut charPos charSetForCategory charSetFromCategory charType charValue charWidth characers character characterIterators characteristics characterists characterize characterized characters charactre charaters charenc charr chars charsInEntry charsThatCantPrecedeAsterisk charsWidth charset charsetForName charsetName charsets chartacters chase cheap check checkAccept checkAccess checkAll checkAndCreate checkAwtEventQueueAccess checkAwtEventQueuePermission checkBounds checkButtonsArgument checkCerts checkChar checkChars checkConnect checkCreateClassLoader checkDefaultSerialize checkDelayArgument checkDelete checkDeserialize checkError checkExec checkExit checkForComodification checkForEnableIM checkGD checkGuard checkHeadless checkID checkIO checkImage checkIndex checkInitted checkIsScreenDevice checkKeycodeArgument checkLayout checkLink checkListen checkLookupTable checkMapped checkMember checkMemberAccess checkMemberAccessPermission checkMemeberAccess checkMulticast checkName checkNotDispatchThread checkOffset checkPackageAccess checkPackageAcesss checkPackageDefinition checkPath checkPermission checkPrintJobAccess checkPropertiesAccess checkPropertyAccess checkRead checkResolve checkRobotAllowed checkScreenCaptureAllowed checkSecTer checkSecurityAccess checkSetFactory checkSpecifyHandler checkSuperclass checkSystemClipboardAccess checkTertiary checkTopLevelWindow checkURL checkValidRect checkWindowClosingException checkWrite checkbox checkboxMenuItemSerializedDataVersion checkboxSerializedDataVersion checkboxes checked checkedAddresses checkedExceptions checkedWithFactory checkfpx checking checks cheeses chemie chi child childListeners childMap childResized childSize childValue children childs chime chkmenuitem cho choice choiceFormats choiceLimits choiceSerializedDataVersion choices choose choosen chooses choosing chopping chose chosen choseong choses chugs chunk chunklen chunks chval ci circle circuit circuiting circuits circular circularities circularity circumference circumflex circumstances circumvent cited cities civil cjk cl cl1 cl2 clFields clHandle claim claimed claiming claims clarity clashes class classAssertionStatus classDepth classDesc classEnabled classForName classLoader classLoaderDepth classLoaderDepth0 classMods className classNames classNamesEqual classObjs classPath classToBeanInfo classdesc classdescriptor classes classic classified classloader classloaders classname classpath classses clause clauses clazz clean cleanUpConstructionList cleaner cleanly cleanup clear clearAccessibleSelection clearAssertionStatus clearBatch clearBit clearChanged clearFocusRequestList clearGlobalFocusOwner clearLoopingStates clearOnFailure clearParameters clearProviderProperties clearRect clearWarnings clearable cleared clearing clearingCurrentLightweightRequests clearly clears clen clever click clickCount clicked clicking clicks client clients clinit clip clipFillRaster clipRect clipboard clipped clipping clips cloader clock clocks clockwise clonable clone cloneStatement cloneability cloneable cloned cloning close close0 closeBracket closePath closePending closeable closed closedByReader closedByWriter closedSubpath closely closer closes closest closing closure cls clsName clsidOffset clump clustered clz cm cmap cmax cmd cmdIn cmdOut cmdSocket cmdarray cmdsock cmin cmp cmpFracHalf cmpResult cn cname cnse cnt coalesce coalesceEvents coalescePaintEvent coalesced coalescedEvent coalesces coalescing coce cocos code codeBase codebase coded coder coders codes codesource codify coding coincidence col colFirst colLastValue colName colString colincx colincxerr colincy colincyerr colinear coll collapse collapsed collapsing collar collated collation collator collators collect collectInterfaces collected collection collections collector collects collide collision collisions collusion colon colonp colons color color1 color2 colorModel colorOf colored colors colrel cols colspan column columnHeader columnIndex columnIndexes columnMap columnName columnNamePattern columnNames columnNoNulls columnNullable columnNullableUnknown columnWeights columnWidth columnWidths columns com comapare comarison combination combinations combine combined combinedPds combinedRowNum combiner combines combining comboboxes comceptual come comes coming comma command commands commas commence comment commentChar commented comments commercial commit commits committed commmands common common2 common2factor commonly communicate communicates communication communications community comonent comp comp1 comp2 compArray compParent compact compacting compactness companies company comparable comparator comparators compare compareArraysToCount compareCerts compareIgnoringCase compareMethods compareSec compareTer compareTo compareToIgnoreCase compareToRule compared comparing comparision comparison comparisons compatability compatibility compatibilty compatible compatiblity compatilibility compelling compensate compensates compete competes competing compilation compile compileClass compileClasses compiled compiler compilers compindex complement complementary complemented complete completed completely completeness completes completion completly complex compliance compliant complicated complicating complication complies comply complying componen componenets component componentAdded componentHidden componentL componentListener componentListenerK componentMoved componentOrientation componentRemoved componentResized componentSerializedDataVersion componentShown components compose composeList composeMapping composed composing composite composited composites compositing composition compound comprehensively compress compressed compressedIsoCountries compressedIsoLanguages comprise comprised comprises comprising compromise compromised comptable computatinally computation computations compute computeDefaultSUID computeFieldOffsets computeFields computeJulianDay computeRedLevel computeTime computed computer computerized computes computing con concat concatenate concatenated concatenating concatenation concatenations concatentation concept concepts conceptual conceptually concern concerned concerning concerns concise concisely concrete concurrency concurrent concurrently cond condition conditionalShow conditions confidential config configs configuration configurations configure configureBlocking configured conflict conflicting conflicts conform conformant conforming conforms confuse confused confusing confusion congruential conjoining conjuction conjunction connect connect0 connectInternal connectOwnedWindow connectToAddress connectV4 connectable connected connectedAddress connectedPort connecting connection connectionless connections connects cons consSigs consecutive consecutively consed consequence consequences conservation conservative conservatively consider considerably consideration considerations considered considering considers consist consistency consistent consistently consisting consists console consonant consonants constant constantce constants constists constituent constituents constitute constitutes constituting constrain constrained constraining constraint constraints construcion construct constructComponentName constructPow52 constructed constructing construction constructionCache constructor constructorArgs constructorPropertyNames constructors constructs consult consulted consume consumeNextKeyTyped consumed consumer consumes consuming cont contacted contain contained container containerL containerListener containerListenerK containerSerializedDataVersion containers containg containing containment contains containsAlias containsAll containsAllPDs containsKey containsMapping containsOpp containsValue contemporary content contentClassPrefix contentEquals contentHandlerClassName contentHandlerPkgPrefixes contentPane contentPathProp contentType contention contents contentsLost contentsRestored context contextClassLoader contexts contient contiguous continent continental continuation continue continueLine continues continuing continuous continuously contract contractChars contractFlags contractOrder contractTable contracting contractions contracts contractual contraints contrast contributes contributing control controlDkShadow controlDown controlHighlight controlLtHighlight controlShadow controlText controllable controlled controller controlling controls contructor contructors convenience convenient conveniently convention conventional conventionally conventions convered conversely conversion conversions converstion convert convertAny convertFromIPv4MappedAddress convertInto convertOldISOCodes convertToOld converted convertedStep converter converting converts convey cooperates cooperative coordinate coordinated coordinates coords copes copied copies copy copyAndFixQuotes copyArea copyAttrs copyInto copyMembers copyMemory copyOfBase copyPrivateDataInto copyValue copyValueOf copying copyright copyrighted copyw corba core corner cornered corners corporation correct correctEntry correction correctionLoop corrections correctly correctness corrects correlated correlation correponding corresonding correspond correspondence corresponding correspondingly corresponds corrupt corrupting corruption cos cosine cost costly costs could couldNotInstantiate couldn count countAWTEventListeners countBits countComponents countHierarchyMembers countItems countItemsImpl countMenus countObservers countProviders countStackFrames countTokens countdown counted counter counterpart counterparts counting countries country country1 country2 countryLength countryName country_variant counts couple course cousin cover covered covering covers cp cpath cpos cr crap cras crash crashed crashes create createAccessControlContext createAttributedCharacterIterator createBackBuffers createBreakInstance createBufferStrategy createBuffers createButton createCalendar createCanvas createCheckbox createCheckboxMenuItem createChildHierarchyEvents createChoice createClassLoader createClassLoaderPermission createCompatibleImage createCompatibleVolatileImage createCompatibleWritableRaster createComponent createContentHandler createContext createCustomCursor createDatagramSocketImpl createDialog createDirectory createDragGestureRecognizer createDragSourceContextPeer createFileDialog createFileExclusively createFont createFrame createGlyphVector createGraphics createHierarchyEvents createImage createImpl createIntersection createInverse createLabel createLineBidi createList createMenu createMenuBar createMenuItem createName createNameService createNewAppContext createNewFile createPackedRaster createPanel createPopupMenu createRegistry createRobot createRobotPermission createRunAttributeDataVectors createScreenCapture createScrollPane createScrollbar createSecurityManager createSocketImpl createStatement createStrokedShape createTempFile createTextArea createTextField createURLStreamHandler createUnion createVolatileImage createWindow created creates creating creation creator credit crispness critSet criteria criterion critical cross crosshair crucial crudely crummy crunch cruzeiro cryptically crypto crypto_service cryptographic cryptographically cryptography cs csName csces csize csn csname cspace cst ct ctb ctrl ctryCode ctxt ctype cultural culture cumbersome cumulative cur curCol curDesc curGet curHeight curObj curPut curRow curWidth curX curY curly curr currIndex currencies currency currencyCode currencySymbol current currentActiveWindow currentBlockRemaining currentBreakPositions currentCard currentChar currentClass currentClassLoader currentClassLoader0 currentDomains currentFocusCycleRoot currentFocusOwner currentFocusOwnerEvent currentFocusedWindow currentIndex currentKey currentLightweightRequests currentLoadedClass currentLoadedClass0 currentLoader currentLocale currentNativeFocusOwner currentPosition currentRunAttributeValues currentRunAttributes currentRunIndex currentRunLimit currentRunStart currentRuntime currentSegment currentSerialVersion currentState currentThread currentTime currentTimeMillis currentTime_1 currentTime_2 currentType currently currpos cursor cursorProperties cursorType cursors curtok curve curveTo curved curves curx cury custom customization customizations customize customized customizer customizerClass customizing customs cut cutoff cutover cutoverDay cw cws cwsl cwspos cwss cyan cycle cycleFillRaster cycleStart cycles cyclic cycym cyle d d1 d2 dBits dLong dValue da da_DK da_DKCollator da_DKRules dadan daemon damage damaged damn danger dangerous dangling dark darkGray darkened darker dash dash_phase dasher dashes dashing data dataDefinitionCausesTransactionCommit dataDefinitionIgnoredInTransactions dataLayout dataSize database databases datagram datagramSocketClose datagramSocketCreate datagrams datanase datastream datastructure datatabase datatransfer datatypes date dateModifierList dateString dateStyle dateTimeArgs dateTimePatterns date_s dated dates datum day dayOfMonth dayOfPeriod dayOfWeek dayOfYear day_of_month daylight days db dbg dc dc1 dc2 dc3 dc4 dcm dcount dd de deProxyAWTEventListener de_DE de__POSIX deactive dead deadlock deadlocks deal dealing deallocating deallocation deals dealt deamon death debug debugInit debugged debugging dec decExp decExponent decPt decSeen decapitalize decapitalized decapitalizing december decent decexp decide decided decides decimal decimalAt decimalPos decimalSeparator decimalSeparatorAlwaysShown decimals decipher decision decisionPointList decisionPointStack decisions declaration declarations declare declared declaredConstructors declaredFields declaredMethodCache declaredMethods declares declaring declaringClass decmp decmpLimit decmpMode decode decodeEndRule decodeRules decodeStartRule decodeStep decoded decoder decoders decodes decoding decomp decompose decomposed decomposing decomposition decompositionMode decompositions decorated decoration decorations decoupling decrease decreased decreases decreasing decrement decrementSize decremented decrementing decription dedeu dedicated deemed deems deep deepCopy deeper deepest deeply def defCl default defaultAllowUserInteraction defaultAssertionStatus defaultBufferCaps defaultBufferSize defaultByteBufferSize defaultCenturyStart defaultCenturyStartYear defaultCharBufferSize defaultConstraints defaultCountry defaultDataEnd defaultDomain defaultEvent defaultEventIndex defaultEventName defaultExceptionListener defaultExpectedLineLength defaultFocusTraversalKeyPropertyNames defaultFocusTraversalKeyStrings defaultFocusTraversalKeys defaultFocusTraversalPolicy defaultFractionDigits defaultImageCaps defaultLineMetrics defaultLocale defaultManager defaultPersistenceDelegate defaultPolicy defaultProperty defaultPropertyIndex defaultPropertyName defaultReadFields defaultReadObject defaultRenderer defaultSelection defaultSerializeEx defaultSubst defaultSubstName defaultUseCaches defaultVal defaultValue defaultWheelScroll defaultWriteFields defaultWriteObject defaultZone defaultallowuserinteraction defaulted defaulting defaults defaultusecaches defeats defensively defer deferrability deferred defers define defineClass defineClass0 defineClassInPackage definePackage defineSchemeSpecificPart defineString defineSystemPackage defineable defined defines definesEquals defining definitely definition definitions definitive deflt defocused deftransform degenerate degrade degrades degree degrees deisgn del delItem delItems delMenu delagatee delay delayed delays delegatation delegate delegated delegates delegating delegation delete deleteCharAt deleteEntry deleteObserver deleteObservers deleteOnExit deleteRow deleteShortcut deleted deletes deletesAreDetected deletion deletions delicate delim delimit delimited delimiter delimiters delimiting delimsChanged delineate deliver deliverEvent deliverMouseWheelToAncestor delivered delivers delivery delta deltaTransform deltaX deltaY demand demo demonstrates demos demoting demoweb den denial denied denies denom denominator denorm denormalized denotation denote denoted denotes denoting deny depend dependant dependencies dependency dependent dependents depending depends depicts deployed deployment deposited deprecate deprecated deprectated deprives deps depth depths deque dequeueKeyEvents dequeueResult deref deregister deregisterDriver deregistered deregistering deregistration derivation derive deriveFont derived derives desc descHandle descendant descendants descendantsCount descenders descending descends descent describe described describes describing description descriptions descriptive descriptor descriptors deselect deselected deselects deserializaiton deserialization deserialize deserializeEx deserialized deserializes deserializing desicion design designTime designate designated designates designating designator designed designfaq desirable desire desired desiredAssertionStatus desiredAssertionStatus0 desiredHeight desiredLanguage desiredLocale desiredPixelWidth desiredSpaceCount desiredWidth desires desirible desktop desktopProperties desktopPropsSupport despite dest destination destinations destined destroy destroyBuffers destroyProcess destroyed destroying destructiveMulAdd destructively detachDispatchThread detaches detail detailMessage detailed details detect detected detection detector detects determination determinations determine determined determines determining deterministic devBounds develop developLongDigits developer developers development deviate deviation deviations device deviceBounds devices devpress df dfd dg dge dgl dgt dh dhLong di dia diacrit diacritic diacritical diacriticals diacritics diaeresis diagnostic diagonal diagram dialog dialogs diameter diaresis dictionary dictionaryCharCount dictionaryChars dictionaryExpression dictionaryFilename dictionaryName dictionaryStream did didn die died dies diff differ difference differences differencing different differentiate differently differing differs diffh difficult diffw diffx diffy dig digest digestLen digestSpi digestSpiClone digesta digestb digests digit digitCount digitGroup digitIndex digitLeftCount digitList digitLoop digitPerLong digitRightCount digitTotalCount digital digitalSignature digitally digitno digits digitsPerInt digitsPerLong dim dimension dimensional dimensions din dinstint diode dir direct directed direction directional directionality directions directive directives directly directories directory dirs dirty disable disableEvents disableassertions disabled disabledIcon disables disabling disadvantage disallow disallowed disambiguate disambiguation disappear disappeared disc discard discardKeyEvents discarded discarding discards discerned disclose discloses disconnect disconnect0 disconnected disconnecting discontinuities discontinuity discouraged discover discovered discovers discrepancies discrete discretion discriminating discritics discuss discussing discussion disguise disguises disjoined disjoint disk dislay disparate dispatch dispatchEvent dispatchEventImpl dispatchEventToSelf dispatchKeyEvent dispatchMouseWheelToAncestor dispatchThread dispatched dispatcher dispatchers dispatches dispatching dispatchingEventTime disperses displaced display displayLocale displayName displayNames displayable displayed displaying displays disposal dispose disposeImpl disposed disposes disposing disque disregard disrupt distance distances distict distinct distinction distinctly distinguish distinguishable distinguishing distribute distributed distributes distribution disturbance dither dithered dithering div divLong divWord divadd divergent diverse divested divide divideAndRemainder divideOneWord divideUpDictionaryRange divided dividend dividendEstimate divides dividing dividingSpace divisible division divisor divisors divulge dk dkuug dl dle dlen dlist dlong dm dn dnd dnumber do doAccessibleAction doAutoTransfer doCallbacks doComplement doConnect doDispatch doGetImpl doInput doIntersection doLayout doLoad doMenuEvent doOutput doParseString doPrivileged doProperty doUnion doVerify doc doc4 docBase docRoot docbase docs document documentation documented documents does doesMaxRowSizeIncludeBlobs doesn doing doinput dollar dollars dom domStamp domain domainlabel domains dominated don done dong dont dontNeedEncoding dontUseGui doomed door dooutput dormant dot dotIndex dotless dots dotted double doubleArraySize doubleResult doubleToBigInt doubleToLongBits doubleToRawLongBits doubleValue doubled doubles doublesToBytes doubly dout dow dowStamp dowimStamp down downCycleDefaultFocusTraversalKeys downCycleFocusTraversalKeys downFocusCycle download downloaded downloading downstream downward downwards doyStamp dp1 dpi dpl dr drPepper draft drag dragged drags drain dramatic drastic draw draw3DRect drawArc drawBuffer drawBytes drawChars drawGlyphVector drawImage drawLine drawOval drawPolygon drawPolyline drawRect drawRenderableImage drawRenderedImage drawRoundRect drawString drawVBuffer drawable drawing drawn draws drift drive driven driver driverClass driverClassName drivers drives droits drop dropRaster dropTarget dropped drops ds dst dstArray dstBegin dstColorModel dstIn dstOffset dstOut dstSavings dst_position dstbegin dstoffset dstpixel dstpos dsts dsyOfWeek dt dtoa dtok dttl dude due duke dummy dump dumpConstraints dumpLayoutInfo dumpStack dumped dumps dup duplex duplicate duplicated duplicates duplicating duration during duty dval dver dx dx1 dx2 dy dy1 dy2 dynamic dynamicLayoutSupported dynamically dzdzo e e1 e123 e2 e3 eFieldStart eIndex eMask ePos eTbl ea each eagerly earlier earliest early earth easier easily easing east easts easy eat eating eats ebits echo echoChar echoCharIsSet echoed echoes echoing economical ed edge edges edh edit editable edited editing editor editorClass editorName editors edits edt edu education ee eetop ef effect effecting effective effectiveDecimalPos effectively effects efficiency efficient efficiently effort efforts eg eh ei eight eighth eine either ejection el elapsed elect elell elem element elementAt elementCount elementData elementary elements elen eleven eleventh eliminate eliminateBackfillStates eliminated eliminates eliminating elimination ellipse elliptical else elsewhere em email embLimit embStart embed embedded embedding embeddingLevel embeddingStart embeddings embodied embodies embraced emit emitPattern emits emitted emitting empirically employed employs emptiness empty emptyArray emptyEnumerator emptyIterator en en_US en_USCollator en_USRules en_US_WIN enable enableEvents enableExpertCommands enableInputMethods enableInputMethodsForTextComponent enableInputMethodsIfNecessary enableOverride enableReplace enableReplaceObject enableResolve enableResolveObject enableSubclassImplementation enableSubstitution enableTest enableassertions enabled enabledOnToolkit enables enabling enc encapsualtes encapsulate encapsulated encapsulates encapsulating enclose enclosed encloses enclosing encode encodeStep encoded encoder encoders encodes encoding encodingName encodings encompasses encounter encountered encounteredField encounters encourage encouraged encrypted encryption end endBitIndex endChar endCompare endComposition endDay endDayOfMonth endDayOfWeek endElement endIndex endLayout endMode endMonth endOfInput endPath endPos endPosition endRunIndex endState endStates endTime endTimeMode endUnitIndex endValidate endValue ended endian ending endoff endpoint endpoints ends endsWith eneng enforce enforced enforces enforcing eng engine engineAliases engineCache engineContainsAlias engineDeleteEntry engineDigest engineGenerateParameters engineGeneratePrivate engineGeneratePublic engineGenerateSeed engineGetCertificate engineGetCertificateAlias engineGetCertificateChain engineGetCreationDate engineGetDigestLength engineGetEncoded engineGetKey engineGetKeySpec engineGetParameter engineGetParameterSpec engineGetParameters engineInit engineInitSign engineInitVerify engineIsCertificateEntry engineIsKeyEntry engineLoad engineNextBytes engineReset engineSetCertificateEntry engineSetKeyEntry engineSetParameter engineSetSeed engineSign engineSize engineStore engineToString engineTranslateKey engineType engineUpdate engineVerify engineering engines enhancements enhancing enjoy enjoys enlarged enough enq enqueue enqueueKeyEvents enqueued enqueuedKeyEvents ensue ensure ensureCapacity ensureCapacityHelper ensureMemberAccess ensureOpen ensureRunBreak ensured ensures ensuring ent entail enter entered entering enters enth entire entirely entities entitled entity entries entry entryName entrySet entrySetCallCount entryTable enum enumerate enumerated enumerates enumerating enumeration enumerationValues enumerations enumerator env envelope environment environments envp eoepo eof eol eolIsSignificant eolIsSignificantP eot ephemeral epoch epochs epoint eq eqi equaivalent equal equalIgnoringCase equalPos equality equally equals equalsIgnoreCase equate equates equations equidistant equipped equiv equivalence equivalent equivalentTo equivalently equivalents er era eras erase err erratic errmsg erroneous erroneously error errorIndex errorOffset errors es esc escape escapeSpace escaped escapes escaping esd esds especially ess essential essentially esspa est estProduct establish established establishing estate estimate estimated et etb etc etchType etched etest eth etx euclidModInverse eueus euro ev eval evaluate evaluated evaluating evaluation even evenMod evenPart event eventBit eventDispatched eventEnabled eventException eventListener eventListenerType eventMask eventName eventPropertyName eventSetDescriptors eventSetName eventTypeEnabled eventlistener events eventsToDisable eventsToEnable eventually eventx eventy ever every everybody everyone everything everywhere evidence evident evolve evolved evt ex ex1 ex2 exact exactly exam examinations examine examined examines examining example examples exc excecute exceed exceeded exceeds except exception exceptionChars exceptionListener exceptionThrown exceptional exceptions excess excessBits excessChars excessive excessively excessivly exchange exchanged exchanges exclamation exclude excluded excludes excluding exclusive exclusively exec execInternal exeception execption executable execute executeBatch executeQuery executeStatements executeUpdate executed executes executing execution executionTime executions executive exemptions exercise exercised exhaust exhausted exhibit exist existed existence existing existingEntry existingEvent existingPaintEvent existingRect exists exit exitPoints exitStatus exitVM exitValue exitcode exited exiting exits exp expAffix expAt expBias expChars expIndex expLimit expLoop expMask expOffset expOne expOverflow expShift expSign expStack expVal expand expandAffix expandAffixes expandCapacity expandChars expandTable expanded expanding expandsion expansion expansions expect expectation expected expectedClose expectedMaxSize expectedModCount expecting expects expedite expeditiousness expend expense expensive exper experiment experimental experimentally expert experts expiration expire expired expires expiry explained explaing explaining explanation explanatory explicit explicitBeanInfo explicitEvents explicitMethods explicitProperties explicitly exponenet exponent exponentChar exponentDigits exponential exponentiate exponentiation exponents exported exports expose exposed exposes exposing expresison express expressed expressible expressing expression expressionCache expressions expressive exs ext extList extend extended extendidng extending extends extensible extension extensions extensively extent extentSize extents exterior external external_address externalizable externally extra extraAlpha extraByte extraInt extraPropFile extract extracted extracting extracts extraneous extraordinary extrapolating extreme extremely f f1 f2 f2ary fBits fDigits fExponent fFieldStart fRequestedAttributes fValue fa fabricate fac face faces facilitate facilitates facilities facility fact factor factored factories factors factory fafas fail failExpecting failed failing fails failure fair fairly fake faking fall fallback fallbackLanguage fallbackNames falls falpha false familiar families family fancy far farther farthest farthestEndPoint fashion fast fastTime faster fastest fatal faults faulty favor favorite fc fclz fd fdErr fdIn fdLock fdObj fdOut fdUseCount fdlibm fdm fdy fe fear feasible feature features feb28 feb29 feb31 february feed feeding feeds feel feels fequency fetch fetched fetching few fewer ff ffApply ffff fffffffff fi fichier fichiers field fieldID fieldInfo fieldName fieldNames fieldOffset fieldPosition fieldRefl fieldSigs fieldStart fieldType fieldValue fields fifin fifth fifty figits figure figures file fileName fileNameMap fileNameMapLoaded fileToEncodedURL filedlg fileform filelimits filename filenames filepart files filesystem fill fill3DRect fillArc fillBytes fillInStackTrace fillInTables fillOval fillPolygon fillRect fillRoundRect filled filler filling fills filter filterComponents filterKey filterValue filtered filtering filters final finalChar finalizable finalization finalizations finalize finalizeImpl finalized finalizer finalizers finally find findBootstrapClass findBootstrapClass0 findBundle findBundleInCache findClass findColumn findComponentAt findEditor findExplicitBeanInfo findInCharMap findIndexedPropertyType findKeyword findLastEntry findLastWithNoExtension findLibrary findLoadedClass findMethod findNative findPropertyType findPublicMethod findResource findResources findStringMatch findSystemClass findTraversalRoot finding finds fine finer fingerprint finish finishBuildingStateTable finishConnect finished finishing finite fins fire firePropertyChange fireVetoableChange fired fires firewall firing first firstChar firstColon firstDash firstDayOfWeek firstDot firstElement firstEntry firstExcluded firstExpansion firstGroupLen firstItem firstKey firstLength firstLine firstLower firstNonzeroByteNum firstNonzeroIntNum firstSearch firstSun firstTime firstUpper firstValue firstVisibleComponent fis fish fist fit fitness fits fitsIntoLong five fix fixAfterDeletion fixAfterInsertion fixCanonical fixDown fixEntry fixUp fixed fixedPoint fixup fjfij fl flag flagged flags flanked flat flatness flatten flattened flattening flattens flavor flavorMapFileURL flavormap flavors flexibility flexible flexiblity flip flipAction flipBit flipContents flipped flipping flips flm float floatToIntBits floatToRawIntBits floatValue floating floats floatsToBytes flocalized floor floorDivide flow flush flushAny flushBuffer flushCaches flushConvBuffer flushFromCaches flushInto flushPendingEvents flushed flushes flushing fly fmt fn fname focus focusCycleRoot focusGained focusGainedEvent focusL focusListener focusListenerK focusLost focusManagerIsDispatching focusMgr focusNextComponent focusOwner focusPreviousComponent focusRoot focusTraversalKeyPropertyNames focusTraversalKeys focusTraversalKeysEnabled focusTraversalPolicy focusability focusable focusableWindowState focused focusedComponent focusedWindow focusedWindowChangeAllowed focusedWindowChanged fofao folio follow followRedirects followed following follows font fontFile fontFormat fontName fontSerializedDataVersion fontSize fontSizeStr fontStream fontStyle fontType fontmanager fontname fonts foo fooBah fooBeanInfo fooEditor fooPattern foobah fool footprint for forCache forClass forDigit forName forName0 forParsing force force0 forceLower forced forceful forcefully forces forcibly forcing foregoing foreground foreign foreignCatalog foreignSchema foreignTable forever forgets forgetting forgotten forkAndExec forked form formal formally format formatData formatElementIndex formatError formatList formatNumber formatToCharacterIterator formats formatted formatter formatters formatting formed former formerly forms formula formulae forom forth forward forwardDefaultFocusTraversalKeys forwardFocusTraversalKeys forwardStateTable forwardTextAreaFocusTraversalKey forwardTraversalKeys forwarded forwarding forwards fos found foundInMainBranch four fourth fp fps fpx fr fr_FR fr__MAC fractAsInt fractBits fractHOB fractMask fraction fractionPresent fractional fractions fragment fragments frame frame1 frameList frameSerializedDataVersion frames framesInCommon framework franc fraught frc fred fredx fredxFIXME free freeMemory freed freeing french frenchSec frequency frequent frequently fresh freshly frfra frgbvalue friday friend friends fries from fromCIEXYZ fromClass fromElement fromIndex fromKey fromPage fromStart fromState fromType front frontCaps frozen frrom fruits fs ftp ftype fu fuction fudge fulfilling full fullClassName fullCopy fullName fullScreenExclusive fullScreenWindow fullSize fulltype fully fullyQualifiedClassName fum fun function functional functionality functionally functions fundamental fundamentally further furthest future fuzzy fvalue fwd fx fy fyfry g g1 g2 g2d gStart gagai gain gained gaining gains gap gap2 gaps garbage gathered gathering gc gcBounds gcd gct gd gdgdh ge geByAddr gen genKeyPair genParamSpec general generality generally generate generateCertificate generateFile generateKeyPair generateParameters generatePrivate generatePublic generateSeed generated generates generating generation generator generators generic generically genuine geographical geom geometric geometry gesture gestures get get2DigitYearStart getAWTEventListeners getAWTKeyStroke getAWTKeyStrokeForEvent getAbsoluteFile getAbsolutePath getAccessibleAction getAccessibleActionCount getAccessibleActionDescription getAccessibleAt getAccessibleChild getAccessibleChildrenCount getAccessibleComponent getAccessibleContext getAccessibleDescription getAccessibleIndexInParent getAccessibleName getAccessibleParent getAccessibleRole getAccessibleSelection getAccessibleSelectionCount getAccessibleStateSet getAccessibleText getAccessibleValue getAction getActionCommand getActionListeners getActions getActiveWindow getActualMaximum getActualMinimum getAddListenerMethod getAdditionalBeanInfo getAddress getAddressFromNameService getAdjustable getAdjustmentListeners getAdjustmentType getAdvance getAfterIndex getAlgorithm getAlgorithmProperty getAlgorithms getAlignment getAlignmentX getAlignmentY getAll getAllAttributeKeys getAllByName getAllByName0 getAllFonts getAllQualifyingCandidates getAllowUserInteraction getAlpha getAlphaMask getAmPmStrings getAnchorRect getAppContext getApplet getAppletContext getAppletInfo getApplets getArguments getArray getAsText getAscent getAsciiStream getAtIndex getAttribute getAttributeCheckRange getAttributes getAudioClip getAuthority getAutoCommit getAutoDelay getAvailableAttributes getAvailableFontFamilyNames getAvailableIDs getAvailableLocales getB getBackBuffer getBackBufferCapabilities getBackground getBaseLevel getBaseType getBaseTypeName getBaselineFor getBaselineIndex getBaselineOffsets getBeanClass getBeanDescriptor getBeanInfo getBeanInfoSearchPath getBeforeIndex getBeginIndex getBestConfiguration getBestCursorSize getBestRowIdentifier getBigDecimal getBinaryStream getBitDepth getBits getBlob getBlockDataMode getBlockIncrement getBlue getBlueMask getBoolean getBooleanAttributes getBooleanAttributes0 getBootstrapClassPath getBootstrapResource getBootstrapResources getBoundingBox getBounds getBounds2D getBreakInstance getBroadcast getBuffer getBufferCapabilities getBufferStrategy getBundle getBundleImpl getByAddr getByIndex getByName getByte getBytes getC getCPathConsumer getCachedAddress getCachedRaster getCachedStroke getCalendar getCalendarDate getCalendarField getCallerClass getCallerClassLoader getCalls getCanonName getCanonicalFile getCanonicalHostName getCanonicalPath getCapabilities getCaretPosition getCatalog getCatalogName getCatalogSeparator getCatalogTerm getCatalogs getCause getCeilEntry getCertificate getCertificateAlias getCertificateChain getCertificates getChannel getChar getCharB getCharCount getCharL getCharOrder getCharacterAttribute getCharacterBounds getCharacterEncoding getCharacterInstance getCharacterIterator getCharacterStream getChars getCharsetName getCheckBoxGroup getCheckboxGroup getChild getChildren getClass getClassContext getClassDataLayout getClassDataLayout0 getClassLoader getClassLoader0 getClassLoaderPerm getClassName getClassSignature getClasses getClickCount getClip getClipBounds getClipRect getClob getCodeBase getCodeSource getCodeSourceURL getCollationElementIterator getCollationKey getColor getColor1 getColor2 getColorComponents getColorModel getColorSpace getColumnClassName getColumnCount getColumnDisplaySize getColumnLabel getColumnName getColumnPrivileges getColumnType getColumnTypeName getColumns getComponent getComponentAfter getComponentAt getComponentBefore getComponentCount getComponentListeners getComponentOrientation getComponentType getComponents getComponents_NoClientCode getComposite getConcurrency getConfigurations getConnection getConstraints getConstructor getConstructor0 getConstructors getConstructors0 getConstructors1 getContainerListeners getContainingWindow getContent getContentEncoding getContentHandler getContentHandlerPkgPrefixes getContentLength getContentPane getContentType getContentTypeFor getContents getContext getContextClassLoader getContractOrder getContractValues getConverter getCopies getCount getCountry getCreationDate getCriticalExtensionOIDs getCrossReference getCrossings getCurrency getCurrencyCode getCurrencyInstance getCurrencySymbol getCurrent getCurrentAccessibleValue getCurrentFocusCycleRoot getCurrentKeyboardFocusManager getCursor getCursorName getCursorType getCustomEditor getCustomizerClass getD getDSTSavings getDashArray getDashPhase getData getDataElements getDataOffset getDataSize getDataStorage getDatabaseMajorVersion getDatabaseMinorVersion getDatabaseProductName getDatabaseProductVersion getDate getDateFormatSymbols getDateFormatZoneData getDateInstance getDateTimeInstance getDay getDayOfWeek getDebug getDecimalFormatSymbols getDecimalSeparator getDeclaredClasses getDeclaredClasses0 getDeclaredConstructor getDeclaredConstructors getDeclaredField getDeclaredFields getDeclaredMethod getDeclaredMethods getDeclaredSUID getDeclaredSerialFields getDeclaringClass getDecomposition getDecompositions getDefault getDefaultAllowUserInteraction getDefaultComponent getDefaultConfiguration getDefaultCursor getDefaultDomain getDefaultEncodingName getDefaultEventIndex getDefaultFocusTraversalKeys getDefaultFocusTraversalPolicy getDefaultFractionDigits getDefaultParent getDefaultPort getDefaultPropertyIndex getDefaultRequestProperty getDefaultScreenDevice getDefaultSelection getDefaultSerialFields getDefaultToolkit getDefaultTransactionIsolation getDefaultTransform getDefaultType getDefaultUseCaches getDescent getDesktopProperty getDestination getDevice getDeviceConfiguration getDialog getDigestLength getDigit getDirectionality getDirectory getDispatchThread getDispatcher getDispatchingEventTime getDisplayCountry getDisplayLanguage getDisplayMode getDisplayModes getDisplayName getDisplayVariant getDisplayVariantArray getDisplayXXX getDoInput getDoOutput getDocumentBase getDomainCombiner getDouble getDoubleB getDoubleL getDrawGraphics getDriver getDriverMajorVersion getDriverMinorVersion getDriverName getDriverProperties getDriverVersion getDrivers getDropTarget getDropTargetEventTarget getEchoChar getEditorSearchPath getElementAt getEncoded getEncoding getEndCap getEndIndex getEngineClassName getEntry getEntryName getEnumeration getEpochDay getEras getErrorCode getErrorIndex getErrorOffset getErrorStream getErrorsAny getErrorsID getEventMask getEventPropertyName getEventQueue getEventSetDescriptors getException getExceptionListener getExceptionTypes getExpandValueList getExpiration getExponentialSymbol getExportedKeys getExtendedState getExtension getExternalizableConstructor getExtraNameCharacters getFD getFamily getFamilyName getFamily_NoClientCode getFetchDirection getFetchSize getField getField0 getFieldAttribute getFieldDelegate getFieldInfo getFieldInfo0 getFieldOffset getFieldValue getFields getFields0 getFields1 getFile getFileDescriptor getFileName getFileNameMap getFilePointer getFileSystem getFilenameFIlter getFilenameFilter getFilterComponents getFirst getFirstComponent getFirstDayOfWeek getFlags getFlipContents getFloat getFloatB getFloatL getFocusCycleRootAncestor getFocusListeners getFocusOwner getFocusTraversalKey getFocusTraversalKeys getFocusTraversalKeysEnabled getFocusTraversalKeys_NoIDCheck getFocusTraversalPolicy getFocusableWindowState getFocusedWindow getFollowRedirects getFont getFontList getFontMetrics getFontName getFontPeer getFontRenderContext getFont_NoClientCode getFoo getFooListeners getForeground getFormat getFormats getFormatsByArgumentIndex getFragment getFrames getFred getFromCache getFromClass getFromPage getFrontBufferCapabilities getFullName getFullScreenWindow getGeneratedKeys getGetClassLoaderPerm getGetListenerMethod getGlobalActiveWindow getGlobalCurrentFocusCycleRoot getGlobalFocusOwner getGlobalFocusedWindow getGlobalPermanentFocusOwner getGraphics getGraphicsConfiguration getGreatestMinimum getGreen getGreenMask getGregorianChange getGroupingSeparator getGroupingSize getGuarantor getHAdjustable getHSBColor getHScrollbarHeight getHeaderField getHeaderFieldDate getHeaderFieldInt getHeaderFieldKey getHeaderFields getHeadlessProperty getHeight getHelpMenu getHgap getHierarchyBoundsListeners getHierarchyListeners getHoldability getHost getHostAddress getHostByAddr getHostFromNameService getHostName getHours getID getIDstring getIP getISO3Country getISO3Language getISOCountries getISOLanguages getISOYear getIcon getIconAt getIconImage getIdentifierQuoteString getIdentity getIfModifiedSince getIgnoreRepaint getImage getImageCapabilities getImpl getImplementationTitle getImplementationVendor getImplementationVersion getImplicitDownCycleTraversal getImportedKeys getInCheck getIndex getIndexAtPoint getIndexInfo getIndexedPropertyType getIndexedReadMethod getIndexedWriteMethod getInetAddress getInetAddresses getInfinity getInfo getInheritableMethod getInheritedAccessControlContext getInitialComponent getInput getInputContext getInputLength getInputMethodListeners getInputMethodRequests getInputStream getInsets getInstance getInstanceFollowRedirects getInstanceOf getInstanceof getInt getIntB getIntL getInteger getIntegerInstance getInterface getInterfaces getInternalPersistenceDelegate getInternationalCurrencySymbol getInternedColorModel getInvocationHandler getIssuerDN getItalicAngle getItem getItemAt getItemCount getItemImpl getItemListeners getItems getIterator getJDBCMajorVersion getJDBCMinorVersion getJarEntry getJarFile getJarFileURL getJavaInitializationString getKeepAlive getKey getKeyChar getKeyCode getKeyEventChar getKeyEventDispatchers getKeyEventPostProcessors getKeyEventType getKeyListeners getKeyModifiersText getKeySpec getKeyText getKeyUsage getKeymap getKeys getLabel getLanguage getLast getLastComponent getLastModifed getLastModified getLastModifiedTime getLauncher getLayout getLayoutAlignment getLayoutAlignmentX getLayoutAlignmentY getLayoutDimensions getLayoutInfo getLayoutOrigin getLayoutWeights getLcidFromLocale getLeading getLeastMaximum getLength getLevelAt getLimits getLineIncrement getLineInstance getLineIterator getLineJoin getLineMetrics getLineNumber getLineWidth getListener getListenerCount getListenerMethod getListenerMethodDescriptors getListenerMethodName getListenerMethods getListenerType getListeners getLoader getLocalAddress getLocalDesc getLocalGraphicsEnvironment getLocalHost getLocalHostName getLocalPatternChars getLocalPort getLocale getLocaleElements getLocalizedInputStream getLocalizedMessage getLocalizedOutputStream getLocation getLocationOnScreen getLocationOnScreen_NoTreeLock getLockingKeyState getLogStream getLogWriter getLogicalBounds getLoginTimeout getLong getLongB getLongL getLoopbackMode getLowestSetBit getMainAttributes getMainTableEntry getMajorVersion getManifest getMapSize getMask getMatrix getMaxAdvance getMaxAscent getMaxBinaryLiteralLength getMaxBytesPerChar getMaxCatalogNameLength getMaxCharBounds getMaxCharLiteralLength getMaxCharsPerByte getMaxColumnNameLength getMaxColumnsInGroupBy getMaxColumnsInIndex getMaxColumnsInOrderBy getMaxColumnsInSelect getMaxColumnsInTable getMaxConnections getMaxCursorNameLength getMaxDecent getMaxDescent getMaxExpansion getMaxFieldSize getMaxIndexLength getMaxPage getMaxPriority getMaxProcedureNameLength getMaxRowSize getMaxRows getMaxSchemaNameLength getMaxSecOrder getMaxStatementLength getMaxStatements getMaxTableNameLength getMaxTablesInSelect getMaxTerOrder getMaxUserNameLength getMaximizedBounds getMaximum getMaximumAccessibleValue getMaximumCursorColors getMaximumDecomposition getMaximumFractionDigits getMaximumIntegerDigits getMaximumSize getMedia getMenu getMenuBar getMenuComponents getMenuCount getMenuCountImpl getMenuImpl getMenuShortcutKeyMask getMesage getMessage getMessageDigest getMetaData getMethod getMethod0 getMethodDescriptors getMethodInfo getMethodInfo0 getMethodName getMethodSignature getMethods getMethods0 getMethods1 getMin getMinPage getMinSize getMinimalDaysInFirstWeek getMinimum getMinimumAccessibleValue getMinimumFractionDigits getMinimumIntegerDigits getMinimumSize getMinorVersion getMinusSign getMinutes getMissingGlyphCode getMiterLimit getMode getModifiers getMonetaryDecimalSeparator getMonth getMonths getMoreResults getMostRecentFocusOwner getMouseEventTarget getMouseEventTargetImpl getMouseListeners getMouseMotionListeners getMouseWheelListeners getMultipleDocumentHandling getMultiplier getNaN getName getNanos getNativeContainer getNativeFocusOwner getNativeFocusedWindow getNegative getNegativePrefix getNegativePrefixFieldPositions getNegativeSuffix getNegativeSuffixFieldPositions getNetworkInterface getNetworkInterfaces getNewValue getNextEnumWithMore getNextEvent getNextException getNextWarning getNormalizingTransform getNumChars getNumComponents getNumDataElements getNumGlyphs getNumObjFields getNumber getNumberFormat getNumberInstance getNumericFunctions getNumericValue getOOBInline getObjFieldValues getObject getObjectStreamClass getOffset getOffsets getOffsetsByWall getOldEventKey getOldValue getOppositeComponent getOppositeWindow getOption getOrientation getOrientationRequested getOrigin getOutputStream getOwnedWindows getOwner getOwningFrameDialog getPDperm getPSName getPackage getPackages getPageDimension getPageIncrement getPageRanges getPageResolution getPaint getParameter getParameterClassName getParameterCount getParameterDescriptors getParameterInfo getParameterMetaData getParameterMode getParameterSpec getParameterType getParameterTypeName getParameterTypes getParameters getParent getParentFile getParent_NoClientCode getPassword getPasswordAuthentication getPath getPathIterator getPathSeparator getPattern getPatternSeparator getPeer getPeer_NoClientCode getPerMill getPercent getPercentInstance getPermanentFocusOwner getPermission getPermissionCollection getPermissions getPersistenceDelegate getPixelColor getPixelSize getPixelStride getPoint getPoint1 getPoint2 getPolicy getPolicyNoCheck getPort getPositivePrefix getPositivePrefixFieldPositions getPositiveSuffix getPositiveSuffixFieldPositions getPrecedingEntry getPrecision getPredefinedCursor getPreferredSize getPrefixLength getPrimDataSize getPrimFieldValues getPrimaryKeys getPrimitiveClass getPrincipal getPrincipals getPrintJob getPrintQuality getPrinter getPrinterResolution getPriority getPrivate getPrivateField getPrivateKey getPrivateMethod getPrngAlgorithm getProcedureColumns getProcedureTerm getProcedures getPropagationId getProperties getProperty getPropertyChangeEvent getPropertyChangeListeners getPropertyDescriptor getPropertyDescriptors getPropertyEditorClass getPropertyInfo getPropertyName getPropertyType getProtectionDomain getProtectionDomain0 getProtocol getProtocolVersion getProvider getProviderName getProviderProperty getProviders getProvidersNotUsingCache getProxyClass getPublic getPublicDeclaredMethods getPublicKey getQuery getQueryTimeout getRGB getRGBColorComponents getRGBComponents getRGBPixel getRGBPixels getRGBdefault getRGBs getRanges getRaster getRawOffset getRead getReadMethod getReason getReceiveBufferSize getRed getRedMask getRef getReflectionFactory getReflector getRefreshRate getRegistry getRemoveListenerMethod getRenderingHint getRenderingHints getRequestMethod getRequestProperties getRequestProperty getRequestingHost getRequestingPort getRequestingPrompt getRequestingProtocol getRequestingScheme getRequestingSite getRequestingXXX getResolveParent getResource getResourceAsStream getResources getResponseCode getResponseMessage getResultSet getResultSetConcurrency getResultSetHoldability getResultSetType getReturnType getReuseAddress getRootGroup getRow getRows getRule getRules getRunCount getRunLevel getRunLimit getRunStart getRuntime getSQLKeywords getSQLState getSQLStateType getSQLType getSQLTypeName getSavepointId getSavepointName getScale getScaleX getScaleY getScaledInstance getScanlineStride getSchemaName getSchemaTerm getSchemas getScheme getSchemeSpecificPart getScientificInstance getScope getScreenDevices getScreenInsets getScreenResolution getScreenSize getScrollAmount getScrollPosition getScrollType getScrollbarDisplayPolicy getScrollbarVisibility getSearchStringEscape getSeconds getSecureRandomSpi getSecurityContext getSecurityManager getSeed getSelectedCheckbox getSelectedIndex getSelectedIndexes getSelectedItem getSelectedItems getSelectedObjects getSelectedText getSelectionEnd getSelectionStart getSendBufferSize getSentenceInstance getSentenceIterator getSeparator getSerialFields getSerialVersionUID getSerializableConstructor getShape getShearX getShearY getShort getShortB getShortDescription getShortL getShortMonths getShortWeekdays getShortcut getShortcutMenuItem getSides getSignature getSignerPrivateKey getSigners getSize getSize2D getSoLinger getSoTimeout getSocket getSocketAddress getSource getSourceString getSpecificationTitle getSpecificationVendor getSpecificationVersion getStackAccessControlContext getStackTrace getStackTraceDepth getStackTraceElement getStandardName getState getStateChange getStatement getStatus getStream getStreamKeys getStrength getStrikethroughOffset getStrikethroughThickness getString getStringArray getStringBounds getStringFunctions getStroke getStyle getSubElements getSubString getSubjectDN getSuperDesc getSuperTables getSuperTypes getSuperclass getSurfaceData getSymbol getSystemClassLoader getSystemClipboard getSystemCustomCursor getSystemEventQueue getSystemEventQueueImpl getSystemFunctions getSystemPackage getSystemPackage0 getSystemPackages getSystemPackages0 getSystemResource getSystemResourceAsStream getSystemResources getSystemScope getSystemSelection getSystemTimeZoneID getTTL getTabCount getTableName getTablePrivileges getTableTypes getTables getTags getTarget getTargetBeanDescriptor getTargetDefaultEventIndex getTargetDefaultPropertyIndex getTargetEventInfo getTargetException getTargetMethodInfo getTargetPropertyInfo getTcpNoDelay getTempDir getText getTextListeners getThreadGroup getTime getTimeDateFunctions getTimeImpl getTimeInMillis getTimeInstance getTimeOfDay getTimeToLive getTimeZone getTimeout getTimestamp getTimezoneOffset getTitle getTitleAt getToPage getToolkit getToolkitImpl getTrafficClass getTransactionIsolation getTransferData getTransferSize getTransform getTranslateX getTranslateY getTransparency getTreeLock getType getTypeCode getTypeInfo getTypeMap getTypeString getUDTs getURL getURLStreamHandler getURLs getUTFLength getUnderlineOffset getUnderlineThickness getUnderlyingToolkit getUnicodeOrder getUnicodeStream getUnitIncrement getUnresolvedPermissions getUpdateCount getUpdateCounts getUpdateRect getUseCaches getUserInfo getUserName getVAdjustable getVKValue getVScrollbarWidth getValue getValueData getValueIsAdjusting getValueString getVariant getVariantFor getVersion getVersionColumns getVetoableChangeListeners getVgap getViewportSize getVisible getVisibleAmount getVisibleIndex getWarningString getWarnings getWeekdays getWheelRotation getWhen getWidth getWidths getWindingRule getWindow getWindowFocusListeners getWindowListeners getWindowStateListeners getWordInstance getWordIterator getWriteMethod getX getXXX getXxxxInstance getY getYear getZeroDigit getZoneIndex getZoneStrings getenv getfield gets gett getter getterExc getterName getters getting gfx gif give given gives giving glglg global glue glyph glyphCode glyphCodes glyphs gmt gmtFormatter gname gngrn go goCombiner goal goals gods goes going gone good goodIterator gopher got gotDouble gotFocus gotNegative gotPositive gothic gotten govern governed governing governs grab grabbing grabs gracefully grade gradient grammar grammatical grant granted grantee granting grantor grants graph grapheme graphical graphics graphicsConfig graphicsenv graphs grave gray great greater greatest greatly greedy green greenc gregorianCutover gregorianCutoverYear gregorianEpochDay grey grid gridHeight gridWidth gridX gridY gridbag gridheight grids gridwidth gridx gridy groan group groupAddr groupChars groupList groupVal grouped grouping groupingCount groupingSeparator groupingSize groupingUsed groups groupsSnapshot grow growEntries growSpine growable growing grown grows growth gs gt guantlet guarantee guaranteed guaranteeing guarantees guarantor guard guarded guarding guards guess guessContentTypeFromName guessContentTypeFromStream guessVersion guessing guguj gui guiAvailable guide gv h h2 h3 h4 hAdjustable hAdjustableValue hacek hack had hadAnnotations hadn hahau hair half halfULP halfUlp halt halted halts halves hamburger hand handed handle handleError handleEvent handleException handleGetObject handleNext handlePrevious handleReset handleShortcut handleSpecialSubstitution handleWheel handleWheelScrolling handled handler handler2 handlerClassName handlerPropName handlers handles handlesWheelScrolling handling hands handy hang hanging hangs hangulToJamo happen happened happens happily happy hard hardValueOf hardcoded hardware harmless harmlessly has hasAllPermission hasBlockExternalData hasChanged hasData hasDesc hasException hasExited hasFocus hasJamo hasListeners hasMore hasMoreElements hasMoreTokens hasNext hasNonPublicInterface hasPrevious hasReadObjectMethod hasReadObjectNoDataMethod hasReadResolveMethod hasRemaining hasSameRules hasStaticInitializer hasUniformLineMetrics hasWriteObjectData hasWriteObjectMethod hasWriteReplaceMethod hasalpha hash hashBytes hashCode hashCodeCache hashCodes hashEntrySet hashIgnoringCase hashIterator hashcode hashcodes hashed hashes hashing hashmap hashtable hashtableFilter hashtableNull hashtables hasn hastable hat have haveDash haveEquals haveLeftoverChar haveNextNextGaussian havePipe haveTilde haven having havoc hb hbarHeight hbarOn hbuf he head headMap headSet header headerSize headers headless heap heavily heavy heavyweight heavyweightButtonDown heavyweightRequests hedge heheb height heights heirarchy held hello help helpMenu helper helps hemisphere hence henceforth her here hereinafter hertz heterogeneous heterogenous heuristic heuristics hex hex4 hexDigit hexadecimal hexidecimal hexpart hexpost hexseq hgap hh hhmm hi hibyte hid hidden hide hideAndDisposeHandler hides hiding hierarchical hierarchically hierarchies hierarchy hierarchyBounds hierarchyBoundsL hierarchyBoundsListener hierarchyBoundsListenerK hierarchyChanged hierarchyL hierarchyListener hierarchyListenerK high highBad highBit highBits highEndpoint highMask highPart highWord highbit highbyte higher highest highestLevel highestUnit highlight highlightInner highlightOuter highlighted highlighting highly hihin hinders hint hintKey hintValue hintmap hints hir hira hiragana his historial historical historicalName historically hit hitClip hits hjb hn hode hogs hoisted hold holdability holder holding holds holdsLock hole holes home homed homogeneous honor honored hoo hook hooks hope hopefully horizontal horizontalScrollBar horizontally horn horz host hostAddress hostName hosted hostile hosting hostname hostnames hostport hosts hostsEqual hot hotSpot hotjava hotspot hour hourOfDayStamp hourStamp hourString hours how howev however howto hr href hrhrv hrs hs hs122 hsbvals hsdev ht htab html html40 http hue huge huhun hulpbias human humans hung hurt hv hvvliet hw hwAncestor hwAncestorPeer hwFocusRequest hybridGCD hyhye hypen hyph hyphen hyphenated hyphens hypothetical i i1 i18n i2 i386 iCount iDigits iFieldEnd iFieldStart iValue ia iaContainerObj iaddr iae iae1 iaina iana ibm icm icmpContext icolrel icon iconKind iconic iconification iconified iconify icons icr ics id idName idString idea identical identically identifers identification identified identifier identifiers identifies identify identifying identities identity identityEquals identityHashCode identityName identitydb identitymap ideograph ideographic ideographs idind idiom idioms idle idref idrefName idrefs ids idx idy ie ieile ietf if ifModifiedSince ifaceNames ifaces ifcs iff ifmodifiedsince ignorable ignorables ignore ignoreCase ignoreChars ignoreEnabled ignoreLF ignoreNegativeZero ignoreRepaint ignored ignores ignoring ih ii iiRas iir ikipk ilim ill illegal illegally illustrates illustrating ilog10 ils im image imageCache imageCaps imageObserver imageUpdate imagedata imagelength imageoffset images imagine imaging img img1 imgs immediate immediately immediatly immune immunity immutable immutables impact imperative impl implAccept implClass implName implTitle implVendor implVersion implcitly implement implementable implementation implementations implemented implementer implementers implementing implementor implementors implements implication implications implicit implicitDownCycleTraversal implicitly implied implies impliesIgnoreMask impltitle implvendor implversion imply implying import importance important importantly imported importedKeyCascade importedKeyInitiallyDeferred importedKeyInitiallyImmediate importedKeyNoAction importedKeyNotDeferrable importedKeyRestrict importedKeySetDefault importedKeySetNull importedNoAction imports impose imposed imposes imposing imposition impositions impossible impractical improper improperly improve improved improving in inChars inCheck inClass inClassLoader inData inDaylightTime inDefaultEventSet inLimit inLocale inMark inOff inPalette inProxyWeTrust inQuote inRange inRange2 inReady inSendMessage inSpan inStream inaccessible inaccuracies inaccuracy inaccurate inactive inactiveCaption inactiveCaptionBorder inactiveCaptionText inactivity inadvertent inadvisable iname inapplicable inappropriate incCount incRate incXAcross incXDown incYAcross incYDown inch inclined include includeSelf included includes including inclusive incoming incompatibilites incompatibilities incompatibilities1 incompatible incompatibly incomplete inconceivable inconsistencies inconsistency inconsistent incorporate incorporated incorrect incorrectly increase increased increases increasing increment incrementSize incremental incrementalDraw incrementaldraw incrementally incremented incrementing increments incurred incurring ind indecated indeed indefinite indefinitely indent indentation indention independent independently indeterminate index indexBound indexInParent indexOf indexOfSubList indexStaticProviders indexed indexedBinarySearch indexedGetter indexedGetterName indexedPropertyType indexedReadMethod indexedSetter indexedSetterName indexedWriteMethod indexes indexing indicate indicated indicates indicating indication indications indicator indices indicies indirect indirectly indistinguishable individual individually induced ine inefficiency inefficient inet inetAddr inet_ntop inet_pton inet_pton4 inetaddr inexact inf infAddress infLock inferior infinite infinitely infinity influence info infoText infoflags inform information informationi informative informed infos infrastrcure infrastructure ing inherent inherently inherit inheritable inheritableThreadLocals inheritance inherited inheritedAccessControlContext inheritedContext inheriting inherits inind init initBean initCapacity initCause initCl initCursorDir initDispatchThread initIDs initNonProxy initPolicy initProperties initProto initProxy initRNG initSign initState initValue initVerify init_with_ip initial initialCapacity initialCheckSecTer initialSize initialState initialValue initialiser initialization initializations initialize initializeData initializeDefaultCentury initializeDesktopProperties initializeFocusTraversalKeys initializeFont initializeJavaAssertionMaps initializePath initializeStatic initializeSystemClass initializeSystemScope initialized initializer initializers initializes initializing initially initiate initiated initiates initiating initiation initted ink inline inlined inlines innards inner innerURL innocuous inplemented input inputContext inputContextLock inputLength inputListenerK inputMethodL inputMethodListener inputMethodListenerK inputMethodTextChanged inputMethodsEnabled input_method_segment inputs inquire ins insecure insenitive insensitive insert insertElementAt insertProvider insertProviderAt insertRow insertSeparator insertTargetMapping insertText inserted inserting insertion insertionIndex insertionPoint insertions inserts insertsAreDetected inset insets inside insideBorder insideness insignificant insist insisting insofar inspection install installFields installation installed installing instance instanceCountsByClassName instanceFollowRedirects instanceMap instanceName instanceNumber instanceOf instanceof instances instaniate instant instantiability instantiate instantiated instantiates instantiating instantiation instead insterface instituted institution instructed instruction instructions instructs insufficient insure int int0 int1 int2 int3 intArrayCmp intArrayCmpToLen intBitsToFloat intDecimalDigits intIndex intKey intLen intLength intLevel intList intNum intRadix intString intToRawIntBits intVal intVals intValue intact intances integer integerDigits integers integral integrated integrates integrity intel intend intended intends intent intentionally intents inter interQuoteCount interact interaction interactions interactive interafce interdependent interest interestMask interested interesting interests interface interfaces interfere interferes interior interleaved interline intermediate intermixed intern internal internalAt internalComplement internalDifference internalFindMethod internalGet internalGetEra internalIntersection internalPersistenceDelegates internalSet internalSetIndex internalUnion internally internals international internationalization internationalized interned internet interoperability interoperatbility interoperation interp interpolation interposed interpret interpretation interpretations interpreted interpreter interpreting interprets interprocess interrupt interrupt0 interruptBlocking interrupted interruptedException interruptible interrupting interruption interrupts intersect intersected intersection intersects interval intervals intervene intervening inteter intially intlCurrencySymbol into intricacies introduce introduced introduces introducing introduction introspection introspector ints intuitive intuitively intval inv invalid invalidate invalidateLayout invalidateSMCache invalidateTree invalidated invalidates invariant invariants invention inverse inverseIndex inverseMod32 inverses invert invertResult inverted invertible investigates invisible invisibly invite invocation invocations invoice invoke invokeAndWait invokeLater invokeReadObject invokeReadObjectNoData invokeReadResolve invokeStatement invokeWriteObject invokeWriteReplace invoked invoker invokerScreenLocation invokerSize invokes invoking involve involved involves involving io ioe ioffset iota ip ipaddress ipadx ipady iport ipv6 ipv6byteCount irast irowrel irregular irregularly irrelevant irrespective irrevocably is isAMappedBuffer isAbsolute isAccelerated isAcceptable isAccessible isAccessibleChildSelected isActionKey isActive isAdjusting isAfterLast isAlive isAncestor isAncestorOf isAntiAliased isAnyLocalAddress isArg isArgument isArray isAssignableFrom isAutoIncrement isAutoWaitForIdle isBackgroundSet isBeforeFirst isBlocking isBold isBound isBoundary isCaching isCaseSensitive isCatalogAtStart isCertificateEntry isClickOrphaned isClosed isClosedOrPending isCompatibleValue isCompatibleWith isConnectable isConnected isConstrained isConstraintSatisfied isConsumed isControlDown isCriterionSatisfied isCurrency isCurrencyFormat isCursorSet isCyclic isDaemon isDecimalSeparatorAlwaysShown isDefined isDefinitelyWritable isDesignTime isDestroyed isDigit isDirect isDirectory isDispatchThread isDispatching isDisplayChangeSupported isDisplayable isDone isDoubleBuffered isDynamicLayoutActive isDynamicLayoutSet isEditable isEmpty isEnabled isEnabledImpl isEndState isEqual isErrorAny isErrorID isEven isEventHandler isExceptional isExpert isExponent isExternalizable isFile isFilterableDCM isFilterableICM isFirst isFirstCallToNext isFocusCycleRoot isFocusOwner isFocusTraversable isFocusTraversableOverridden isFocusTraversalPolicySet isFocusable isFocusableWindow isFocused isFontSet isForegroundSet isForeignDrag isFrameStateSupported isFred isFrenchSec isFullScreenRequired isFullScreenSupported isGraphicsConfigSupported isGregorian isGroupingUsed isGuiAvailable isHeadless isHeadlessInstance isHelpMenu isHidden isHorizontal isIPv4CompatibleAddress isIPv4MappedAddress isIPv6Supported isISOControl isIdentifierIgnorable isIdentity isIgnorable isInDefaultEventSet isInc isIndexSelected isInfinite isInputOpen isInputShutdown isInstance isInstanceOf isInstantiable isInteger isInterface isInterrupted isItalic isJavaIdentifierPart isJavaIdentifierStart isJavaLetter isJavaLetterOrDigit isKeyEntry isLTR isLaoBaseConsonant isLaoPreVowel isLast isLeap isLeapYear isLeftToRight isLenient isLetter isLetterOrDigit isLightweight isLinkLocalAddress isLoaded isLoaded0 isLongMIN_VALUE isLoopbackAddress isLoopingState isLowerCase isMCGlobal isMCLinkLocal isMCNodeLocal isMCOrgLocal isMCSiteLocal isMarkState isMaskOK isMirrored isMixed isModal isMouseButtonPressed isMouseInNativeContainer isMouseOverMe isMultiBufferAvailable isMulticastAddress isMultipleMode isNaN isNativeMethod isNegative isNormal isNullable isOdd isOn isOnKeyRelease isOne isOpaque isOpen isOutputOpen isOutputShutdown isOverIgnore isPacked isPageFlipping isPaintPending isPaintable isParseIntegerOnly isPeerEvent isPeerOK isPlain isPopupTrigger isPositive isPreferred isPreferredSizeSet isPrim isPrimitive isPrivileged isProbablePrime isProxy isProxyClass isPublic isRTL isReadOnly isReadable isRecursivelyVisible isRegistered isRelPath isRelative isResizable isSEAsianSwapping isSealed isSearchable isSelected isSerializable isServer isSet isShiftDown isShowing isShutdown isSigned isSiteLocalAddress isSource isSpace isSpaceChar isSpecialChar isStandardAttr isStatic isSubclass isSuper isSupported isTearOff isTemporary isThaiBaseConsonant isThaiPreVowel isTimeSet isTitleCase isTransformed isTransient isTrueVolatile isUndecorated isUnicast isUnicodeIdentifierPart isUnicodeIdentifierStart isUnresolved isUnshared isUpperCase isValid isValidProtocol isVertical isVisible isWheelScrollingEnabled isWhitespace isWritable isZero isbn ish isi isisl isn iso iso4217currency iso639 isoCountries isoDoy isoLanguages isoYear isolate isolated isolating isolation isone issue issued issues istream isused it italic italicized italy ite item itemCopies itemL itemListener itemListenerK itemStateChanged itemized items itemsRead iter iterCache iterate iterated iterates iterating iteration iterations iterative iterator iteratorBinarySearch iterators ith itita itl itr its itself itype itypesPhrase iuiku iv ivalue iw iwheb ix iy j j2se ja jaString jacobiSymbol jajpn jamoToHangul jamos jan jan31 january january1 janx20 jar jarConnection jarFileURL jarFileURLConnection java java2d javaHome javaIncrement java_awt_BorderLayout_PersistenceDelegate java_awt_CardLayout_PersistenceDelegate java_awt_Choice_PersistenceDelegate java_awt_Component_PersistenceDelegate java_awt_Container_PersistenceDelegate java_awt_GridBagLayout_PersistenceDelegate java_awt_MenuShortcut_PersistenceDelegate java_awt_Menu_PersistenceDelegate java_awt_SystemColor_PersistenceDelegate java_g java_lang_Class_PersistenceDelegate java_lang_Compiler_start java_lang_String_PersistenceDelegate java_lang_reflect_Field_PersistenceDelegate java_lang_reflect_Method_PersistenceDelegate java_util_AbstractList_PersistenceDelegate java_util_AbstractMap_PersistenceDelegate java_util_Hashtable_PersistenceDelegate java_util_List_PersistenceDelegate java_util_Map_PersistenceDelegate javabeans javac javadoc javax javax_swing_DefaultComboBoxModel_PersistenceDelegate javax_swing_DefaultListModel_PersistenceDelegate javax_swing_JComponent_PersistenceDelegate javax_swing_JFrame_PersistenceDelegate javax_swing_JMenu_PersistenceDelegate javax_swing_JTabbedPane_PersistenceDelegate javax_swing_ToolTipManager_PersistenceDelegate jdbc jdbcCompliant jdk jfc jhome ji jis jit jiyid jks jls jniVersion job jobAttributes jobs jobtitle join joinGroup joined joining joins jong jongseong jpeg jpg jsafe julian julianDate julianDay julianDayToDayOfWeek julianDayToMillis julianEpochDay july jump jumps june jung jungseong just justified jwjaw jwrd k k1 k2 kAsciiValues kCanonicalIndex kCanonicalValues kCharacterAsciiValues kCharacterBackwardData kCharacterBackwardTable kCharacterForwardData kCharacterForwardTable kCharacterMap kClosePunctuation kCombiningSpacingMark kConnectorPunctuation kControlCharacter kCurrencySymbol kDashPunctuation kDecimalNumber kDigits kEnclosingMark kExceptionChar kExceptionFlags kFormatCharacter kLetterNumber kLineAsciiValues kLineBackward kLineBackwardData kLineForward kLineForwardData kLineMap kLineSeparator kLong kLowercaseLetter kMathSymbol kModifierLetter kModifierSymbol kNonCharacter kNonSpacingMark kOffsetIndex kOffsetValues kOpenPunctuation kOtherLetter kOtherNumber kOtherPunctuation kOtherSymbol kParagraphSeparator kPrivateUseCharacter kRawMapping kSTerminator kSentenceAsciiValues kSentenceBackward kSentenceBackwardData kSentenceForward kSentenceForwardData kSentenceMap kSpaceSeparator kSurrogate kTitlecaseLetter kUppercaseLetter kWordAsciiValues kWordBackward kWordBackwardData kWordForward kWordForwardData kWordMap kakat kan kanji kat kata katakana ke keep keepBlocking keepalive keeping keeps keine kept kernel key keyBits keyChar keyCode keyCodeName keyDown keyEquals keyEventDispatchers keyEventPostProcessors keyFacSpi keyFactory keyHash keyL keyListener keyListenerK keyOrNull keyPairGen keyPress keyPressed keyRelease keyReleased keySet keySpec keyStart keyStoreSpi keyTyped keyUp keyUsageInfo keyValueIndex keyValueSeparators keyboard keycode keycodes keydown keyed keypair keys keysize keystore keystores keystroke keystrokes keyword keywords kick kid kill killed killing kind kinds kiwi kkkaz klkal km kmkhm knkan know knowing knowledge known knows ko kokor kpairGenSpi ks ksc kskas kstype kukur kykir l lValue lWeekdays la label labeled labelled labels labor lack laddr laid lalat landscape lang langCode language language1 language2 languageLength languageName languages large largePrime largely larger largest last lastBase lastBaseIndex lastC lastCategory lastClass lastDescendant lastDoy lastElement lastEntry lastExp lastExpansion lastIndex lastIndexOf lastIndexOfSubList lastItem lastKey lastLength lastLine lastModified lastMon lastOffset lastOpen lastPageFirst lastPos lastProductLowWord lastRelDow lastResult lastRet lastReturned lastReturnedIndex lastState lastSum lastSun lastType lastValue lastWoy lasting lastly lastx lasty late later latest latestLoader latestUserDefinedLoader latter launcher lay layed layer layered laying layout layoutContainer layoutGlyphVector layoutInfo layoutMgr layouts lays lazily lazilyLoadDesktopProperty lazy lb lbits lceil lcid lcidAsString ldlen ldm ldpath le le0 lead leadDays leadSelectionIndex leading leadingZerosAfterDecimal leads leaf leak leap learn least leave leaveGroup leaves leaving ledger leeway left leftOf leftShift leftmost leftover leftoverChar leftovers leftx legacy legal legally legit legitimate legitimately leland len len1 len2 length lengthened lengthening lengths lenient less lessening lesser let lets letter letters letting level levelLimit levelStart levels lexical lexicographic lexicographically lf lfloor lg lhs li lib libX11 libawt libfile libfilename libname libraries library libs license licensing lie lies life lifetime ligature ligatures light lightGray lightParents lightweight lightweightMarker lightweightPaint lightweightPrint lightweightRequests lightweights like likelihood likely likes likewise lim limit limitation limitations limited limiting limits lin line lineBuffer lineColor lineIncrement lineLength lineLimit lineNum lineNumber lineSeparator lineStart lineTo linear linefeed lineno lines linewidth linger link linkage linked linking links lira list list1 list2 listFiles listItems listIterator listRoots listSerializedDataVersion listed listen listenToAllAWTEvents listenToAllAWTEventsPermission listene listened listener listener2SelectiveListener listenerCalls listenerClassName listenerInterface listenerMethodDescriptors listenerMethodName listenerMethodNames listenerMethods listenerName listenerOrNull listenerType listenerless listeners listening listeningBoundsChildren listeningChildren listens listing listings lists lit literal literally literals liternal litle little littleIndex liu live lived lj ll lm ln lnlin lo load load0 loadAssistiveTechnologies loadBundle loadClass loadClassData loadClassInternal loadConvert loadFactor loadFocusTraversalKeys loadImage loadImpl loadInitialDrivers loadLibraries loadLibrary loadLibrary0 loadLookup loadManifest loadOneMoreProvider loadProvider loadProviderProperties loadSystemColors loadSystemCustomCursorProperties loadTable loadZoneStrings loaded loadedLibraryNames loadedProps loader loaderRef loaders loadfactor loading loads loc locBytes locIn locOut local localAddr localDesc localDescs localEnv localFields localHost localL localListenPermission localMillis localName localParent localPatternChars localPort localSkipBuffer localTableEntry local_addrs locale localeSuffix locales localhost locality localizable localization localize localized localizers locally localport locals localy locate located locates locating location locationCorrect locations locator lock locked locking locks log log10 log2 logStream logSync logWriter logarithm logarithms logging logic logical logically login loginTimeout logoff logos logs lolao long long0 long1 long2 long3 long4 long5 long5pow long6 long7 longBitsToDouble longKey longRadix longRep longResult longToByteArray longValue longer longest longs look lookahead lookaheadResult lookaheadStates looked looking looks lookup lookupAllHostAddr lookupBackwardState lookupCategory lookupCharset lookupClass lookupConstraints lookupContentHandlerClassFor lookupException lookupObject lookupState lookupTable lookups lookuptable loooping loop loopback loopbackAddress looped looping loopingState loopingStateRowNum loopingStates loops loopup loosely loppedLine lose loses losing losingFocusWindow loss lost lostFocus lot lots lout low lowDep lowDigitDifference lowEndpoint lowGood lowLevelOp lowMask lowOrderZeros lowalpha lowbytes lower lowerCase lowerCaseMode lowercase lowercased lowest lowestOddLevel lowestSetBit lowmem lport lshift lshiftMe lst lt ltlit ltr lucasLehmerSequence luck luehe lunar luser lvalue lvlav lw lwFocusRequest lwIter lying m m1 m2 mLN mLe mNu mPattern machine machinery machines macron maddr made madeChange mag magBitCount magBitLength magInt magLen magPresent magSerializedForm magTrailingZeroCount magenta magic magically magnitude mail mailto main mainLoop mainName mainTable mainly maintain maintainability maintained maintainers maintaining maintains maintenance major majority make makeBuilder makeCacheKey makeChar makeFormat makeInt makeLong makePositive makeQualifiedMethodName makeRaster makeReorderedBuffer makeRulesCompatible makeShort makeStaticCalendars makeVisible makebutton makes making malevolent malfeasant malformed malfunction malicious maliciously malignant man manage managed management manager managers manages managing mandate mandated mandates mangles mango manifest manifests manipulate manipulated manipulates manipulating manipulation manner mans mant mantissa manual manually manufactured manufacturing manuscript many map mapChar mapFamilyName mapInputMethodHighlight mapLen mapLibraryName mapNewModifiers mapOldModifiers mapSize mapValue mapped mappedChar mappedValue mapping mappingTable mappings maps mapsDiffer mar3 march march1 marged mark markAsDeleted markClearGlobalFocusOwner markDependency markException markLineNumber markPushBack markSupported markValue marked markedChar markedLineNumber markedPos markedSkipLF marker markers marking marklimit markpos marks mars marshal marshaling marshalled marshalledobject marshalling marshals mash mask masking masks massaging masse master match matchArguments matchCerts matchFields matchKey matchLocation matchScale matchString matchZoneString matched matches matchesField matching matchlen material materialize materializing materials math mathematical mathematically mathetmatical matic matrix matter matters max maxBytesPerChar maxCandidate maxCharsPerByte maxDecimalCount maxDecimalDigits maxDecimalExponent maxDelimChar maxDigits maxFractionDigits maxIndex maxIntCount maxIntegerDigits maxLength maxMemory maxMinusMin maxNumDigitGroups maxOffset maxPage maxPosition maxPriority maxSecOrder maxSize maxSkipBufferSize maxSmallBinExp maxSmallTen maxTerOrder maxWidth maxima maximal maximization maximized maximizedBounds maximized_horiz maximized_vert maximum maximumArgumentNumber maximumCanonical maximumDecomposition maximumDigits maximumFractionDigits maximumIntegerDigits maximumLayoutSize maximumSize maxposition maxpri maxttl maxw maxwidth may maybe maybeAddLeadingDot mb mbManagement mbexample mc mcastSocket mcastaddr md mday mds mdt me mean meaning meaningful meanings means meant meantime measure measured measurement measurements measuring mechanically mechanism mechanisms med med3 media median medium meet meets member members membership memebership memory mentioned menu menuBar menuBarSerializedDataVersion menuItem menuItemSerializedDataVersion menuSerializedDataVersion menuText menubar menuitem menus merely merge mergeList mergePermissions mergeSort mergeStates merged mergedPerms merges mergesort merging meridian mesquite mess message messages messaging messiness messing met meta metaData metaDown metadata metafile metalab meth methSigs method methodCache methodInfo methodList methodName methods metric metrics mf mgmlg mgr mi mice micro microprocessor mid midBits midLetNum midLetter midNum midVal middle middlemost middot midnight midst might mil mile mill mille millis millisDelta millisInDay millisPerDay millisPerHour millisPerMinute millisSavedDuringDST millisToJulianDay millisec millisecond milliseconds milne mimetable mimetype mimic mimics mimri min min2 minBufferCap minCapacity minDecimalExponent minDigits minExponentDigits minFractionDigits minHeight minIntegerDigits minPage minPrime minSize minSmallBinExp minUnitsInUse minWidth min_int mind minima minimal minimalDaysInFirstWeek minimize minimized minimizes minimizing minimum minimumCapacity minimumCombining minimumDigits minimumFractionDigits minimumIntegerDigits minimumLayoutSize minimumSize minimun mininimum minor minsizes minumum minus minusSign minute minuteString minutes mirrored misbehave misc miscellaneous misconfiguration misleadingly mismatch mismatches misplaced miss missing missingGlyph mistake mistakenly miter miterlimit mitigate mix mixed mixes mixing mixture mkdir mkdirs mkmkd mlen mlmal mls mm mmmm mnmon mo mod mod2 modCount modInverse modInverseBP2 modInverseMP2 modLen modPow modPow2 modVal modal modality mode model modeled modeless models modern modes modifcations modifiable modification modifications modified modifier modifierKeywords modifierList modifiers modifies modify modifyThread modifyThreadGroup modifying mods modular module modules modulo modulus moment momol mon monadic monarch monday monetary monetarySeparator money monitor monitored monitors monkey mono monochrome monospaced monotonic monotonicity montReduce month monthLen monthLength monthNames monthStamp months more morning mosquito most mostRecent mostRecentFocusOwners mostly motif motion motivate mount mouse mouseClicked mouseDown mouseDrag mouseDragged mouseEnter mouseEntered mouseEvent mouseEventTarget mouseExit mouseExited mouseL mouseListener mouseListenerK mouseMotionL mouseMotionListener mouseMotionListenerK mouseMove mouseMoved mouseOver mousePress mousePressed mouseRelease mouseReleased mouseUp mouseWheel mouseWheelL mouseWheelListener mouseWheelListenerK mouseWheelMoved move moveComponents movePointLeft movePointRight moveTo moveToCurrentRow moveToInsertRow moved movement moves moveto moving mrmar ms ms1 ms2 msd msg msmsa mso mst mt mtmlt mto much mul mulAdd mulitplying mulsub mult multPow52 multaddMe multi multibyte multicast multicaster multicasting multicasts multihomed multilingual multiple multipleDocumentHandling multipleMode multiples multiplexed multiplexing multiplexor multiplication multiplications multiplicative multiplied multiplier multiplies multiply multiplyToLen multiplying multiprecision multipy multiscreen multisets multistep multithreaded multmin multpos mumble mungeExpressionList munged must mustSetRoundDir mutable mutableModInverse mutated mutatesTo mutation mutations mutator mutex mutually mx my myAppContext myBundle myButton myButtons myCollator myCollection myComponent myDate myDigitList myFRC myIntegers myInterfaces myJapaneseCollator myKeys myLocale myNorwegian myNumber myResources mySchemaName mySimple myString myapp mymya myobj myobject myself n n1 n100 n2 n4 n400 n5bits nArgs nBits nBits2 nBl nByte nBytes nChars nChunk nCopies nDigits nEnd nFractBits nInts nLeadZero nMoved nPoint nPoints nSignificantBits nTinyBits nTrailZero nWords na naddr naira naive naively nak name name1 name2 nameCounter nameExplicitlySet nameService named namely names nameservice naming nanau nano nanos nanos_s nanosecond nanoseconds narrow narrowing nary nasty national native native2ascii nativeBidiChars nativeByteOrder nativeContainer nativeCursor nativeGetDirectionCode nativeHost nativeLibraries nativeLibraryContext nativeSQL nativeSetSource nativeX nativeY natives natural naturally nature natures navigating navigation navy nb nbits nbsp nbuf nbytes nbytesButOne nc ncb ncheck nchildren nci ncols ncomponents ncsa ncws ncwslen nd nd0 ndeps ndigit ndigits ndir ndoubles ne ne1 near nearest nearly neccessarily neccessary necessarily necessary necessity need needCacheUpdate needDummies needQuote needRepaint needToChange needed needing needn needs needsGui needsNormalization nefarious neg negConst negPrefixPattern negSign negSuffixPattern neg_pattern negate negated negates negating negation negative negativeExponent negativePrefix negativePrefixFieldPositions negativeSuffix negativeSuffixFieldPositions negativeZeroDoubleBits negativeZeroFloatBits negatively negatives negotiate neighbor neighbors neither nenep nest nested nesting net netIF netIf netif netifs netlib nets network networking networks neutral never nevertheless new newActiveWindow newAddr newAddrs newAlign newAmount newAmpms newApplet newAppletBean newArgs newArgumentNumbers newArray newArraySize newAttributes newAttrs newAudioClip newBits newC newCalendar newCandidate newCandidates newCapacity newChannel newChar newChars newChildren newChoiceFormats newChoiceLimits newClass newCollator newConstructor newConstructorForSerialization newCount newDecoder newDeps newDigits newElementCount newEncoder newEntry newEntryIterator newEras newEvent newEventQueue newEventsOnly newExtension newField newFlags newFocusCycleRoot newFocusOwner newFocusOwnerEvent newFocusedWindow newFont newFormat newFormatData newFormatSymbols newFormats newGetExp newHour newIndex newInputStream newInstance newInstance0 newInstanceCallerCache newItem newKey newKeyIterator newKeys newL newLen newLength newLimit newLine newList newLocalPatternChars newLocale newLoopingStates newMWE newMag newMagLen newManager newMap newMask newMaximum newMethod newMinimum newMonths newNext newNumberFormat newO newObjs newOffset newOffsets newOutputStream newPaintEvent newPattern newPermissionCollection newPosition newPriority newProtocol newProxyInstance newQueue newReader newRect newReps newRow newRowNum newRunAttributeValues newRunAttributes newRunStarts newSAXParser newSet newShortMonths newShortWeekdays newSign newSize newSource newStamp newStart newStartingSpot newState newStates newStatus newStm newStrength newSubstitution newSymbols newTable newTarget newTasksMayBeScheduled newText newTime newUnitsInUse newV newVal newValue newValueIterator newValues newWeekdays newWriter newX newXcps newY newZoneStrings newbuf newcomponents newcount newdst newer newfont newgroups newid newing newline newlines newly newmode newpos news newsel newthreads newttl newx newy next nextBoolean nextBoundaryAt nextByte nextByteIndex nextBytes nextCand nextChar nextCharIndex nextClass nextClearBit nextColumn nextContractChar nextDouble nextElement nextEntry nextExecutionTime nextFloat nextFocus nextFocusHelper nextFocusableComponent nextGaussian nextGetIndex nextIndex nextInt nextLine nextLong nextNextGaussian nextPosition nextPrime nextPutIndex nextQueue nextRow nextSerialNum nextSetBit nextSize nextStamp nextStream nextThreadNum nextToken nextVal nextWordStartAfter nextseed nextx nexty nexus nf nfe nfields nfloats ng ngroups ngroupsSnapshot nh nh2 nhost ni nibble nice nilly nilnodes nine ninth nio nis nitems nl nlen nlevel nlnld nm nmembers nmenus nn nntp no noCaches noDelay noEvents nobody nocerts node nodes noise noisily noisy nojit nomenclature non nonBlank nonIdentityTx nonPublicLoader nonSerializable nonZeroDigitSeen none nonempty nonetheless nonexistent noninvertible nonmenu nonnegative nonor nonpositive nonprimality nonreachable nonsense nonstandard nonterminating nonuniformity nonwithstanding nonzero noon noop nor normal normalization normalize normalizeMe normalized normalizedDayOfWeek normalizedGregorianCutover normalizer normalizes normalizing normally normalx norminal north northern not notANumber notBoundary notLegal notPrivileged notation notches note noted notes noteworthy nothing notice noticeably notification notifications notified notifies notify notifyAWTEventListeners notifyAll notifyAncestors notifyID notifyObservers notifyThreadBusy notifyThreadFree notifying noting notion november now nowhere np npd npoints npopups nport nps nr nread nrows nruns ns nsae nsd nsfe nsm nsme nspe nsz nt nth nthreads null nullInputStream nullPeer nullPersistenceDelegate nullPlusNonNullIsNull nullPrintStream nullability nullable nullary nulled nullness nulls nullsAreSortedAtEnd nullsAreSortedAtStart nullsAreSortedHigh nullsAreSortedLow num numBits numBuckets numBuffers numBytes numBytesToTransfer numCategories numChars numColGroups numCols numDigits numFields numGlyphs numGot numGroups numIfaces numInts numLeadingZeros numListening numMoved numNegZeros numNew numObjFields numOfStaticProviders numPrimFields numPunct numRequested numRows numWords numZeros number numberElements numberFormat numberOfColumns numberPatterns numbered numbering numbers numbytes numchars numeral numerator numerators numeric numericToTextFormat numerical numerically numerous numerrors nval nzeros o o1 o2 oa ob obejct obey obeyCount obeying obeys obj objBytes objHandle objHandles objIn objOut objVals objcopy object objectEquals objectLocale objectStart objectURL objectUrl objects objectst objs oblique obs obscure obscured obscures observable observations observe observed observer observers observes obsolete obsoleted obtain obtainable obtained obtaining obtains obvious obviously occasionally occupied occupies occupy occupying occur occurances occured occurence occurences occuring occurred occurrence occurrences occurring occurs ococi octal octet octets october odd oddMod oddModPow oddPart odds oe of ofCalendarField off offending offer offered offers office official officially offscreen offset offset1 offset2 offsetMillis offsetNumber offsets offsetting often ogonek oins ois ok okKey okToUseGui okay ol old oldActiveWindow oldArgs oldC oldCapacity oldChar oldChildren oldChoice oldClass oldColor oldData oldDesc oldExp oldFocusCycleRoot oldFocusOwner oldFocusTraversalKeysEnabled oldFocusable oldFocusableWindowState oldFocusedWindow oldFont oldGet oldGetExp oldHandle oldHeight oldHour oldI oldIndex oldInstance oldJ oldKey oldKeys oldL oldMap oldMask oldMaxOffset oldMinDigits oldMode oldO oldObj oldPermanentFocusOwner oldPolicy oldPut oldResizable oldRow oldRowNum oldRules oldRunAttributeValues oldRunAttributes oldSize oldStart oldStartValue oldState oldStm oldTable oldTableSize oldTarget oldTitle oldUnitsInUse oldV oldVal oldValue oldValues oldWidth oldX oldY olde older oldest oldfont oldjavac oldl oldp omit omitLF omits omitted omorm on onKeyRelease onStroke once one oneDown oneFieldInfo oneMethodInfo ones onesLost ongoing only onset onto onward onwards ooffset oome oonnection oops oos op opaque opaquePart opcode opd open openAppend openBracket openConnection openDatagramChannel openPipe openSelector openServerSocketChannel openSocketChannel openStream opened opening operand operands operate operated operating operation operations operator operators opgretion opinion opmasks oppStroke opportunity opposed opposite oppositeComp oppositeWindow ops opt optID optimal optimally optimisation optimization optimizations optimize optimized optimizing option optional optionally options or orEventMasks orange order ordered ordering orderings orderly orders ordinal ordinary ordinaryChar ordinaryChars ordinate ore ored org organization organizations organize organized orginal orient orientation orientationRequested orientations oriented orig origin original originally originate originated originating origins origlength orori orphaned os ostream osw other otherBundle otherCurrencies otherCurrenciesDFD otherEntry otherIndexedReadMethod otherIndexedWriteMethod otherLen otherReadMethod otherWriteMethod otherkey otherref others othersDeletesAreVisible othersInsertsAreVisible othersUpdatesAreVisible otherwise otype otypes otypesPhrase oultine ouput our ourCause ourDriver ourThread ourself ourselves out outBuffer outCast outData outMark outOfBounds outOff outRas outSequence outSpan outStart outbuf outcode outcome outdated outer outerHandle outermost outgoing outline outlined outlines output outputFile outputIndex outputStatement outputValue outputs outputter outrageous outright outside outsideBorder outstanding outward oval over overall overallocated overdot overflow overflowed overflows overhead overidden overkill overlap overlapped overlaps overlay overline overload overloaded overloading overly overridable overridden override overrideAll overridePropertiesFile overriden overrides overriding overscore overshoot overstruck overvalue overwrite overwritten own ownDeletesAreVisible ownInsertsAreVisible ownIterator ownUpdatesAreVisible owned ownedInit ownedL ownedWindowK ownedWindowList ownedWindows owner ownerMode owners ownership owning owns p p1 p2 p5 pData pDispose pIndex pItems pLimit pLong pMN pName pNativeFont pSOrder pTOrder pa pac pack packRules packTimes package package2certs packageAccess packageAccessValid packageAssertionStatus packageDefinition packageDefinitionValid packageEnabled packageEquals packageName packagePrefix packagePrefixIter packagePrefixList packages packed packet packetAddress packets packing pad padded padding pads pae page pageAttributes pageIncrement pageRanges pageSize paged pages painValue paint paintAll paintComponents paintHeavyweightComponents paintValue paintable painted painting paints pair pairing pairs palBuf palatalized palette pals pane paneSize panel panels panes panic papan paper paradigm paragraph paragraphBreak paragraphLength parallel parallelism param paramGenSpi paramIndex paramSpec paramSpi paramString paramTypes parameter parameterDescriptors parameterIndex parameterModeIn parameterModeInOut parameterModeOut parameterModeUnknown parameterName parameterNoNulls parameterNullable parameterNullableUnknown parameterTypes parameterize parameterized parameters parametric params paramter paramters pararm parenStack parenheses parent parentKeys parentMap parentOf parentValue parentheses parenthesis parents parsable parse parseAmbiguousDatesAsAfter parseAuthority parseByte parseCustomTimeZone parseDouble parseFloat parseHierarchical parseHostname parseIPv4Address parseIPv6Reference parseInfo parseInt parseIntegerOnly parseLong parseNumber parseNumbers parseObject parsePort parsePosition parseRule parseServer parseServerAuthority parseShort parseSignature parseSpecs parseString parseURL parsed parsedDate parsedStr parseflags parser parsers parses parsing part partial partialWord partially participate participating particular particularly parties partition partly parts party pas pass passHandle passed passes passesLucasLehmer passesMillerRabin passing passwd password passwords past patch patents path pathClosed pathSeparator pathSeparatorChar pathname pathnames pathological paths pattern patternCharIndex patternChars patternOffset patternSeparator patterns pattform pause paused pay pays pc pcerts pchar pcl pd pd2 pdMapping pdVector pdcache pdp pds pdt pear peek peekByte peekData peekEvent peekPacket peekPort peekable peekb peekc peeked peer peerFont peers pen penalty pending pendingChars people per perMill percent percentage percentages perfect perfection perfectly perform performance performed performing performs perhaps period periodStartDayOfWeek periods perm perm1 perm2 permClass permanent permanentFocusOwner permanently permill permille permissible permission permissionimpl permissions permissive permit permits permitted perms permset permssible permutations permute permutes perpendicular perpendicularly persist persistence persistenceDelegate persistent person personal perspective pertaining pertains pertinent perturb peseta pg phantom phase phaseOneLength phaseOneStart phaseTwo phases pheight phrase physical physically pi pick picked picking picture pid piece pieces pin pinDayOfMonth pinfo pink pinning pins pipe piped pipelines pipes pixel pixelization pixels pixels_diff pixmap pixmaps pkg pkg1 pkg2 pkgName pkgname pkgs plVector place placed placeholder placeholders placement places placing plaf plain plain01 plainTextFlavor plan plane planes planet planning plans plant platform platforms play playback playing please plpol pluggable plugged plurals plus pm pmenu pname png po poJ poN point pointPos pointSize pointed pointer pointers pointing points pointsize pointwise polar policies policy policyDomain policyPerms policy_class political poll pollfd poly polygon polygons polymorphic polymorphism pool poor pop popped popping popular populate populateListenerArray populated populating popup popups porpoise port port1 port2 portability portable porting portion portions portnumber portrait portrange ports pos posConst posPrefixPattern posSuffixPattern pos_pattern poses position positionInCache positional positioned positioning positions positive positivePrefix positivePrefixFieldPositions positiveSuffix positiveSuffixFieldPositions positon posn possessed possesses possessing possibilities possibility possible possibleBreakPositions possiblity possibly post postAccept postEvent postEventPrivate postJwrd postNum postProcessKeyEvent postWeeks postWindowEvent postal postamble posted posting postion postprocessing posts postsOldMouseEvents postscript posture potential potentialNaN potentially pound pounds pow pow10 pow2 power powers powersOf2 pp pr prFirst prJ prLast prN prStr practical practically practice practise pre preDispatchKeyEvent preJwrd preMidNum preNum preProcessKeyEvent preSecIgnore preWeeks preamble preambleWritten precautions precede preceded precedence precedent precedes preceding preceeded precipitated precise precisely precision precisions precompilation precompiled precompiling precomposed precompute precomputed preconditions predates predecessor predefined predicate predictable predicted preexisting prefSize prefer preferIPv6Address preferIPv6Addresses preferable preference preferences preferentially preferrable preferred preferredHeight preferredLayoutSize preferredSize preferredWidth prefers prefetching prefix prefixLength prefixed prefixes prefixing prematurely premultiplied premunge preparation prepare prepareCall prepareImage prepareStatement prepared prepares prepend prepended preprocessed prescan prescribed presence present presentation presented presenting presents preserve preserved preserves preserving press pressed pressedReleasedID presses pressing presumably presume presumed pretty prev prevCh prevChar prevContractChar prevDoy prevMonthLen prevMonthLength prevc prevent prevented preventing prevents previous previousDouble previousIndex previousQueue previousSafePosition previously pri priamry primClasses primDataSize primResult primVals primality primarily primary primaryCatalog primaryOrder primarySchema primaryTable prime primeToCertainty primer primes primitive primitiveLeftShift primitivePersistenceDelegate primitiveRightShift primitiveType primitiveTypeFor primitiveTypeName primitives primordial primtitive principal principals principle print printAll printAt printCertificates printClassName printComponents printEachBackward printEachForward printFirst printHeavyweightComponents printIdentity printKeys printLast printQuality printStackTrace printStackTraceAsCause printWordList printable printed printer printerResolution printers printing printingThreads println printout printouts prints prio prior priori priorities priority pristine priv privacy private privateKey privatekey privately privates privilege privileged privilegedConnect privilegedContext privileges privilige privs prng probability probable probablePrime probably probe probes probing problem problematic problems proccess procedure procedureColumnIn procedureColumnInOut procedureColumnOut procedureColumnResult procedureColumnReturn procedureColumnUnknown procedureNamePattern procedureNoNulls procedureNoResult procedureNullable procedureNullableUnknown procedureResultUnknown procedureReturnsResult procedures proceed proceeds process processActionEvent processAdjustmentEvent processChar processComponentEvent processContainerEvent processDropTargetEvent processEvent processFocusEvent processHierarchyBoundsEvent processHierarchyEvent processInputMethodEvent processItemEvent processKeyEvent processMouseEvent processMouseMotionEvent processMouseWheelEvent processQueue processSection processSubstitution processTextEvent processWindowEvent processWindowFocusEvent processWindowStateEvent processed processes processing processor processors prod produce produced producer produces producing product productiive production products program programatic programmable programmatic programmatically programmer programmers programming programs progress progression progressively prohibited prohibition prohibitions prohibitively prohibits projection proleptic prolong promised promote promoting prompt prompting promptly prone pronunciation prop propFile propName propPrefix propURL propValue propagate propagated propagates propagating propagation propagationId proper properly properties property propertyChange propertyChangeSource propertyChangeSupportSerializedDataVersion propertyDescriptors propertyEditor propertyEditorClass propertyName propertyNames propertyType propname proportion proportional proportionally proposed proprietary props propsFile protcol protect protected protecting protection protectionDomain protects protocol protocolPathProp protocolname protocols prototype prototypical prov provClass prove provide provided provider providerMasterClassNames providerName providerPropertiesCache providers provides providing provoked provs proxied proxies proxy proxyEnableEvents proxyPersistenceDelegate prune ps pseudo pseudocode pseudomedian pseudorandom pseudorandomly pskip pspus pst pstmt pt pt1 pt2 ptDstOrigin ptSize ptSrcOrigin ptpor pub public publicConstructors publicFields publicKey publicMethods publickey publicly published publisher puff puffin pull pulled pump pumpApprovedKeyEvents pumpEvents pumpOneEvent pumped pumping pumps punct punctuation punt pure purely purge purgeStampedEvents purged purple purported purpose purposefully purposes push pushBack pushback pushbuttons pushed pushedBack pushes put putAll putAllProviderProperties putBoolean putBundleInCache putByte putCachedRaster putChar putCharB putCharL putCharsets putDouble putDoubleB putDoubleL putFields putFloat putFloatB putFloatL putInt putIntB putIntL putLong putLongB putLongL putObject putProviderProperty putShort putShortB putShortL puts putting pwidth px py q q2 qWord qhat qm qrem quad quadTo quadratic qualified qualifier qualifierNames qualifiers qualify qualifying qualitatively qualities quality quantified quantities quantity quarto queried queries query queryOnly queryStart querying question questionable questions queue queueJob queuePrintJob queues quick quickCheckMemberAccess quickly quicksort quicksorts quietly quite quo quoRemIteration quot quotation quote quoteChar quoteCharacters quoted quotes quotient quoting quque r r1 r2 r2d rValue race radians radiation radic radius radix radixes raise raised raises raising random randomBits randomBytes randomBytesUsed randomNumberGenerator randomenss randomize randomly randomness range rangeCheck rangeError rangeLimit rangeStart ranger ranges ranging rapid rapidly rare rarely ras rast raster rate rather ratio rational rats raw rawOffset rawYear rawoffset rb rbName rbs rceil re reach reachable reached reaches reaching reacts read read0 read1 readAheadLimit readArray readAsciiStream readBigDecimal readBinaryStream readBlob readBlockHeader readBoolean readBooleans readByte readBytes readChar readCharacterStream readChars readClass readClassDesc readClassDescriptor readClob readDate readDesc readDictionaryFile readDisplayPixels readDisplayPixelsPermission readDouble readDoubles readExternal readExternalData readFatalException readFields readFileDescriptor readFloat readFloats readFully readHandle readInt readInts readJavaFormatString readLine readLocation readLong readLongUTF readLongs readMethod readNonProxy readNonProxyDesc readNull readObject readObject0 readObjectMethod readObjectNoData readObjectNoDataMethod readObjectOverride readOnly readOrdinaryObject readProxyDesc readRef readResolve readResolveMethod readSQL readSerialData readShort readShorts readSide readSocksReply readSql readStreamHeader readString readTime readTimestamp readTreeSet readTypeString readURL readUTF readUTFBody readUTFChar readUTFSpan readUnshared readUnsignedByte readUnsignedShort readability readable reader readers readiness reading readjust readjusted readlimit readlong readonly reads ready readyMask real realCopy realOppositeComponent realOppositeWindow realSize realValue real_end realized realizes reallocate reallocated reallocation really reallyBig realm reaper reaping reason reasonable reasonably reasons reassign reassigning rebalance rebalancings rebind rebooted rebound rebuilding recalculate recalculateUnitsInUse recall recap recast receipt receive received receivedLast receiver receives receiving recent recently recipient recipients reciprocal reciprocity reclaim reclaimed recognition recognizable recognize recognized recognizer recognizes recognizing recommend recommendation recommendations recommended recommends recompile recomputation recompute recomputed recomputes reconcile reconciled reconciliation reconciling reconfigured reconnected reconsituted reconstitute reconstituted reconstruct reconstructed reconstructing recopy record recordAccess recordIdentity recorded records recouped recourse recover recoverable recovered recovering recovers recreatable recreate recreated rect rectanglar rectangle rectangles rectangular rects recur recurring recurse recurses recursion recursionProtection recursive recursively recv recycle recycling red redLevel redSlider redc redefined redirect redirected redirects redispatchEvent redo redraw redrawn redrawrate reduce reduced reduces reducing reduction redundancy redundant redundantly ref ref1 ref2 refer refered reference referenceable referenced references referencing referent referred referring refers refetch refetched refill refilled refine refined reflFactory reflect reflected reflecting reflection reflectionFactory reflective reflectively reflector reflectors reflects reflexive refresh refreshRate refreshRow refreshed refs refuse refused refuses regChars regLock reg_name regain regains regard regarded regarding regardless regenerate regenerated regex regexp regexps region regionMatches regions register registerConstructor registerConstructorWithBadEqual registerDriver registerEditor registerNatives registerOutParameter registerSubclass registerValidation registered registering registers registration registrations registry regular regularly rehash rehashed rehashing reimplemented reimplementing reinitialize reinitialized reinserted reinstate reject rejected rejects rejoin rel relDow relDowJan1 relate related relates relating relation relational relations relationship relative relatively relativization relativize relativized relativizing relaxation relaxing release releaseExpressionCache releaseFD releaseSavepoint released releases releasing relevant relevantAttributes reliable reliably relies relinquish relinquishes reload reloadProviders reloaded reloads relocation rely relying rem remLong remValue remain remainder remaining remains remap remember remembered remembering remembers remind remote remotely removable removal removals remove removeAWTEventListener removeAccessibleSelection removeActionListener removeAdjustmentListener removeAll removeAllElements removeCertificate removeComponentListener removeConstraints removeContainerListener removeDots removeElement removeElementAt removeEntry removeEntryForKey removeFirst removeFocusListener removeFocusRequest removeFooListener removeFredListener removeFromCache removeFromFrameList removeHierarchyBoundsListener removeHierarchyListener removeIdentity removeIdentityCertificate removeImage removeInputMethodListener removeInternal removeItemListener removeKeyEventDispatcher removeKeyEventPostProcessor removeKeyListener removeLast removeLayoutComponent removeListenerMethod removeListenerMethodName removeMapping removeMethod removeMethodName removeMin removeMouseListener removeMouseMotionListener removeMouseWheelListener removeNoInvalidate removeNotify removeOwnedWindow removeProperty removePropertyChangeListener removeProvider removeProviderProperty removeRange removeReferences removeShutdownHook removeSourceEvents removeTextListener removeVetoableChangeListener removeWindowFocusListener removeWindowListener removeWindowStateListener removed removes removing rename renameTo renaming render renderable rendered renderer renderers rendering renderingimage renderings renders rendershape rendertext renormalized renumber reopened reorder reorderVisually reordered reordering reorganizes rep repCl repaint repaints repair repeat repeatable repeated repeatedly repeating repeats repectively repetitive replace replaceAll replaceItem replaceKeyboardFocusManager replaceKeyboardFocusManagerPermission replaceObject replaceRange replaceText replaceWith replaceable replaced replacement replaces replacing replacment replicate replicated replicating reply repopulation report reported reporting reports reposition repositioning repositions repository represent representable representaion representation representations representative representatives represented representing represention represents reprocess reproduce reproducibility reps reqires request requestFocus requestFocusHelper requestFocusInWindow requestPasswordAuthentication requestPermission requested requestedSize requester requesting requestingHost requestingPort requestingPrompt requestingProtocol requestingScheme requestingSite requestor requests require requireServerAuthority required requirement requirements requires requiresBidi requiring reraise reread rereads res resName resampling rescale rescaling reschedule rescheduleMin reschedules resemble resembling reserve reserved reset resetGC resetProviderIndex resetSyntax resets resetting reshape reshaped reshapes reshaping reside resident resides residing residue residues resilient resizable resize resized resizes resizing resolution resolutions resolutuion resolve resolveClass resolveClass0 resolveName resolveObject resolveParent resolvePath resolveProxyClass resolved resolves resolving resort resource resourceName resources resp respect respected respective respectively respects respond responds response responseCode responseMessage responses responsibility responsible responsiblity rest restart restarted resting restore restoreFocus restored restores restoring restrict restricted restriction restrictions restrictive result result2 resultArray resultLen resultMag resultOffset resultSetConcurrency resultSetHoldability resultSetType resultType resultant resulted resulting results resume resume0 resumed resumes resupplied resurrection ret retDelims retType retVal retain retainAll retained retarget retargetFocusEvent retargetMouseEvent retargeted retargeting rethrow rethrown retransmitted retrieval retrieve retrieveDirectives retrieved retrieves retrieving retrofitted retroflex retry return returnDelims returnList returnType returnVal returned returning returns retval reuqires reuse reused reusing rev revalidate revealing reveals reverse reverseColumnMap reverseOrder reversed reverses reversible reversions revert reverting review revised revisited rewind rewinding rewinds rewritten rf rfc rfc2068 rfc2278 rfc2279 rfc2373 rfc2396 rfc2732 rfc2781 rfloor rfoe rgb rgb1 rgb2 rgba rgbs rh rhs rid right rightIndex rightNow rightOf rightShift rightToLeft rightmost rights rigorously rigth ring ringing rint risking risks risky rl rlen rlm rmi rmiTOC rmiregistry rmroh rnd rnrun rogue role roll rollback rollbacks rolled rolling rolls roman room root rootAncestor rootAncestorRootAncestor rootEntry rootEntryDirectory rootEntryOffset rootGroup rooted roots roron rotate rotate1 rotate2 rotateLeft rotateRight rotated rotates rotating rotation roughly round roundDir rounded rounding roundingMode roundoff rounds roundup route routed router routine routines row rowDeleted rowEnd rowHeader rowHeights rowIndex rowIndexFlags rowIndexFlagsIndex rowIndexShifts rowInserted rowNum rowNumMap rowStart rowUpdated rowWeights rowa rowh rowincx rowincxerr rowincy rowincyerr rowrel rows rowsBeingUpdated rowsToFollow rowspan rowx rowxerr rowy rowyerr rs rsa rsmd rsrc rstart rtg ru rule ruleDay ruleDayOfMonth ruleDayOfWeek ruleMillis ruleMode ruleMonth ruleStart rules rulesName ruleset run runAllFinalizers runArraySize runAttributeValues runAttributes runAttrs runComponents runCount runDirection runFinalization runFinalization0 runFinalizersOnExit runHooks runIndex runIndex1 runIndex2 runLimit runMoreFinalizers runOneComponent runStart runStarts runValues runnable running runs runsToCopy runtime rupee rurus rv rw rwkin rx rx1 rx2 ry ry1 ry2 rz s s1 s2 s3 s4 s5 s6 s7 s8 sFr sFr123 sIndex sIter sOrder sRGB sStart sTemp sWeekdays sa sael safe safely safest safety said sake salutations same sameFile sample sampled samples sanity sasan sat satellite satisfactory satisfied satisfies satisfy saturation saturday save saveAT saveConvert saveEntry saveInternal saved savedCalendar savedTile savepoint savepoints saves saving savings saw sawDecimal sawDigit sawEarlyBreak sawExponent sawVarName saw_digit saw_xdigit sax saxParser say saying says sb sbVisStr sbuf sc scCutOverTimes scNewCurrencies scNewCurrenciesDFD scOldCurrencies scOldCurrenciesDFD scale scaled scales scaling scan scanByte scanEscape scanHexPost scanHexSeq scanIPv4Address scanToken scanline scanned scanning scans scattering scavenge scenario scenes sched schedule scheduleAtFixedRate scheduled scheduledExecutionTime schedules scheduling schema schemaPattern scheme schemeSpecificPart schemes school scientific scl sclSet scope scopeName scoped scopes scoping scratch screen screenBounds screenCapCM screenInsets screenRect screenSize screen_magnifier_present screens script scripts scroll scrollBars scrollPosition scrollabar scrollable scrollbar scrollbarDisplayPolicy scrollbarSerializedDataVersion scrollbarVisibility scrollbars scrollbarsAlwaysVisible scrolled scroller scrolling scrollpane sd sdde sdebug sdpStr sdsnd se seAsianSwapping seagull seal sealBase sealbase sealed sealing search searchHeavyweightChildren searchHeavyweightDescendants searchHeavyweights searchLen searchMergeList searchName searchPath searchResultsCache searchSieve searched searches searching searchstr sec secOrder secResult secSOrder secTOrder second secondColon secondDash secondString second_edition secondary secondaryOrder seconds secret secrets sect sectDirStart section sections sectorSize secure secureRandomSpi security securityPropFile see seeAllp seed seedGenerator seeded seeding seeing seek seeked seeking seeks seem seemed seemingly seems seen seencomma seendot sees segment segments segs sel select selectAll selectAllAccessibleSelection selectNow selectable selected selectedCheckbox selectedComponent selectedIndex selectedIndexes selectedIndices selectedKeys selecting selection selectionEnd selectionStart selections selectiveListener selectively selector selectors selects self selop semantic semantically semantics semi semicolon semicolons send sendMessage sendTo sendUrgentData sender sending sends sense senses sensible sensitive sensitivity sent sentence sentences sentinel sep separate separated separately separates separating separation separator separatorChar separatorIndex separators seperated seperation seperator seperators september sequence sequences sequential sequentially ser serName serex serial serialData serialField serialNum serialPersistendFields serialPersistentFields serialVersionOnStream serialVersionUID serializable serialization serialize serialized serializes serializing serially serialzied series serious serv serv_addr serve server serverChars servers serves service serviceName services serving session set set2DigitYearStart setA setAccessible setAccessibleDescription setAccessibleName setAccessibleParent setActionCommand setAddress setAlignment setAllowUserInteraction setAmPmStrings setArray setAsText setAsciiStream setAttributes setAutoCommit setAutoDelay setAutoWaitForIdle setBackground setBeanInfoSearchPath setBeginIndex setBigDecimal setBinaryStream setBit setBlob setBlockDataMode setBlockIncrement setBoolean setBound setBounds setBroadcast setByte setBytes setCaching setCalendar setCaps setCaretPosition setCatalog setCertificateEntry setChanged setChar setCharAt setCharacterStream setCheckBoxGroup setCheckboxGroup setChoices setClassAssertionStatus setClip setClob setColor setColumns setComponent setComponentOrientation setComposite setConstrained setConstraints setContentHandler setContentHandlerFactory setContextClassLoader setCopies setCopiesToDefault setCorners setCurrency setCurrencySymbol setCurrent setCurrentAccessibleValue setCurrentKeyboardFocusManager setCursor setCursorName setDSTSavings setDaemon setDash setDashT4 setData setDataElements setDatagramSocketImplFactory setDate setDateFormatSymbols setDecimalFormatSymbols setDecimalSeparator setDecimalSeparatorAlwaysShown setDecomposition setDefault setDefaultAllowUserInteraction setDefaultAssertionStatus setDefaultAuthenticator setDefaultFocusTraversalKeys setDefaultFocusTraversalPolicy setDefaultPermission setDefaultRequestProperty setDefaultSelection setDefaultUseCaches setDesignTime setDesktopProperty setDestination setDialog setDigit setDirectory setDispatchingEventTime setDisplayMode setDisplayName setDoInput setDoOutput setDone setDouble setDropTarget setDynamicLayout setEOF setEchoChar setEchoCharacter setEditable setEditorSearchPath setElementAt setEnabled setEndIndex setEndRule setEras setErr setErr0 setError setErrorIndex setEscapeProcessing setExceptionListener setExpert setExponentialSymbol setExtendedState setFactory setFetchDirection setFetchSize setField setFile setFileName setFileNameMap setFilenameFilter setFirstDayOfWeek setFloat setFocusCycleRoot setFocusTraversalKey setFocusTraversalKeys setFocusTraversalKeysEnabled setFocusTraversalKeys_NoIDCheck setFocusTraversalPolicy setFocusable setFocusableWindowState setFollowRedirects setFont setFoo setForeground setFormat setFormatByArgumentIndex setFormats setFormatsByArgumentIndex setFred setFromPage setFullScreenWindow setGlobalActiveWindow setGlobalCurrentFocusCycleRoot setGlobalFocusOwner setGlobalFocusedWindow setGlobalPermanentFocusOwner setGregorianChange setGroupingSeparator setGroupingSize setGroupingUsed setGuiAvailable setHelpMenu setHgap setHidden setHoldability setHours setID setIO setIconImage setIdentityInfo setIdentityPublicKey setIfModifiedSince setIfNotSet setIgnoreRepaint setImpl setImplicitDownCycleTraversal setIn setIn0 setInDefaultEventSet setIndex setIndexedReadMethod setIndexedWriteMethod setInfinity setInfo setInputStream setInstanceFollowRedirects setInt setInterface setInternalPersistenceDelegate setInternationalCurrencySymbol setKeepAlive setKeyChar setKeyEntry setKeyPair setKeyValues setLabel setLastModified setLastModifiedTime setLayout setLength setLenient setLineIncrement setLineNumber setLocalPatternChars setLocale setLocation setLocationRelativeTo setLockingKeyState setLog setLogStream setLogWriter setLoginTimeout setLong setLoopbackMode setLoopingStates setMaxDelimChar setMaxFieldSize setMaxPage setMaxPriority setMaxRows setMaximizedBounds setMaximum setMaximumFractionDigits setMaximumInteger setMaximumIntegerDigits setMedia setMediaToDefault setMenuBar setMessageDigest setMethodName setMinPage setMinimalDaysInFirstWeek setMinimum setMinimumFractionDigits setMinimumIntegerDigits setMinusSign setMinutes setModal setMode setModifiers setMonetaryDecimalSeparator setMonochrome setMonth setMonths setMostRecentFocusOwner setMultipleDocumentHandling setMultipleDocumentHandlingToDefault setMultipleMode setMultipleSelections setMultiplier setNaN setName setNanos setNegativePrefix setNegativeSuffix setNetworkInterface setNextException setNextFocusableComponent setNextWarning setNull setNumberFormat setOOBInline setObjFieldValues setObject setOffset setOption setOrientation setOrientationRequested setOrientationRequestedToDefault setOrigin setOut setOut0 setOwner setPackageAssertionStatus setPageIncrement setPageRanges setPaint setPaintMode setParameter setParent setParseIntegerOnly setPattern setPatternSeparator setPenDiameter setPenT4 setPerMill setPercent setPersistenceDelegate setPolicy setPort setPositivePrefix setPositiveSuffix setPreferred setPrimFieldValues setPrintQuality setPrintQualityToDefault setPrinter setPrinterResolution setPrinterResolutionToDefault setPriority setPriority0 setPropagationId setProperties setProperty setPropertyAttribute setPropertyEditorClass setProtectionDomain0 setPublicKey setPureJavaPrintDialog setQueryTimeout setRaster setRawOffset setReadMethod setReadOnly setReceiveBufferSize setRect setRef setRenderingHint setRenderingHints setRequestMethod setRequestProperty setResizable setReuseAddress setRows setRunFinalizersOnExit setSavepoint setScale setScrollPosition setSeconds setSecurityManager setSecurityManager0 setSeed setSelectedCheckbox setSelectionEnd setSelectionStart setSendBufferSize setShared setShort setShortDescription setShortMonths setShortWeekdays setShortcut setSides setSidesToDefault setSignerKeyPair setSigners setSize setSoLinger setSoTimeout setSocket setSocketAddress setSocketFactory setSocketImplFactory setSource setSpan setStartRule setStartYear setState setStateInternal setStatus setStream setStrength setString setStroke setStub setSystemScope setTTL setTarget setTcpNoDelay setText setTime setTimeInMillis setTimeToLive setTimeZone setTimestamp setTitle setToPage setToScale setTrafficClass setTransactionIsolation setTransform setTypeMap setURL setURLStreamHandlerFactory setUndecorated setUnicast setUnicodeStream setUnitIncrement setUseCaches setV4 setValue setValueIsAdjusting setValues setVgap setVisible setVisibleAmount setWarningString setWeekCountData setWeekdays setWheelScrollingEnabled setWriteMethod setXORMode setXXX setXxx setYear setZeroDigit setZoneStrings setlogStream sets settable setter setterArgs setterName setting settings setup seuences seven seventeen seventh sever several severe sez sgn sgsag sh shadow shadowInner shadowOuter shall shallow shape shaped shaper shapes shaping sharable share shared sharedInstance shares sharing sharp shear sheared shearing sheet sheets shekel shell shft shift shiftBias shiftDown shiftLeft shiftRight shifted shifting shifts shipped short short0 short1 shortDescription shortMonths shortValue shortWeekdays shortcomings shortcut shortcuts shorted shorten shortened shortening shortens shorter shortest shorthand shorthanding shorts should shouldBother shouldEnable shouldFire shouldNativelyFocusHeavyweight shouldNotify shouldRoundUp shouldinvalidate shouldn show showDocument showExtension showStatus showType showWhiteSpace showWindowWithoutWarningBanner showed showing shown shows shrink shsrp shuffle shuffled shuffling shut shutIn shutOut shut_rd shut_wr shutdown shutdownHooks shutdownInput shutdownOutput shutdowns shuts shutting shx shy si sib sibling sic side sided sides sieve sieveSearch sieveSingle sieves sift sig sig1 sig2 sigBytes sigBytesCopy sigDiff sigSpi sigSpiClone sigh sigma1 sign signAttribute signBit signInt signMask signSeen signal signaling signals signature signatures signbit signed signedAdd signedSubtract signedness signer signerCerts signers significance significand significant significantly signifies signifing signify signifying signing signingEngine signingKey signs signum sigs silent silently silly similar similarity similarly simluate simple simpleFormatter simpler simplest simplex simplicity simplified simplifies simplify simplifying simply simulate simulateException simulated simulating simultaneously sin sin6_flowinfo since sine single singleExpBias singleExpMask singleExpShift singleFractHOB singleFractMask singleMaxDecimalDigits singleMaxDecimalExponent singleMaxSmallTen singleMinDecimalExponent singleSignMask singleSmall10pow single_step singleton singletonList singletonMap singular sink sisin sit site sites sitting situation situations six sixteen sixth size sizeBeforeIntegerPart sizeCorrect sizeInBits sizeModCount sizePts sized sizeflag sizes skeletal skeleton skeletons skewed skip skipAssigned skipBlockData skipBuffer skipBytes skipCorrection skipCustomData skipDelimiters skipLF skipStack skipped skipping skips skslk slack slash slashCount slashSlashComments slashSlashCommentsP slashStarComments slashStarCommentsP slashes slate slave slaves sleep sleeping sleeps slen slice slicing slider slides sliding slight slightly slop slope slot slotDesc slots slow slower slowest slowing slows slslv slurp sm small small10pow small5pow smallPrime smallSieve smaller smallest smallestPositiveDouble smart smiles smooth smoothness smsmo smt sn snapshot snk snoop snsna so soc socket socketAccept socketAvailable socketBind socketClose0 socketConnect socketCreate socketGetOption socketImpls socketInputStream socketListen socketRead0 socketSendUrgentData socketSetOption socketShutdown socketWrite socketWrite0 sockets socksPort socksProxyHost socksProxyPort soft software soh solar solaris sole solely solid some someCaller someFile someReflectionAPI somebody somehow somemethod someone someplace something sometimes somewhat somewhere somtimes son soon sophisticated sort sort1 sort2 sorted sorting sorts sosom sound sounds source sourceBean sourceClass sourceCount sourceCursor sourceDecomposition sourceIndex sourceOffset sourcePeer sourceSize sourceText sourceWords sources south southern sov sp space spaced spaces spacing span spanned spanning spans sparc spare spares sparring sparse spawn spb speaking spec specTitle specVendor specVersion specfied special specialSaveChars special_characters specialcasing specialization specializations specialize specialized specializes specially specifed specific specifically specification specifications specificed specifics specified specifier specifiers specifies specify specifyHandlerPerm specifyStreamHandler specifying specs spectitle specvendor specversion speed speeds spelled spent spf spi spill spine split splits splitting spoof spoofing spot spots sql sqlStateSQL99 sqlStateXOpen sqlType sqrt sqsqi square squareToLen squares squaring squarings squirreled sr src srcActions srcArray srcBegin srcColorModel srcComponent srcEnd srcEvent srcName srcOffset srcRas srcSize src_position srcb srccolor srcpos srcs srsrp ss ssl ssp ssssw st stable stack stackSize stackTrace stacking stacks stage stages staging stale stall stamp stamp_a stamp_b stamps stand standalone standard standardEditorsPackage standardName standardProvider standardized standards standpoint stands stanford starlet starring start startAngle startBitIndex startBoundary startChar startClass startCompare startDate startDay startDayOfMonth startDayOfWeek startElement startIndex startLength startListeningForOtherDrags startLoad startMode startMonth startOffset startOffsets startPos startPosition startSearchForFirstChar startSearchForLastChar startTime startTimeMode startUnitIndex startValue startYear started starting startle starts startsWith startup startx starty stash stashed stat state state1 state2 stateClasses stateTable stated stateless statement statementCount statementList statements states statesToBackfill static staticCal staticLeapMonthLength staticMonthLength staticPermissions statically statics statistics statment status statusAll statusArray statusID statusIndex stay stays stdName stderr stderr_fd stderr_stream stdin stdin_fd stdin_stream stdout stdout_fd stdout_stream steal steals step steps sterling sthe stick sticky stickyRound still stillborn stipulation stipulations stitched stitches stm stmt stok stokes stolen stomp stop stop0 stopClass stopDispatching stopDispatchingImpl stopDispatchingLater stopListeningForOtherDrags stopOrSuspend stopPostProcessing stopThread stopThreadPermission stopped stopping stops storage store stored stores storesLowerCaseIdentifiers storesLowerCaseQuotedIdentifiers storesMixedCaseIdentifiers storesMixedCaseQuotedIdentifiers storesUpperCaseIdentifiers storesUpperCaseQuotedIdentifiers storing str strLastChar strLastIndex strStyle strValue straddle straddling straight straightforward strange strangely strategies strategy stream streamHandlerLock streamed streaming streams strength strengthOrder strengthResult strengths stretch stretched stretches strftime strict strictKeyValueSeparators stricter strictfp strictly strikethroughOffset strikethroughThickness string stringFlavor stringID stringIndex stringList stringToExamine stringWidth stringbuffer strings strip stripLeadingZeroBytes stripLeadingZeroInts stripOffParameters stripped strive strlen stroes stroke stroked stroker stroking strong stronger strongly structural structurally structure structurec structured structures stsot stub study stuff stx style styles stylistic su sub subFormat subFormatter subIterator subList subLists subMap subN subParse subParseZoneString subSequence subSet subString subarray subcase subcategory subcl subclass subclassAudits subclassed subclassers subclasses subclassing subcomponent subcomponents subdirectories subdirectory subdivide subdivided subdivision subexpressions subformat subformatPattern subformats subgroup subgroups subimage subinterface subinterfaces subitems subject sublist sublists submap submenu submit subname subpackage subpackages subparse subpaths subpattern subpatterns subpixel subprocess subprotocol subqueries subquery subrange subranges subregion subs subscribe subscribes subscribing subsection subsequence subsequent subsequently subset subsets subsidiary subspace subst substFQType substType substTypeName substantially substitued substitute substituted substitution substitutionRule substitutions substr substract substream substring substrings subsystems subtle subtract subtracted subtracting subtraction subtracts subtree subtrees subtype subtypeName subtypes succeed succeeded succeeding succeeds succesfuly success successful successfully succession successive successively successor such suddenly suffer suffice suffices sufficient sufficiently suffix suffixes suggested suggestion suggestions suggests suicide suid suit suitable suited sum sum1 sum2 sum3 summarizing summary sums sun sunday sunk sup super superBeanInfo superCl superClass superConnectServer superDesc superListening superRadix superType supercede superceded superclass superclasses superinterface superinterfaces supers supertable supertype supertypes supplemental supplementary supplemented supplements supplied supplies supply support supported supportedVersion supporting supports supportsANSI92EntryLevelSQL supportsANSI92FullSQL supportsANSI92IntermediateSQL supportsAlterTableWithAddColumn supportsAlterTableWithDropColumn supportsBatchUpdates supportsCatalogsInDataManipulation supportsCatalogsInIndexDefinitions supportsCatalogsInPrivilegeDefinitions supportsCatalogsInProcedureCalls supportsCatalogsInTableDefinitions supportsColumnAliasing supportsConvert supportsCoreSQLGrammar supportsCorrelatedSubqueries supportsCustomEditor supportsDataDefinitionAndDataManipulationTransactions supportsDataManipulationTransactionsOnly supportsDifferentTableCorrelationNames supportsExpressionsInOrderBy supportsExtendedSQLGrammar supportsFullOuterJoins supportsGetGeneratedKeys supportsGroupBy supportsGroupByBeyondSelect supportsGroupByUnrelated supportsIntegrityEnhancementFacility supportsLikeEscapeClause supportsLimitedOuterJoins supportsMinimumSQLGrammar supportsMixedCaseIdentifiers supportsMixedCaseQuotedIdentifiers supportsMultipleOpenResults supportsMultipleResultSets supportsMultipleTransactions supportsNamedParameters supportsNonNullableColumns supportsOpenCursorsAcrossCommit supportsOpenCursorsAcrossRollback supportsOpenStatementsAcrossCommit supportsOpenStatementsAcrossRollback supportsOrderByUnrelated supportsOuterJoins supportsPositionedDelete supportsPositionedUpdate supportsResultSetConcurrency supportsResultSetHoldability supportsResultSetType supportsSavepoints supportsSchemasInDataManipulation supportsSchemasInIndexDefinitions supportsSchemasInPrivilegeDefinitions supportsSchemasInProcedureCalls supportsSchemasInTableDefinitions supportsSelectForUpdate supportsStoredProcedures supportsSubqueriesInComparisons supportsSubqueriesInExists supportsSubqueriesInIns supportsSubqueriesInQuantifieds supportsTableCorrelationNames supportsTransactionIsolationLevel supportsTransactions supportsUnion supportsUnionAll supportsUrgentData suppose supposed suppress suppressed suppresses supradecimal supress sure surface surfaces surgery surprised surprises surprising surprisingly surrogate surrogates surrounded surrounding survive survived susceptible suspend suspend0 suspended suspends suspension susun sval sver svswe swag swallow swallowing swap swapOrder swapped swapper swapping swing switch switched switches switching switchover swswa sx sx1 sx2 sy sy1 sy2 sychronization syllable syllables symbol symbolic symbols symmetric symmetry syn sync synch synched synchronization synchronize synchronized synchronizedCollection synchronizedList synchronizedMap synchronizedSet synchronizedSortedMap synchronizedSortedSet synchronizes synchronizing synchronous synchronously synonym syntactic syntactically syntax syntaxes synthesize synthesized synthetic sys_paths system systemClipboard systemColors systemCustomCursorDirPrefix systemCustomCursorProperties systemCustomCursorPropertiesFile systemCustomCursors systemNativeLibraries systems systime sytle sz t t0 t1 t2 tExamining tFile tHeight tLong tOrder tT tValue tWeight tWidth ta tab table tableEntry tableIndex tableIndexClustered tableIndexHashed tableIndexOther tableIndexStatisic tableIndexStatistic tableNamePattern tables tabs tack tag tagged tagging tags tail tailMap tailSet tailor tailored take takeIPv4Address taken takes taking talk talking tall tampered tan tangent target targetBeanInfo targetChars targetClass targetCount targetCursor targetDecomposition targetEnter targetIndex targetLastEntered targetMethod targetOffset targetOver targetSet targetSize targetSqlType targetToAppContext targetToStatementList targetType targetWords targeted targeting targets tarray task taskFired tasks taste tat tatam taught tba tbe tblmask tc tc1 tca tcertificate tcertificates tcl tcode td te tear tearOff teardown tearing tears technically technique techniques technology teh telephone tell telling tells temp temp1 temp2 tempBuffer tempComp tempHeight tempItems tempL tempLength tempNumber tempRuleList tempState tempStateNum tempStateTable tempStatus tempString tempText tempWidth tempX tempY template temporarily temporary ten tenSbits tenSval tend tends tens tentative tenth terOrder terResult terSOrder terTOrder term terminal terminate terminated terminates terminating termination terminator terminators terms terribly territories tertiary tertiaryOrder test test1 test2 testArgs testBit testColorValueRange testFile testFormats testIndex tested testing tests testvalid tetel text textArea textAreaSerializedDataVersion textBeginIndex textBuffer textComponent textComponentSerializedDataVersion textEndIndex textEvent textField textFieldSerializedDataVersion textHighlight textHighlightText textInactiveText textL textLength textListener textListenerK textMode textOut textStart textText textToNumericFormat textValueChanged textfield textfields textlayout texts textual textually texture textured tf1 tf2 tf3 tf4 tfor tfrom tgtgk th tha than thanks that thatHost thatPath that_ thatmat the theAuthenticator theContext theEnd theEvent theOutputStream theQueue theString theTime thealgorithm their them themselves then theoretically theory there thereafter thereby therefore therein thereof these theta they thickness thin thing things think thinks third thirteenth thirty this thisAddr thisAddrs thisBits thisGC thisHost thisMinusOne thisName thisPath thisPlusOne thisThread thisTime thisVal this_ thismat thorn those though thought thousands thow thread threadGroup threadGroupPermission threadInitNumber threadLocals threadPermission threadPrimitiveDeprecation threadQ threadReaper threaded threadgroup threads threadtest01 threat three threshold threw thrice through throughout throw throwException throwMiscException throwMissingResourceException throwable throwables throwing thrown throws throwsException thru tht ththa thumb thursday thus thwarted ti tickles ticks tidy tie tiebreaker tied tight tighter tilde tileIcon till time timeFields timeStyle timeToFields time_s timely timeout timeouts timer times timesTenToThe timestamp timestamps timezone timezones timg tiny tiny10pow tis titir title titleColor titleFont titleJustification titlePosition titlecase tk tktuk tl tlim tls tltgl tm tmp tmpFileLock tmpPropertyStr tmpdir tmpout tn tno tntsn to toAddTo toAppendTo toArray toBack toBigInteger toBinaryString toBoolean toByteArray toCIEXYZ toChapter1 toChapter1Digest toChapter2 toCharArray toDegrees toElement toEnd toExternalForm toFocus toFront toGMTString toHex toHexString toIndex toIntArray toJavaFormatString toKey toLocaleString toLocalizedPattern toLower toLowerCase toNormalizerMode toNotify toOctalString toPage toPages toPattern toRGB toRadians toSkip toStart toString toStub toTest toTitleCase toType toURL toUnsignedString toUpperCase toUpperCaseCharArray toUpperCaseEx today toffset together toggle toggles tok token tokenMask tokenization tokenize tokenized tokenizer tokens told tolerable tolerant tolerate tone too took tool toolbar toolbars toolboxes tooldocs toolkit toolkits tools tooltip tooltips top topLevelWindow topLevelWindowPermission topics toplabel toplevel topmost topology torn tortoise tos toss tossed total totalDigits totalMemory totally totals toton touch touching toward towards tp tpublic tr tr15 trace traceInstructions traceMethodCalls tracing track trackMouseEnterExit tracked tracker tracking tracks trade trademark tradeoff trading traditional traffic trafficClass trailing trailingZeroCnt trailingZeroTable trailingZeros trajectory trans transaction transactions transcoding transfer transferFocus transferFocusBackward transferFocusDownCycle transferFocusUpCycle transferFrom transferSize transferTo transferred transfers transform transformation transformations transformed transforming transforms transient transientProperties transition transitional transitioned transitioning transitions transitive transitively transitivity translate translateKey translatePattern translatePoint translated translates translating translation transmission transmitted transmitting transparency transparent transparently transport trap trated travels traversable traversal traversals traverse traverseBackward traverseForward traverseOut traversed traverses traversing travesability treat treated treates treating treatment treats tree treelock trees trial trialTime trials trick trickier trickiness tricks tricky trie tried tries trigger triggered triggering triggers trigonometric trim trimToSize trims trip triplets trivial trivially trouble troublesome trown trtur true truly truncate truncated truncates truncating truncation trust trustProxy trusted trustedStripLeadingZeroInts trusts trustworthy try tryLess tryLessOrEqual trying ts tsign tstso tt ttb ttf ttl ttlLock tttat ttype tuesday tumble tunable tuned tuning tunnel turn turned turning turns turtle tw twelfth twelve twice two twoDown twos twtwi tx tx1 tx2 txt txtr ty ty1 ty2 tycho tying typ type typeAheadAssertions typeAheadMarkers typeClass typeCodes typeList typeName typeNamePattern typeNameToClass typeNameToPrimitiveClass typeNoNulls typeNullable typeNullableUnknown typePredBasic typePredChar typePredNone typeSearchable typeToClass typeToField typeToPackageName typecode typecodes typed typedID typedKey types typesafe typical typically typing typographic typographical tz tzNumber tzoffset u u0000 u0001 u0001_ u0002 u0002_ u0003 u0004 u0005 u0005J u0006 u0007 u0008 u0009 u000A u000B u000C u000D u000E u000b u000e u000f u0010 u0011 u0011C u0012 u0013 u0014 u0015 u0016 u0017 u0018 u0019 u001B u001C u001D u001E u001F u001a u001b u001c u001d u001e u001f u0020 u0021 u0022 u0023 u0024 u0025 u0026 u0027 u0028 u0029 u002C u002D u002E u002F u002a u002b u002c u002d u002e u002f u0030 u0031 u0032 u0033 u0034 u0035 u0036 u0037 u0038 u0039 u003A u003B u003F u003a u003b u003c u003d u003e u003f u0040 u0041 u0042 u0043 u0044 u0045 u0046 u0047 u0048 u0049 u004A u004C u004E u004a u004b u004c u004d u004e u004f u0050 u0051 u0052 u0053 u0054 u0055 u0056 u0057 u0058 u0059 u005A u005B u005a u005b u005d u005e u005f u0060 u0061 u0062 u0063 u0064 u0065 u0066 u0067 u0068 u0069 u006B u006C u006a u006b u006c u006d u006e u006f u0070 u0071 u0072 u0073 u0074 u0075 u0076 u0077 u0078 u0079 u007A u007B u007E u007F u007a u007b u007c u007d u007e u007f u007fA u007fB u007fBO u007fC u007fCCA u007fCKK u007fCOS u007fCQJ u007fCS u007fF u007fFE u007fJ u007fJQ u007fK u007fKCF u007fKCM u007fL u007fLCO u007fM u007fN u007fO u007fOD u007fOK u007fQ u007fQM u007fR u007fRQ u007fS u007fTR u007fV u007fW u0080 u0080R u0081 u0081C u0081K u0081L u0081N u0082 u0082K u0082KQQJMQL u0083 u0084 u0084C u0085 u0086 u0086A u0086JSO u0086MC u0086R u0087 u0087JK u0087O u0088 u0088C u0088E u0088K u0088M u0088OJ u0089 u0089E u0089O u0089XO u008A u008D u008a u008b u008c u008d u008dA u008e u008eC u008f u008fC u0090 u0091 u0092 u0092P u0093 u0094 u0095 u0096 u0096K u0097 u0097JO u0098 u0099 u009C u009F u009a u009b u009c u009d u009e u009f u00A0 u00A1 u00A2 u00A4 u00A5 u00A6 u00A7 u00A8 u00A9 u00AA u00AB u00AC u00AD u00AE u00B0 u00B1 u00B2 u00B3 u00B4 u00B5 u00B6 u00B7 u00B9 u00BA u00BB u00BC u00BD u00BE u00BF u00C0 u00C1 u00C2 u00C3 u00C4 u00C5 u00C6 u00C7 u00C8 u00C9 u00CA u00CB u00CC u00CD u00CE u00CF u00D0 u00D1 u00D2 u00D3 u00D4 u00D5 u00D6 u00D7 u00D8 u00D9 u00DA u00DB u00DC u00DD u00DE u00DF u00E0 u00E1 u00E2 u00E3 u00E4 u00E5 u00E6 u00E7 u00E8 u00E9 u00EA u00EB u00EC u00ED u00EE u00EF u00F0 u00F1 u00F2 u00F3 u00F4 u00F5 u00F6 u00F7 u00F8 u00F9 u00FA u00FB u00FC u00FD u00FE u00FF u00a0 u00a1 u00a2 u00a3 u00a4 u00a5 u00a6 u00a7 u00a8 u00a9 u00ab u00ac u00ae u00af u00b0 u00b1 u00b4 u00b5 u00b6 u00b7 u00b8 u00bb u00bc u00bd u00be u00bf u00c0E u00c1C u00c2 u00c2C u00c3 u00c3E u00c4 u00c4E u00c5 u00c5U u00c6 u00c7 u00c7D u00c8I u00c9G u00ca u00caG u00cbH u00ccO u00cdK u00ceJ u00cf u00cfO u00d1O u00d2 u00d2U u00d3 u00d3P u00d4 u00d4S u00d5 u00d5U u00d6U u00d7 u00d8 u00d9 u00d9W u00da u00daW u00dbW u00dc u00dcW u00ddZ u00df u00e0e u00e0zy u00e1c u00e2 u00e2c u00e3 u00e3e u00e4 u00e4b u00e4e u00e5 u00e5u u00e6 u00e7 u00e7d u00e8i u00e9 u00e9g u00ea u00eag u00ebh u00eco u00edk u00eej u00ef u00efo u00f1o u00f2 u00f2u u00f3 u00f3p u00f4 u00f4s u00f5 u00f5u u00f6t u00f7 u00f8 u00f9 u00f9w u00fa u00faw u00fbw u00fc u00fdz u00ff u0100 u0100E u0101 u0101e u0102 u0102E u0103 u0103e u0104 u0104E u0105 u0105e u0106 u0106E u0107 u0107e u0108 u0108E u0109 u0109e u010A u010AD u010B u010Bd u010C u010CD u010D u010Dd u010E u010EE u010F u010Fe u0110 u0111 u0112 u0112G u0113 u0113g u0114 u0114G u0115 u0115g u0116 u0116F u0117 u0117f u0118 u0118I u0119 u0119i u011A u011AG u011B u011C u011CH u011D u011Dh u011E u011EI u011F u0120 u0120H u0121 u0121h u0122 u0122H u0123 u0123h u0124 u0124I u0125 u0125i u0126 u0127 u0128 u0128N u0129 u0129n u012A u012AO u012B u012Bo u012C u012CO u012D u012Do u012E u012EO u012F u012Fo u0130 u0130M u0131 u0132 u0133 u0134 u0134O u0135 u0135o u0136 u0136L u0137 u0137l u0138 u0139 u0139M u013A u013Am u013B u013BN u013C u013Cn u013D u013DN u013E u013En u013F u0140 u0141 u0142 u0143 u0143O u0144 u0144o u0145 u0145R u0146 u0146r u0147 u0148 u0148o u0149 u014A u014B u014C u014CU u014D u014Du u014E u014EU u014F u014Fu u0150 u0150U u0151 u0151u u0152 u0153 u0154 u0155 u0155s u0156 u0156S u0157 u0157s u0158 u0158S u0159 u0159s u015A u015AU u015B u015Bu u015C u015CU u015D u015Du u015E u015ET u015F u015Ft u0160 u0160T u0161 u0161t u0162 u0163 u0164 u0164U u0165 u0166 u0167 u0168 u0168V u0169 u0169v u016A u016Aa u016B u016C u016Ca u016D u016E u016Ea u016F u016Fw u0170 u0170o u0171 u0172 u0172a u0173 u0174 u0174Y u0175 u0175y u0176 u0176Z u0177 u0177z u0178 u0178a u0179 u0179a u017A u017B u017Bb u017C u017D u017Da u017E u017F u017f u0180 u0181 u0182 u0183 u0184 u0185 u0186 u0187 u0188 u0189 u018A u018B u018C u018D u018E u018F u018f u0190 u0191 u0192 u0193 u0194 u0195 u0196 u0198 u0199 u019A u019B u019C u019D u019E u019F u019f u01A0 u01A0U u01A1 u01A1u u01A2 u01A3 u01A4 u01A5 u01A6 u01A7 u01A8 u01A9 u01AA u01AB u01AC u01AD u01AE u01AF u01AFo u01B0 u01B1 u01B2 u01B3 u01B4 u01B5 u01B6 u01B7 u01B8 u01B9 u01BA u01BB u01BC u01BD u01BE u01BF u01C0 u01C2 u01C3 u01C4 u01C5 u01C6 u01C7 u01C8 u01C9 u01CA u01CB u01CC u01CD u01CDC u01CE u01CEc u01CF u01CFK u01D0 u01D0j u01D1 u01D1R u01D2 u01D2r u01D3 u01D3Z u01D4 u01D4z u01D5 u01D6 u01D7 u01D8 u01D9 u01DA u01DB u01DC u01DD u01DE u01DF u01E0 u01E1 u01E2 u01E3 u01E4 u01E5 u01E6 u01E6I u01E7 u01E7i u01E8 u01E8L u01E9 u01E9l u01EA u01EAU u01EB u01EC u01ED u01EE u01EF u01F0 u01F0k u01F1 u01F2 u01F3 u01F4 u01F4I u01F5 u01F5i u01F6 u01F8 u01FA u01FB u01FC u01FD u01FE u01FF u01b7 u0200 u0200E u0201 u0201e u0202 u0202E u0203 u0203e u0204 u0204I u0205 u0205i u0206 u0206I u0207 u0207i u0208 u0208O u0209 u020A u020AO u020B u020C u020CR u020D u020Dr u020E u020ER u020F u020Fr u0210 u0210U u0211 u0211u u0212 u0212U u0213 u0213u u0214 u0214a u0215 u0216 u0216a u0217 u0218 u021A u021B u021C u021E u021F u0220 u0222 u0223 u0224 u0226 u0227 u0228 u022A u022B u022C u022E u022F u0230 u0231 u0232 u0233 u0234 u0236 u0237 u0238 u023A u023C u023D u023E u0240 u0242 u0243 u0244 u0246 u0248 u0249 u024A u024C u024E u024F u0250 u0252 u0253 u0254 u0256 u0257 u0258 u0259 u025A u025C u025D u025E u0260 u0262 u0263 u0264 u0266 u0268 u026A u026C u026E u0270 u0271 u0272 u0274 u0275 u0276 u0277 u0278 u0279 u027A u027C u027D u027E u027b u0280 u0281 u0282 u0283 u0284 u0286 u0288 u0289 u028A u028C u028E u028F u0290 u0292 u0294 u0295 u0296 u0298 u029A u029B u029C u029E u02A0 u02A1 u02A2 u02A4 u02A7 u02A8 u02AA u02AD u02B0 u02B3 u02B6 u02B8 u02B9 u02BB u02BC u02BE u02BF u02C1 u02C2 u02C5 u02C8 u02CD u02D0 u02D1 u02D2 u02D5 u02D8 u02DB u02DE u02E0 u02E1 u02E4 u02E8 u02EB u02EE u02F1 u02F4 u02F7 u02FA u02FE u02b9 u02bc u0300 u0300A u0300zy u0301 u0301A u0302 u0302A u0303 u0303A u0304 u0304A u0305 u0306 u0306A u0307 u0307B u0308 u0308A u0309 u0309A u030A u030AA u030B u030BO u030C u030CA u030D u030E u030F u030FA u030a u030b u030c u030d u030e u030f u0310 u0311 u0311A u0312 u0313 u0314 u0315 u0316 u0317 u0318 u0319 u031BO u031C u031D u031F u031a u031b u031c u031d u031e u031f u0320 u0321 u0322 u0323 u0323A u0324 u0324U u0325 u0325A u0326 u0327 u0327C u0328 u0328A u0329 u032A u032B u032D u032DD u032E u032EH u032a u032b u032c u032d u032e u032f u0330 u0330E u0331 u0331B u0332 u0333 u0334 u0335 u0336 u0337 u0338 u0339 u033A u033D u033E u033a u033b u033c u033d u033e u033f u0340 u0341 u0342 u0343 u0344 u0345 u0346 u0349 u034A u034C u034D u034E u034F u0351 u0353 u0355 u0356 u0359 u035A u035B u035D u0360 u0361 u0363 u0365 u0366 u0369 u036A u036C u036D u036E u036F u0370 u0371 u0373 u0374 u0375 u0376 u0379 u037A u037C u037E u037F u0382 u0385 u0386 u0387 u0388 u0389 u038A u038C u038E u038F u0390 u0391 u0392 u0395 u0397 u0398 u0399 u039B u039C u039E u039F u039f u03A1 u03A3 u03A4 u03A5 u03A7 u03A9 u03AA u03AB u03AC u03AD u03AE u03AF u03B0 u03B1 u03B3 u03B5 u03B6 u03B7 u03B9 u03BC u03BF u03C1 u03C2 u03C5 u03C8 u03C9 u03CA u03CB u03CC u03CD u03CE u03D0 u03D1 u03D2 u03D3 u03D4 u03D5 u03D6 u03D7 u03DA u03DC u03DD u03DE u03E0 u03E2 u03E3 u03E4 u03E5 u03E6 u03E7 u03E8 u03E9 u03EA u03EB u03EC u03ED u03EE u03EF u03F2 u03F3 u03F5 u03F8 u03FB u03FE u03a1 u03a5 u03a9 u03b1 u03b5 u03b7 u03b9 u03bc u03bf u03c1 u03c5 u03c9 u03d2 u0400 u0401 u0403 u0404 u0406 u0407 u040A u040B u040C u040D u040E u0410 u0413 u0414 u0415 u0416 u0417 u0418 u0419 u041A u041C u041D u041E u041a u041e u0420 u0423 u0426 u0427 u0429 u042B u042C u042F u042b u0430 u0432 u0433 u0435 u0436 u0437 u0438 u0439 u043A u043B u043E u043a u043e u0441 u0443 u0444 u0447 u044A u044B u044E u044F u044b u0451 u0453 u0455 u0456 u0457 u0458 u045B u045C u045E u045F u0460 u0461 u0462 u0463 u0464 u0465 u0466 u0467 u0468 u0469 u046A u046B u046C u046D u046E u046F u0470 u0471 u0472 u0473 u0474 u0475 u0476 u0477 u0478 u0479 u047A u047B u047C u047D u047E u047F u0480 u0481 u0482 u0483 u0484 u0485 u0486 u048A u048D u048E u0490 u0491 u0492 u0493 u0494 u0495 u0496 u0497 u0498 u0499 u049A u049B u049C u049D u049E u049F u04A0 u04A1 u04A2 u04A3 u04A4 u04A5 u04A6 u04A7 u04A8 u04A9 u04AA u04AB u04AC u04AD u04AE u04AF u04B0 u04B1 u04B2 u04B3 u04B4 u04B5 u04B6 u04B7 u04B8 u04B9 u04BA u04BB u04BC u04BD u04BE u04BF u04C0 u04C1 u04C2 u04C3 u04C4 u04C7 u04C8 u04CB u04CC u04CF u04D0 u04D1 u04D2 u04D3 u04D4 u04D5 u04D6 u04D7 u04D8 u04D9 u04DA u04DB u04DC u04DD u04DE u04DF u04E0 u04E1 u04E2 u04E3 u04E4 u04E5 u04E6 u04E7 u04E8 u04E9 u04EA u04EB u04ED u04EE u04EF u04F0 u04F1 u04F2 u04F3 u04F4 u04F5 u04F6 u04F8 u04F9 u04FC u0500 u0504 u0506 u0507 u050A u050B u050D u0510 u0513 u0516 u0519 u051C u0520 u0524 u0527 u052A u052D u0530 u0531 u0533 u0535 u0536 u0539 u053B u053C u053D u053F u0541 u0542 u0544 u0545 u0546 u0548 u054B u054E u0551 u0552 u0554 u0556 u0557 u0559 u055A u055C u055E u055F u0561 u0562 u0565 u0566 u056A u056B u056E u056b u056d u0572 u0574 u0576 u057A u057D u057e u0580 u0581 u0582 u0583 u0586 u0587 u0589 u058C u058F u0590 u0591 u0592 u0596 u0598 u059A u059D u05A0 u05A1 u05A3 u05A6 u05A9 u05AB u05AC u05B0 u05B4 u05B7 u05B8 u05B9 u05BB u05BC u05BD u05BE u05BF u05C0 u05C1 u05C2 u05C3 u05C4 u05C7 u05CA u05CD u05D0 u05D1 u05D2 u05D3 u05D4 u05D5 u05D6 u05D8 u05D9 u05DA u05DB u05DC u05DE u05DF u05E0 u05E1 u05E2 u05E3 u05E4 u05E5 u05E6 u05E7 u05E8 u05E9 u05EA u05EB u05EE u05F0 u05F2 u05F3 u05F4 u05F6 u05FA u05FE u05b7 u05b8 u05b9 u05bc u05bf u05c1 u05c2 u05d0 u05d1 u05d2 u05d3 u05d4 u05d5 u05d6 u05d8 u05d9 u05da u05db u05dc u05dd u05de u05e0 u05e1 u05e2 u05e3 u05e4 u05e6 u05e7 u05e8 u05e9 u05ea u05f2 u0600 u0601 u0602 u0604 u0607 u0609 u060A u060B u060C u060D u0610 u0613 u0616 u0619 u061B u061C u061D u061E u061F u0621 u0622 u0623 u0624 u0625 u0626 u0627 u0628 u0629 u062B u062E u062a u062b u062c u062d u062e u062f u0630 u0631 u0632 u0633 u0634 u0635 u0636 u0637 u0638 u0639 u063A u063D u063a u0640 u0641 u0642 u0643 u0644 u0645 u0646 u0647 u0648 u0649 u064A u064B u064C u064F u064a u064b u064c u064d u064e u064f u0650 u0651 u0652 u0655 u065B u065E u0660 u0661 u0664 u0666 u0667 u0669 u066A u066B u066D u066F u0670 u0671 u0672 u0673 u0677 u0679 u067B u067D u067E u067F u067a u067b u067e u067f u0680 u0683 u0684 u0686 u0687 u0688 u068B u068F u068c u068d u068e u0691 u0693 u0697 u0698 u069B u069F u06A3 u06A7 u06A9 u06AA u06AB u06AF u06B3 u06B7 u06BA u06BD u06BE u06C0 u06C3 u06C6 u06C9 u06CB u06CD u06CE u06D0 u06D1 u06D3 u06D4 u06D5 u06D6 u06D9 u06DA u06DC u06DD u06DE u06DF u06E1 u06E4 u06E5 u06E6 u06E7 u06E8 u06E9 u06EA u06EB u06EC u06ED u06F0 u06F1 u06F4 u06F7 u06F9 u06FA u06FD u06a4 u06a6 u06a9 u06ad u06af u06b1 u06b3 u06ba u06bb u06be u06c0 u06c1 u06c5 u06c6 u06c7 u06c8 u06c9 u06cb u06cc u06d0 u06d2 u06d3 u0700 u0703 u0706 u0708 u0709 u070B u070D u0711 u0715 u0719 u071D u0721 u0722 u0725 u0729 u072B u072D u0731 u0735 u0736 u0739 u073D u0741 u0745 u0749 u074B u074D u0750 u0751 u0755 u0759 u075C u075F u0762 u0765 u0766 u0769 u076C u076D u0771 u0775 u0779 u077D u077F u0780 u0781 u0785 u0786 u0789 u078D u0790 u0793 u0796 u0799 u079C u079F u07A2 u07A5 u07A6 u07A8 u07AB u07AF u07B3 u07B7 u07BB u07BF u07C0 u07C3 u07C6 u07C9 u07CB u07CD u07D1 u07D5 u07D9 u07DD u07E1 u07E2 u07E4 u07E5 u07E6 u07E7 u07EB u07EF u07F3 u07F7 u07FA u07FD u07FE u07FF u07ff u0800 u0801 u0805 u0808 u0809 u080B u080D u0810 u0813 u0817 u0818 u081B u081F u0820 u0821 u0823 u0827 u082B u082E u0831 u0835 u0839 u083D u0841 u0845 u0849 u084C u084F u0853 u0857 u085B u085F u0863 u0865 u0866 u0867 u086A u086D u086F u0871 u0875 u0879 u087D u0881 u0884 u0885 u0888 u088B u088F u0893 u0897 u089B u089E u08A1 u08A5 u08A9 u08AD u08B1 u08B4 u08B7 u08BB u08BF u08C3 u08C7 u08CB u08CF u08D1 u08D2 u08D6 u08DA u08DE u08E1 u08E4 u08E8 u08EC u08F0 u08F4 u08F8 u08FC u08FF u0900 u0901 u0902 u0903 u0905 u0906 u0908 u090A u090E u0912 u0915 u0916 u0917 u091A u091C u091D u091c u0920 u0921 u0922 u0923 u0926 u0928 u0929 u092B u092C u092F u092b u092f u0930 u0931 u0932 u0933 u0934 u0935 u0938 u0939 u093B u093C u093D u093E u093c u0940 u0941 u0942 u0944 u0948 u0949 u094C u094D u0950 u0951 u0954 u0956 u0958 u0959 u095A u095B u095C u095D u095E u095F u0960 u0961 u0962 u0963 u0964 u0965 u0966 u096A u096E u096F u0970 u0972 u0977 u097C u0980 u0981 u0982 u0983 u0985 u0986 u098B u098C u098F u0990 u0993 u0994 u0998 u099D u09A1 u09A2 u09A7 u09A8 u09AA u09AC u09AF u09B0 u09B1 u09B2 u09B6 u09B9 u09BA u09BC u09BE u09C0 u09C1 u09C3 u09C4 u09C7 u09C8 u09CB u09CC u09CD u09D2 u09D7 u09DC u09DD u09DF u09E0 u09E1 u09E2 u09E3 u09E4 u09E6 u09E9 u09EE u09EF u09F0 u09F1 u09F2 u09F3 u09F4 u09F8 u09F9 u09FA u09FD u09a1 u09a2 u09ac u09af u09bc u09be u09c7 u09d7 u0A00 u0A02 u0A05 u0A06 u0A0A u0A0F u0A10 u0A13 u0A14 u0A16 u0A17 u0A19 u0A1C u0A1E u0A21 u0A23 u0A28 u0A2A u0A2B u0A2E u0A30 u0A32 u0A33 u0A35 u0A36 u0A38 u0A39 u0A3C u0A3E u0A40 u0A41 u0A42 u0A43 u0A46 u0A47 u0A48 u0A49 u0A4B u0A4C u0A4D u0A4F u0A54 u0A58 u0A59 u0A5A u0A5B u0A5C u0A5E u0A5F u0A62 u0A66 u0A69 u0A6C u0A6F u0A70 u0A71 u0A72 u0A74 u0A7E u0A80 u0A81 u0A82 u0A83 u0A84 u0A85 u0A88 u0A8B u0A8C u0A8D u0A8F u0A91 u0A93 u0A96 u0A99 u0A9C u0AA8 u0AAA u0AAB u0AAE u0AB0 u0AB2 u0AB3 u0AB5 u0AB6 u0AB9 u0ABC u0ABD u0ABE u0ABF u0AC0 u0AC1 u0AC3 u0AC5 u0AC6 u0AC7 u0AC8 u0AC9 u0ACB u0ACC u0ACD u0ACF u0AD0 u0AD8 u0ADC u0ADF u0AE0 u0AE3 u0AE6 u0AEA u0AED u0AEF u0AF0 u0AF3 u0AF6 u0AFF u0B00 u0B01 u0B02 u0B03 u0B05 u0B06 u0B09 u0B0A u0B0C u0B0F u0B10 u0B12 u0B13 u0B15 u0B18 u0B1B u0B1E u0B21 u0B22 u0B24 u0B27 u0B28 u0B2A u0B2D u0B2F u0B30 u0B32 u0B33 u0B36 u0B39 u0B3C u0B3D u0B3E u0B3F u0B40 u0B41 u0B42 u0B43 u0B45 u0B47 u0B48 u0B4B u0B4C u0B4D u0B4E u0B51 u0B54 u0B56 u0B57 u0B5A u0B5C u0B5D u0B5F u0B60 u0B61 u0B63 u0B66 u0B69 u0B6C u0B6E u0B6F u0B70 u0B73 u0B76 u0B79 u0B7C u0B7F u0B80 u0B82 u0B83 u0B85 u0B88 u0B8A u0B8B u0B8E u0B90 u0B91 u0B92 u0B94 u0B95 u0B97 u0B99 u0B9A u0B9C u0B9D u0B9E u0B9F u0BA0 u0BA3 u0BA4 u0BA6 u0BA8 u0BA9 u0BAA u0BAC u0BAE u0BAF u0BB2 u0BB5 u0BB7 u0BB8 u0BB9 u0BBB u0BBE u0BBF u0BC0 u0BC1 u0BC2 u0BC4 u0BC6 u0BC7 u0BC8 u0BCA u0BCB u0BCC u0BCD u0BD0 u0BD3 u0BD6 u0BD7 u0BD9 u0BDC u0BDF u0BE2 u0BE5 u0BE7 u0BE8 u0BEB u0BEE u0BEF u0BF0 u0BF1 u0BF2 u0BF4 u0BF7 u0BFA u0BFD u0C00 u0C01 u0C03 u0C05 u0C06 u0C09 u0C0C u0C0E u0C0F u0C10 u0C12 u0C15 u0C18 u0C1B u0C1E u0C21 u0C24 u0C28 u0C2A u0C2C u0C2F u0C32 u0C33 u0C35 u0C38 u0C39 u0C3B u0C3E u0C40 u0C41 u0C44 u0C46 u0C47 u0C48 u0C4A u0C4D u0C50 u0C53 u0C55 u0C56 u0C59 u0C5C u0C5F u0C60 u0C61 u0C62 u0C65 u0C66 u0C68 u0C6B u0C6E u0C6F u0C71 u0C74 u0C77 u0C7A u0C7D u0C80 u0C82 u0C83 u0C85 u0C86 u0C89 u0C8B u0C8C u0C8E u0C90 u0C92 u0C93 u0C95 u0C97 u0C9A u0C9C u0C9F u0CA1 u0CA3 u0CA7 u0CA8 u0CAA u0CAB u0CAF u0CB2 u0CB3 u0CB5 u0CB8 u0CB9 u0CBB u0CBE u0CBF u0CC0 u0CC1 u0CC2 u0CC4 u0CC6 u0CC7 u0CC8 u0CCA u0CCB u0CCC u0CCD u0CCF u0CD2 u0CD5 u0CD6 u0CD8 u0CDB u0CDE u0CE0 u0CE1 u0CE4 u0CE6 u0CE7 u0CE9 u0CEB u0CED u0CEF u0CF1 u0CF3 u0CF5 u0CF7 u0CF9 u0CFC u0CFF u0D00 u0D02 u0D03 u0D05 u0D08 u0D0B u0D0C u0D0D u0D0E u0D0F u0D10 u0D11 u0D12 u0D13 u0D15 u0D18 u0D1B u0D1F u0D22 u0D25 u0D28 u0D2A u0D2B u0D2E u0D31 u0D34 u0D37 u0D39 u0D3A u0D3D u0D3E u0D40 u0D41 u0D43 u0D46 u0D47 u0D48 u0D49 u0D4A u0D4B u0D4C u0D4D u0D4F u0D52 u0D55 u0D57 u0D58 u0D5B u0D5E u0D60 u0D61 u0D64 u0D66 u0D68 u0D6C u0D6F u0D70 u0D74 u0D78 u0D7B u0D7E u0D80 u0D81 u0D84 u0D87 u0D8B u0D8E u0D91 u0D94 u0D97 u0D9A u0D9D u0DA1 u0DA5 u0DA8 u0DAB u0DAE u0DB1 u0DB4 u0DB7 u0DBA u0DBD u0DBF u0DC0 u0DC3 u0DC6 u0DC9 u0DCC u0DCF u0DD2 u0DD5 u0DD8 u0DDB u0DDE u0DE1 u0DE4 u0DE7 u0DEA u0DED u0DF0 u0DF3 u0DF6 u0DF9 u0DFC u0DFF u0E00 u0E01 u0E02 u0E05 u0E08 u0E0C u0E0F u0E12 u0E16 u0E19 u0E1C u0E1F u0E22 u0E25 u0E28 u0E2B u0E2E u0E2F u0E30 u0E31 u0E32 u0E33 u0E34 u0E37 u0E3A u0E3E u0E3F u0E40 u0E42 u0E45 u0E46 u0E47 u0E48 u0E4B u0E4E u0E4F u0E50 u0E52 u0E55 u0E58 u0E59 u0E5A u0E5B u0E5F u0E63 u0E67 u0E6A u0E6D u0E70 u0E74 u0E77 u0E7B u0E7E u0E80 u0E81 u0E82 u0E84 u0E87 u0E88 u0E8A u0E8B u0E8D u0E8E u0E91 u0E94 u0E97 u0E99 u0E9A u0E9D u0E9F u0EA0 u0EA1 u0EA3 u0EA5 u0EA6 u0EA7 u0EA9 u0EAA u0EAB u0EAC u0EAD u0EAE u0EAF u0EB0 u0EB1 u0EB2 u0EB3 u0EB4 u0EB5 u0EB8 u0EB9 u0EBB u0EBC u0EBD u0EBE u0EBF u0EC0 u0EC1 u0EC4 u0EC6 u0EC7 u0EC8 u0ECA u0ECD u0ED0 u0ED3 u0ED7 u0ED9 u0EDA u0EDC u0EDD u0EE0 u0EE3 u0EE6 u0EE9 u0EEC u0EF0 u0EF3 u0EF6 u0EFA u0EFD u0F00 u0F01 u0F03 u0F04 u0F05 u0F09 u0F0D u0F0E u0F11 u0F12 u0F13 u0F15 u0F17 u0F18 u0F19 u0F1A u0F1B u0F1E u0F1F u0F20 u0F21 u0F24 u0F27 u0F29 u0F2A u0F2D u0F2E u0F31 u0F33 u0F34 u0F35 u0F36 u0F37 u0F38 u0F39 u0F3A u0F3B u0F3C u0F3D u0F3E u0F3F u0F40 u0F42 u0F43 u0F46 u0F47 u0F49 u0F4C u0F4D u0F4F u0F51 u0F52 u0F55 u0F56 u0F57 u0F58 u0F59 u0F5B u0F5C u0F5F u0F62 u0F65 u0F68 u0F69 u0F6B u0F6E u0F71 u0F72 u0F73 u0F74 u0F75 u0F76 u0F77 u0F78 u0F79 u0F7A u0F7D u0F7E u0F7F u0F80 u0F81 u0F83 u0F84 u0F85 u0F86 u0F87 u0F8B u0F8F u0F90 u0F92 u0F93 u0F95 u0F97 u0F99 u0F9B u0F9C u0F9D u0F9F u0FA1 u0FA2 u0FA3 u0FA6 u0FA7 u0FAA u0FAB u0FAC u0FAD u0FB0 u0FB1 u0FB2 u0FB3 u0FB4 u0FB5 u0FB6 u0FB7 u0FB8 u0FB9 u0FBA u0FBC u0FBE u0FC0 u0FC2 u0FC4 u0FC6 u0FC8 u0FCB u0FCC u0FCD u0FD0 u0FD4 u0FD7 u0FDB u0FDE u0FE2 u0FE5 u0FE8 u0FEA u0FEC u0FEE u0FF0 u0FF2 u0FF4 u0FF6 u0FF8 u0FFA u0FFC u0FFE u0a16 u0a17 u0a1c u0a21 u0a2b u0a3c u0b21 u0b22 u0b2f u0b3c u0b3e u0b47 u0b56 u0b57 u0b92 u0bbe u0bc6 u0bc7 u0bd7 u0c46 u0c56 u0cbf u0cc2 u0cc6 u0cd5 u0cd6 u0d3e u0d46 u0d47 u0d57 u0e01 u0e2e u0e32 u0e3f u0e40 u0e44 u0e4d u0e81 u0e99 u0ea1 u0eab u0eae u0eb2 u0ec0 u0ec4 u0ecd u0f40 u0f42 u0f4c u0f51 u0f56 u0f5b u0f71 u0f72 u0f74 u0f80 u0f90 u0f92 u0f9c u0fa1 u0fa6 u0fab u0fb2 u0fb3 u0fb5 u0fb7 u1 u1000 u1002 u1004 u1006 u1008 u100A u100C u100E u100F u1010 u1012 u1014 u1016 u1018 u101A u101C u101E u1020 u1023 u1025 u1028 u102A u102D u102F u1031 u1033 u1035 u1037 u1039 u103B u103D u103F u1041 u1043 u1046 u1048 u104A u104C u104E u1050 u1052 u1055 u1059 u105C u105E u1060 u1062 u1064 u1066 u1068 u106A u106C u106E u1070 u1072 u1074 u1076 u107A u107E u1082 u1086 u108A u108E u1092 u1096 u109A u109E u10A0 u10A2 u10A6 u10A9 u10AB u10AE u10B2 u10B5 u10B7 u10BA u10BE u10C3 u10C5 u10C6 u10C8 u10CA u10CB u10CF u10D0 u10D1 u10D3 u10D5 u10D7 u10D9 u10DC u10E0 u10E3 u10E5 u10E8 u10EC u10F1 u10F4 u10F6 u10F9 u10FB u10FD u10FF u1100 u1101 u1102 u1103 u1105 u1106 u1107 u1108 u1109 u110C u110F u110b u110c u110e u110f u1110 u1111 u1112 u1113 u1115 u1117 u1119 u111B u111D u111F u1121 u1123 u1125 u1127 u112A u112D u1130 u1133 u1136 u1139 u113C u113F u113c u113e u1140 u1142 u1145 u1147 u1149 u114B u114D u114F u114c u114e u1150 u1151 u1153 u1155 u1157 u1159 u115B u115D u115F u115f u1160 u1161 u1163 u1165 u1167 u1169 u116B u116D u116F u116d u116e u1171 u1172 u1173 u1175 u1177 u1179 u117B u117D u117F u1181 u1183 u1185 u1187 u1189 u118B u118D u118F u1191 u1193 u1195 u1197 u1199 u119B u119D u119F u119e u11A1 u11A2 u11A3 u11A5 u11A7 u11A8 u11A9 u11AB u11AD u11AF u11B1 u11B3 u11B6 u11B9 u11BB u11BE u11C1 u11C3 u11C6 u11C9 u11CB u11CE u11D0 u11D3 u11D6 u11D9 u11DC u11DF u11E2 u11E5 u11E7 u11E9 u11EC u11EF u11F1 u11F4 u11F6 u11F8 u11F9 u11FB u11FD u11FF u11a8 u11ab u11ae u11af u11b7 u11b8 u11ba u11bc u11bd u11be u11bf u11c0 u11c1 u11c2 u11eb u11f0 u11f9 u1200 u1201 u1203 u1205 u1207 u120A u120C u120F u1211 u1214 u1216 u1219 u121B u121E u1222 u1225 u1227 u1229 u122C u1230 u1233 u1235 u1237 u123A u123C u123E u1241 u1244 u1247 u1249 u124A u124E u1251 u1255 u1258 u125B u125E u1261 u1264 u1267 u126A u126D u1271 u1275 u1278 u127B u127E u1282 u1285 u1288 u128B u128E u1291 u1293 u1296 u1298 u129B u129E u12A1 u12A4 u12A6 u12A9 u12AD u12B0 u12B3 u12B7 u12BA u12BC u12BF u12C1 u12C3 u12C5 u12C7 u12C9 u12CB u12CD u12CF u12D1 u12D3 u12D5 u12D7 u12D9 u12DB u12DF u12E3 u12E7 u12EB u12EF u12F3 u12F7 u12FB u12FF u1303 u1307 u130B u130F u1313 u1318 u131D u1322 u1327 u132C u1331 u1336 u133B u1340 u1345 u1349 u134A u134F u1354 u1359 u135E u1362 u1366 u136A u136E u1372 u1375 u1376 u1377 u1378 u1379 u137A u137B u137C u137E u1380 u1382 u1386 u138A u138E u1392 u1396 u139A u139E u13A0 u13A2 u13A6 u13AA u13AE u13B2 u13B6 u13BA u13BE u13C2 u13C6 u13C9 u13CA u13CE u13D2 u13D6 u13DA u13DE u13E2 u13E6 u13EA u13EE u13F0 u13F2 u13F4 u13F6 u13F8 u13FA u13FC u13FE u1400 u1402 u1404 u1406 u1408 u140A u140D u1410 u1413 u1416 u1419 u141C u141F u1422 u1425 u1428 u142B u142E u1431 u1434 u1436 u1438 u143A u143C u143E u1440 u1442 u1444 u1446 u1448 u1449 u144A u144C u144E u1450 u1452 u1454 u1456 u1458 u145A u145C u145E u1460 u1462 u1464 u1466 u1468 u146A u146C u146E u1470 u1472 u1474 u1476 u1478 u147A u147C u147E u1480 u1482 u1484 u1486 u1488 u148A u148C u148E u1490 u1492 u1494 u1496 u1499 u149C u149F u14A2 u14A5 u14A8 u14AB u14AE u14B1 u14B5 u14B9 u14BD u14BF u14C1 u14C3 u14C5 u14C7 u14C9 u14CB u14CD u14CF u14D1 u14D3 u14D5 u14D7 u14D9 u14DB u14DD u14DF u14E1 u14E3 u14E5 u14E7 u14E9 u14EB u14ED u14EF u14F1 u14F3 u14F5 u14F7 u14F9 u14FB u14FD u14FF u1501 u1503 u1505 u1507 u1509 u150B u150D u150F u1511 u1513 u1515 u1517 u1519 u151B u1521 u1526 u152C u1530 u1536 u153A u153E u1545 u1549 u154A u154E u1552 u1556 u155B u1560 u1565 u1566 u156A u156F u1574 u1579 u1580 u1583 u1586 u158A u1591 u1597 u159C u15A3 u15AA u15AF u15B3 u15B7 u15BC u15C1 u15C7 u15C9 u15CD u15D1 u15D5 u15DA u15DE u15E2 u15E5 u15E8 u15EC u15F0 u15F7 u15FC u1602 u1609 u160E u1612 u1615 u1616 u161D u1622 u1629 u162D u1633 u1637 u163C u1640 u1645 u1648 u164B u1650 u1656 u165B u165E u1664 u1668 u166C u1671 u1675 u1679 u167D u1680 u1683 u1688 u168B u1692 u1696 u169C u16A0 u16A1 u16A6 u16AA u16AE u16B3 u16B6 u16BB u16C1 u16C4 u16C8 u16CB u16CF u16D2 u16D5 u16D8 u16DB u16DE u16E1 u16E4 u16E7 u16EA u16ED u16F1 u16F5 u16F9 u16FD u1700 u1701 u1705 u1709 u170D u1711 u1715 u1717 u1719 u171D u1721 u1725 u1729 u172D u1730 u1733 u1737 u173A u173D u1740 u1743 u1746 u1748 u1749 u174E u1751 u1754 u1757 u175A u175D u1760 u1763 u1766 u176A u176F u1772 u1775 u1778 u177B u177E u1780 u1781 u1784 u1788 u178C u1790 u1794 u1797 u179A u179D u17A0 u17A3 u17A6 u17A9 u17AC u17AF u17B2 u17B6 u17BA u17BD u17C1 u17C5 u17C9 u17CC u17D0 u17D4 u17D9 u17DC u17E0 u17E4 u17E8 u17EC u17F2 u17F9 u17FC u17FF u1800 u1802 u1805 u1808 u180B u180E u1811 u1814 u1817 u181A u181D u1820 u1823 u1826 u1829 u182C u182F u1834 u1837 u183A u183D u1842 u1846 u1849 u184C u184F u1852 u1855 u1858 u185B u185E u1861 u1864 u1868 u186B u186E u1872 u1876 u1879 u187E u1882 u1885 u1888 u188B u188E u1891 u1894 u1897 u189A u189D u18A0 u18A3 u18A6 u18A9 u18AD u18B0 u18B1 u18B5 u18B9 u18BD u18C1 u18C5 u18C9 u18CD u18D1 u18D5 u18D9 u18DD u18E1 u18E5 u18E9 u18ED u18F1 u18F5 u18F9 u18FD u1901 u1904 u1907 u190A u190E u1912 u1915 u1918 u191B u191E u1921 u1924 u1927 u192A u192C u192E u1930 u1932 u1934 u1936 u1938 u193A u193C u193E u1941 u1943 u1945 u1947 u1949 u194B u194D u194F u1951 u1953 u1955 u1957 u1959 u195B u195D u195F u1961 u1963 u1965 u1967 u1969 u196B u196D u196F u1971 u1973 u1975 u1977 u1979 u197B u197D u197F u1981 u1983 u1985 u1987 u1989 u198B u198D u198F u1991 u1993 u1995 u1997 u1999 u199B u199D u199F u19A1 u19A3 u19A5 u19A7 u19A9 u19AB u19AD u19AF u19B1 u19B3 u19B5 u19B7 u19B9 u19BB u19BD u19BF u19C1 u19C3 u19C5 u19C7 u19C9 u19CB u19CD u19CF u19D1 u19D3 u19D5 u19D7 u19D9 u19DB u19DD u19DF u19E1 u19E3 u19E5 u19E7 u19E9 u19EB u19ED u19EF u19F1 u19F3 u19F5 u19F7 u19F9 u19FB u19FD u19FF u1A01 u1A03 u1A05 u1A07 u1A09 u1A0B u1A0D u1A0F u1A11 u1A13 u1A15 u1A17 u1A19 u1A1B u1A1D u1A1F u1A21 u1A23 u1A25 u1A27 u1A29 u1A2B u1A2D u1A2F u1A31 u1A33 u1A35 u1A37 u1A3A u1A3C u1A3E u1A41 u1A44 u1A46 u1A48 u1A4A u1A4C u1A4E u1A50 u1A52 u1A54 u1A56 u1A58 u1A5A u1A5C u1A5E u1A60 u1A62 u1A64 u1A67 u1A6A u1A6D u1A70 u1A73 u1A76 u1A79 u1A7B u1A7D u1A7F u1A80 u1A81 u1A83 u1A85 u1A87 u1A89 u1A8B u1A8D u1A8F u1A91 u1A93 u1A95 u1A97 u1A99 u1A9B u1A9D u1A9F u1AA1 u1AA3 u1AA5 u1AA7 u1AA9 u1AAB u1AAD u1AB0 u1AB3 u1AB6 u1AB9 u1ABC u1ABF u1AC2 u1AC5 u1AC8 u1ACB u1ACE u1AD1 u1AD4 u1AD7 u1AD9 u1ADB u1ADD u1ADF u1AE1 u1AE3 u1AE5 u1AE7 u1AE9 u1AEB u1AED u1AEF u1AF1 u1AF3 u1AF5 u1AF7 u1AF9 u1AFB u1AFD u1AFF u1B01 u1B03 u1B05 u1B07 u1B09 u1B0B u1B0D u1B0F u1B11 u1B13 u1B15 u1B17 u1B19 u1B1A u1B1B u1B1D u1B1F u1B21 u1B23 u1B25 u1B27 u1B29 u1B2B u1B2D u1B2F u1B31 u1B33 u1B35 u1B37 u1B39 u1B3B u1B3D u1B3F u1B41 u1B43 u1B45 u1B47 u1B49 u1B4B u1B4D u1B4F u1B51 u1B53 u1B55 u1B57 u1B59 u1B5B u1B5D u1B5F u1B61 u1B63 u1B65 u1B67 u1B69 u1B6B u1B6D u1B6F u1B71 u1B73 u1B75 u1B77 u1B79 u1B7B u1B7D u1B7F u1B81 u1B83 u1B85 u1B87 u1B89 u1B8B u1B8D u1B8F u1B91 u1B93 u1B95 u1B97 u1B99 u1B9B u1B9D u1B9F u1BA1 u1BA3 u1BA5 u1BA7 u1BA9 u1BAB u1BAD u1BAF u1BB1 u1BB3 u1BB5 u1BB7 u1BB9 u1BBB u1BBD u1BBF u1BC1 u1BC3 u1BC5 u1BC7 u1BC9 u1BCB u1BCD u1BCF u1BD1 u1BD3 u1BD5 u1BD7 u1BD9 u1BDB u1BDD u1BDF u1BE1 u1BE3 u1BE5 u1BE7 u1BE9 u1BEB u1BED u1BEF u1BF1 u1BF3 u1BF5 u1BF7 u1BF9 u1BFB u1BFD u1BFF u1C01 u1C03 u1C05 u1C07 u1C09 u1C0B u1C0D u1C0F u1C11 u1C13 u1C15 u1C17 u1C19 u1C1B u1C1D u1C1F u1C21 u1C23 u1C25 u1C27 u1C29 u1C2B u1C2D u1C2F u1C31 u1C33 u1C35 u1C37 u1C39 u1C3B u1C3E u1C41 u1C44 u1C46 u1C48 u1C4A u1C4C u1C4E u1C50 u1C52 u1C54 u1C56 u1C58 u1C5A u1C5C u1C5E u1C60 u1C62 u1C64 u1C66 u1C68 u1C6A u1C6C u1C6E u1C70 u1C72 u1C74 u1C76 u1C78 u1C7A u1C7C u1C7E u1C80 u1C82 u1C84 u1C86 u1C88 u1C8A u1C8C u1C8E u1C90 u1C92 u1C94 u1C96 u1C98 u1C9A u1C9C u1C9E u1CA0 u1CA2 u1CA4 u1CA6 u1CA8 u1CAA u1CAC u1CAE u1CB0 u1CB2 u1CB4 u1CB6 u1CB8 u1CBA u1CBC u1CBE u1CC0 u1CC2 u1CC4 u1CC6 u1CC8 u1CCA u1CCC u1CCE u1CD0 u1CD2 u1CD4 u1CD6 u1CD8 u1CDA u1CDC u1CDE u1CE0 u1CE2 u1CE4 u1CE6 u1CE8 u1CEA u1CEC u1CEE u1CF0 u1CF2 u1CF4 u1CF6 u1CF8 u1CFA u1CFD u1D00 u1D02 u1D04 u1D07 u1D0A u1D0C u1D0F u1D12 u1D14 u1D17 u1D19 u1D1C u1D1F u1D22 u1D25 u1D28 u1D2B u1D2E u1D30 u1D32 u1D35 u1D38 u1D3A u1D3D u1D3F u1D41 u1D44 u1D46 u1D48 u1D4A u1D4C u1D4E u1D50 u1D53 u1D55 u1D58 u1D5A u1D5D u1D5F u1D62 u1D64 u1D67 u1D6B u1D6E u1D70 u1D72 u1D75 u1D79 u1D7C u1D7E u1D80 u1D83 u1D85 u1D87 u1D89 u1D8B u1D8E u1D90 u1D92 u1D94 u1D96 u1D98 u1D9A u1D9C u1D9E u1DA0 u1DA2 u1E00 u1E00a u1E01 u1E02 u1E02C u1E03 u1E04 u1E04D u1E05 u1E05d u1E06 u1E06D u1E07 u1E08 u1E09 u1E0A u1E0AE u1E0B u1E0Be u1E0C u1E0CE u1E0D u1E0De u1E0E u1E0EK u1E0F u1E0Fh u1E10 u1E10G u1E11 u1E11g u1E12 u1E12E u1E13 u1E13e u1E14 u1E15 u1E16 u1E17 u1E18 u1E18L u1E19 u1E19l u1E1A u1E1AI u1E1B u1E1Bi u1E1C u1E1D u1E1E u1E1EG u1E1F u1E1Fg u1E20 u1E20I u1E21 u1E22 u1E22I u1E23 u1E23m u1E24 u1E24I u1E25 u1E25i u1E26 u1E26I u1E27 u1E27i u1E28 u1E28K u1E29 u1E29k u1E2A u1E2Ah u1E2B u1E2C u1E2CU u1E2D u1E2Du u1E2E u1E2F u1E30 u1E30L u1E31 u1E31l u1E32 u1E32L u1E33 u1E33l u1E34 u1E34L u1E35 u1E35l u1E36 u1E36M u1E37 u1E37m u1E38 u1E39 u1E3A u1E3AN u1E3B u1E3Bn u1E3C u1E3CN u1E3D u1E3E u1E3EN u1E3F u1E3Fn u1E40 u1E41 u1E41n u1E42 u1E43 u1E43n u1E44 u1E44P u1E45 u1E45p u1E46 u1E46O u1E47 u1E48 u1E48R u1E49 u1E49r u1E4A u1E4AT u1E4B u1E4Bt u1E4C u1E4D u1E4E u1E4F u1E50 u1E51 u1E52 u1E53 u1E54 u1E54R u1E55 u1E55r u1E56 u1E56R u1E57 u1E57r u1E58 u1E58S u1E59 u1E5A u1E5AS u1E5B u1E5Bs u1E5C u1E5D u1E5E u1E5ET u1E5F u1E5Ft u1E60 u1E60T u1E61 u1E61t u1E62 u1E62T u1E63 u1E63t u1E64 u1E65 u1E66 u1E67 u1E68 u1E69 u1E6A u1E6AW u1E6B u1E6Bw u1E6C u1E6CU u1E6D u1E6Du u1E6E u1E6EZ u1E6F u1E6Fz u1E70 u1E70U u1E71 u1E71u u1E72 u1E72u u1E73 u1E74 u1E74e u1E75 u1E76 u1E76d u1E77 u1E78 u1E79 u1E7A u1E7B u1E7C u1E7CY u1E7D u1E7Dy u1E7E u1E7EW u1E7F u1E7Fw u1E80 u1E80Y u1E81 u1E81y u1E82 u1E82Y u1E83 u1E83y u1E84 u1E84X u1E85 u1E85x u1E86 u1E86X u1E87 u1E87x u1E88 u1E88Y u1E89 u1E89y u1E8A u1E8AY u1E8B u1E8By u1E8C u1E8CY u1E8D u1E8Dy u1E8E u1E8EZ u1E8F u1E8Fz u1E90 u1E91 u1E92 u1E93 u1E94 u1E94b u1E95 u1E96 u1E96k u1E97 u1E97u u1E98 u1E98y u1E99 u1E9A u1E9B u1EA0 u1EA0B u1EA1 u1EA1b u1EA2 u1EA2E u1EA3 u1EA3e u1EA4 u1EA5 u1EA6 u1EA7 u1EA8 u1EA9 u1EAA u1EAB u1EAC u1EAD u1EAE u1EAF u1EB0 u1EB1 u1EB2 u1EB3 u1EB4 u1EB5 u1EB6 u1EB7 u1EB8 u1EB8H u1EB9 u1EB9h u1EBA u1EBAI u1EBB u1EBBi u1EBC u1EBCI u1EBD u1EBDi u1EBE u1EBF u1EC0 u1EC1 u1EC2 u1EC3 u1EC4 u1EC5 u1EC6 u1EC7 u1EC8 u1EC8O u1EC9 u1ECA u1ECAK u1ECB u1ECBk u1ECC u1ECCR u1ECD u1ECDr u1ECE u1ECEU u1ECF u1ECFu u1ED0 u1ED1 u1ED2 u1ED3 u1ED4 u1ED5 u1ED6 u1ED7 u1ED8 u1ED9 u1EDA u1EDB u1EDC u1EDD u1EDE u1EDF u1EE0 u1EE1 u1EE2 u1EE3 u1EE4 u1EE4V u1EE5 u1EE5v u1EE6 u1EE6Y u1EE7 u1EE7y u1EE8 u1EE9 u1EEA u1EEB u1EEC u1EED u1EEE u1EEF u1EF0 u1EF1 u1EF2 u1EF2a u1EF3 u1EF4 u1EF4Z u1EF5 u1EF5z u1EF6 u1EF6a u1EF7 u1EF8 u1EF8a u1EF9 u1F00 u1F01 u1F02 u1F03 u1F04 u1F05 u1F06 u1F07 u1F08 u1F09 u1F0A u1F0B u1F0C u1F0D u1F0E u1F0F u1F10 u1F11 u1F12 u1F13 u1F14 u1F15 u1F18 u1F19 u1F1A u1F1B u1F1C u1F1D u1F1E u1F20 u1F21 u1F22 u1F23 u1F24 u1F25 u1F26 u1F27 u1F28 u1F29 u1F2A u1F2B u1F2C u1F2D u1F2E u1F2F u1F30 u1F31 u1F32 u1F33 u1F34 u1F35 u1F36 u1F37 u1F38 u1F39 u1F3A u1F3B u1F3C u1F3D u1F3E u1F3F u1F40 u1F41 u1F42 u1F43 u1F44 u1F45 u1F48 u1F49 u1F4A u1F4B u1F4C u1F4D u1F50 u1F51 u1F52 u1F53 u1F54 u1F55 u1F56 u1F57 u1F59 u1F5B u1F5D u1F5F u1F60 u1F61 u1F62 u1F63 u1F64 u1F65 u1F66 u1F67 u1F68 u1F69 u1F6A u1F6B u1F6C u1F6D u1F6E u1F6F u1F70 u1F71 u1F72 u1F73 u1F74 u1F75 u1F76 u1F77 u1F78 u1F79 u1F7A u1F7B u1F7C u1F7D u1F80 u1F81 u1F82 u1F83 u1F84 u1F85 u1F86 u1F87 u1F88 u1F89 u1F8A u1F8B u1F8C u1F8D u1F8E u1F8F u1F90 u1F91 u1F92 u1F93 u1F94 u1F95 u1F96 u1F97 u1F98 u1F99 u1F9A u1F9B u1F9C u1F9D u1F9E u1F9F u1FA0 u1FA1 u1FA2 u1FA3 u1FA4 u1FA5 u1FA6 u1FA7 u1FA8 u1FA9 u1FAA u1FAB u1FAC u1FAD u1FAE u1FAF u1FB0 u1FB1 u1FB2 u1FB3 u1FB4 u1FB6 u1FB7 u1FB8 u1FB9 u1FBA u1FBB u1FBC u1FBE u1FBF u1FC1 u1FC2 u1FC3 u1FC4 u1FC6 u1FC7 u1FC8 u1FC9 u1FCA u1FCB u1FCC u1FCD u1FCE u1FCF u1FD0 u1FD1 u1FD2 u1FD3 u1FD6 u1FD7 u1FD8 u1FD9 u1FDA u1FDB u1FDD u1FDE u1FDF u1FE0 u1FE1 u1FE2 u1FE3 u1FE4 u1FE5 u1FE6 u1FE7 u1FE8 u1FE9 u1FEA u1FEB u1FEC u1FED u1FEE u1FF2 u1FF3 u1FF4 u1FF6 u1FF7 u1FF8 u1FF9 u1FFA u1FFB u1FFC u1FFE u1fbf u1ffe u2 u2000 u2001 u2002 u2003 u2004 u2005 u2006 u2007 u2008 u2009 u200A u200B u200C u200D u200E u200F u2010 u2011 u2012 u2013 u2014 u2015 u2016 u2017 u2018 u2019 u201A u201C u201D u201E u201F u2020 u2027 u2028 u2029 u202A u202B u202C u202D u202E u202F u202e u2030 u2031 u2032 u2033 u2034 u2035 u2038 u2039 u203A u203B u203E u203F u2040 u2041 u2043 u2044 u2045 u2046 u206A u206F u206f u2070 u2074 u2079 u207A u207C u207D u207E u207F u2080 u2089 u208A u208C u208D u208E u20A0 u20AB u20D0 u20D1 u20D2 u20D3 u20D4 u20D5 u20D6 u20D7 u20D8 u20D9 u20DA u20DB u20DC u20DD u20DE u20DF u20E0 u20E1 u20a1 u20a2 u20a3 u20a4 u20a5 u20a6 u20a7 u20a8 u20a9 u20aa u20ab u20ac u2100 u2101 u2102 u2103 u2106 u2107 u2108 u2109 u210A u210B u210D u210E u210F u2110 u2112 u2113 u2114 u2115 u2116 u2117 u2118 u211D u211E u2123 u2124 u2125 u2126 u2127 u2128 u2129 u212A u212B u212D u212E u212F u2130 u2131 u2132 u2133 u2134 u2135 u2138 u2150 u2153 u215F u2160 u216C u216D u216E u216F u217C u217D u217E u217F u2180 u2181 u2182 u2190 u2191 u2192 u2193 u2194 u2195 u21D1 u21D2 u21D3 u21D4 u21D5 u21EA u2200 u2203 u2204 u2208 u2209 u220B u220C u220b u2212 u2215 u221E u2223 u2224 u2225 u2226 u222b u222e u2241 u2243 u2244 u2245 u2247 u2248 u2249 u224D u224d u2260 u2261 u2262 u2264 u2265 u226D u226E u226F u2270 u2271 u2272 u2273 u2274 u2275 u2276 u2277 u2278 u2279 u227A u227B u227C u227D u227a u227b u227c u227d u2280 u2281 u2282 u2283 u2284 u2285 u2286 u2287 u2288 u2289 u2291 u2292 u22A2 u22A8 u22A9 u22AB u22AC u22AD u22AE u22AF u22B2 u22B3 u22B4 u22B5 u22E0 u22E1 u22E2 u22E3 u22EA u22EB u22EC u22ED u22F1 u22a2 u22a8 u22a9 u22ab u22b2 u22b3 u22b4 u22b5 u2300 u2302 u2307 u2308 u230B u230C u231F u2320 u2321 u2322 u2328 u2329 u232A u232B u237A u2400 u2424 u2435 u2440 u244A u245D u2460 u2467 u246A u249B u249C u24AA u24D6 u24E9 u24EA u2500 u2502 u2524 u2580 u2595 u25A0 u25EF u25a0 u25cb u2600 u2613 u261A u266F u2700 u2701 u2704 u2706 u2709 u270C u2726 u2727 u2729 u274B u274D u274F u2752 u2756 u2758 u275E u2761 u2767 u2776 u2793 u2794 u2798 u27AF u27B1 u27BE u27C0 u2800 u2900 u2928 u2A80 u2B2A u2D2C u2E80 u2F00 u2F2E u2FE0 u2FF0 u3000 u3001 u3002 u3003 u3004 u3005 u3006 u3007 u3008 u3009 u300A u300B u300C u300D u300E u300F u300a u300b u300c u300d u300e u300f u3010 u3011 u3012 u3013 u3014 u3015 u3016 u3017 u3018 u3019 u301A u301B u301C u301D u301E u301F u3020 u3021 u3029 u302A u302F u3030 u3031 u3035 u3036 u3037 u303F u3040 u3041 u3042 u3043 u3044 u3045 u3046 u3047 u3048 u3049 u304A u304B u304C u304D u304E u304F u304b u304d u304f u3050 u3051 u3052 u3053 u3054 u3055 u3056 u3057 u3058 u3059 u305A u305B u305C u305D u305E u305F u305b u305d u305f u3060 u3061 u3062 u3063 u3064 u3065 u3066 u3067 u3068 u3069 u306F u306f u3070 u3072 u3073 u3075 u3076 u3078 u3079 u307B u307C u307b u3082 u3083 u3084 u3085 u3086 u3087 u3088 u308D u308E u308F u3094 u3099 u309A u309B u309C u309D u309E u309a u309d u30A0 u30A1 u30A2 u30A3 u30A4 u30A5 u30A6 u30A7 u30A8 u30A9 u30AA u30AB u30AC u30AD u30AE u30AF u30B0 u30B1 u30B2 u30B3 u30B4 u30B5 u30B6 u30B7 u30B8 u30B9 u30BA u30BB u30BC u30BD u30BE u30BF u30C0 u30C1 u30C2 u30C3 u30C4 u30C5 u30C6 u30C7 u30C8 u30C9 u30CF u30D0 u30D2 u30D3 u30D5 u30D6 u30D8 u30D9 u30DB u30DC u30DD u30DF u30E1 u30E2 u30E3 u30E4 u30E5 u30E6 u30E7 u30E8 u30ED u30EE u30EF u30F0 u30F1 u30F2 u30F4 u30F5 u30F6 u30F7 u30F8 u30F9 u30FA u30FB u30FC u30FD u30FE u30a1 u30a2 u30a3 u30a4 u30a5 u30a6 u30a7 u30a8 u30a9 u30aa u30ab u30ad u30af u30b1 u30b3 u30b5 u30b7 u30b9 u30bb u30bd u30bf u30c1 u30c3 u30c4 u30c6 u30c8 u30ca u30cb u30cc u30cd u30ce u30cf u30d2 u30d5 u30d8 u30db u30de u30df u30e0 u30e1 u30e2 u30e3 u30e4 u30e5 u30e6 u30e7 u30e8 u30e9 u30ea u30eb u30ec u30ed u30ef u30f0 u30f1 u30f2 u30f3 u30fb u30fc u30fd u3100 u3105 u312C u3130 u3131 u3180 u318E u3190 u3191 u3192 u3195 u3196 u319F u31A0 u31C0 u3200 u321C u3220 u3229 u322A u3231 u3243 u3260 u327B u327F u3280 u3289 u328A u32B0 u32C0 u32CB u32D0 u32FE u3300 u3376 u337B u33DD u33E0 u33FE u3400 u3409 u3433 u3609 u3630 u3709 u3749 u3800 u3837 u3980 u3A39 u3A80 u3C3B u3E3D u4000 u400C u400D u400E u400F u403F u4180 u4241 u4443 u4645 u46B1 u473B u4800 u4948 u4A4A u4AA5 u4B4A u4B80 u4D4C u4DB6 u4E00 u4F4E u4e00 u4e01 u4e03 u4e09 u4e0a u4e0b u4e19 u4e2d u4e59 u4e5d u4e8c u4e94 u4eba u4ee3 u4f01 u4f11 u4f1a u5000 u5017 u512a u5150 u5154 u5156 u516b u516d u5199 u52b4 u533b u5341 u5352 u5354 u5370 u53f3 u540d u547c u548c u5552 u56db u571f u5730 u5800 u5857 u591c u5927 u5929 u5973 u5A59 u5A64 u5BC3 u5C4A u5C5B u5C5C u5C66 u5C80 u5CA5 u5F5E u5b66 u5b97 u5de6 u5e73 u5f0f u6000 u601A u6060 u6180 u6210 u6261 u6463 u6580 u65e5 u660e u662d u665C u665E u6665 u6666 u6680 u6681 u6689 u66A5 u6708 u6709 u6728 u6800 u6824 u682a u6858 u685B u685E u6868 u686E u6871 u6872 u6874 u687B u6880 u68A5 u6968 u6A6A u6B24 u6D6C u6F68 u6b63 u6c34 u6cbb u6ce8 u7001 u7002 u7004 u7005 u700A u7068 u706b u70b9 u7279 u740A u742A u7473 u748A u7532 u7537 u762A u764A u7675 u76e3 u772A u776A u7800 u780A u7877 u793e u795d u7968 u796d u79d8 u7A68 u7C68 u7D68 u7F7E u7FE1 u7FE2 u7FFF u7FFFNQTWZ u800F u8058 u805C u8066 u8080 u8086 u8087 u8088 u8089 u8094 u8097 u8098 u80A3 u80A5 u80A6 u80B0 u80B7 u80BC u80BE u80C0 u80C4 u80C9 u80CC u80CD u80D0 u80D1 u80D4 u80D7 u80DC u80DD u80DE u80E3 u80EA u80F2 u80FA u8166 u8181 u81A5 u81ea u81f3 u8281 u82C7 u8368 u8508 u8780 u8786 u87A5 u88A5 u8980 u8988 u89A5 u8A8B u8B8A u8C8D u8D8C u8E8F u8F8E u8ca1 u8cc7 u9069 u9091 u9190 u91d1 u9293 u9392 u9594 u9596 u9796 u9805 u9980 u9998 u9AA5 u9B9A u9B9C u9D9C u9D9E u9DAB u9F9E u9FA0 u9FA5 u9fff uA000 uA1A0 uA1A2 uA3A2 uA490 uA4D0 uA504 uA505 uA506 uA508 uA509 uA50B uA50C uA50D uA512 uA514 uA51B uA51D uA51E uA522 uA539 uA53E uA53F uA540 uA550 uA556 uA579 uA580 uA5A4 uA5A5 uA5A50 uA5A51 uA5A53 uA5A55 uA5A56 uA5A5A uA5A5C uA5A5F uA5A5H uA5A5J uA5A5L uA5A5W uA5A5Y uA5A5h uA5A5x uA7A6 uA7A8 uA8A8 uA9A8 uA9AA uABAB uABAC uABB7 uABBF uAC00 uACAB uADA5 uAEAD uAEAF uB0AF uB1A5 uB2A5 uB2B1 uB3B4 uB4B3 uB5B6 uB6B5 uB8A5 uB8AB uB9A5 uBAB9 uBABB uBCBB uBD80 uBEBD uBF89 uC0B3 uC1A5 uC2C1 uC3C2 uC468 uC5C6 uC6C5 uC7C8 uC9C8 uCAA5 uCBA5 uCBCA uCDCC uCECF uCFCE uCFD1 uD0A8 uD268 uD2D3 uD368 uD5D4 uD5D6 uD768 uD7A3 uD7A4 uD800 uD8D8 uD8D9 uD9D9 uDA68 uDADB uDBFF uDC00 uDCDB uDE30 uDFE0 uDFFF uE000 uE030 uE1A5 uE280 uE4E3 uE4E5 uE524 uE6E7 uE7E6 uE800 uE830 uE8E9 uEAE9 uEBEC uECEB uEDEE uEEED uEFF0 uF001 uF002 uF003 uF0EF uF180 uF3F4 uF5F6 uF780 uF8F9 uF900 uFA2D uFB00 uFB01 uFB02 uFB03 uFB04 uFB05 uFB06 uFB13 uFB14 uFB15 uFB16 uFB17 uFB1E uFB1F uFB28 uFB29 uFB2A uFB2B uFB2C uFB2D uFB2E uFB2F uFB30 uFB31 uFB32 uFB33 uFB34 uFB35 uFB36 uFB38 uFB39 uFB3A uFB3B uFB3C uFB3E uFB40 uFB41 uFB43 uFB44 uFB46 uFB47 uFB48 uFB49 uFB4A uFB4B uFB4C uFB4D uFB4E uFB50 uFBB1 uFBD3 uFBFC uFD3D uFD3E uFD3F uFD50 uFD8F uFD92 uFDC7 uFDF0 uFDFB uFDFE uFE00 uFE20 uFE23 uFE30 uFE31 uFE32 uFE33 uFE34 uFE35 uFE36 uFE37 uFE38 uFE39 uFE3A uFE3B uFE3C uFE3D uFE3E uFE3F uFE40 uFE41 uFE42 uFE43 uFE44 uFE49 uFE4C uFE4D uFE4F uFE50 uFE52 uFE54 uFE57 uFE58 uFE59 uFE5A uFE5B uFE5C uFE5D uFE5E uFE5F uFE61 uFE62 uFE63 uFE64 uFE66 uFE68 uFE69 uFE6A uFE6B uFE70 uFE72 uFE74 uFE76 uFEFC uFEFF uFF00 uFF01 uFF03 uFF04 uFF05 uFF07 uFF08 uFF09 uFF0A uFF0B uFF0C uFF0D uFF0E uFF0F uFF10 uFF19 uFF1A uFF1B uFF1C uFF1E uFF1F uFF20 uFF21 uFF3A uFF3B uFF3C uFF3D uFF3F uFF41 uFF5A uFF5B uFF5C uFF5D uFF5E uFF61 uFF62 uFF63 uFF64 uFF65 uFF66 uFF6F uFF70 uFF71 uFF9D uFF9E uFF9F uFFA0 uFFA5 uFFBE uFFC2 uFFC7 uFFCA uFFCF uFFD2 uFFD7 uFFDA uFFDC uFFE0 uFFE1 uFFE2 uFFE4 uFFE5 uFFE6 uFFE8 uFFEC uFFED uFFEE uFFF0 uFFFD uFFFE uFFFF uOdd uSectorShift ub uc uci ucl ucp udp udx udy ue uf uffff ugly uguig uhe uiuc ukukr ul ulenSq ulp ulps ulpval ultimately umlaut un unable unaccelerated unacceptable unaffected unaligned unalignedKnown unaltered unambiguous unappealing unascribed unassigned unauthorized unavailable unavoidable unbalanced unbiased unbind unblock unblocked unbound unbounded unc uncancelled uncaught uncaughtException uncertainty unchanged unchecked unclosed uncollated uncomment uncommitted uncommon unconditionally unconnected unconsumed undecorated undefined under underConstruction underallocation underbar underbars underdot underflow underflowed underline underlineOffset underlineThickness underlyhing underlying underneath underscore underscores understable understand understands understood undesirable undetermined undisplayable undo undone unduplicated unencoded unequal unescaped uneven unexpected unexpectedly unexportObject unflattened unforgeable unfortunate unfortunately unhappy unicast unicode unicodeBlockStarts unicodes unidirectional unifies uniform uniformity uniformly unify unimportant uninitialized uninitializedMap uninstantiable unintentionally uninterpreted uninvoked union unioning uniq unique uniqueMethods uniquely uniqueness unit unitInUse unitIncrement unitIndex units unitsInCommon unitsInUse unitsRequired universal universally unknown unknownAddress unknown_array unknowns unlabeled unless unlike unlikely unlimited unlink unload unloaded unlocalized unlock unlocks unmap unmappable unmapped unmapping unmaps unmarshaling unmarshalled unmarshalling unmatched unmodifiable unmodifiableCollection unmodifiableList unmodifiableMap unmodifiableSet unmodifiableSortedMap unmodifiableSortedSet unmodified unmounting unnamed unnecessarily unnecessary unneeded unnormalized unordered unpack unpackRules unpackTimes unpacking unparseable unparsed unpopulated unpredicable unpredictability unpredictable unprepared unpublished unqiue unqualifiedClassName unquoted unreachable unread unreadAvail unreasonably unrecognized unreferenced unregistered unrelated unreliable unreserved unresolvable unresolved unroll unrolled unsafe unsatisfactory unscaled unscaledVal unscaledValue unscrupulous unset unshared unsharedMarker unsightly unsigned unsignedLongCompare unspecified unstarted unsuccessful unsupported unsuspendSomeThreads unsynchronized until untilFocused unto untouched untransformed untrusted unusable unused unusual unwrap unwrapped up upCycleDefaultFocusTraversalKeys upCycleFocusTraversalKeys upFocusCycle upalpha upcalls upcates upcoming updatable update updateArray updateAsciiStream updateBigDecimal updateBinaryStream updateBlob updateBoolean updateBounds updateByte updateBytes updateCharacterStream updateClob updateCounts updateCur updateCursorImmediately updateDate updateDouble updateFloat updateInt updateLong updateLookupTable updateNull updateObject updateRef updateRow updateRunInfo updateShort updateStateTable updateString updateSystemColors updateTime updateTimestamp updated updater updates updatesAreDetected updating upercase uphold upon upper upperCase upperCaseChar upperChar upperCharArray upperMap uppercase uppercased upscaled upsilon upto upward upwards ur urge urgent uri uric uric_no_slash url urlc urlencoded urls urn urp ururd us usCollator usable usage use useCaches useDaylight useDaylightTime useDeferredClose useDouble useExponentialNotation useMonth usePlatformFontMetrics useProtocolVersion useProxy useShiftModifier useSocks useThousands useV4 usecaches used usedInContractSeq useful usefull usefully useless user userBounds userInfo userName userinfo username usernames users uses usesFractionalMetrics usesLocalFilePerTable usesLocalFiles usesPlatformFont usesShift usesShiftModifier using usingProxy usno usr usr_paths usual usually ut utc utcCal utf utflen util utilities utility utilize utilized uuml uwe uxxxx uzuzb v v1 v2 v4 v4addr v5 v6 vAdjustable vAdjustableValue val val1 val2 valBits valEquals valid validAttribs validMask validate validateFields validateObject validateTree validated validatedContents validation validations validity valign vals value value1 value2 valueHash valueIndex valueIsAdjusting valueList valueOf valueSearchNonNull valueSearchNull valueToExpression valueToName valued values valuesMatch van var variable variables variant variant1 variant2 variantLength variantNames variants variation variations varies variety various vary varying vast vbarOn vbarWidth vcap ve vec vecswap vector vectors vendor vendorCode vendors ver verification verificationEngine verificationKey verified verifier verifies verify verifySubclass verifying versa version versionColumnNotPseudo versionColumnPseudo versionColumnUnknown versioning versions vert vertex vertical verticalScrollBar vertically vertices very veto vetoable vetoableChange vetoableChangeSupportSerializedDataVersion vetoableSupport vetoed vetos vgap via vice victim video vie view viewHeight viewWidth viewable viewed viewedBuffer viewer viewers viewport views violate violated violates violating violation virgin virtual virtualBounds viruses vis visibility visible visibleAmount visibleIndex visibly visit visited visual vivie vkMap vlist vm vmAllowSuspension vmspec vnd void volatile volume vovol vowel vowels vs vt vulnerability vulnerable w w3 wIsReal wa wait waitFor waitForAll waitForID waitForIdle waitForProcessExit waited waiters waiting waits wake wakeup walk walked walks wall wallSec walls want wants war warn warning warningString warnings warrant was wasNull wasn waste wasted wasting watch watermelon wav way ways wb wbits we weak weakChild weakThis weakValue weakWindow weaker wednesday weeded weeding week weekCount weekNo weekNumber weekday weekdays weeks weight weightX weightY weight_diff weights weightx weighty weird well went were weren west westward wether wh what whatever whatsoever wheel wheelAmt wheelScrollingEnabled when whenever where whereas whereby wherein whereupon wherever whether which whichever while whim white whiteSpaceChars whitespace whitespaceChars whitespaces whitespce who whoever whole wholly whose why wich wide widening wider widget widgets width widthToAlignmentPoint widths wiht wild wildcard wildcards will willing willy win win32 wind winding window windowActivated windowBorder windowBounds windowClosed windowClosing windowClosingDelivered windowClosingException windowClosingNotify windowDeactivated windowDeiconfied windowDeiconified windowFocusL windowFocusListener windowFocusListenerK windowFocusWindowK windowGainedFocus windowIconified windowL windowListener windowListenerK windowLostFocus windowOpened windowSerializedDataVersion windowStateChanged windowStateL windowStateListener windowStateListenerK windowText windowed windowedModeBounds windowing windowless windows wins wire wise wish wishes wishing with withWhiteSpace within without wk wlen wls womStamp wombat won word wordChars wordcount words wordwise work workaround worker workhorse working workingLocale works world worry wors worst worth would wouldn wowol woy woyStamp wr wrap wrapped wrapper wrappers wrapping wraps wrinkle writable write writeArray writeAsciiStream writeBigDecimal writeBinaryStream writeBlob writeBlockHeader writeBoolean writeBooleans writeBuffer writeBufferSize writeByte writeBytes writeChar writeCharacterStream writeChars writeClass writeClassDesc writeClassDescriptor writeClob writeDate writeDouble writeDoubles writeExpression writeExternal writeExternalData writeFatalException writeFields writeFileDescriptor writeFloat writeFloats writeHandle writeInt writeInts writeLocation writeLong writeLongUTF writeLongs writeMethod writeNonProxy writeNonProxyDesc writeNull writeObject writeObject0 writeObject1 writeObjectMethod writeObjectOverride writeOrdinaryObject writeProxyDesc writeRef writeReplace writeReplaceMethod writeSQ writeSQL writeSerialData writeShort writeShorts writeSide writeStatement writeStreamHeader writeString writeStruct writeTime writeTimestamp writeTo writeTypeString writeURL writeUTF writeUTFBody writeUnshared writeable writeln writer writes writing writtem written wrong wrongBreakPositions wrongly wroteUnencodedChar wrt ws wst wt wtb www x x0 x1 x10 x2 xAlign xDec xIndex xInt xLen xLong xMax xOrg xPoints xbgrmodel xcp xcps xerr xes xform xhi xhxho xlen xlo xm xml xmul xn xoffs xor xorcolor xpoints xr xrgbRasRef xrgbmodel xstart xt xvec xx xxx xxxx xxyxyyyxyxyxxyxyx xxyxyyyxyxyxxyxyxyy xy xyz y y0 y1 y2 yAlign yIndex yLen yMax yOrg yPoints y_amount year yearLength years yellow yen yerr yes yet yhi yi yield yielding yields yiyid ylen ylo ylong ym ymul yn yoffs yomi you your yourself yoyor ypoints yr ystart yucky yvec yxyyyxyxyxxyxyxyy yy yyyy yyyyMMdd yyyyy z za zapParsedStr zazha zed zero zeroDelta zeroDigit zeroDigitCount zeroPaddingNumber zeroed zeroes zeroeth zeroing zeros zeroth zet zh zhzho zi zip zlen zlong zone zoneID zoneIndex zoneOffset zoneResource zoneString zoneStrings zones zoro zuzul zval zy zzz zzzz backport-util-concurrent-3.1-src/test/serialization/0000755001750700037720000000000010643402426021543 5ustar dawidkdclbackport-util-concurrent-3.1-src/test/serialization/SerializationTest.java0000644001750700037720000001505210366062643026073 0ustar dawidkdcl import java.rmi.MarshalledObject; import java.io.*; import java.util.List; import java.util.ArrayList; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.PriorityQueue; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import java.util.HashMap; import java.util.Map; import java.util.Iterator; import java.util.Collection; /** * Class to test serial compatibility between backport versions */ public class SerializationTest { final static List ldata; final static Map mdata; static { ldata = new ArrayList(); ldata.add("s1"); ldata.add("s2"); ldata.add("s3"); mdata = new HashMap(); mdata.put("key 1", "value 1"); mdata.put("key 2", new Long(4)); } public static void main(String[] args) throws IOException { if (args.length < 2) throw new IllegalArgumentException("Need 2 arguments"); String op = args[0]; String filename = args[1]; File f = new File(filename); if ("-serialize".equals(op) || "serialize".equals(op)) { FileOutputStream fout = new FileOutputStream(f); OutputStream out = new BufferedOutputStream(fout); List objs = createObjects(); for (Iterator itr = objs.iterator(); itr.hasNext(); ) { serializeObject(itr.next(), out); } out.flush(); out.close(); } else { FileInputStream fin = new FileInputStream(f); InputStream in = new BufferedInputStream(fin); deserializeObjects(in); } } private static List createObjects() { List objs = new ArrayList(); // collections objs.add(new ArrayBlockingQueue(100, false, ldata)); objs.add(new ArrayDeque(ldata)); objs.add(new LinkedBlockingDeque(ldata)); objs.add(new LinkedBlockingQueue(ldata)); objs.add(new LinkedList(ldata)); objs.add(new PriorityQueue(ldata)); objs.add(new PriorityBlockingQueue(ldata)); CopyOnWriteArrayList cowl = new CopyOnWriteArrayList(ldata); objs.add(cowl); objs.add(cowl.subList(1, 2)); objs.add(new CopyOnWriteArraySet(ldata)); objs.add(new SynchronousQueue(false)); objs.add(new SynchronousQueue(true)); ConcurrentHashMap m = new ConcurrentHashMap(mdata); objs.add(m); //objs.add(m.keySet()); //objs.add(m.values()); objs.add(new ConcurrentLinkedQueue(ldata)); NavigableMap nm = new ConcurrentSkipListMap(mdata); objs.add(nm); objs.add(nm.subMap("key 0", "key 3")); NavigableSet ns = new ConcurrentSkipListSet(mdata.keySet()); objs.add(ns); objs.add(ns.subSet("key 0", "key 3")); nm = new TreeMap(mdata); objs.add(nm); objs.add(nm.subMap("key 0", "key 3")); ns = new TreeSet(mdata.keySet()); objs.add(ns); objs.add(ns.subSet("key 0", "key 3")); // atomics objs.add(new AtomicBoolean(true)); objs.add(new AtomicInteger(123)); objs.add(new AtomicIntegerArray(new int[] { 1, 2, 3})); objs.add(new AtomicLong(123L)); objs.add(new AtomicLongArray(new long[] { 1L, 2L, 3L})); objs.add(new AtomicReference(new Integer(3))); objs.add(new AtomicReferenceArray(new Integer[] { new Integer(1), new Integer(2), new Integer(3)})); // locks serializeLock(objs, new ReentrantLock(false)); serializeLock(objs, new ReentrantLock(true)); ReentrantReadWriteLock rr = new ReentrantReadWriteLock(); objs.add(rr); serializeLock(objs, rr.readLock()); serializeLock(objs, rr.writeLock()); serializeSemaphore(objs, new Semaphore(10, false)); serializeSemaphore(objs, new Semaphore(10, true)); // other objs.add(TimeUnit.DAYS); objs.add(TimeUnit.HOURS); objs.add(TimeUnit.MINUTES); objs.add(TimeUnit.SECONDS); objs.add(TimeUnit.MILLISECONDS); objs.add(TimeUnit.MICROSECONDS); objs.add(TimeUnit.NANOSECONDS); return objs; } private static void serializeLock(List objs, Lock l) { l.lock(); try { objs.add(l); objs.add(l.newCondition()); } catch (UnsupportedOperationException e) {} finally { l.unlock(); } } private static void serializeSemaphore(List objs, Semaphore s) { s.acquireUninterruptibly(); try { objs.add(s); } finally { s.release(); } } private static void serializeObject(Object obj, OutputStream out) { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(obj); oos.flush(); oos.close(); int size = bos.size(); DataOutputStream dout = new DataOutputStream(out); dout.writeInt(size); bos.writeTo(dout); } catch (IOException e) { throw new RuntimeException(e); } } private static void deserializeObjects(InputStream in) throws IOException { DataInput din = new DataInputStream(in); while (true) { int size; try { size = din.readInt(); } catch (EOFException e) { return; } byte[] arr = new byte[size]; din.readFully(arr); ByteArrayInputStream bin = new ByteArrayInputStream(arr); ObjectInputStream oin = new ObjectInputStream(bin); try { Object obj = oin.readObject(); System.out.println(obj); if (obj instanceof Lock) { Lock l = (Lock)obj; l.lock(); l.unlock(); } else if (obj instanceof ReadWriteLock) { ReadWriteLock rl = (ReadWriteLock)obj; Lock r = rl.readLock(); Lock w = rl.writeLock(); r.lock(); r.unlock(); w.newCondition(); w.lock(); w.unlock(); } } catch (Throwable e) { e.printStackTrace(); } } } } backport-util-concurrent-3.1-src/external/0000755001750700037720000000000010643402427017532 5ustar dawidkdclbackport-util-concurrent-3.1-src/external/junit.jar0000755001750700037720000035435610156637464021416 0ustar dawidkdclPK ®»$- META-INF/PK®»$-META-INF/MANIFEST.MFóMÌËLK-.Ñ K-*ÎÌϳR0Ô3àår.JM,IMÑuª´RpÌ+ šèòrñrPK/c„10PK rº$-junit/PK ʺ$- junit/awtui/PK ʺ$-junit/extensions/PK ʺ$-junit/framework/PK ­»$- junit/runner/PK ˺$-junit/swingui/PK sº$-junit/swingui/icons/PK ̺$- junit/textui/PK ®»$- junit3.8.1/PKʺ$-junit/awtui/AboutDialog$1.class}P]KA=7I»&®MLšÔÔ¤VɃFìÆ·‚R¢!´BJÞ'›©NXwew6ÒŸ%Ø|ðôG‰w&¡H1 ÷cÎ9÷Ìý{{‡,ö°E¨OÒPiO\éTyÝQ”ê#%‚謵‰˜ /á™÷m4‘¾v%4m—9žœÊP{]_«(ì«DËPÆ^^ês•´:< ¿`Â!?øês©•Ï„CŰO„ÆöBÆÎëEcIÈnï ]°R@¯\8XÊ#ƒ¡ØW¡üš^Œdü]ŒÆ–û‘/‚¡ˆ•©çÍœ1HX_4¬µÏ‹ÂþìTÆ?¢øBŽ ìî©Ï›Ü,þ{Ÿ 9X#8c•\F‰tñÖX®c@ì¢ñœ¡0ˆÒØ—_”q\zäÜ“Þ D’È^@¼J¾e³Žy˜“á[À2×.g¹¶öÛ»¿°zm1e‹2/«SáÌåhº¯QåH¨áÍ\å3Gƒ]jß`õ7ÿkTÙAÍjÔf¸¹†ÉšxgÙ–ó›–5ÓÊPK؉Þ䎡PKʺ$-junit/awtui/AboutDialog$2.class}]KA†ßIkÓÖ4+Ë´ì 5Jñ*H,±‚@º1ìzÔAG¶]Ù¤Ÿô]ôúQÑ™Q""[Î÷sÞ³Ÿoïáû éQ`K¿Ì'~ Ë®øç’[Î _5À²#~ÏUµ,î…í—o¥Ýw&>ûÂ5bXò‡ÒËWˆÔšƒ:aˆ´l(|Ù£š¤¶:± s'ІpÓé †P¡Ø1±Œ•(Â0M,b)‚¬2Ä[Ò×Á]W¸7¼kQo²åô¸Õá®Tñ,V2ó–å«$06ч5-Ç“ö€!GÚþºüBùZ^ü»>ÅH1}éO˜ØV‚·f`¤!û!Úv·'.¥Ò›ø¡íH1˜W¶-ܦÅ=Ox¨Ðùat¯úd ¨oÞ2"GÉ;¦Xe¢¥WÄJψ?êž„ÊéJ( kä™dU6‰uÍÝÀæŒrFVsKOˆ¿`ç7£N»O5#5Û?e(/ƒ¬žÞÕ3{Èé©)H~PK€¸àeu†PKʺ$-junit/awtui/AboutDialog.class}VKtUþn›d&cè#¼¡¡@ZByÖPZ ÂC Å “dšLIgj2¡ñýB|¿qãJ÷ºhâ1ç°å·ºõ¸séÖÇïδ%-…žöææ~÷»ÿÿþö߯wÑŒ|'°v¢b[nÒ˜v+VòpÆ©¸G,£èäÖ ãš!uÉya³@è€EC+ã©ýÑ’1it †œœA! ¨‘²éž5ËÖ #S4©_ì‹@ÃcRX³äXÉÊ ù”1C ZšãÒ6ˆ6 ­hˆ.Ø9¶kX¶YR°R ̾›ÀºX¾ì¤ay³4 c­Æ «°vq¬É)Ç6mæÔƵnj0>2"}Öa½†'ÐA‰ÇŠ*ÍÎY®<Ò까EÃÎ'GÝ’eç½\Ob“<ãæF"+®ëØ ¶0ØPÑ)›*¶ÉÒr+ºô‡ÜGg¯‚íë™jyƒŸ© ÝØ!Ðnär‡³®åØ)«ìš$J`S3æ5ž7¹ØÂ ±½Ê.–3fQÁb>~žÙUìÓ°WÂ]q¿ÉßS¬œ‡GÅ«kf|Nƒ8¨¡‡|¾¥3o¤± (ñð<ƒÃ’üÁùBi5X—p„I=\1G5 K`«|šJ›KŽ™¥²%ih²rTÇ»DÁ ¤4ÇI4¦¦L›–ÝË]î" #œÆ‰à9ŽXf&v‚,ÇÍìÕ˜açbÃ%+[ˆ3&' £¬!×ñÝ#8/3ƒ ÔÖxÁ)'ï(x^CZ–ÿº¥­Â.(»%ö[Vð‚†KÒ*˜§òº€‰à%\SzeN:AÆ—dÙ4R2måÜB¦/Ф´`Zù‚AÁ[’;[pJ\õEE6'KL «áÒi  Ó™ 3ëߥ G6ßTcCŒØ¼¢g}*ì·ùêp5”Qa^ËÓ³ SK\Hö4®K,3h›] ^ÑpS¶Äýœ,;çL+xÍïÿë£úd±…w–7ð¦†×ñã¦øªLfÌÒ9ÿ‹¦œ¬Q3J–ü>' ¸‹çÐÚÀ<ì”Q2e'´-}Y©Ëx/Ç""üÇD*‹²C{9zM» c?˜Ä‘à–Ú³÷+)5«#õˆr[·9¢ 2ÕhÈ|i£N¥”5Z’™¶vÈœ#²o‡ŠF¹l–CßQùê–£…«4ÝâªQXLl¯!œh®bE¢ŽÖt Ñ*O´‹ãí¸]ņD4VEg[ÓÑx ‰“Ýut§5$«Ø]ÇÞtt }§zêèOG4·uÖðtCRSÇp:z¬†gÁ©*ÎFÏq©âÍûz`Þ¡eÞ!ÍÔûƒu\âæÅþ ÍÂÐCͳÈé¡À,òÞ:¡‡Ú´YL&zôP/Ï›+º”æJ@šË}ÞÛOèŠo®t¥Á^ÕUÏ^®9oÍëªg¯zöºZG9ݦ6ó·†k³¸‘èÖÕ†a=ì{øÂ¾° <—0¨‡iORoJ¾^­âíŸy Mx‡ë÷ØÆUã}Èq¾‚£µ9§· ID9IV¢Ÿ|¾‡9DÏ£lÀ{¼ÏO± w°? ?ѣƑsqÜC~Ga;þæ$û;ð/’¢;E+zŦ8v‹$öŠ>ìG°_œAŸ¸ÀÉs™ç ˆ?¯bïݸ_Ìù¾W>Eܬž¤8ˆÛø'Ûð>æÿCfú„»ÑýÉ¿Ïx²;øŸã VÜ=üˆ/¹ShUÁWÜ©D°_sfœo<^¾¥xæ&b‡·»éþPK×uÔ˜Lt PKʺ$-junit/awtui/Logo.class…UkWWÝ#è@œF-)‚EM‚€ÅGmcm%ŠbZ@û°C2$ƒÃ ™€Ú÷ûý~¿Öê7¿Z«ÑU×jû©]«_úººÏäAx¸š¬äÎÜ{î9ûì³ï¹ÿûëo¨A~TÐ4›·M¿O_ôóf_ÊÉ:*³ú‚.“}IÝ^Ð=5 6Ì ÍéYƒ{R•å`&!k“fÆÏ)P†¨3' 3›óù”¶tÏëÚ«`Sq¥ÛÙ¾¤LrSýØeÛϾ™¦ƒÃ&qQPM(¨M:CÃ=h¡M ê,bëÍš3us§å虚®h•ë1ß5íl"¶¡†fl aZ4¬Ç†z>mU°¥b5ldL}ÜÕÓ WŽ Z£K.’Îܼc¶ŸˆM¦Hm¸˜ôLDsteÄ!±ÝޱíTZÔMÐqZ–†û%­6t)hX¾KÅ.ºÍ~‰ÍÎ*·¦ÍNO{†»`¸‰Ø†(b!ìF\ƒŠ:Ilù¡‹b 4ô×û4Ô×P^›Š}¬—gøcæ&´>:dpCØl^bùø¥´1­â!Š%eÚÆH~nÚpÇõi‹›Ã)'­[ºkÊ{i²ÖÏ™ž¬­T• úEêÉ{jÍš$D©å…qDZ.šD|”ºb¦ÇŒ=où¥i)FUýK³T@ÇBÀq !l"N(h ÀôºyÛ6ÜÞÝ3Æ Ï ^ë0T> K²Uñ¸ÜqGô9&µóîâ«’º†aŒ„ÂiíK‹#N°LøƒNÞÎw]‡â{bÕã9×YUŒQEÌvØð¼’æb«ƒk8‹‰Æ1Iy¯.PðT£8¯`#ýž“wÓt¸ãîÉØ†ßwv4E÷OáiÉäZõŠŠg‹ð’ŽíSN+ážž5ÒR…i¤CБQYKÚg\'“OË!œ!¼´kè¾Q:c{×> åkúL)ù¬‚Ž5qü"éKR¶¨Q;¨jx5¢Ñ²¾Â«Õž•wé a9]€ÀN‘kŒÿ|û‡÷n Çtü6ÅãáÍ´ÞĶ;h›âL{ª;~Ûj ØÑ]ÀΫ¨–÷?Ñ—1^@÷Mô”Ÿ÷ÞDÿU4Æ›šeRþûe©‡¿þýÌlü»ñ0¡%ô €Pj ¥MhÅ&Zl¦E3o‘Vôa+í¶áï¦3ˆ`í<®Ûq˜»Z胰ñŽplex1‚"k)¹Ÿ˜šPsè6‡¯ãäÔ_ˆL†OÝÆ™©_p’Pï`ôü…ÎÝ“¿3Á #{z 0þ@¶€‹×F”kŒ¡ÓVÌÑÏ~ËÈ[H5°ƒ³]ˆa'Wv1›h€,^ŒYB&O6"ª¥Fæñ=ÄèÕ…Gt |äKhu–MrêŒÊ¥"Ï­EþkÊ4’å—&j+0ÂA¨=Ó¹X;HÙ9x¯ä,TÂã.±Št_Ç[¼×Í(|tŸ‡¯ øn)RC ’~BÜÇb쯊©D‰T¢|ìûá?PK(äQØ PKʺ$-junit/awtui/ProgressBar.classuV[WgÝŒ Sn€ ॶ ƒ%´^¨¢UAÑX@ JÅÞ“Œ†'P[{¿_úXú |P– ]íZý}íÿéê>3Ã$MíC¾9ßíœ}öÙßYùóïßþ@/á…¾›Õ’ífÌ ·jg.9åǪT&M' ¥ÐqÓ\7e/3e–ÖÍJ…Ëg§ì(¨k2¹\vÍ"'Y…Øò¶…xh_å©ã6ƒ¼¦I/*hSå¼¥£ zÚu´bG -èÔÅN±ºuÄ|«GGÜ·’ Ýu<åÕµrÉ*¹Qô+D+–»`ß³ZÓÙìð¢Žg‘Šc˜ÃŒ]²æª«7,ç²y£È3Ý3åœY\4[æÁ¢ælÂÞ5ó?|L(´¯0ŠkºÕÊT¹(t§‡gqMNý{%ŠýLÛ±ò ͇u¼€cxig «¤ÃðWF¸²fÚ%W!™®ß;ç˜k;W™;¼“fîÖŠS®–ò:2“©1…6oÏG«ãý Ë´¢xŠ?…žpqánŵVôãd7W.¹N™ENÎ<íó8Šc1¼ ºéúï(N(ìd…Öéf¤`'q*Ž×pš*"Í“’OEro`xÞʹfi¥h1àÎH}Ï6j"ÜâéÛ°ónAGVÔs¨Â‚e¯\3þÒ,a-ÛÅ¢Üc–Tޝ‹¸$PÞàvÞtn1»:üº\–EÇÜQéXôO¾)Ñ ¶Ë•%ÿ_†bª=O¿ÏI9Þ•'@çqY³Öű¼™Žœìïų£âšŽË·¤Y¥É•p¶`ÎŽhZ_+ñÍ×ñu{jK³ôÃDh¼‘c!Ž±Ç +éãh…8®8FJHåƒØʪ‡Š{eÈLCˆD"eÂPžµBKR-„Ÿ÷æ@¿¡‰š·uÝe0X±†R=N’:IjÅAÆ<³¸‘’îPÃçÍÏ0ÆYFnÈ(FŒã‹ £/ñUàóGÞ“›ãÆóЮKe(ÀyI“x€öÔFfýº´Æ€ÚÂ7uû¼¾–e ,Ú Õ5Çÿ©ÈKìó,áBƒpÆCPãø–úã_ êø~ œï<¯ßÿPKäž;lx- PKʺ$-junit/awtui/TestRunner$1.class}P]/A=W˶k)õýY¤TXÞ$DˆHéût ¦ÝÝYâgIñàøQâÎh"‘2Éä~Ì9gνŸoïÈ` K„Éf*í‹{*ÿR&ú< C—7a¨)î„ßáZoÊ@;Èæl—)¾¼“¡ö÷­¢°ª-™ê —Ч*)o°~µûÛ„üÅC¨R«€ñ;ŠQ»„™å¿+5Bö º’„ÌòJ̓‹Y zpË£C„BU…ò$m×e|)ê-Æ«Q Z5+SwšYc0ýÇ_åM¶Wv¬3_Gq[^Jì­Ûä‡&·þÆ»ë9˜$äDÈ„—âaý.¦0Cèµ:„Ùÿ” îE”Æ"t®„ŽdÅFZÙyés¡ãH¯l4 "´¬ˆu‘µ…³œ/yR˜I$õAÉòûG GòÕÝÇ …M'(ÉÀ2MëÂîøk!´I訸=±*7\ïJäÊNõëÏÆ2!WwX ÔN¹&ƒ'2 :44i¨Å!u¨o@ Zt¤Ð NiBsÞräÅpuIzóbÉf¯tÞ5„½ «$Ø7åË /–¤­cM‘åâ-nN1&Fí•ý”±} ;$Ô,:6Ô®šÄÛ¼4£)V H5™‰‰¥$Ÿ´‚z†œ¶Ô†jÞkˆ DÐg”0e Ÿ/FyßÕjë©E‚úK«e¸+Õ𣡑eOgYNð»yð&?Ç·Ð:8´…¶k‘a{dÊô sYÖùÍæèÀa~ó¯šb(:ÉAUˆëƒ7…Ÿ2Žmáuº¿ÊÈÄÒ¿ÚnᡌÓJ•>³sÛxjR}¨xÜÂ35¨œËxîÎOY^ØÆ¥Ï1ÊÆ¹¾yªN)¿ÂÜbzþ&^RBG]¯•!Òÿ+c™‘•švs¹’^-ëèÖ·±¹Wm-\Éw8Dߣ›~@–~Äiú ô3_½_°H¿BÒo°èwž‡?ð1ý‰Oé/|Fã ú×è߈¥Á¨×+,M`ïà]æÉâíøŸpøf¿Ï§:ŽüAÿ*>Œø¦¨EܶÿPKM ¼31»PKʺ$-junit/awtui/TestRunner$2.class}Q/A…ÏhkYK)ªª­„‹D’&D›¾OÛÁ4ÛÝdw¶H„ßä‰xðü(qgÚ„^öÜ;{Ï7gîûÇëRØB™¡ÐO©\~£é¶D¬.’ ÑÆ®Æ0ßçCîú<¸rÏ:}ÑUR esJW E Ü£®’aàÉX ²ZÈ0LîKÂ2¤*Õ6Cºö„ S6Ò°²ž Äi2舨Å;¾`Èya—ûmIÝÓêZÆ Eﯔ5Bqsý¹ˆ.Ãh z ëïׄǺ®é<ßÞÕ¼£Ø 9ºMÜJERiTÛ–°lcy†Œ0”þÃ2ØÍ0‰ºâDêäÙ¯”ÛÚÅà4tS÷y‹;˜ MТª WCÝ4U{¤Œ4³ùŒ™'óÛ¡¯mÆîi–*g4„9dIéIXHõl&õ‚•Ÿ€<@~44誀Uc-ÏJÆ5‚¹OPK§ qG\7PKʺ$-junit/awtui/TestRunner$3.class}R]kA=·‰Ýf»ÍÖ´ÖZ£Õ6–4EWðEP  ÁSâó4Û)›Ù²3›´ÿDÔ?!ø…þ”xgÚ"èÂp¿Î=÷žËþúýã'J¸-Âêq¡•MÄØ*ٗƾ.´–yãQ"ÔÅH¸b"GRÛäÒƒlü| N¬Ì”Õ‘Ho•én.†’°Ø9ïñ™'„J÷LÛ#iUŸ0ûTñ¼g„¥æßÀí¡ÜÎLRjn÷"Ìa>DQ„+˜­`UBÜQZ¾*†2ß)ck¬/Ҟȕ‹§É²=R†°Öù—<^kaìÕ´ÓÌ(}HX¿´Ñe¹/œï·‹Ïë“J€B0Pæ$32ªÛ÷:nð<0ú0éž+‡nòRòTY6Í=§în‡¨c@¼pý³ a7+ò¾ÜUN\|!äë"D{.h§ÂiðOUÀ·q—cÀ}3üæPá8dï1Ç.¶¾a¡µóñ'Yt9_yÇ,„«ìEl]¶†%Ï»ŒkS–—l6j}Fük¥ï¸sÁSåß xÏó?`=×Ê?årÞ]lx–Mß×À=?k ÔþPK_£Zh²¯PKʺ$-junit/awtui/TestRunner$4.class}P]KA=×Än·Fßµ•›Ôb|ðø£Œg¦•Ö›LfΙï|ß¹ÌþþóóâXÁ+†¹N$<é¸eä9{<”ï"!x7W2ÀÒ÷Èu|W´œ·oJq†í¥‡q!)쓬z¡ähàÃEÙöÂܱWϦ/3$kŸ…lsé5 ¿áj“˜íóòu†D%Øç q;_·`â’‰¦,˜H"†4Cªê þ&:lðîžÛð ›­Mׯ»]OÙCgB¥Ç0ŽV®Dé¥%UwýˆWÚT>ßgX¤äN¾£N:½Ù³é Ì‘ä ™Ãv$e Êæ±ÄU\c˜<¨Ežä¯=î“Üô«t´—à×±¤à7”Þø}%8üÊÅÀ-£Å¥ò¯Ž¦X“]O´ˆ&‡;&nãî3ܰi$>-ÙÖÝÞµP@ÑDËÔÑÕ1ÅU3ärG¨Sî û½šÑî›pð@—&]…j@ j(1`OÆ9O*5ð”ªÿU1cŸ.B)”±aâž30®'zÞ€(ÁZu›Ô]õR£ù¬ªkWß CRæ1z\ÔZYõÂhOB}1Z&&ɶè´N¶öŽ‘*¿#óMc²¥nzšç2,Ú•w3´ÓüpeÈÒ²,zÈô°8Ønöq¯•/0_‘ˆ÷ñpàœ]ïcs¤3Eÿ2ÐÇŽQÄ­5;àj©Ó^Z /uÜ6*:¦q@ö/PK±þ*»NPKʺ$-junit/awtui/TestRunner$6.class}P]kA=7Ú¬Úm5¦5©&5 >DC»>I !¤H IK ¾ë¤1³°;kÉÏ*$-ôAš×þ¨’;£(&Ãý˜sΜ{ÿþû=Co±KاZ™@|7© Îdb¾¦Z˸Ññ@„ÒXLE0ú[ðy8–¡ñ!l».S9•ÚïC£"ÝS‰‘Lõð„°j.TÒh³~où‡„|ÿJ› iTÈø#ŨcBmï!Bs@Èv£‘$döš<+ ‹ç><äòXA‰Pì)-OÓË¡ŒÏÄpÂØr/ Åd beëE3kíªüÕè°½¢pc}‘ñy_Ê¡ÎÞ–MþÁæÎ_e¹ž‡MB.Nu?UFú¨Zç¯P#›ÙzL•PèGiÊÊ/Þ‹¾³,‚ÿÉ݉H™ ÍkÈ‚÷É·l÷Â1{Vøð”kŸ³®]§õ ÅÖþ Ö~8LÙ¡ìËÌé¬sæs´ÝxÉ‘‡ÄÆB儣ſZ×Xû‰­ÿ5þ°ƒ[§Q™ã6ÛÆkÇ®;ÎÞ8Ö\(ßPKqø·‹¤PKʺ$-junit/awtui/TestRunner$7.classuPÛJBA]“ÖQ;¥Ùý~Á‡4êôVPD dø>ê.GŽG8gNÑg] ‡> ¯ˆúhÏ$•þÌZkÖÞ¯ŸÏ/H`k3í8PÚ“7:VÞEú< ;„@®-¯¥çËàÊ;«·©¡$æm—)]S ½MŠŠ41ÑÁ Àn©¨°Íê•ÿå÷ÒÕÛ@·H«ã÷£Xy½¡XH–»MH¬k.2É ‰QRi '­¨€NãN Y÷›¯tÒ¯ÉP™º×L{s}þ*ì°½œâ¡ªZj*·x|j ,²¹¿ƒ™ÌÚ›ú_ÎÁ ;»”ÊCª’Ï[¤¦‹9ã󂬗~Ò™j7t¬Œùìò–á¸'¦(û2Š(Â6¯" Þ)ß¼Ù Ç4Ìà›Á0×.g»\ÛNé ÙÒÆÆî,&oQæåÍêŒsær4Ý LräI1ÝS9äh°©Ò=Ʊð[ã|X©o\OÃd‹X²ìeËYÁªe}ëù/PKD´܇¦PKʺ$-junit/awtui/TestRunner$8.class}PÙJ1=×VÇÖÑjÝ÷…>hEÇÇ‚"Š(EE¥ïé5¥f`&£øY‚ øàø'¢ß ÞÄ‚ Õ@¸KÎ99÷¾~>¿ ƒ,Æ©V&7&UÁ©LÌqªµŒKDèoˆk4…¾ë ´ë2%×R›`;4*ÒU•ÉT„.s©’ÒëWÛ°NÈÜjs) ¿¡µI˜\ü‹°T#dw¢3IÈ,.Õ|äÑ›G}>õ&c‹Õ(Íšˆ•­[ͬµG˜øã¯R…í„ëHÆçQ|%ϳì­Ýä»6wþFÚëy#tÆ2Nµ k{“b'SÿIò'Q‡rOY×…ÅUË"øû¶ØiŠ$‘ ÖxYð2ùíR8æ`OßFMig`&ãã³\).ü?J½I Ѝ›œs“{NNnÞÞ_^QÀ:ª„…N+ˆ;«àRfúf0ëasâ$•ÿ, ÞE’§‘¯žmû°¢qf~¿ (1òs050Øc4½ÅÂ3æð:4d æúMðh¥KV³ŒŠUõÍ€ò'PK³Ž±ÊZ3PKʺ$-junit/awtui/TestRunner.class•z |TÕõÿ9wf2“É# IXÂ-b˜¢ˆ Š!€F³ a1(꼄ÑÉLœ™@[[Ô*u©k´T­–VÑ šlE+.­ÚÍ¥ÖRíbkmµÖ­Z—ß÷Ü÷fK&öÿçÜ÷î=÷ܳ/÷Í3Ÿÿd?9h¦ú‚iì9}¡@¬Æßë Ô¬4£±}¡q3M´Ö"z¦f±?jf8˜òº–Eü=&SqÓ9þ~ÁR£gê˜ º–nê0{cp(ÊTbôÅÁšÕfG,ˆÑµÌš‚0î. u :èu׬Ü1ý¡>ÝŒöcL“š,âºä¸þpäÜšô*€½]+#þ³{™JÓÔ­47ÅdRãkë ÄÌe3ØÉT– £g䚘F§W÷Åbá–Jº–GÂÝ3m u:üà‰©¼)SžI€Åþ4»}³)Eiœ2WWS¸;¬ÙÏ@"sX,êjéëYoFZ»–F"áH4KèMþõf@£S@öQ•š+QáûTðm±!D­0¡àä+„óÇú¢M)èVEͦ°¿3êNê&C˜ ÌŽsׇ7‰¼—7Õ7¶œµ¬µeegËÂ!áÌqbýr&n5 °‡˜?[íö™"rBóA4:mvJÐZó 2‰Íùm›C± f,ÐÁäYØ @6ÇgåŒÕPPC¸”ŽÊ:ÑM50Î΀?îöÐ{ 2h”<ÁÉ'Œ¿ÜtðÃ+Â}¡˜¶ôFƒ¢óR„ú`ì¢+ñxíCÂÀÐH •×O›„ÖÍ•Ñ9õ|lí÷GÛú::”ºú‚õZƒ¾J_Ô1ËŒðå¦oÀ˜¢1³× ‹Dû[éb…ðhÅp¦šÊÆœ1¹.;˜‡ûÅi´O°Är™Ó4»}ËbôrDƒôÎÆPÌ쳸RL©q}ÛKWÑÕL…ÙòpÓµ2š„vƒ®%^G7ÀÎu,õÐŒeRvÜd:!‡eýò·vˆn6h’Åéw%ÞZؼ~ÏâõVgŸì¡ÛaßQ…% ˜’+Ææ>!‹crŒþÎÎ#¨ff†,÷‡` MÃÃâ`cã’Fñɉ©UÙ¿Øß­ƒvÄÅ¢nºÛK»%عº±¸É {iz>f~lÏÀÞöX3{á2ÓèŒm0èkv@Ü7Ô±!1(aMí±ýf {ClXZbÐOhPæ’ Úo>’Ä), Ç2£`cZ?`¥0d…˃^z‚žÄÁ½ž•Э-0Ÿ§éÁ÷³ì Šm1¼gá-(ÓŒÊ\ÒËPBëúsPâhxž~á¥çè—`«7+c[j`Rá¬â#[D›ñ¯pýò‚ 8¹éK”ƒMÅC­ÖM¿‡06J¨híbš^™ƒÒ\ÞôzÍK‡èuœ-ñ÷OC‚íˆ[3‚í_$€¾,–Ã@Ýô7ø}72"Œ¿Yåïpߤ·Àg­‡þ)!1)ÉBõˆq‡¾Cÿ’\ü®AciœøÜ{™ÅZnú@ô‚ð!}d›<öqRr%ª›þ ¡ó¥A³Ç”H<&— æÏès/}J_”¯Ñ1ªg¼5ÆÌËÓÙ!žþ!;Å¹Í 6Jróäù(ç¶™½þˆ”é ±b¡b]ºIäá™Á¹n®öòL]ÞõhY “´ê dUÆ)PYª’™hÚ€’@Ò{E\,z>:i…ënF%Z1dßP†5³Çzy× 5ëSEIæA@n“ÙHMù•’ì„kã*TðÓFvÅÌþ¯0{ÆÍ ^^"†4*ˆ†BÏ5vH­Y’i¹=u/ãE'AsˆÎ¨W² b XÄw2Ÿìܧµp¤ÓŒ4ù7Ã’ÝÜ"i`¹—[H¾. 6ëB|bVñ$sÍþðZzYÁmˆßŒJ·,Õ¶9ªÝ:ˆÁ«¥{A’ˆ„ƒ:Mç;§q{>¯áµVí¶Øßqnwa¡3› ZŽ=ƒ×¡Àæ3G¶Êyn>ÛËþì` BD¸ß-iBÍzý2GˆÐG›ÜååNî†-(ŸÇG‰"α:Û’ bïI Qº«A©µKuµ.3¦Zj7ƒòpÌËQZgP1–pÙŸì’ÀéæD`¾1ëQ ðùâº[øXFÄ<¯O ÐpG_Ôà¯I¨lá ­JOÚ@±­!­¨pø Þ*€Y,Aè}=!ì¿a˜£üÍ‘e~”›/óò6ž"p‡ w´›¯ðò•á'­„ŠaJÈ\×~›¯¯ÉT­Õ »ù:¤ãá¼|½H°„JE‚7YÜ, InEâØ¡[4¾yd*ç»ù»^Þ)Ü\/ÜL싚+Ì Õí œ¾‘îß„Âo“ÁÉ·g¦Œdÿïæ;pŒµ×²3ZÞ"›+"Bê ÝAc­•~èå;ùGF‡ #w#ØB«ëO¸Á÷XÇÞ+ ‡àÙøãá=¹ZÅßóãPE2°B—NÃfD×]C‚ŽU‹¼[ÿ œÝºc©ð‡:+’7)0쇽NÖûG–ë1n~ÔË’Ú—4ðeÚÏ\×Úœ*'+û²Ý£æ$sAúfÔ­æÉy8bÙËÿ£C²nS u´šïUG)Ô”SÒ‹-a½ ò—‰·h™¸Õ±^U«+¶h? ÂøguºhéKøp¯¡öšˆÚ+ ò1d«ü6ÔVz°úûã¡Ò8Õ> hB•[Ô1üÁÀ€ÈezH¶Þ)ף⺳¹èµG,Ç×Wèꟷ¨Ç’s"W_î,Û8~ªžz¦ røÅÒl·zŠiΈ7K#†š§žñª§Õϲ¼ÙŠœnõ,‚ „§žSÏÛ_ilÉŠ—ŠA!šý Bä;Õ¯!Ä@h#$Ô©§_Ð-¦zÑ Ëý¯ÆVfUÊö…1x|YýVÀ_ê4ŽWÇsê÷°“ U¹6ZŸq䦣-YJy,(¢mR, QçÀ2¥XI_CýðãVTýYýE¤ý®JÑ©þ¦ eõ¦äÊ é´ÙŠ{#añ¼úHwŸDoL™3±ä:æêŸrÌÛ×ób1¥êuË5ÿm¨û¬êê}ˆÃ¯½{ÚlƒY“¥'çXß+FÒy®oˆÉ­s¡¯6]“@VQQzç,Ù7ÊKƒÕ£¢åTä$¢1øßEyò1Zîƒõ˜oȳz4h”ÑØè±˜Fëý·Ë€EƱ4Nèô8&êq’=N¶Ç)ö¾©öXaãCŒq’|…Æ8Ž éè ŽÄ³¢JЄŠïU$¦á½šfâ}ÞŽò§xf·—Ìu š?-Ø£÷‹ÿ¥ `(µµz–°w^ Ã<ŒŒÑåKС۪AÜL½Í°€è8:^Ã,J!0É¡a¤úvßÔ eMUÎ85UæjüÓ y]•F>VS=Hç@s!yÅQú ±2û ^D«5kè4ûÈf%Pc|ƒ´¶½äŒY§õqêJP`(Ç€ñ¨Çبåé:W£¦Po7ò Ÿ¬„ð¯7N´Å×ÞüÞ.°f¾§KªßEyÕ?²;K¡°éCØ«ƒÈbå80³ X”Aƒ/Eƒ/EÃ7éR›†{Áž˜hËÄ»4L“V™¥:1´y b›EÈûèš8}ÇWrSõÌݲ‹&a~§µv[ríûz--—)0x¢Å0×% k)”° Â? Om“¦ÓgQ¢³…îÐF)OwÒ4--´‹~i9¥×µhçràçé¤Ýí º§Ö[î<@÷•{Ç8è~ ®ŠcÈ ˽ãÝô0ÞòèÑ1yÎïQþ˜¼¼[)¿Ü[4@—{é‰ö1Îävï"§cròÁíNÐSôóªêroœ~•fm–>¼ž¼¢>ž·ÓßY ;[fVƒé50ÚÓ ôvÍj §Xí¡_Óo4«=ô½¨Yí¡—À¾C?½Œ'§~ú-ž\úi?žòôÓ+4¨ÅÛ#:AG>uÒïèUmŒÛi‡­â7Kv†Å€«öÑaÂ%† Ã[þ ;nš§Ô:Ëij&ÈÛ)wî£[æÞM¿ÓÿÆOfÆ‘`U­Gz?Î.ç­T$Ž8çûâl Ô°u°‡3z΂…úéDZñu@Dx2a]¢ ZPV° §æQÚve.iaÛ&¦Ð©\ˆUX²|è°ÙÞ‡wâɃ\Ò^Êe Ó4ÈãðXžà ÍÕƒ<©Ý—à©qþJؘ¾¦*Î3,€*`f{‚g¥×ïKq4_ëø Cõ½ð”óh{ZûD7#–mA,8±àpz>ì+lþ"ÍY…E•ÍY-âž šÇÒQ<‡çJÊ[q›‹Åx^½Uéü8×­s.…Ú/ËðwoJf^^ÈÇ“çE6>Á/Rô RÜæ)OÏ+#{lLNI·Ö~W ðDކA^bIui3¤ØØ2ó yªa"·Öv‡#Á§ÆyUõ^>=ÎgU×:1ío/w&x}œ7 ò¨uùÊ]q>·Zþ ÒuÀØ›àójó|ƒm¯:Hî*¾RîKðÆÞ‹Ûç¯ZÃ×eØK â|±<WÆùRyäm¢×oÅùrëõJy½*Î×éõ8á; ¾q€·cq;lõy§}/ηBÌߟïèÝ5Æà»x÷>þñv*èn² RÁVÐßb´Eõ^W‚t¤ÜVÊ …x²©Ë‘€¹3²3ˆ¤‚P $dƒÄy°ÖcÁ=,2ÊǦÛ= ~d€ÞÇäÂÄcq>˜ÅéS û)›Ó§ùú8ägÛùùv‡Ós‘à_I 8¿°(^/ð+˜zÅçßËX¼0·´vü‡~s¯§”ð:Nù³žá¿ÇùŸ6UšŠw0ÿÎ ¿‹}ÿ1òûxü`€?²èøoŸ ¾ò‚ò<‡Ãå**çOñ*zt8³'¶»œNWa±75±;t#/{ËG®<§£°¸Àš(÷8Ü.¼ÚëåùO8"YqžË™š)÷ºŠó²|ÅQì΀Ð(ÖXÒ0︊=É]Õå¥ü9’Hu\quÊõx-2ÑUßFÝw5ŠˆkPÝ]‡˜~=JŸP½ÜˆÄy\óF¸ä­H¡·!uÞŽ|s'Âé.Š! žÄ¸©ñ º;v#þߨÝH¥÷cõºãýÈè!zš¦g‘G^Àø2ý”Ñô6¤÷éIú”žaù1ÊXzŽ+èyöÑ/ùXú7Я¹™^à3èE¸—~ËéUÞJ‡ø*ú_K¯ñŒß¥7ønú+ßOã½É`|ŒþÅ/Ò»ü½ÇoÑûü}ÀŸÒ”›>V£éUNÿU_¡ÏÔú\M_¨…±[Ì^µ– àBµ…‹Ôå\¬náÑê.Qû¹LJõ*Soóxõ9—;Šy¢ãpžä8Ч8Žã©Žzp ál‹²’ÑÑ ”N&ŽÊÀ§¨Ø1O9• ¡y¶£TåaÎIËÔg:€ºèLõÐ:³‡”©<*ŸÜ¼‘ŸU^äno媫ùü"÷(s šÞT£ðT€à¹´ –ý(Ñ$DÊ6ù&_•ökU¿v8œÎB˜‹CÊþ úH¨R_•„'ËT–]z¹Øã(®LX8Ƈ+ €2‘lËûßH!Ïs’žáHìõŒ4¹‰xñTÌÓi4I¹’ã4 –Uƒù¹\Móx&’ß,ZÀ5t’aÏ¡å˜oãy´©pMgñ|2ùÚÀ (†ù~®¥M\G›y!}Zº„§ËænÀüM\OÛ‘²vÀjïà%t/¥{x=ˆù‡ø$z˜i?ŸLñ)°ö&X{3¬ù$XskF"=dÛK=¯5Íè#‹a¯–.'ÃV¤SkMŸ…å…ºø,´ŠÏB«ø,D¹©&•ZÅgáø|)5 ÇHEZ8Æ@)Z^X>Ê*/ ³Ê˹b´|̪\Kcùtš ÷›Æë¨ŠÏ„à΢cùl •¯§îÐÄ_¬k“ÖTЪ&Û%f«šb—˜­ò£:]‡´Êét‰Ù*? ÓUW«|þÐ%f«üRN—˜­òs8Tò$ŦUúJ)j觧霛§™Š´X~Z”QÃÈùÅ’[| u¸ä¢„:"Ík¡ÐÂÝTÀÀk £)Nvò]ÅÆw¬O—›qU©¾G.çnÇîìR†ƒhŠ’hä—6šívûU·OÍjÚ«f·?I“×”ª¹ûÔ‚öûÕì]T4¨jמ…â8¡ê)UÇÅU}3JAu⣪1®šïkæûp |"/W­áZ NÍìË$¡jŽÂ´cÐÖÆŒ °.Y]Ñ1j…jQÕd¨•j•p§V«56™5©¦ùÕ>¤\ã-9æ|¹,·7×Ú¢2Iµ'Ô¾¸:kHÉ_ƒØ/ÌÀc¨³•_ãY¯:†tÁ£Ó¡vÐtµ5UíS†êp+|œýâ G4åÓè]5øQ”uD#ò¨°µ¹p¢º•œ{¤»˜W=ªp³¯:¡¢é“&ˆmò¥½—Ñ(ÞF…|9Mà+h*_™!ß [¯bºŸ”}Vï ä6ßvä›ÀšØúËUÔÆhj¥*U›t£¯ÎO÷úÜ\õ¨ÚØÞ/ÄÂEªmФmšWßÚ§®nÞESj#î¶ëmÂåÎÕuŠ`Hç׺Êèð·ÓT½¯Üeµ^¥ê†ÔÆ]T/0W ½ t£ ¤vì²ÉN¯Ý’ZÛ£¯w¨!e›-r%ÄW#‰]™]K|=Î7Б|#͇<x;-E2_Ç7Ó™Hèݼý×­ÔÇ·!ÔÞŽÐú}ºï@ý ]Zæ+ôuÖË©¨ó²–4£#Š«ïj™I{ õÐ º'¸¬týKá9·ªÛðÔMç©ÛAœÔGêûHÏ.rÊ·m%w`EŒsµÜ•lsÈ-‰¤¡äCH? æ‹«¤Ë]±§A0Ÿ¶{ê®ú$ã…•Tpè-âêî´mù¤Aç»uï¦Þtuds/ùøÇ4þ~<ï¡Sx/RÒ.³:éËjwêvg•ݹñUA R±¢ «ûx@µ§,‘à‹JÉÅûú¤2þIî $-¦ÃäžÓ>â„$P~ ©LîbÒ(}%£îßE§øfãqõ >] Êé¥êaXŒx?•GÝN©ÇãêÉ&t\ã|ƒêév¡ùç SÇÕ/†f¥‡ásûi4 Ò': Ò›Íb¹ÕûÔ_³L× ‹à¬?‚Š>FXü„Žàÿf05=§¤Â¢¡/R„‰îSël¦&gwx{•îìð”ͨ%É/PúŠŒ˜&¡ÄN3<9ÅðdÛŒê­Ãó“w>éô%be‰e¹%ùð{ %ßåþ¹ü%䢎÷¢²+Cõ> u{Nrxô•©|ضºÂ®æú€ófŸ‘üÝjûèÑôþÆi…¼ÈEtõA2à=xÜéó—p‰Z2O•P‘*Åùe4M¥J5Žfªñ4%XZgsSô̵hUëF‘G}ˆZTiÊŽH߯«ÿ¤³nvjRWòÖå¾G}¬>±7N·¥—¿Ï¼Õ¶|íóa;ÿ›sg¦æôNå²S©OõÿŸ©ÏuÎðò$=_‚Àýö¸Í¯´ÇöxÀŸ±Çw­Q=mÿPKk1nv{:PKʺ$-(junit/extensions/ActiveTestSuite$1.class…RMoÓ@}‡¸q IÓmi)¦$vƒÛ3 *Uª8(=»ÉB¶8¶ä¿¨åX©Áîü(ĬeP…¢Æ–wgvÞ¼73Þ_¿¿ÿ€†ÂöiÈÄÄ2 b÷Å0‘SÑqÒKe"¬}D¨zSÏõ½àÛGÂéÐ¥d,ckiº‹xžʽOA2‰–¦žo%$4óÜ·‘7Â轫’o(L$âÔgÔú\Ô›,ÊØÒ3ÉÑç„ãÖâRæ ^'ЊáH´V{`ÂDÕ@57P*£€º‰%”•Õ0a ¢¬&¡Ú•xNNDÔ÷N|ίwáç¼H*??,ªA¬…µ[ûܬ¥¡1¯^„ÍÖõ½˜XÇf÷±EØZ¤¨c›PaÅCžp<#ÂÝùü³…Gb‡_/L£¡8”ªÁƬOÔ}"˜GA ¢ß‹ccgVønÖÕXAСžºíÇûÏ+ðgâ&û·Øz™34ì¯X¶VìÝnÛV/2ô^,Ëb$÷’å“ÊÁ=¬ñÎw ÕœoÂHwǾd–K¬~ÃÎP~uŽÊîÏs”ΰÜåÀŠ|ÁãÏt‘‘Õøý+×äf€6ŸØØ€ƒvØê\‘vréÇÔÚæ¸*“²B¹å?PKfc”Cî³PKʺ$-&junit/extensions/ActiveTestSuite.class”ÙRA†ÿÎÂ@Mˆˆˆ QC£"n(Š(Z%ˆåChÌ`œX3—ÇñÊkªª´Êðe|õïž‘`تäbæ¤9çûÏÖóã××ïˆc r+ ÏUEù^I/pë^Pœ®(÷­œ—šk¸JZ‡C¯eßy-ßÕýWÅMÿŽ \nÝ–ŽªÎÔž%¶k.C§âù‘ÄL}IڰОB)tÙõ䣯ëEéÏ;‹5)-×+NmÁñ]ý;:L¨ª •÷ÊwR ;_^qÞ:Åšã½,ÎÔœ ˜YК­Ù%ЮªÒœ tmqe9›ãç”ïz/#ÀA èa6¡3Ýâ'pr«úN¸>;ÂÖø O` _Þ®ÍOdШ)‘D[b°q ý:v¼s\õÔSnm–ªrÉÆqÝ݆Ù}ßD Ý-`1} 0±}“»çÆÉì5˜ás Ïò{ð2Ðý<Â(Æ2Í~ÏW}é,Y( $åøÊÆ9ݳ8¯—ʔܳ½÷Wý;ã6ùÀãÅYQ.§Gaãªæ_Ý:4?º \ÿ’ë˜Òs»!ÐßD”<%}¿ñFÉ¥;ï+òbS,LSŸ;–+ïîH™NïïðyWw R‡WWîò‡éZÍÆÝ0Í{©¹zïÈYW_´î–aœÑòvÉó¤oÖYäv%ÜÒKI«¶ežü5ηà;YXGç*l>õRûšÆ>ZvèÄ“´ñ†F€)zjß¶Âè:²­„,cBOè´uÝFœ—u;Ö¡VVY‡v`õâpÄê‹X%~7ã|[…ÑÓë8Ú ëcÐË…n0+JL[£ÍKaG)¦ ñ/Èé<‡ k8ÑÄgM»û™ë¥rÄnÊ9½!“ÆIœ29ç1Á_0JGg¾aô¹ÉûÌ£±5Œ7éûM²ÃèD‘„³†\c6È\À„) c4bôNâ".16§¿8‘Z5*¥÷lÖpí’åÕÂgVµ†›ÿ\¥_œ5¤¸:¡zŸY qžNðô"¹—x>Ω\ÝTco”I'ãgp›ÏAÜÁl¤ú€ÑaŸS*ñâ‹Ñ+µ–xS´oìм°Ä(›É ~Uô_öPKøŒôU9PKʺ$-(junit/extensions/ExceptionTestCase.class…TkOÓ`=/«vt•;äâ@„­ïEŸè·2Þâh—¶~€Â_àgFýî2ž·ã&%1MßKŸÛ9ÏsÒß¾ÿD ³X˜Ümznd˃Hz¡ë{¡½zP‘ˆÇ F+N(u¡¶_5pöä¾¼·Ï¬)ÎêêACV"¹-Ð[Þu>8vÝñjöJÝ Ã«‹.£—¦óç¬ëQàzµ…„aS@[ñ·¥Àà%þ…M: 2&®àj':pM »ìzòUsoKÎVÑ}e¿âÔ7ÀU÷ãZ´ã†Såÿ3'rÍ#a•)ƒ¬åI€€4ã0T^á7N“±VÿYðÆNàï+ :†Mdq]Ñè9sy½µËVêH×d÷„9ò…D£LÜDÎÀ8&Èþ‚QÇ-fuÃå0tkžª¸ø{ùd¿ß™¸iS˜È^dú²Y­Ê@G NÆœ;¥žK£hÀB†Sv éQ¥ó5Út ‰¶ó’Äl•až|#¿mS8“ô½‹{Ê÷¾ÂyA‘d*öí!§Vuܺ‰ÇJ%ðäŸ œFg(”ÈÊ—Xi3ÖýfP‘k®’M6¡Ž9… ŠO øR‹\;xÖ‘æÚÉÛÞSÜ3Vñ¦UúŠ®ÃØ©›kWlaà( Œ¡‡·\Û½èâS?âô ²€*GÝpâ7–q¡Œëà>oaô3IY_ÐUla²…ü'h‡Å_?`½í+aVYZ¸ÓƒoxzçÖù,£çƒŽiÒ˜aµ<ëYF 6 e¶]ëešû3,1“Àó˜Ý‹¿PKŒ—ÞjePKʺ$-#junit/extensions/RepeatedTest.class}T]OA=ÓÖ¶¬K–RŠ­¬¨Ø¤ øÉ‡ò¡I“F $ø¶m§eq»Ûìòü&¾øÄ‹š(5’è»ÿÄ?¡ÞÙn€PàefîÌsî9swÿýñAÜÅ*Cv×54§È÷nØšiØÅuÞâªÃk›Üv"` ×»RÄÑ*¯š–ê˜VA¹¾©5¹Ý¹ËÀJ áy®-2ŒäÊ„º¥6ù[ÓzãÌ•ò[ ¡³ÆÒää·dD Iá*ÃØ®º§uÕhKºÎª¾d5Ü&7œûUÞr¨¸z2¢G±R5]ÃQš®í(®,*ÓQô1$‰ïkñ4£ás Hˆ!.ã Â=`¡¯¬ü•Û¬pkS­èTm¼lVU}Kµ4û›!gG³FË—::'if:_1gù.ƼÚÅîŠjsÂæò%Y\~ŒRl¹1žïÝ:·]]8H/pñy7${ÇtõÚ†c¶<’×2nc\Â-Ü‘qc‚.ï&®¿—Òëk QÇìØÊ0˜Ëw›MúÏî-»õ:§vš–1…¢à¼ÇÐ6+‚Y†Èžª»|­Î0~ú!×*»¼J’»éd<Ä# ðX â$9gù¯’B˜®¶Zܨ1Lž×][Z v‹ñ™¨\iÃt­*©‰Ž8ýðS‚Ì .€ÑLF«­#ˆÒØCQƒ¾Ë ÍéÂDræzÛŽ÷·‘øUÈ|Cò 0Dã½4ÆèjèÇ0¢]¥BqðV#¸Fb•!Ú­©|ÒY/¤BJá+’;ŸŽYÂÞIÂC•;Y>*á#X”-•àÂ’‡È½Gø ¡¢ð.À2õã¿?'Õxâ…†áSýi Rÿe‹ÚRG˜Ù&÷¿ãIOãó‡x~ˆ¥ÏgädOÉIËYö²VþPK‘›éâÒPKʺ$-$junit/extensions/TestDecorator.class}’ÝnÓ@…ÏæÇN“¤¥$ „6…ù¡XBÜUBA•"Ú*÷Ž» ©-­mࡸ ŠÊÀC!f×+'DQeÙÞ™óùÌŽÿüýõyà€ag–~ìðÏ1"? "çŒGñkî…ÂCa‚14Òš á^òO¡øà¼Š".by†­Õ=)7Qd(^È%©GëJŒ—>åZÝõ%½1Cažs†|·7¶Q†m¡€[6L”ÊÈ¡ÆPù›\N¸8s'sªÝ…ž;»Â—±Nâ÷~ÄÐÝÜT¶K7ò½“$`Ø]ïï„GÉjí8 Bu(ÎD‹äsða0”¡vP$,qŸ”8•ç©ú¨Tó£ÄÒÁa^ŸDYk›'to±K(÷¾&úDê($¸g"n)™å±žâ¦# ìо2nþeᝠ»íYf5éô ¥½ô£$Û¾%T=8X(£€š·Œ·D¨t£D¾ÏORš„Z7 EÜ*2ñu²dˆVglÕÚaÎh¬Ó~sÊ‘65„úTîIÚÁ ¡ys?«„¹Lê㑇G†Äó ÿEìË0UB§ÊÁSÂÂ@dQx˜'„µöl±<<Ãs-¼`˜–Bí§ç‰‡ÎxžÏ>þüó—cÿþóãÊxˆ>aó,=”—ZFIGÉðH&úPêtâ‚ÂõéÇJèX¹(*OÖì6zãLþA‰sy«ÏV=Ú=&8ûñ©¬b – +ã ’¯Òó©ŽÄI( qì‹ðX¨ÀÌó¤£? ¡=žotdTvÑ Œz‹œ,æ›ß¿î¡‰ÓÂ)]¬ªìøµŠµôµ<%<™SÚ²ùS<{â6=¬ã&_“²ôY- ]hBØZÈ%,%R¿e]¹gªæ=»ôåD›Zšg⋆"ú8œ¦]t ËZ u_ðEx‡qª|ù<07\›–ï‘ÙÊ¿þ"ФÚE’È;(ñƒ1Ÿ2ï‡{—g{œ/ñXé¾ãÊWŽJð¸÷lö+k¸ÊQ+S¡Ê9ب†fVQÏYï˜]æ±þÍ÷†×z9è?ø†ö [³‚UŽ×¸_·è[Ù¦)ºŽ-té1t›WñÜæñNnÿ®=nÀL›á+6ѱØj¶˜cÜûD·QÂ}Û÷°k Ä—dý6þPK`V‘è PKʺ$-junit/framework/Assert.class—[xTÕÇ×&—™&C(á’$WŒ Òr1˜Ìd4q С`ÒÒö$9 “98 Z«B[¥Š—ZÀˆZP*J/B­ÉT¼´ÚB¥íEÛ~_ûÒ>µO½<µýú_{ŸœLNöˆ_ó0{fuþë·Ö¾­\þï«oP­¢?Z°;›ŒgZ‡R戵ßNíimO§­TÆGBÐÜÝæ>³5a&‡[7÷ï¶`-Tº1Ž7Ú54nT²­•P©AÅä4'OZ=Ù‘~+µÍìOX‚*£ö€™Øn¦âüÛ1gvÅÓ‚Fõ¦ü¶-•…û‚†èM,“Š'‡7ôÉøCf~¿‚æðû4[áDÌDùV+ûbA+ô @(2k°3•²S>ZÊ5Ë2ªPZwd¡&h>ê-¾ÆÂù—ZŽÈ´ L:ôh]Í3³RP9—ªÇv¨ê8‡FA~ëÀ^ø[ƒÓ‹ã¨ ˆ9Á;‚ê5At\Z®Ä[¯˜]A g7×kõу®ãlj½uÙ#{±ÆÒªðÙ”å£¸è« ZK÷°HTf_Íìë±<5ï„ÃaZØÎbMûèF,Úxº+9Ä;„×xC˜g`ÝdPµ+Ãvf ±!,¨bJä63³ËGì+³?­\ú…º º™º±(á^2h%2&æ£AB0éF&ݬ'D"L:gêA$a›ØÆŸdýˆbÛfPŒ>¥ ’mnW†ô1Á§AáÈR”#oåÈŸT¥‰ÜÝÍó²‹Úƒ²´„,ÚÑ¡DÓ,z—^4bÑySöÐ.3…½cáø"+‡”ò½ÝC÷A9ÄÊ¡R¾›•¿¬WŽÅ<3Ûeó1ý«Æ”êW :LB5ƪ±˜R½ŸUÑ«vuy*Ú•ÌXÃLû5ÖíRº_7èq: Ý.ÖíêRº±îNu–á\éÉ&¼'qÞAu…í—wtœ §Yû¬6[ZÝ»€#è”zþ¬kŽáÀíoü+@ßTçÏó:­¾½ªÞðóÊý[êžøv€Î*÷ï "?ãÒCÝ‘â}wÊ>3‘µ6 Z©ËzfÂú>½ÂظA/óM jüô>`÷îµ’8~[t÷Ø “B€Úz…^G.[=4¿AùMú!ûþ>yÜ×$íLMðÓÛ¸‡ìÔˆ™‘×À×…¯ßè§‹¸‚IæÁý”¾ƒ©i«Ùo¦9+ý i·ùéH[EÔýÿÞ€ºDߥ÷x…õ1™‡ýäèÏf˜… ïÃ!fgSV$Î-Élus_Ã’T …bâ¿zŒhoÓ_×aÄÒ ’¦ *;/³ÈÀ'$š ×> ŸÒ c9Æ2î#NŒì[Vý$ùšr4oJ¤]Ñ<ˆÌÇÚ J¡Ê– ¤)ƒ¥ ,¹Ð‘¼>®T,ÊÑ"/T50çA•JVªv¡"ðdߊ¦ê1ò¡âbÒr$S—GUáRU¸TÕzª%^­FP5i©Ð²¹µ.’ÏÊ.в^Ô»öMW¤T>h͘, LNV£|‚yÓê¬n@×JUat,Îk6âòL,i¾Dþ–KT|¾ù"š[Æ©~ ?šš[rÔ4%·ñˆ6bÊn„L(6!™›Pôv)_£ÄÜb-¡fj‘dKЄ·@…ƒ_ãßoò‰¦æ]륾ÁnÉ›Ÿ#ùm•”e±Õn&%2xíŒL®çL.ÐÚ^d3AŸ˜ªì¼Bt²éÔf0omk^&µn&µ”™Ô"xÐÉd6“ ÞLv “Û=™ÝL‚N&±Sð–Û§>GcTSßx|ŒÖ7] ¶Þú êä±#&æ ÕÕ7çèÖ…%OäµL «ÎÂjM²p±ÞêŸD F ×åh;êP·âè­C’±Þº êåqFY‡åu+†rô™«©2Ìðð–a"ìG  £Ø\wRˆîÊ+CØ-C´;e Ý)ià݉\˜ö³m7Þãìü,9ú¼· ÷Áë`^üR—ä·UN¿ÔUKËttyíð2 "­Þe4Äc-FÍ–y؇ó‚Ý4‚7,ƒnØßå®_UjŸXZ“£Ý^Ù‡Áðˆgý»ëwØ!Þã«ÈÄ#½Õd󸣆ø($®r‰«œ {gì¸EÕ9JyeO€ø)q•K\å츴†8ËÄxñ ñ³ |® ñ¨K<êß©%þ‚Wö¿è!u‰Gâ»5Ä÷0ñAA|PCüÏ$>ärˆ¿¤%þŠWö{ˆ¹Ä‡âû5㙸!Aü†ø5¾^øˆK|Ä!~XKü¨Wö-¿í!>âqˆÓ?ÎÄÇxñ1 ñ; ¼\ø¸K|Ü!~BKü¤Wö]¿ç!>î—Ä'°Ò½}º­oxµÞG>LëCNÊû”žžÑáöô£;*ÒtGÄÉù§ÝÑIçf>¥§zΫõgPýEKuJGu©0Õ_Aõ·+Pv;ŸNçSÞÜòüd§sfJ²Rž‡Ü?€ôOÀý+ovË]ér·Ã)w;œÓ:œ½Äÿ†ô®Ðáœu‰·À‡ƒLÌýôw<ý´àöïˆYy¨†‹j¸¨†‹z¶êKTáÇô•}(ªÁÿY:bû±5•ç£M©ê½Ü à‰ ÊU¾:NoŒÓ[Q¶5;¶+Û´ÖUvg"@E¢PT-æÐj17a“Z.ðŸÈ6Êà††§`—Wyåùž =l[åØ.ÁÖ¨‚ Z@!QU°uhq[‡9}í’´Z .iÔYІ\„¿žÙÀ‹E˜Ôê8©~þ¯ÐQ>êÔ ý#Öà·“5øÀSƒsÓ7†XŠ,CjP€Ú¼äÛ]°v¬ÝM¾ÍI^Ðï¤ÞïÿPKÚ!5#K  PKʺ$-*junit/framework/AssertionFailedError.classOMOÂ@}C …‚ (&MŒŒöàCbŒœ/˜ÞXëb?’m«¿Ë‰€?Ê8[š˜¨÷0of÷}Ì~|¾½ÃÂ9„“u‘¨Ü{Ð"–/©~ò®³Lê\¥ÉL¨H®nµNµ"ôÖâYx‘HB¯º´+Åò)ÁŽ‚}“®du4\Øh²ÈW‰¼+â…Ô÷bIBßO—" „Vf®.íüQe„Sÿ?ÛLƒ¡ÿ½Í<×* '£ÀwMpàÄ2ËDXþ¢ÜyZ襜)“~ôWÊ…Qá5ö3§2ÿâêðtÉHŒõñ­×òÙåê2M–´Ð殳%1î0ƒne0e¦á6Ægìþth—ãp¸eU¦ÛC¿ ß/5_PKGƒœÍPKʺ$-'junit/framework/ComparisonFailure.classSÍOGÿ½°Ù1˜â°Î'¡¶›’”œ )„JDH•©‹=¶ì]´^'½UŠø*µçT¡‘*UJ¤Æ Tê±­zë¹·ª=öÜ[é›õXm3óÞoÞ×¼÷›_þyõÂÇ —6¶åeJ®Yãw33çÔ¶Lת;ö‚iU.WÁ†NšÍÖëÜõ¬–/λ®ãª3t–æ?Ýâ"KæC3S5írfÕs-»|‹A-ͼ†YeP¦- šc˜Jœ6|$¹Æ Í9EÎm"¹¦£g4HÐuÈP:B—µ%õ0t/Y6¿×¨­s÷¾¹^å¢d§`VרB@É«Xu†+KÿÛ,ñ¾¯×Í2¹uð£N(fðf­Ì½åCƒ¾D²]‡z±û×y$ŠP1¨#†s ÄúÛÏCÅÊUrÜšé1,þw[WÖ7¨º6H›¢t\Âe q…¡çä­Š«”µÊí²Wa'’yo!¡aI†®cóeÓ«¨!›še3ȉ|^ØŽ!­a R¨˜î,•.%òÉ9ocBD¹F´ª7Öë~6z¼ðkWã;˜æ7DNÜÞi”Jœ:EÉÓétniÈB“ÙÚâ6h´ƒNA­8”+‡Û"»4fÏiÝé¸#”űà¡Ymð•Ãpâ5;<QýûT¡_ËÓ²hmÐÚ$ê¬: ·À,AÉþSÔK‹4¦Ñ´‡ã}I N*´k¤»žÔÈÞH¾Dwjì%ξð-#´Güû^ŠÒGQt£Ÿ4 Õò#4 øR?Åg¾ô&I!_ )L(Q¶•14J~*ÀSß¡ûGhtœý ½©=œˆP÷1ô\ÈM¤„JÇ>ƧÃ3»0l4q]àâü Ê.Îl‡˜1øôàÏÀI*æ?©8)íâ¢ÀãWT:tëÛ–¶ÃQÉxŠŽ¸±sðm }á’U„CVÞÅ—~Þ¸ôI7[¨•Zšl ~1ã ’ß#ûQdz31¥‰Ù&ÞË*Ç@rü¨ÈÄÄ}LÙÇ]2‰LzE¥£òmä6²èWLøÐó£YÙ¤ýºè‡žÇeŒc¸Jbwé/~@ò*’x@Ó«`›ôÝ>£÷˜ä/Èò ®á®ã[LânàgÜį˜ÂDæ¿1Ã$äØ9Üf â{ŽX.xð1q‰¦ð`œîóX¤YO°Ê·H•=À_X")L9Ç2I¾!MpC¦éEÌQ(÷çÄpÏÝÊ¿PKÞ×Qd¶­PKʺ$-!junit/framework/Protectable.classMM;‚@}Š&–TvZèžB[M4öËfUY².âÙ,<€‡2¡ÐI&ó^æ}ÞŸç >’¼.3'ŽV^ucìEl­qZ9™:ƹ¼KQÈò$6iΟ>!ª:ÁŸÍ„xõPºr™)o„Éϲ?[ÓtY}VíLm•^g…æà¿¦eë§ð  =„à"fßoÌØÃð PKdî?/š¿PKʺ$-junit/framework/Test.class;õo×>f]nF‘¬Ò¼Ìý´¢ÄÜÔòü¢lýÔâvFF¬Ä²DýœÄ¼t}ÿ¤¬Ôd (3#_r~i^ H‘sbqj1#³†¦',*Ícd×ðÁf\PjqiN‰µf#Wp~iQrª[fN*#'HRd ›" 0±02°2°10iv P!Hœ PK(gØõ˜¸PKʺ$-junit/framework/TestCase.class•VëSUÿÝHX–Ré›HQ1<Úh­J¥Z,(-ú°ê6$°dq³´¶µµ¾Z£Ž~訣Ž3TÇíŒM«öƒ~òrüÝÝe IhÇa²»÷Üs~çœß=ç\þù÷·?QøT`ód.“¶cIK›ÖçLk*6¬gí-«‡ 6ïÈfuË¡B`}9Ë**“” ÔÇ'µY-fh™‰Øm¥3]U{Ó4먈¶{Ìq]E5A¨*BW#€5uñtFÈMéÖ°6f8€fB3F4+-מ0h§ÒY†øj™Ðé†hi(Ž÷Œèš„™ËØKúY'¶>5aéš­׳9Ãhж•õáîÓKÃê»!4(Ø •ÐV.£b3¶(̲I 9z?жˆHÝíäÎòBÙvÿ@Ëc:d¸ˆÊhZBŒæ f‘åð|BŸ±Óf†ù¯[fk8e™s’éÚy´YÝ>1£¢SžW;\ ®"æÊÛºf2ç˜è.Wø¤@­æÔ΀iä £èLŽŽMê 7ݧð´,…gÖ‡àºÝcŒaÊñua—Š.ìUðžgm†°O šöýº2Çö—©‹3%…N,=i0’˜‹@opPÁ~ôÈf)‚:˜K&u+„à ÚÕ´„ñ‚¬öõ zÁ«Òffô #é,W¡%"‘^_B\"ô Ô´D2¦I²‚ÇÃ8*É7]e¶h´‚ÆÇp\±þ“ZÚPqBÆĈ«dÂI6„¤ÎO'Óº•Uq›œÂYù¥fž^gS:;˜3Ò ºŒöµVñ*^Sð 46uK$›2sÆxdLÌ8ZaP±*™5§X™{ÊÊ™2µS*R¡#)C$k“iÃèË ÙZbjØÒÞ´‚¿Ði–Ƥ‚L t”fÖǸšì”aÍ"#~ã„0Ít()’«0%^3l÷e¼s(—H¹ô`X‘e¥>ÃÐ'4ã@"¡g³ZÕì¼¥BnX½DsÝ€cêí(²j²Ôo‰?(ή£¤ ü·88ˆ&ï d=pqEÇ»ÕÂ%jÎjFN?šh-73Ê•ø;¸¢à2ÞeòÑ0Þ—JxÑÆUâe]ÏzCfÎJè½iy‘Ô.ÍÈ0¸!Á:ä/ ¯%µüæUÅg W{)|+íwPÛ.n£îW¬ås /X`Çhqq¥ºÚ¨Ç:¾%Òz©—V©£ Ò‘FiqÒAÚèj{Hòkãc‚ÜÙäav:k¢ñ±ªÉÙ‚hFP^Ižå./¯ð]l=uÛnÙëöa?›Fßþˆ—ÚžGs¼½#–Ž›EùdPÉ®P0SêaU’í‡ñˆ?/?µÛC­ê ìcËü(Žt–VsXU>7U>VÔÑms²eg;¨:¿d<ÍÝÉß ¨î¿šÎ{7Pµ%NÙîŸÄ-ªiPã»m 0pžÒ‹”^"}—±¥Ü„+ô4ûôÆJ‹Fº–ÎϵÿŠºE<+¤·n¹yŠ/ ¹ÿ.zOÕ¹ƒ¥4úA>ò^Ä(y}yc×ÑT¢4¾¬Ô^ñöç‘]ÀÆþÎ<ŒQ>^¿ç}޻Ūyr[å<Ÿà_Æy[Èy‰v£ŽÏ«<“kÔüŒšŸ3ù/xO‰}øŠÚשÿ5RøÓø––ßë{Ì㼉2vót˜¦GF5ufyZ[ü/doÐSŠôÌS?@Û¿Î9Ý×¹‚´óýNµñ·\nYþ\À»ðyßõ n–ò¾ôjplɽVÉ8ÏêíE¼GÚë? ßòèòøPÒÍ¥¿¸on ·úè|ô˜×±•ò‹/0®ô?òGˆßEãÃm¿hó÷*í±4:>vl>ùPKÛæ[  PKʺ$-!junit/framework/TestFailure.class}TkOA=C -e¡P ”Wå¥öE«ˆ¢€( øZ ¿mË´,”.ÙnÅÄ¿äM¤$’˜øÕe¼3»”R¿ÌÌνçœ{ÏÌìï??~ƒil3 U˺•)˜Ú ?3ÌãL–W¬uM/UMîcè>Ò>j™’V.f¶rG`HÅÔæÃ[ø—Ò†/(ø`˜`h™ócª‰À)à¿÷Á}†^—æ|ˆ“eEnmðJE+rIŒ@JÁ°XE‘¦âs’Ü»M‡¡Õ2µ<SŸÌÐ '¾gê–ðáQ³Â‡Þ«ð6E­«è 8mQÈÞ]°oÎÓæðLACº/¤<ÐKËgmÍÈ5¶V<Ç’hçC;u¹âô1ärŠuÇ–±"Š]eP* =ÈåÒ›x&gNF¿kôäøÕ t|¦rôŠsiå+ùÀ0Õ|/—+n ý¬×LÓ ¯T:°£jæùº.ÞEwÃýO yŒ“O^@ŽôàhåÏfúy¥;èkŸ2<4èJ$ÏÑH#ôMB{i Iš>û Fè t§$ŒvÀ\ “« µÐzƒŽL†fkM|G÷×:¹ ‘„Šà2qØ.àP3xÂL÷Ö—©Îšg.Ý¿À5é,D%5L†îÖÄ5LÓª† {Iš¯•ºd¯1ê*N?ç„T Û¬Ž¢Ÿvà¡,t¦®ý™p½ÉKÌ’äcõsûÉ Ìo$jXLÕð’t^mNß S ?Òè¡Þ‰8JÔB4aÓÕE‡±†uë¡cz7Ä%´(ÄC»oë…Ì8ú….5Úlâlƒ‰þº‰ïðÞ ÿ _šðs®øM™µõPK€4Ò»1ÖPKʺ$-"junit/framework/TestListener.classu±nÂ@ †C R#K·v(yÔ¦HŠØâ¶IÓ;ÉwwëÐèCUÜ…¡þ-Ëßoûç÷ëmÒ5[—Ö±f‰A„Q©ö*­”~KŸ·%ï\Œ6¡§ò|)b„0»Ï.™Ì³?pý.æ ¶Ï6„ij+UTµ0aq•>ë>YËâ £ʧå]Ì:arÅ+Lõ­SâNsÉ‹©eÇ+ïCÿÿxnîÞ¡…!¢ˆÐA×~zö‘4z„Ï-ÜPK©bÔVPKʺ$-"junit/framework/TestResult$1.classuP[/AþN[¶­¥U÷û%¨P^DBò}©ÊžCbƒ‡L÷Å·`¦f›9 ¾Yôql³·Íqœ)¾ W\}ÂàCŒ)Ä(óÓˆy†Ø³Ùšì0FØFÑψ1ö b"æÛbÏ ÒÅG >cö7[“µ\ÿ`KwÙ˜‹ßy,ÄXŠÑ@áPKcÌ#_„ŠPKʺ$- junit/framework/TestResult.classVkSW~6Š4hp©X´¨k/ˆ€@+¨EÛêJ6$º›¨µV«­µ{ÓV§~h¿t†/¶Sg*Œu¦:õ[JûÚ>g÷°‰qa€™sNÎyÏû>ïó^Îþõïï QÜQžÌ¥“ÙŽ¸¡Méç2Æ™ŽQÝÌÖÍ\*냢 jR;«u¤´ôDÇÁÓ“ú8wK”Çûµd*g覂à %’Ë&SG)1ºøâ}†‘1xˆ&ͬžÖÅòøá\ZXàZÙ§ 4>’ÍLs}\AYw’Hv((iYT·7ÓU,Ce^TÍ#)0ãC0€jT©(EY9¥§³ V¶ G†úT¬GDÒª r<•Iëä¯hYÿ|¨T¦A{€¤tÐÝÖNÙÚgdûÒ¹)ÝвÉLš6b“0ñ A¸ŠøÐ© "­ŸÏ:hÓ…pU¼Š­Ø‚×Ȱ óØ} ìKh®@7¶3v ÍÊzŸƒ–s\ÅNìÚzDØx[AÈ=L7A kHxư×,à»; vÑniê†Ð ®êv®XÑÚ‡ý© Ö-í‰%‚yb4¹C˜°RÌŸrÄ—fÒúT欞7°ÌÞX<ïHþFERaM[y§â¶Š7Ø ôtlÔŠHíŒ .Žã„àâM’¬ _{39a±e£ðšÉ Ôy '…NÝB—ýEÛáâþ¸Ó˜JŒ\ZAƒ»É^Í´ °ÜÌjFVl©Hà„(…äùh|óFΈºœ …)" CF&K*ô˜‚-KÍ yG¶L ëïˆ,„ÆÍ,eÓlXT#© .ÉÊs]¦@Ò‡ó Ñ´½¡â*+ð.Þ(ˆ×¼”Üôáò|G˜/*]‹íѵl‡+ ª]ê͇j+¾$ªÍLdr©˜ýF¬p£Ã‡ë¢Ó /çÙ1U|Š“øŸ‰|JŠŒ´Yðš–¢eç4s$7>®›f<—RIåÁ×*Þ¶W7iy$“3Æõþ¤x–çƒß. 2äûÒ¬ŽÞ”FL4ñŽà3äOW^ñY³_Î|„8{ÄÄ9E¼l—ó—ÁÇXá¼!2‡"P=6‡Ê/Wå—áHÉÔ‹¡ñ¾¥ñEŽ´„h§†W!ŒZ¬åA:PÕ%µ˜.`=ì°&ëYÚ¨¤íÎZ¬Ÿs¼î¨K‰º¾Øå\äR']øjÉ˿Д}#“⢂Ô GZ£³xˆ£í—î[€Êùÿ5Wãª5‡ð‘´¶†„¹w‰™}™WèÒUK¢×Ѐë’Vkmt\kt ·Qº ÄK¸„÷=\]ãªÆÚë·Šùcìrq¼±Øñ®Ž'œ:ùY:ÞÚø\ÁöÈØðŸ‘12XŠ­:úteѧó+-(¢§a±ˆø}Ç…67ÙÞoñä[¬äÜ€ÛhÁ~=ß&þï šXÃEä‡mì¡¢¬•e&üþÒyz6óD¸Uñ>ó ØçºûcóeN¢å0×-™ FfñÍ]¨œnÝE©÷^I1?h JMú$Æïè‹°ªð“JüÿPKäÊ×O|¤PKʺ$-!junit/framework/TestSuite$1.class}MK1†ßi«ÛvW«õ«Z?.µ~T/^A ‚P¼´ôk¬Ñm’ÝŠ?KPþ”8YÅC›ÙIÞyÞ™¼¼¾!‹¬ª7‰Vqãʈ¼‹Ìm£#mÜNT,kûˆPùKÐVzÈü¡ki­èKB¹u#†¢ Ýo´c£tÿPhßëøZƪG?R ;&¬oü–þ>ÙìrÍè’Ñslväá‘C` ãd0I(µ”–çÉàBšŽ¸ÓÆ¢ž»Â(—æâke +­ž€û÷kBGú~%và™D»{Bvõ7?Z|b­4±‡6¸* °èZ¬`‰PlG‰éÉSåì'lvÝd„àLkiš¡`‚ÅÏ’ÀÍ»Ñ8zp+Ã_΋ü×ä<Ëѯo?c¢¾õ„ÒC*šâ½èÄ4Æå„iÎçÓbŸ3)ÊÇ,ƒÍß}8’³¨?¢ô‚ê(̓Gù”|é¾i,§û VS-¥^@ùPK¯$ŠxmPKʺ$-junit/framework/TestSuite.classY xTÕ=7™É ð…$„eØ'“ PY"È¢Ñ$¢A تÃä… 3qæ ‹U°Ô¶¶*µÕVƒ]\[±²HRqi+.]´Új7kk[±«ÚÅVzþûÞlÉúùñÞ›{ÿ{îÏ¿ÞøÜC!jÕb…òÉhجïˆ7ñMõ«Œ„Ùš ›† JaäÆà–`}$ÝPÑúFÈt¡P¡$ß"œ Eò™P(nÒ+“f8R¿šëbñ ÎŽ®HOjØV3Žnà¤+ &Sg*ŒÊš^*ƒœÒº=jvf8”–œÅ톩HƒB¡¿jµ‚ci¬ÝðbFzà@qJý,%\(¡˜¿±jµˆ•yPŠ1^¸à‚”+Œh G–äæõF|Up}Dë #«ƒñ°ü¶fg˜‡¬l”=ª<Ý?àÏ-j— ´ôóy¨Õ$8a˜s¥þ|^LÁT‘¦à&KƒZFõšýÀ]¨"ä†d‰¿j ¦Õ¨ñ €Z/†À#ìÔ“ .’.Ef<)„*ÌΣ}ÖHÜèˆúú¬5DŸ…Ù¢ï eý÷>7ÙÑaÐPgѼÎçÆ\aƒ'œƒ³9ìê2¢í 5ùÈ0dáqÏX(‹|Á„/óu%×GÂ!_(£›OŸ/˜0üÖjŸpXåËž¨rãá9fIx±D¨šƒsÉêÖ`<Ê1…@~Ýò¸ 5[†åÂÆ ÛÛeéÏ/-Ö>"‚—i޵‡;ÂF<¡Ã Ñ‹&4‹éZ*Ú!%íÂJ"œX©)°‚b— Õƒ‹±Ja¸/,™6In¬–h)¶¼`™ÁŒí͆ÙkçÎãýU—屺5Ï#¶aèt™Â0ûˆÖ”Âbÿàë&‘¼‘òa\.|\ApêÖšì2â!+Fç8·µÂ‹ Ö‹2!/†Â+¾m¤rZ]ší:ÑÑ šÒÕ‹[¡2í4—Âc£àoR˜™l‰ééeFÇŠX2Ú¾<—t´™:fdVuÆc[%ŸSðˆqD"¸Ií*q².Ä=ˆJŒ '–$á Q‘^mΟFhÑ$¶ˆ2[iâDøj"m÷(ÅÕ´dKÌgJ¾öuˆJ¾p”±vÂÄl­[“¡NËË·…Œ.3‹º°CÁ×o³–˜i,#u‚"m“šNƒÇdéIˆÕìÄå” ãÛµ9å^•§p.næ¿F‚е–GŒÍFÔì—*­â¥åÓ¸QŽ“dqieùÁe{ªNè,A"nk8v0m\øœ·²¶ÂͬbÃÑÄ ªÐ4ŸÇD•Ûi‰T fGÆøSD†,ïÆqû;©i8‘YèÅ—¬‰/3ȰϢ‘ñ‘ çù´ô]d,7‚¦a¥œÿWÁ,‰Ýƒ{eÓûh :cÅ©ì5þ”åÁ…ØÐ÷We“¥x{—¸CInŽIEÛ×ñ _Ã^…¡Qck#q‚Ñí5ÃYÚyñ <,ûÄ®y'Yß…”;ai0*i1¬72äO‘/D1¡õBÏïFOa¤\|•]-ª²YN|žÂEÅŽàQáô(9eÕyŒ´¦cF‚5«nÉÆ+Td¶1º…ŒÖ!'«Yñù¤]ÒsÇÆädÍŒŽ^| ßöà)|‡õɦ! 1Eå2p<';4¦‰"xÖîÏæJE"Ɔ`d‰†Ë’zžf e÷OÓ\ä¶—¶&7N# ÕæÁ”¿þ y°@*‹È„c¶Y×Ä™Mèä/yð²”Óѩ镜5S³?–ÚÕ”š²Fí®ðU^ÁOØ×uÉ‚V3Ú´*›Y‘¦—ý ?—òñ Ù”Š’™×ÆL&‰,=uzÌ£?劶Ú¥yweb=0S$yÝ´.å)ÿÒ•}y4¹Ùˆk†éaoâ÷âò l^ÞÒ¾ÍLgúÜ6ÕoãOCqöâwhŠ"ü•œ±ñkŽÅ {­Õ21•þïˆì»ÔQ+ÍDCæÌ´q^ ·ˆÛw:Q¡Î"ÊÿzLN»|†`;}¿üN²ˆÓnpÐ å~5EêN‹<öZ}Ð%†™ŒG%wzU‘t<·*—»s.u–¦.å‘ lãfbMØì䞱Ϋ¼j˜G UÃy°ÌüêX¸Ý¥FR·Um+—{U19Q£ÔhºˆqU2IxU©T:‡*ã6]©¬ÎSxâii‰x’¹gbþ¾÷#‘Œ˜úºT1ø¼K“ƒtÆ’‘öV3ÖåUðŽGWÙLÞªsg ÒZŸzc¯š¤&Ó5Õž+®GÆjWU¨J:žšÁâúKt_ß8H e‡aXn¹D·/ù¼ZU+ö¥Š †3m7¶¥úËkÝ6)Ÿ%Tªô=«Vîà ûÊAï«Sg¹Ô7–IÙhúü—Îêlš«æëFM·©$¿5–Œ‡Œa¹&OÃ× SKc4jwyF“¨™ƒ.]Äg\¾yÝäÛ-­9ç†ú×ð¬_eüâŸÏQüµLcÅ>ŒEiÛHOÆBÅ~WÉçpò9’>®™qüåµVa<&ð-ˆmÄ‹¹J䇪û09PÓ‹éý¡êàD=©¡|–¸ %_3lø¡ðC ð> ^õR"Πp ºu‡0³ú0Î\Óƒ©ÍœÓV<¯óe¦ Å‹ùèÅÒÃ8¯îçèE‡qéL(¹&W²Y6êÃÚ–ȉ>4ßQ8ÇÙƒQrG©sv-OzåõNUê,w»ûäÛ”ho>€Ž¶ã·¦¸ó0"mÑуG]wE/}0§Ð¶='AE/>²ã-%®Í(‘Ù_þ¼BƒOÂN<€‡ð>jó¹ŽææÙ¦9›R (µ“±ˆëœËgŸ›°¬àíçŽ q ßw¢wqü8.‹X‰·hF±Íùt,r¶Í Û6“¹ß.|ŒZD±×s¬€¸[ˆç¦5wR‡Oà“Ôj5ºŸ¢½Å†SmY£]“׆YîRLA`µ}¼5<ìZ­V™µ<­Öí(’ày¹·7YB‘" öæ ¬GO\N]¯È‚’†‚ÝøŒ†»%åwXnë<Œú´‰kkÃäB$¢# rXr>«‰+ë¶ ù!|7Q»Ûæ;jʽ¸£Žý9_܃éòþJwÊ3î¶<ã¶ÏЋnÔ–;ãþ:„,Iý&F|c±™Šb>bt”«ÈQœÐŸié’Ö¸ _EÃ&mÖý%æ/$æ ͸ƒTñæb‡æ1"Æ«F`s|-é° À}ôÿ‡ŽíÁ„šÂÇÀ3ìo©}»Ñ]ûò˜ô`wƒSm…Õ­2݃ó°×"¢¡ø0rðoÊch[î‰\¹^<=¨è3§ƒ¤VEû´7ºùßNL£'®Åsú}-)ïñ]›û2\CÉkÉÐÎîB-ÃeCeÙ<ŸÁ±–a±Ž÷éëp#goâê›Ú»ñNìÑÅôG.5ãÐ_–;Éÿ÷ð}ù{%¯TÖ×®p,äÅÄø¿.å?ëë%®±¾Ö1‹ï :0«øïE~=¤Ç~È/ܘlß4(-i¹ò(^fâûQÓQ¼"^ÿÓfɯ‘«_î릷ó¸wpq7OVf¯Äëø•&n4~ßè <ø-ÞЙݥ½åõº þÂ…t—?ÒÊjŽà/ ¤¾¥²öþ¦påB½§°ç䛕{ÓûWèŠpÝKäûP‚ûéÆ÷ò`=Z€…k»vÇÿAòYxY´váŸ)±c¾ïY˜Í‘QRJãN­Û švfZzd ­ðÞ·rû­Üþ~¿ÜÞÚÄD¦Ô¾æ; _DÎóW0sûYÿꈛÍÝÃÝÏѬ‹‡²È<Ûü~ŒTªP'n²k1vâÊìD1‚›Òw/í†Ó±·0ÃO‘ã#Y¸eé0/³Ã¼@þîaãÞÄ_Èu’nš êláÃ=ßQË€­¨­†ôªÝYî8 JzÕ˜þûYgzŒÇhÇ™zžÈJ1ué½ëì½tF«Ò{0UUâz#1A•óì´4‚iÍ 5ví!ã©—¯E´sÆWµšr”×3)q‚®fÇé‰Ï0@Ÿ¥žÏQ¯çYÍŽ£š¡”ñ•š´Ž5jšš®uœnûÊ8òiùŠ’¦6Ëâ!îêš#Ê_€þ¥áîýbVT¸Ó;¸íjÃ/½£BU©€»Ø¶±WÊXe¯ªÓ‰(ײ¯dYÖ›ÆõªzíåJÍLÇØl]Õ¸“Ývô÷‘ײš;wº¹ã­2ïzuFMÞÈ»~ ù´Ö/µ×bPœù4aøÚèSge€¬ñ-Òur ÍŽJNI· 6=Ej¶~ýI—f{/‹œ¢49E鎡:­\½­œ“‡›Ùÿdd)â´a<òÿìÅsìFÚ{TÍm ŒVóúÔ‚~Ê™…áU u.P‹ô³A£•š«,þPKáy»+ hPKʺ$-!junit/runner/BaseTestRunner.class•Y |Tõÿý&“Ìd2‹+@@ÉäRùAI8Á€Š/ÉK20™‰óÞpX{h©mñD©ªR•6ŠØÐI4Û=JÕmíîÖÝvw»=í®]·ÛK·{¨ýþþïeæÍdÒe™yÿ÷ÿÿîûÿ|탗.RÕò+L3÷ÅÂA³> ‡õhýZÍÐÛuÃÜ¡^=ÄLû´Z}H ÷Öoíܧw™Êbše¡õDµ~ý`$º¿^°šƒ†©+¼làµ]ßÔ¾aoˆöM[×·®iÙÀTÔœ¤ÕfFƒáÞF¦Ië"aÃÔÂæN-Ó™²XÐÔ½äcò÷l‹ê=zTwéÓ4 =fCõÛ¢‘=ju$Šzz[´C-ºah½z³î5û˜¸ ´{z7C¦m3µ®ýØÛÍäíiŽhÝà劮Pj¬dʪ¬ÚÉä^éÖý4™òsÉEÓüT@…²šÁäë×õ[¼T Ò½º™”ÂUŽW®©ªÉO³¨Ì³™ò›ƒa½5Öß©GÛµÎ.‰ti¡Z4(ïöfÎ %“ŸæÑ¹é ?Yb,€„f_¦(kþnƒEraѨ)[L%•Í™œÕ( {͈%+Ӕʪñø©šjDˆZ¦<XmBWïfššAߪ~ª§+EÝ«DTÅ~ZfîL“ § KÐL²~š$X1œ8“{ÓˆÌSc|˜LÉ´ï¡>º–®`ò„¬¸ðÒ*>ƒ£×0'±6iFŸ)NòÐ:„Ì@ ê-wÚÁJÆñ;Uã·ü´6úh=]zT”¥^BàæGu­Û¡—Ÿ¶H0¸¨g†v@OÑÙ·áP—>`‘Hcò#õM[ÛÚËŒ %ô­1âÃoºÖï¡ÅTC rx̘6„n§ëEÄNaeꙸiÝà£6êðS5 Ü&òÒM’Öf$ ’ÕI,§ ™£i/Ý"ÞрߊÈÍ.±C!³z"P·´y"µ¤¶©Iº0CÐfb (L$‡Óœ<1^&'ï£ý¢Aòî×A*û€U溓>ÿw…tMÚ†Cò}ÚJ¾Ï ÞH‘h“µ.¤ˆ¿™…Hl)0ÄÁQº[HÜ3– ©öôÐ}°(4³›˜Ÿº{?CM§¿6ÖÓ#Mö!ä "_Ž˜å=‘X¸»|ž—>'iˆ0:N@Am`‘ÆTóÈé$ qOÐI¡ðÄH>&k´€\ôË~ú¢ªOÀ#Ê5 å^zJD\~šþú2•zf_ҬΠ͞qVsʇ,!£ê- ðizÆGƒt}#“Ë•ãÈù/ô¯‚ó6* êˆ /lF ˆFD©5ÑÞX¿6 iè{.§¬I»ª GÞ@ ýÖ˜2ÒÙ±\B²þ†~+½àw@Å,¸3¸+wKõx—Þ“ê÷Ÿ(Nßþ‹ÉU‹þH ‹Dµ.Ón—U‡a…÷éáðajë:ŒV¿‡q/ËŠÄ’ÝãÏ6àM>~Îbw.»÷°é-AÃÉrIøò.«_@/{âÛù°ü€l„Â~ÎCgû¡:âNÌ &—‡D·¥#žaë:S¼^ïÑb!³|ÖAkC£Šz¹XÌ*w cWPúoÆëÄn?OåiðOÑ:/— ö ‚¯[?´µg´&?ÏäY‚V¦äê4±Þ”ÉÔ<‡Ëz. »’žòâ FÆ©Ë]ÓD˜ ³SsÈT‘) 2!Wr• à˺:hW% «OJ¸éýÊ+«Roz‰ÖfA€J=Kæ«wòÌ^ Jøy ÝÇWóRÜþc†¾C·ó" C EpÁr¾F4`ÖIa0ž‡WøXݨæ§À£†»µh÷8ðU>^-·ÜY*ây­´ÎðÎ5›a1?¯·¸o€] k´®/"¡{U„Æ&t?7ñŽ*áwÞ<Ü,ù#bÔ $î|^n•þôq ãbäšH'bS8y=â6·Ëf-Å,ÏHÿ%²rñ rßLd G& ^»|óNæ${“o–‹ŒKnôS3’IÙOÞç….t-t”ý°©÷Š5AÐ; E ¨`ú¹‰€†àŸ“„uÖèdw”¬uw÷„Leÿ±Ï1³»"ýuÁÎþºØþ:3 uëõÎXo[l` 5½ÜØGJKÎø9"Sî Àèpõí5¤ª*3ŽËõ”1­­]QÄ ”3}“ÈJ­[c§qt‡µkÍz|ØÇ‡Í9À*t¨E¶T:ˆ)ÞÎÅ@˳rÒšý.ÃÜÌŸà; "ßéç¨ÍG‘†C‡Äg¬4Ý sÎAbjF‰Ði‹0c"0…˜–Z~£/rPé¹C;èç{­4ºoœewèV>àãcra˜6vlQÔ»ÇJ1®µk÷s>>Σ¢[}P>sùùóR¹]|B æá•/ÖÉ£¸Úá1ñe­ú2 >ι øÏ5 Œ f²9â´3iqr6J‘ÔG¾ÈŒ¯j@bü­“*´N3PKž‘Q>ÃéÝ@Ûòò³c7Œ´sUüüœTŽ´cëꊒþÕgã tˆë’Ÿé¼|NÌ­NµƒfÚÙ…Y«Ò_°§Ý:‰€:{B¬³ÆÇ:kˆ¯ôò023huJ?¿huÄ—Tu0á%ùVäk‹Ä¢]ºõ±§8õ+b0pÏÅâ–¡²©„<äÅ:cœ‹òÈ'_åH¾ïL¦|õ, B5ä©ç\ìÓ`LÅÛZàÈ¿i…üû 4Ý}JŠfž§é#4¯çÍr…ëÆßBp,"i SÁc®:•áq^‚Þ ì0ž¾À0͸_ Š$É”…¿“@©ÒZø~ šR¥’­Š6¥5Àê¹ê8ÕÅiQ’O”@‘REdšh‘ÕbºdTG°É-ÆSXe.ÐòtRei¶CžlºFÙP}0³ hJz¢Úó´üUŒÒµôÄð^´ºhmœ6í’åfk9B-xJ0*…éDÁ«€® ™4Ÿ*h^˜0d.µÂ.ÚŠµ¸w»b|+ ëêQjë¡]ô{ËÝ(º9Nƒ”Ûò4åÕ¼ò4å ’¯9'ý>ä<šŽ_*ûjìÖb·Ìëa¬Xûª„Þy€ì¡^åÑ> Úz7Ûì}àY]§þ]éÖ»‚/QTÊ-È„#|V±)«V.@ Lèa#ðr \ó'=<—LŠÙä6ÃfÂÞp‹œ‡Ó©­@¢\ëÓ› æµ©Éê6úˆóvúè8ºÙé®Ý5—A÷cär³|‰‡sY¾)ªç:¨ þqú„ÅÏU~â¬w`•»ƒuâôYâ±Ò½-ƒ´©µ6N6¸KÜ—(§ºÁ¥ãEÓçKÜqz´èqü‰Ó©8=ÉC­ÖáiéKŽn­)ÊËz™ãôlë øŒÒs5Ã44èFhô$åŠ^¶ܵl!|ãëôçÿõ%î¡AZÙmñùK";N¯§òJ?vž WAÊåÓ ü¾­žëè ÚKýø½AÇè ~—ÔóUúkÛöG‘GDÛ`ûíÜH×v`îî.T†hu ÈwÃ{àAñ&ZO7ãm/Vþvz7²‡ ýíø»hÝCûé>œÃÉ)ëixê Î"Ò.!Ö^…¿^§Cô3:Loëmĉø~RÀg ß¿C£B?Ÿ~HK߃Ô%ü7éï#s ÙßãÔ ‰J°÷}ìí¥{éôXE ‹ì¹!ÃAnp/ÃÞ?ÂJ¯#•ߤŠAùŸ©”m×úùœ£Sè­Hœ~™,>9*8RiRBÐIôo šþ~e“ûÞ¤Þïã–¬•ƒtsuÙ¢¢_Çé÷'Yqú‚P¶þ[mù²Ð4i©ìü¯ÚYX}±Ì}Ëi*Tã¹(΄°õŸçœböÆyÒ‘,$À[°*«¾øÄ‡OÖ$em@Ÿ ¸ÁƒxàŠ"º*?€Ry õêAZFÑ*:Žºô0]OÀD'”ñúèQ¥_À’<¡ß>žÌùÐËE}\ jã}!“…Ýwé=[ç•v5Ê ÌLéZV’?ŸvØ/'A?‡¥¯JsyŸ>°iím*­.æ)qžq‚ «±,ól÷-qž7TÔ×êŠÏ€Ïï³¥ ¥|…Õãy~‚‡¦B€¨ÝÚuŠªHwayšæH®²°Žó®FÒs­•r[éŒÏCø h Ï;Ú_=×¹Ýò9Yõ¢£t·£/}[ °Ê6X^ ΋ª_äe.J¸o8´ÉKh“g§†[¾àÛÚT«"ˆÿÎ¥‘ø–C.¶I°\¯mÄ&{à˜)Ÿ£Œ¾Ì+‡Fy5žkÒÕýbê øþ»²Óm²n¹TÛd7Ùdg­áuÒÒ×E#¼ñ$ùÏSÅ ÊvŸÍ:›&ì÷TgÛT}ò?çiêVgÅżi„·lå–Ž@1oæíIA­€û>ýA‚œ‡ü¼C|‚Ó- £=l·æE Jíj6àë·Èd‚^=Ì»FX0̃TÐø¦rÕÞAr·œS¾›ßv$Ö•øm·¹W¨Aò‡xûJÄ?ÔOõsÌ*oòÞN8ÖEWò-¬ám$}“;Õ(:+¦‹lCz-IºÒCä‡É¼j\ …_fãßg6ž%ø¡eæÊšK”]v¶f„ûP˜²Üeg0  SyŸMx6ÌEôk ý«ß"Þ~ˆwó|ýG•(±bÅû)_±šbO**⪹ò¹Ã§Å#ó‹9<·î¤œ-YgÝgí!LJàrÌïcçCÊÃá$v9-—ªðД£lؤï+Ñtá(ǺšGùPGõ0¤%PçWÇù“ÒùOIçáO¥–œK^öQ!çÑ4öÓLÆ|͓˫-²j´#Ïá»øÓ`ZÈÏðgAe&Âë(ß 0 ò=ª5åÊ]Ùsp"6máûù¡q"Žò±ŽÀ0?Ø:ÊÇ;j‡ù‘÷ –dðÉ“”[ƒ®Ï_ÀxÂw4d_úð—¨ÿ 9!ètj j¨’¿Ä_†®õ4-É ;mWkµ•²íU .ÌOÃ]9¤nì¶»–Ù7§éE›“"÷<•œÌT8˜ò½r ·‰¼fÏ–íÞ—éÎŽ¬b>ÓÖá.æ³mÙÅü•¶´Ì¡¶O1Ÿoëðóóm؊㽑¶æ¬k1»ªg¡ÉŽ>.Œ¸x–´Ô_9$X)AÔt×#¯¤b¾ ]„@XL øju -楴0Ëy9 { ]Ç Ô„õ^á˜mÛ•Id2ŸÅ_Smµf¨fŠ,ç—…#_ü#PKõr—@ÜÉ$PKʺ$-)junit/runner/ClassPathTestCollector.classVk{e¾'ÙÍ:MÒ I›RZj[ØcB©4 »$ØlkZ*L6ÓdÚÉn˜™­ˆâë1Q<ÕCմ覭¨×åÀà°ÞÏ;“í&Ù(¹®ì;óÎóÜÏ}?‡wæŸÿyçÚ‘Ãß5ì;[«X^Þ©U*¦“/؆ë7¼¹IÓõ UÛ6Ë^Õ‰@ÓÐ}Ö8oäm£2›?6}–û´kعÆ}WXÃÖ“OŒ?ùLq´ôÈ䣴q Ñ‘²mÑ눆ödꔆP¡:cjè(Kø(ô5ÑNzŽU™ “¶Y™õæ”߸Žnl‹£ DchÃmºŠVÅ,Õæ§MgÒ˜¶ ›(Vˆ}Êp,¹6;F;#„~²ðæ,WÃâûÈȰ½ìßÈ>Ýú“©¢â\ó,;?Z©Í›ŽáYÕ M»ä/n`PQìY«ðy×3ç#Ø«aˬéwª ¦ã=¯á®dq}†S·tìÃþ8>€TгlÓ¯s ©ÍqÝG wΓÄên$ãLeJCO ƒ2, i›ófÅsuöÐî8²Ð+¯fJR¾!Sî˜nÍö4ô¶Œ¬¡Ó]°-¯p æÈWΧüZè8ˆû…ó!r^+ÿDµ*ÅYÕßìµ™þpX°†ØÉñÔ)鑸àjÉš@"øP‰z]=²ªy ÁQªlÙ <Ì"WÌ Þ¨ŸC ·%›KêÏyŒá‘-g¦·U±Çâ(àq ˆbBz‡Y3%]ÃWÀix#FËð1—|„;g¸UÇ ÈºjòžÒq“Bî aÇOqbc†9휴훎žÿËÐWù´¨ü(ÈrÅNÇÇ1)[ÏP²åª¹”žÙ$Qdk`Zô”5lSMZ2æÍ1§:2;m8Cm 5ïVâšË±q§eÍæ`I«œeïØ–+­žL=Ýj^mÌ‹‚І¾õOÖΜ1ÙY "ç »f;³nZ0h;påHôâxNc«k.LxÕ)Ì RÐñ \ˆ16—caÁ¬Ìh¸=Y؈æ!æ'ñ)û´†ìû:š_ÇÏòÄðªþ³õíÞ þ9|^l_^=Hdry$¬í RåFŠ(À<´}ÛX£¶Ü.W+žß°=- ÀDX2¸<õ;å@h¤)Šoð,¿Õ±¾ÃdõœY±^²|SÃÝ-²°Yï~+Ž‹ø6ÉÉÈ+ß©ñ= qcf¦qô¶ª1AqI¸þ€âƒiT8<|(spo¾!€×Þ*[¶¸©”a9Ç+3îiË›ÓñS‘.üŒMgUfÌ Òtrþñ-û \–G¿ä†ÌZ¿ÞdÒ”í±ý­0ªM»AÉû’ãã-‹þ{,‰ùUFuÌÛ(›b\hÑŒ4~ ã?²xQ,3{®g8^ àm_À;Âm³`‹?ÓŸmÑæádµæ”Mi'æªõ«~@ B{yB„À‘áÿùÜão qîlá]Ž«üÅ[ëèy ½WyÓ†>þÊñ~­Dщíj fÕõ>®âN/cçz·ãö(7Ý7ÂíØ¥îÀîà4-Û¹nKÜywÓ™:ÒÙ:òK °NeÐGÛ!)€wúN`¡îÁ½„Ôd¬ÚxÍÏ H‰Öb¯§ÿƒu Od—Ö‘ÝÅõŽ&l=À–+[ì|lÈ«6À~"C\® ;Õ=³Œ#ŒñáÒeìL¯ 0•{üp|]Ë(&JTv‚;ür¼tó_MvR°ò)ÔÅo¢ö#Åu§´£Áé ÷¤â”8uÑr O)î| úì´(óáŽ-T2Ùe|l(ÔªãÙEìJ“ÌÌ"zd çúÃýá:ξ*Õ!Þý‡Úu\F2YÁsSÙë¨-ãü5¼PÇgúýƒu¼TÇrõr‡ÖÛѾñæÍ÷nµÁ sêØB–=È}–úr¼Êóê^òd&ïÃêy–ë9RjO¨&µjm|_R-dãËôkSW¢»Ø¾Â§!"ÇðU> sÿ0¾†Wx5ÌÚ½J´•³ûƒš-Ò:Ì5¿‚‡¦–ñõ‰Äkl¾Ò .NerËøÎPè2ô¬¤áûu¼.ë.ÝüwS¹v«¤&ðÛsý!ÕY‚Ê;¢DôC4Däƒ6в1Y¼6zîŹ×Nÿ>¼‰Ÿ¨Vâ+? Y¦HÝ“‘Áüù"¶gº÷×ñ«×Ñ™Iü¦Žß½pèJû•­>²À<<Ìeè©Utú|¨=*“<å+"øRÐË©L;{¸çzgê¸6‘eÅ»ꨗr‰ëu¬,"–cNn,å–Ö…~Œšçˆ©l‚:KMÍ›j„N¡;¹óUÎåwU&4üUaþí¿PKLÑÍLê PK‚³E, junit/runner/excluded.properties]»ƒ0 Ew$þÁƒÕ–¾–L¬ù+1¯RáPøü¦H•&KçÞ{œ¥IUË`;ñàjàUÛÙ°é'5®oj7µŠÅ—$\Zy82<CšüfxP2˜ÿ‘£ÒnÀ==)75è†&¢…êéMkÄÎ_ã¡ËV‹Ðuó-…F¾ý'·-Y‹²3ßÕÈûnì0ÿPK¿Cûö• PKʺ$-$junit/runner/FailureDetailView.classeN=Á@}+ˆÏ•ÒÐ%÷”ŒÊŒ‚ÑŸÌ"wæ\ä¿)ü?Ê¸ÑØbßî¾Ý÷öùº?àaŒ.ad*¶ÂdJ± §™á9[WlcÎ}¡—È›©T±Ú%Y¡s`;Óç‹V¬,¡„ËϞ̭øÍ§„öõ¨óR˜0 –_ǽ‘gε9‰ _mÉOÃ-¡¥, Á Š®µÖ™‰x§îºÿ÷à¤ð¬PAExU'€:àÐGãƒM´ã>q¹‚ÎPKê´ë¿ÿPK˺$-'junit/runner/LoadingTestCollector.class…U[WWþމ$Æ —DEP¼ 7Am«T¬‚A6¡¶P(Ø–ÉŒ†Œ™hûú èkxáÁÞ€UWÛ·v­þ¨®~ûLš‹¤‹ÌZs朳÷þ¾ýí}Nþþç×ßÂ5¼TèZ.Ùþ¸[.•,w<í˜9»”_²ˆÏ݋ߔü‚åÛY…–»6£ÝS -+„SNÎ2ÃɈ+ô…A[ íˆ8Ž–8†„B[Ú.Y å­ Ë]27Š–B"ídÍâ²éÚ2¯,†ý‚íQ„ô‘b‘ôIÛÓK‚¬pz°.¯EߥÃäÐÓÓ™GÑ­Ðþ¦Eç¢V)ç­Ø~Á@/ºbèÁ…¸öšu­Y[˜]iþ’úq1Æ”/)œ<´=´fà,®ˆÁ€Ù¸½àø³N¹”{øuÖzîÛN)‚A…ÞšÕ‚£íf¬ÍÀÎu¥†«dItÁÜÒÚâÊû5±bU N:´·xÖÒ8"ÝÊ’ë¸!}q“1mQ‹åœ•3ð¶ÙŽw[dõ*°Í¢®5Sñ6&Äý]ºWÉ)´Lo±lûVÆò QîZ¾g ‚¨tÚ}Ê®[glÓ¥ËKÇ}6&=Å4{ð œRrŒW¢x(•›Á¬V4Y³]*¸ÎKiÏæ™eÞò3–ç™yKJÜT“Žá}dþ§)—å4}Ã#–¬f°¨`˜“³7mËõôœ7ð –e{E¡»Ûµ6å\ŒÿgÁ*Ûö—7Šr¨ÃƒóÒ|OðY køœÔ©e°™bønY•õ@Ñ/Ž{¢t¬ÎY$W˜j’ѓÞnBMG <9X’ÀfƒÊuM_PP÷tºÉ.û¸+¸ªÖWn‹Šì}’ nŠjZ 7›œÅ&ë|ȳ'†->úƒ†KÛèäð龨&=~šý6A ^æÐÐåaÞ£,ï5Ü '™ýǯۇ\êg*UêsZ/)éÝ*a«¢Rr$‘ ý†™=äWvЂ…wµi+»A£[\¹Mù'¨Ó:’U d¨~OñLÓX¯B®sûøÈ¾j‹òñÀîseŠ9O³•Su`ñ*X¼vBƒù|+”uY_ü PK®2Hį] PK1‡,junit/runner/logo.gifs÷t³°LTcbøÎÅ `ܦÀ, `ù„,þüa£`èƒüRÿþƒ©ÿ`(þdad`àbÐ)å Ž… ¢2læ–r90aa‹€²“ˆ†á£m¼âI2¸¶*8wétl\rx¢†wÑ O]§ê¯+¹¸Äs†FnÞ™™Á©Gûí…'ØX†^vÔ©ÀeÝô,ŒAœ'¾8 äåoÿíže4vižˆ (K‹Öí\²ŒìJï·>ÓG &­ ålÀ¢Õ,XE›,½stHµV¢Öæ”þ—Y£7ÅýCmŠGŸX-ÅÚ(T%K~=ÆŽ*aO*Ô—%ÕRÔ)ìe`klÍÀôè\“Ï©ìõ9idDó+6¯np¸Hê̵ۜµûL©Ž~PK…È"”íPK˺$-&junit/runner/SimpleTestCollector.class…ÉJA†ÿ2“ÅIL⨉{܉Asð¨x BP!¢à­´¦e2#3ñUñ ¼x‰àÁð¡Äê&nØ UÝU_UýÝoï/¯H`k„¥«¾¯âFØ÷}6ÚªwíÉcÅÍÀó¤aDXýB5=EG"î~„ÔŽbp—¨ÖNV3èÈ’HÙ°!ZÊ—ýÞ¹ Ź' N+p…w"B¥ïàwUDXiý§n›U‘ iQ„©jëJ܈†'üËF;•¹];ca›®2(Šß‰4BFúèTÅÝ&Q°1)BZùy{xÁ’ªûµýʘ֩è©Ìý1Ó° š]$Œ™á{Ê“¢gý£€`·ƒ~èJM¦yì¦.Â2Fø/õé¯e›æÛ{bŸ\Æè“IÛlmö@–KrlÁÖ@ìÇØ[È£0là2©ÙJÝ t‡r½¸6Àì=òug~€Ê’Öcâñ³u‰ÛEŒbï9>/r»¬É™VÃ1ú´ÄʵÂS¿úPK¬l‹…PK1‡,junit/runner/smalllogo.gifs÷t³°LcdøÎ `ܦÀ, `aaùÆ £` }pàÀÿ@ê?Ã0õÌ$(/8pD0rÈxlXàØÈ%Äç³Â!¡‰…Y^nŽG¡’3 ¿jZ‹Ç„…‡š$µ•>ÜXr°[ÂrÙ›…OÜ;ùBgÍñ V99‹;~UKf`ºËLØiON +žœ¤-û(&ÊXÁPK›¾#GšsPK˺$-!junit/runner/Sorter$Swapper.classmN; Â@œ—Ĭù‚……•`¡…î,! XÒ¯a‘„„ÝÞÍÂx(q-}żfæõ~<áb‹ aQvua¸êêZ*ž6ÊHµJï¢m¥b ´7Á+Q_ùùRÊÜ0¸O[ a¾> rgŠŠgVlÔ>I6!L›NåòXT’}sw½—'}סZKM˜ýYÀØo†¿„ý‘GÁ·ÌpŒÀþdy„Ø>PK'ï\}®ÝPK˺$-junit/runner/Sorter.class}SÉnÓP=/ql2@KÒ´»”NÒ”A]„@ˆHQJ‰8©I]9vä!üÁX³)âbÍ×ð”ó슡Tµ¥wß{î¹÷]ÿùõi4pK ´¹vØô#×µüf×óCË× ¦÷̉ÙtLwØ|Òß³¡†´€z×fø=tµÖP6½«€ Ôœ˜êØ®µú–¿möK Øñ¦Ó3}[ÚGN%ܵrç„ê-|@­ú¶;dÔíj'æ…¶Ó쑉ç·Úí“RWº¯Ìñ˜’Ûôñ$ ÓY˱F–>Y¾Ú®uŽ·Ù* ˆRç1óÏ:f‰1ðFcÓ·¶=‰Ñ9Óªµ ¸€Js¸( ŸBTƒÁa4æNl³Ö+àò˜ÇåÎa*‡–xÓ‰¬@Î÷¿,B:ÖK6(ÚßîRׂ¤¤Àü©£c†—d«ÞQjzdïü.ôw£¹®ùë‘-o5Ÿ@­É8B[Âo:fHžÚQ,²òIAÈÕá©ÑjR ÊLý²ãÏ9žjì, ŸqåYʬG’,V)A&ú†bldêºñ"ãì£ü swÔP_ Q×»¢îCsøCzS‡µn$þÄ«ïPl0ÿ 01ºñþð ¬o‘¯S4>cY/g¤E!­?l·PâYäßU"ó¾³ÜîeKÑ@ë”÷éyñžòn·±€gÍs,aˆeŒ°‚«qדÎèYÇ6Á\'1A•Z*ÖjÄOó p>…ÕǸN-C}Ö]£'Å!K¦ë¸A™#Æ<­›jöPKL+ÓÓhPK˺$-*junit/runner/StandardTestSuiteLoader.class’ËN1†ÿÈ(â¼+^£$:;£qct5ÁÆ}aª–ŒÓéKW>€e<*hâ¦ç´ýÏ×ÿ´}ÿx}C»Ø`Øl'JO'J í5 W×Á…ˆM#‘Fø„vÁ&Ûüž{!W×Þy³-ZÆE†¡ü£~ nˆ!w$IqÌ©T/²'Q p1œGy† _*QOn›B_ðf(J~Ôâá%×Òλ‹Ys#c†mÿ?†IRưUñ¿|7Œ–êú°úmé$äqLòüéCKÜ):d­o¿™³(QAOãbŠŒ÷©\Ì0¸W‘®ó[êpŹé¢|¤.>4*mÜ‹#dVtÔu%Â=æyñDwG0kÖ\›2c/NÅÄ[Ó–ANUðÂWDç«|ÉŽpL˜` ÖЍNat wfAXîè¯2“¦ˆWMˆtîe›ÂpA .iö†aLJc³^çÑÉ‹f ²ÙÊÜ ~iÜðˆ$G`ß+Ì%ñn3Y/d=Qᨠ –“ü˜‰“écŒ‰ÐjPeA”1[„ç°ÂMQ³ÇŒ¥öƒ|ÁÊ5Œ@ëž‹SÄñS™ÒÕádk36Ê)öQ(*²—B}Óúe‘^ ½ßúñ¾dÊG¨l|?ƒóùûµ49ÿ;|(:~Ÿ-æd¼øˆ™•3%Û¼çøòãø„xs%/@…úʃ+|`ø þ*.ü-?»ù<ùGY à¿üø'þ-;^‘1ó®·òA²hÛ¦aÙANKo8ѱ:"MωÛ0Åܦ•Ý1 Ž™é³Ë*sÈÐê`^å³0²[qieέüj˜_)þ,ç-zÕp§óìV#ÔHvò}>,ÌÝýªÄ¯JåìpIK¡«•Cfy¨2UNYuoEöE~tz¨ÌçJS,ÝcòN$90T@*»†Ò1OīƱ~ä —»– ½Äeo ê05a˜¯—{Eö§ŽÿÇÈ­;é1Ôdi¼“oÃ*èSU,¯¨[ŧªåê0IÕÈ¥-½2©9.ÇÌÐ1{R¨:U/âS˜Wûhû—4Ô1˜/žLø=^Ê[ ¥wúPråg†Ðw›ä†±¾mYLSà-¡NöãpöKÀ¯CnÓ9ärÏçÁæPÏó;\¯sޝüÅ'p^ñé–”îD`c·kùq2Ç'PC=µÏ‘aIâ0LàS´jkYGÛ"{dpƒž‡0©ÝY2yq»«¤rq»»$¸xj‚Õ¨çú1û L¦j`*Gãèêx:vß»& Çò÷8> Úx¹eÀ6.£©:<‡¼¶Øn\KM’Œ©%Ç1–Öà Žoé@hf bf{uÍfµõaxð~̨͠)ƒf>Z7ïýdŸSã™?`sB)¦snMžˆj>ÁIÚ™ e&çÌTÛiÓyG‡`!ßÖ¾„E¶ƒÓ´Ã€»z'NëÏ™ôèÄ6æÅéΩvc©V­¤d ¨Y¾¿š¹Ÿ£†—M[ÍyôÎÉg•óÄ>Zͤ¬›AÇ#˜”A×&¸]wmp¨±2Áš-{ßuÞ•3UN…àûŽóqZàø(,¦'XJs¦«lÓbÖ(Ÿ‡£1>ãš¸Š·qçj­­Áê ÒmµOÂ]Û/ãó6¡XžëÛjûC®Ú=8B¸ôµ+àÚƒaƒ8§}_8Xp9®Ý\Ô6v|A"ûÍÚ~ª±üœc»>“¼Nc¶Ä­Ó!×ïÑ8‹$ZA©³B'&¤Û]¨ã‹EVš5Ìk7ƒêµÍ…Øj‡(£Kñ-Zòà\†o3ULÎwp¹®PÞËûc»n»U«sf 7ÇY0„\ƒ¸²½zdÝÈú ®Ý‰ønÉæ nÊ`KÈ ¸2¸}Fpp`kk {|gk ÓWÓ¿Á©Æ‰B àVI3w×Ã9ët{èå¿sHû‘ä[~Š K£‰ici/Âz,áúJ:?^'P»› ¾wÛøFt ÒÎÒH;©ïdÜy%˜ÂJ¾—#IÜ­9 Σ´µ¼ºd{÷o†Q]’á@³/oµ/È£vyÎ~9lû¼ïÚz{ìNÄ.]ö´‘mBQ°vö«}US¢7PÅÅÜz é|i^rf:¥G÷ê÷“Iáq†é««mú î“ÍÄ’í§ZñLû(çx¶}!ª%[ËÜü¤F`üY{ƒÛqËÞj2x•޾Æï›ý­ª_Û›ÅÏÛC»œó &—/+¸šÞ^Ã⻚¬¼–ýü:ö©ë¹c#Y»IGrªîhsr‘ÌÁ/è5Ï;J¿ƒ_Róhö­wñ+FRÁ¦ükÍÖñ\ º Ý({äw +NõÿK%mSmJˆºK‚ýMÈ`Pm†[õâýv!ãl¹ÞGõ×2¼?„<ÏYx2øó¥ ÞZü=ä*ó25>gCQ*Èb_YQÀ·»¬¨3ƒÿ4øËŠÊüg7ñáݲ÷=¦ç¿_¨x+âþ¯ÃBÆVãá­ðô¡<4,àzÅ’ÚÿõÁ¾m“é"t“ùy›¬¼y^DÈp?Ù$'Ø€ùï&y3ü…´ØÂÝ·q÷í¨d‚èÃÑØÊö°i¼ƒšîb¢ïfÅÜÆ/+¦ŸMd;Óv/kê>ÖÒý´¸ƒÖ2´¶“¯‡»¨íjº“šÒ@màáÌ„æ€Ú–£Ü6›r|ËçØK Üôã%d6+E@ÝôË¡ÊIúµÊ¥¤±œÌª\E/¼ôlª®Oý›¢<œ+¢‡^ ­Ÿ~8”—{‡ÓÆ”ìõ@=FýBžçòÏÒÎ}(•sßšŠcxŠnPªBþìÞ²÷Ã`F—gÔ¨–ê=pmT¥íjtkMuFéÃȶ­(Ùr Zn ­‘!Wµ“g›«&£Æ’0‹kw©‰ º \¥Ê:“N”jQGj–©Jy”ª î%·S&k]u´%P{"ÝJ6Sß± ›÷Þ±Ùkdç™G¼yf-`|+Øì»rø¯áaf]NF©¬Ò¼Ìý¢Ò¼¼Ô"ýÔâçüœœÔä’ü"vFF¬Ä²DýœÄ¼t}ÿ¤, 8;3#O2DH}1#ƒ¤†¦X]iIf޾k^injQbIf~ž5#Wp~iQrª[fN*#ƒŠz =lŠ L , ÀÈÂÈÀÊÀb1°I&PKÅsõë«PK˺$-"junit/runner/TestRunListener.classmPÁNƒ@œ-ÛZµ­1ñâ Êxj $’&@{5k»i di`ñã<ø~”qk´§Ù™ÌÌ{û>>ßÞaà— ×y#3åU”¢òRQ«¸‘QV+¡¹ Æ0Îù+÷ .·Þâ%keÃ`$é<]&Ï~/b2 KY+.ÕŠ0J:_0£eì“ÚÓªú”(^)±a˜¹Ñ~L¢ªLnÂÛ•žÓ9}¹!Ÿé>‘ºÏ—»é'$ü´M´Q¬O®®É¡wÀ³‚ˆë†ÿ‡;œ¤lªµtaòç`÷±nЃIÅŽ`ÁnÙ±æý_ÜeêÕ141jñ´Ã1ÎZ<ïð:)¦mvöPKC {í ÅPK˺$-"junit/runner/TestSuiteLoader.classmMŠÂ@…_™Lâ?.\ºPPpcàrЕè"^ …tÝÒéÏæb0‡¦ƒ ¢E½÷Qúý»ü Àº„Aî”´‰qJ±I¶\ÚÔIË+-ölb¡—‹“H ¡Éf—sfc„°ða2]ÝíÔ©óÏé»e9'4çŒVjU†OþZÛ¥vjcbÔ ‘ákÆxúrðmDªÉx) &ôŸ>™U|4B !ªª…„D Ä~ ýlx¥‰Ö£â»]±èüPK¼ÔŒðÄ2PK®»$-junit/runner/Version.classmOMKÃ@}“4M­ÑÖX¼‹—V0Az,½ž‚*¹oÒ¥nˆØ&þ.= üþ(qv-â.Ìç{3o>¿Þ?àã“!ŽBÄCx"ì!$L¦³¬Ï"­…Þ¤«Ö(½¹&øÓYNæÉUrIè/”Ví’лiÖ’0Ê”–wÝS!̓(j®œdUÇÔtZK“æÒlU£yPœ5¥¨sa”îÐÃUÓ™RÞ*›D;pbe<µ&Œ%Ý•,[úßVÔ>ª-NùBöyüù0ðÎRöÄ>8CïÕµ÷Ùö]1ÄÛè€cŽÀÔ±ëZò™ë~L/¨‘£Ú„C¾PKëãY›ûhPK˺$-!junit/swingui/AboutDialog$1.class}P]KA=×Dפ«‰ÑúcK4¢ß -EÑ ¡ JÞ'›1NXgewÖàÏü€>øüQ¥w&ADªÃý˜sÎ=sŸþþyDÛøLXégZ™ (ÝËT°ß‰3s¨D÷껈Pî‹+DB÷‚£N_†ÆCŽPu]10¼’Úû¡Q±n©ÔH-ã„ s®Òz“G´Þœñ•P8¹Öæ\2å›bàwÂÚÆ;œÍ6!w%!·±ÙöQÄTyLûð0YÀÊ„RKiù;»èÈäTt"ÆVZq(¢¶H”­Gͼ5Éßy{\}—M–„ûß±LÎâäBv 5vø¿ü°¹³Xz~ yX$x]•^Æ©ô±lM/a…@ìcõ=5Bñ$Î’PþTÖsù…»K#ø¿4¯ý i*S4yyð:ùVìN8`Ïß">písö…k×i< ÔغÃÌÃTʾTÎ,g>GÛÃGŽ„y,ŒTö8Zìdã3÷X}­QcëNc~ˆiجŠ5Ç®9Î:>9ÖP¨üPKìW©PK˺$-!junit/swingui/AboutDialog$2.class}]KA†ß£Ö¦­iö]¦]x‘Fmt‘XR Ýv=êPÛnìGÒÏ ú€.úý¨èÌ(Q.,çcÎûœwæãóíIlb°r{*r¾ò®båÔ;~)áúW• D(Þˆ{áˆ~äÈ{éEÎ¥òz~¿Þw‘ ,$ ãѵ +ÛÌjý Û#¤Ï¼èZFªË’}Ń„ÒúMµMH5üž$$׫m˜Ì ÛÆÆÓH`Šk)OžÅ·\ˆŽË³…–ßn[J×ÃfJ›$¬þ¿®²Ã&³}s½†ë‡<@(³¿¿î¬sc0÷}>ÀX˜'X=Þù¡´±¨-/`‰@ì¢8ŠFÈœûqЕM¥çxÛÒ2‚}êy2h¸" eˆm~€¾±~Žô—ài®3œír­;™Ú+²µgäÍL^÷ÌI“)„iÎlŽº[ÀŒáÎbnH9äh¸µ'ä^°ü›q»O c~¸ÀÐÙ ŠF½j4%”jÀ _PKyŽPK˺$-junit/swingui/AboutDialog.class…Wù[×=3Ë6ÈŽm“¨‰ã€XdÈâÆ8Gà.Nëti1CG#0N—$ÝR»¡{Ó=é’ºkš¥H4J“®I›&ÝÛt¯í÷õèOmÏ›‘@Lýù›½w—sï=÷¾ÇKÿyæ9Ô¢ÿˆœÎ[¦ÏÍ™V:oÆ{'í¼{ØÔ³vZØvZŸÕÏøÛñc•Z%™Õs¹=ûR&žÕ)Ñ/{‚£ó–›1\3)PФ‡× ìlI¬²6àèÓFOë¸@ ßNÛ}¸>çÆýÍ“­ã!¨Ø¤!€ÀÖåí ’-¡œáŽ9ó¬>™¥‘@‹§Ô€F [Ø’6Ü~Ûr ˽C·(±£¥uÅÜÑMËpzBØŽ+¤£YÞ?꘩>=Ðç™»j[|PWjˆ I ¼Ö–‚f怸|5¦ªÈüµ!ÝÒÓô*m]¨†«ðšÕ¶¦gl‹˜\ËlÓÖ¨y–àëZ¥ÎuØ«a®çŠW3­*ÅÆLW¦áŠ–ª²Œº3îùjC»ÌKGu2O˜VÊžS§šm'u×´­#Ë÷¬1f/×n54Ï`º5ìà W®¦Ò˜‘sG¬‘tm&ä&*IÃñ½…°_*ÞŒ×^J²¾¼ëÚ–‚ ­?kç e¾‰»¤QÓe»§KÁ!«ˆõr"=~íú4ô¢_B®òÜ;™s=éV!·õTª7)“‘0sdá\S• c–!ÅWKx.Žâõ0(°‰ô±í2÷"eî-G[Ù"ýnGBÒoˆUXWDÁqè°1¥ç³eœ».é+݃ñŒh¸£ef-‹$ôI#«àN¦øØL•ŠÆev7¯t -Éw’ œòR§âM+<¨¦•OH§4Ü…»Ëͳ쪊ȺOdi˜€ª›Ý.“)‰”†I•¬rÓ—Ÿš’•& sT…©!#Ao÷ëíä-æ?>n89S0+Pc¦ä\i]‹: ¶†iÌР>3cX”l_¯kÖ,ùPhÁAN"`4ÍÑÉùèíŒ2Úg$ï‰êV*zÄ1“™èQ}zZW1Ëætm_=„3ÒsóZÒ1t×HØi{e0­.ýÜ‹·i¨ÁÛ%ù/Lœ9’µ¦åæ¼SÃ}r$Õ¥¹yF@ †ðÞäê»Ë«ó!¼×_yG”\™3Sn&„÷û«çˆI®f 3qCø€¿üL’•ÌØNô—>ÄQÈöh]w6TeíøäiN¯ÀÁGå¨ûXõø´H ¢ÿéÁéV¡Ó'5<ŒOѯéí/4+*ÌÌgðY‰åsŽ…nhxT6¼lhmÔЫ%<à_Ä—ä˜ûr¥^`Ãöh>™2ÜŒ:â8rÎ}…‘%x ç§' gÌ?“Âr¤fÇuÇ”¿Ë‹7c2ª¦ †ƒŸÑC¶ËöõÎNV˜†š ¢L]RNQN•uÇ}d%ÍºÖøðÙWÙï&â¬GÓÆä çeÕæÄÄìYG‡æÂUk>j¨¤»®êP$ûK•wú}ÞÙ§ç yÈŒx?U|¯Bª•«ˆ‚çIª)Ûfº®û?íí__Bø~¨áûøÏ’êÔzÛ¾vÞªÔû'åãË—Ë8öœ,¯‚e#î‘Ëñ ág²çŠ—4¼ G–*sÙ™6§T¼Â¾öèô£RðKFE;ƒIy ç켓d û[Ö ¾\d•rJ í×ø†_á·Ë7„Uû~çý^žˆ^âcØvýÐÏ$×±$+̤<…Âk­1£àS¾¡ŠÚR˜W‚A¤gÜÈ!Ê*0;²è|+ÿj¼• Ÿ¼ÌU¾ÅB¬-PÄæXmÛbì,!2QÄ5Šc8W@K,ÌÎX[7^€:[Â-%ôL„o-â¶¡öz'bE.àÅ†Û +a|"üÆ"&†;J¸k"üæÚ†=E¼¥€)¹SBf"|ºˆ{–ðÖòá9> 8KñH ¢°ÅW Éw¨+á>¢ºÿ@}¤¾~ï‰Ô×.âÁH}`ç½çB¤¾A[će‘ú>^ÑP"JÔPRC~Ÿ÷¾"ʲF$QªTÔˆê©ÈçƒÞó|DõTTO%¢–ððDƒZËÿE|zŸ—FÚ#j•`$èÙz@ƒРg#¸â¶.¤J¬„Ge¿PÀcO²:­¼ váëõUVíqÞ5-¬c6¡‘—å0®Å6Jí ÔNtc¯M8„ݼŒ5cï%Æx­=Åû­…ë±€<‚C;íuàt²}âx…£øUZ¸ˆð/܈ã&ü7 ×Ém¸E\ÍÛczD7ŠÃ¸U ã6q‚wÃ$z…>1˳à~^ðÀ€8Ç÷Côü5¢!R2 _Ç7$ñøõM|‹‘u“—ãÛŒìm='ùuJìÃSxšH-à;ü ç?±È¯:J_DEF‘ßKüRˆì^|—_*±ìg,Er: wŸÙ°i«†ïøSxvâEì>~n ?žxÏ^ÀÖ^8yw?/âåçÿXÂï’‘mE¼ú„×›ùçËŸÊ©×<3ÃØ‹ã^X;|³å°öÒíŸñjÕà¯^{ý ç;̯^¯áÂ<,½÷ÿPKœí¹ ²*PK˺$- junit/swingui/CounterPanel.class…VitW½cY–4ÙŽ“8qm'éâD–Ý8 iÚ8Mˆ·F‰,§±ãÖmC3–FòY2£Ql‡¥ÐÒBËRÊV(ûVhÒM²CY mÙ—R¶rà7œ?øÉî{3–e[>G~o¾÷½û¾w¿í½üŸKÏÃkñgWœÏgL»;7cfRy³»/›Ï؆uJÏiçõ ú¬³Þ}•{Ô'cù© ÃNXVÖÊ)Ø]¡:jÌÚƒ¦‘Nô(ØPRÔÍtÞ2¨,ÉNç3üÖ–Ö"ñl†ç®@2â¨ÎaŽFMr4këiJ„‡M^ãˆO¨cLAu_6a(hÝúŒÝ}“e&zõTTŸËæm6h¨C½ŠFlTЊ–ô…!=£§ «§cLèmVQ& R+­Óžá‰óFœ8[øS†Ý—Ös¼ÂÆPGtYG {4\Íh% & Ïu'{îN™I?¶‘¸•.5r6)É–;H4ñÅ…O¹lÞŠóVCkN)ŒØqz:Öò§á*\­âJ\£!5€*ì$¾c”!ˆuL i¨u–ô9nºm çíé¼ãOAX¤c=gkèµ*÷îÖàE@Ù£ÁçÌöið;³×­Ž¬¨>!"ë:^‡ü¸žþ ­½XÄqÊ!Á¨/¹.’Év·øBþ9ŠGUÁëôDb4+â@Áž2÷e§¦³#c÷ˆ=ýý‘Ht¤ ƒ^ô‰[õ×}eÛÂÍ»w;Oq"Ÿ¦Wª`êZ¸6ÆŸ¤MKé@Œ!Þ%jf '+Fõ‰´!² ×ÓcºeŠoWXmOšŒ¶Öèú©ÛãÆþZù0ÂŒÙãÇ£‚ÀÆ×)ËH2ŒÄˆyQ¤ÍR úÍ)#“3eüÜŠq±ë¶Õè%}¸CAIb:Nå§¼-¡Jp‚Š7àNgqÎݤÏ.mÒ0á,Åy—Žg-ób6Ã|?–6SbØ$"$ù4V¥ÖdÒˆ­Ûùœ Õ“l÷GûïŽ ªK –w{#ÒœÇýÊó„ô‡V©‰ã²˜ǽIÁörl2ìð\ÆÝTK´„i»¾ Ý&0ò¸ ÂÆŒ‚ærŒÞ¬•0¬A=ng­9æJé705mÏ9« ÚB+³oBÊÝͼɛññVÞ˜g/íÚºÌ&aÓ]x» üÌÀ3aOrLºù¾ºŒö±bØ–nfD¾Ý«â>QF½).Îjx7‚Jîw%sÞãHÞKƒ„D¢kx¿#}e]H' 35ikxÈ~˜‘¢YÆk¿†ã#BþÑ’œÀsdgý×3ñɬ¥áÎöO’ꤙNkø´#ø uL™Î$uM†kø>/Ô¾àÖ%·40àLYˆ¿Ä΢ £b鈮n ’Ñ/ã+*Åc´%NU›*íeˆÄ—ù¤{£—¡›Ú^Ö ƒÁäY5Çôtž¡ÕZ¯&Ë,yO‰ö´M0R…gÙ»á6QïE„+ °‹Ù´º¦õæ“IÁÇsdqy-“âEbÚYGUÁæ¥>±¢*jøžWñM|{EKuV}ø.,mN*تÀl%Èïã*¾‡Ä¡š¡¬º?Rq /2šºýxY„Ìô´‘¡K»*íX#rnΣ~‚Ÿ  Ÿ•õÁuô~!ô~I·‡Ö¡á×Bá7NÅîÒð[a¥W÷Ê㺢^T%§]¸oZxŸé3"ƒ¦(0ÊÛÀnq*~0@ G¶dΪDC–£ßùc­;2F8 ˆwÿ7Ê_ù\R8Ö‡Ñ8>MóØÑÖ¸}íìr>:äGg8ìŸGw{—&ûÃᆀœ ÀÁñÆ<ó8ìñTW×Õ5¨žE÷ðoÇŠ‡ŸÅj®m W½rµÁ_Z–*uzçõ®)S£ÂÞšÿƒ£Ò.â» Ê~ÿº(OI†ùÿ tòÿ&’X‡­¤­›±Mìõ[pŒOÀ^þ¢|žF ΠçøGüMb¦±9ì`%nÃÝ|¬ÝÃßC¸ãÔÜZSÀÃüÜÄ 8NGFèÈtØI:#J{†HdŒ÷ÆQÚ>H›‡hµ¸ÅE¹/VºE _Å×Åœ±1]ÌØåmc¢ ÊÜŒ‰¾Çì3v:™•1Ñß${1ÑÖdfÆD?#'bÆ–ñ’Àׂ«o,å*n'¾8õJ™ŒÔgd/Mȉ§€Âò•›äñg8ÆD¿…Žº•N_ŽçZ #/ét„»Å¥jÂ-+ÐT)½ƒ˜g%B“£U"¦óÒd %¬³¤Bhµ qi¼eßYÀçñRã‹ø9Å…"~UÄ+EünõQç˜$zÙQí¥£ÚKGý¾tT/ùZªä‡±ýÌj¼‰0ÊðÔžZÂûCe¼ý•ð&‰g^¯Jôhï$¿D„:[ÉA…ë¦Se‰(ÁðG²«ÈÙ¼ 9’»_ûPK«É×2ùPK˺$-?junit/swingui/DefaultFailureDetailView$StackEntryRenderer.classTßOAþÚ;8O(…V+TAÛ‚TEPÂK±±¦Ñ„’>ôm{¬¸¸½kîà¿ä“¾@âƒñÙ?Ê8{­ ã%»377óÍÌ7“ûþãËWŒâž1lF® ËÁ±t"YÞoy¤Â—*òÅŽIiIq¼Ô ¹óþ…úv…»/|á›` ‹‡üˆŸôÃ7dV…RŽ£ Æ–¤<Û £…b‹!Qõö…$ Œ1L6¤+^GÝŽð÷xG †tÃs¸jq_ê÷1¾“C¥ñßeWæÄP‘U¯Ûó\ᆠۅÆï]½Ò®•ØTVœ o:‡Â +õv»Ø·òã°|Oø© ßf膉ƒé‹žâ5‘-T«ÅÆŸNiL[˜ÂŒ Ljb²DÃåZxG(7 .áž8¡z3…a¬bËÆ-ÌZÈaŽ^Â8/ÕÄm† ãyjOö4œyv D¶¢Î¦¯ ƒ!yÄUiˆ«KãUu¢ö„ÕÉ ƒ¦PôQì“¡Í`;DþKÔ<' ô\ãVÒûÃ0s5ÓVÓ‹|GÔ¤Þüß¶`MÇRʺëÒ A)—ÿm…L¬S]Ã{D<Єô3B‡64ÒÊ$™¶”Î0þ9þlÑmÄÆu\£Ûî;¼N’éi‚?’ßÉÒê7L¥ÆSó§Èl¥•œ‘Ï$2É3ÜØ4K9ãùø¾›3?gÈ"ðœ070‹M, ‚ûØŠ3îöQµ¶ˆ¥¸Šîa9n¡DÞú/h­H'k+t’•Ç*ý1 BžÄ5iRÌÃ8÷#<&iÚžà)Æ~PKXÀ`a`PK˺$-@junit/swingui/DefaultFailureDetailView$StackTraceListModel.classTÛRA=“â†KB¸Š\L6H¼rS £A bÁÛ&`aÙTíN€²üÀ´J“*©òü¿@íÙ]CŠ‹eùÌôL÷éÓ§{öûϯßàÇm¬1ÌìWL]¤ícÝÜ­èé%¾£U ±¢éFÅâK\Ð&¯óãÑ ¡6-­Èsº-ÖÊ%nÁöµ#íÄO/lA.¢ÁÅÏм“ÓMn3DsÒ9]º‘Îó¢([³t;§"™gd(NA¡03´Ÿ B!·D6™—n­aDЦ  Í-𡃡Mf{U9,pkS+\æ-5#¯Yº´½Ã€ØÓ‰Ó\îÿ öÊ.Ë?ä¦X q¢åih¤ÇzaŸ(“[ ÿ㣠=’sC“n–ø Ë2 hCÃÈØd( tfÙ\8ée–†Â"泎vvQ3Œa4LRŒ3Ävt‹gʦ ÔvfÜy‰¡;q‘bÖ‘3¤T]%jÂM½˜‰.‹×,†‹–ø¢axØ Ò²qÜaè=kœ¹Y>à&UEœbð…#!ÜcH\RÌÅ“m·Û˜ÆCÒÓä'ÂÁcèL$/ú+xŒéLtýZ©tN4¯êä¶‚y,HÂO"{š½V¶¸ƒk; ûE<“8blS‡ûsW–E©ÂåŠUä+ºœ°«fiRBÐìdM“[C³mù:ÆÿmƒxA½diV|Ô<€˜Êç@;ù£—D'-´[¢[FkT­ášzŠÈV{g í_ýD§>Äè¿•¾  ]è µ“,ÅB]z7z<ÄyŠòÑÚ¢~F´¿Šþu f'¨Ûèr<¹»Žºg¸Ajʱ„ªbäÃ9¤þ*¡:•›õâ׉²ÌSS5ÜRU¿‡SEê|uƒ¤ÎÕ3Ü@.V'Ã}%™Éºr«žrqôî_áGIò1‚o`÷à}òqz o‰†ôW=ÐSLo¥¢÷ý58lr7t‡!‘û»”(°²ÎÝ”µõÒ2¹Iìz#?U«ºjxžT !Ö‚ºŽà/¡‡aâïB\­ü¢hke.\Rž†„c2â"Íã‰}ê„É‘’Pㄌ^œdh )f,“Â÷“€i]3¬õN1ôú(~™ ®MPÉlÖ‡8-cg(Ñ}Y„™J8Ë 9ÜÀ$r"·/”Çã2†1BÝ@†nPè–)ˆR^ 1œ\/Ù”tG§úä­jʪ˜®Õ¿¾Äpë_d›6]ûMž›«Üæ¶„+2ƽæ )nõ†Áƒ:î5ðÒ¸†ë‚à †Vgê!NÕ»gÍÖ¶xÕ²_¨EîÔ)%E{ƨi¼º0L‰†ùïÊSc%1)ScÝf8ñ‡°îÐr…3CW½I÷XÁ=Ü—q©)x÷5‡ ¨¼·•0M…£2ºá’«Et¸AÓ4 3ƒYdIÒ=ðînäM"?@N´öCjªµºÀ}Ô—Ò,\³,Š×Gž!$|ð]ýŠ¢Œä‚U±ËœòA~W†‹ˆÞ}Vˆ‘24ÇáôÇèlPê݃]‡A*VèÁÑñ[ ±™Öô¯¢±•v*Íâ®ytmïiÁa}‡6´Ó¨øèÀš):ç·ÝÂètCft½Ë;ˆ/oãø6ú>¢[\ì``ùè`´CÙÆP £â(ZÃE1Çj¸ì›Œ“ÏÕnŠÝ»F?qÒ4N“¸œ§‚^Å,&‘ÅÕk—ÞBHï&z3„¡¹r›«!ý s5Ìïf){×yZ<¨ß<€«<òZ » 5~E["²Ë{ˆÅ´ˆx<Ƶ£Ud[Cé+â»9û’>ßÑB<ñÆ% *C„4‰à)…§ùb?PK­V>x)PK˺$-$junit/swingui/FailureRunView$1.classQ[OAþFÐÜ*Bk­RC0íê›I›Æ„xKˆ&Åð>À Y‡d/¨?«I«Iüþ(ã™>èæ›LÎe¿Ë™3OÏ‘Âl ”F±V‘Þ(=ˆ•w"•ô3ÖE7ÕB 7’éùR¼Ëîˆz‘ƒ”À®éÞN™MHG^K…Q›|F¨±6i Ì ,DCV÷Ù¯•døM Ó¾ÓÑ"ÕcÖwÅØ•Z2­ÞH7Ç}HÕêY¼Ë"e3˜CN`¥¥4]Ä×] ®d×gl¾5îI¿#eêY3mF(':VxTw"ý˜šC^ õêÅg:ŠxénÈ}ßÀ犠"¾hV¬å·Õq¾èWúŽcoXõÈìeö5LÎÛRÝ5Ø¡«zÚ¾œcmewV9«ì<_È>Ë“§ÀòÖ¥ÍKÉúˆMNÃ2ßÐcÓ[vʧ…(³+;= &TyI×HÇ&o²™S3 ´#jVTW=6¾¾ŽeKÀÁöa7§¬,¯ªNI`Ãÿ55ì \}ÅÄ(‡FÀo—1áN ×nþsŽƒ€¸Ëq\ãéCé.üª^ä·?T½N7C4Æ%žŒH„ú;ßr´Bmu7”¦—äÀÐÆ~Åxtx#fÏËÊDÆ%h"áíc/:šŠr–®;¶!±ÓŒÀQiÍ•bÔ…î0b8ÈäÓp°˜uÓ±G•¤•1å¨}’u\àØV%´] –5nØIÃ5Ü ‡qõõt±~ÇËïµÖ(ŠÇp\ºˆðü”™6g-cÜYr²vFÃIÝÃ,«-Ù¢¿LA[ùY:ÆX~-z2)9åu‘/†-™÷37–)x¼¬­Â|ƒ’åYŠ0bÚÆXviÖp'uF°Fœ9ÝšÒ]S¾û‹•™3]Ú*è2¿sk]U?¿–@#)‹™ôeŪã)W_2V÷š*s‹¬3NP쪞Àˆ$:*¢‰*] Ñ"/ 4–-î Æ9hÞ2–(Ä 7²xF6¶Ê$žªÅظmå¸ùqY œâ‹Œ†gp!Œi<+Pez„E‚ß—¤¶É&]GR¢Àî²bøiÒ™·e=CS-c¤óúhHÊ©7ªY̧Gqþ/pqÖH^ÒmC ¥æ¢Í‰9×±,¹„)'I¡óÝšïêka,Âòô²ô4« !¶^JµH%m8rÖ]gêMVA:n¸®ãöÍ›©X¡-eç›-Ò¯–Oi'ëÎ1´±¥£§xJYÆJY0%¡µq‹d0¹`tXÌE‡“êðrÙ!…åîË%*èÄ«£eÆ^©ër2–áLYçñz¯á 6Öuú`6Më.ÏW‰a!•4¬QŠK*²‹Kèq¸» º5¼V‚;cåR–Laû-©áCo¶}Ä¿Y#kú¬“ÍL:ÝeZoâ ì*sŸµ<çUé¬) ¿ÚUk¬ï­Nðjt³ö0/éô‚ì„ì;¦ ºä+jŸoqKÞŽßQÙ Ulæq ÅìOêÇ€²FUýÉ[·y“[…7_€ÅOÆü„¼O!ÿxëóâz-4>·ñížo3Ó½ŠH÷Á;ˆvßÇŽéîß½‹VU쾃v¾¶ßÇÞéèmæÐ#—*r8äm™^ÅÑNÈ·Px«ÓD=“ÃÐoôÀ9>ûèè'»ò9…Ý8C¼NbÃ8‹1Zã<'Ú9\åÀ=Oë&!÷SqÌàqFÂ'µõãxKE žsh üÊ_`·½×'G{ÚîâéþÂôXoWnç µRÐmˆƒ|.¡žî›9ƒ÷qKçݬï<„vÒš¡ÓfDðž'Ê>TAÇ,J Ì¡Î'tTªºsHâ«X.tZÁkž‘/Ø‹ >ÀM®J×÷±(óÑiŠt¬bi”€/DÓàæØÁèK½=ÑWrx³à ª]!»«ŒmûɲGg^ÄNJö6]EЈwð.O·25ïá}ǸåÓ䎤\ã'üã±ÌR”¹uyªÉ»¨¡,Ÿ(>Åg>ÜþWÈH 0ÕJ‚”‚èð6óŸ+ùí |É_ý7˜ù?Á*åíåƒ (p NÖ>5þæ.¾`c´m—Öe®ÎGàõü?©$ø«.€Ÿ©Í€òýPK¥½;Én PKœ‡,junit/swingui/icons/error.gifS±k“qýB *¶[ÅÉ‚.:Q%T ®œ"f„.âeÌ ®.Bè©â˜áŠC©ÿátÒ©'Eá|÷;H¾ãîݽ÷î»·³}ãæ£ÓÝZ÷£«¶ß°=†ímÁøºØ?ìyÙëu·þPKƒÀsý(dPKœ‡,junit/swingui/icons/failure.gifS?kTq|%*°PÄÂW+IH±!ÆJ-Ò ƒ )ÅBH#ì+ürÕüS\!b%¤Ø 6ê}µ³‘#ˆÂ:û[¸{ewvgfß›[kë÷NtgºŸ]ÅÐ~C{ ííñýðí×£•••¾ïWWW777wvvvww÷ööÆãñd2™N§³Ùl>Ÿ/ ¨¨Š©¸J¨¤Š˜ÀDMÌÄMÂ$MÄ.êb.î.é"!Ñ ñÉIAЦXЧDJ¦ˆÂQ& ›XÂD…8@²J+¥ S¸"©«"5˜Á aHƒxµ©ÃîG:$ Hð@2 YК°„'"‘ ᤢN¢¤E\™ Öx­Q& ›J æ¦êª¡šM2®È”™ºi˜f‘K³È\Ý5\³ÉJl³PÐlB“,ÕS#5›ô(+(¹`B…Í´×ÛxÓºŠ{]~XŠ2XPKD·•ŸWUPK˺$-junit/swingui/ProgressBar.classu’[OAÇÿÓ ¥Ûí…*Ð EnW¡Þ5Á˜(XS ¦¼-e¨K¶»dvø*ò)€hM|ðø¡Œgv7„¢>ìÙ™sùÛüúýã'’Xà †¹ÃÀµeÛ?±ÝA`·? o ¸ï¿±DŒaöÐ:¶N#sûݘ5É0q°%„'Ø.]^ÚDzÅ4Z=†Ô¦·Ïud0©!MGY$ 3\îHKþ¦ç¨ð²ÑêªDmëD¶C݆ŽŠù—ªcElzÃ#Ïå®Ì Ì÷¹Üö/p÷*ÆMR«§c3*¨2»¶Ë?Ã=.>Y{§ä]¯o9=KØê+Sò³í3ÔºÿÏõ1ž)ƒ:5/8UQú»,fq †4!¸«ãN¤¹KbrÉ0I²g9*Àè¨ÂWÑTã3ÈÇ—– |Þ[§ö0긙ïëXQsN`¥'-‡vÒ!Š/ù©ŒÎ®ÚIú8‚k~ÐïSùi;^ ú|ÛV}—®u¸®z@ƒ¨)Œ>Za(™Z+É,ÝÞ’]ÙÊæwäÌä7äM:Mpë‚´ Ì*[H(ÌQLS(aŽ4z‰yÔB_ZyL}Me+š_‘ÿ‚Ì%–Î/±|~…,Э4C»Íaæ®㘚IŒëÄEVÆ 4“#´nV9GýÍ#Oˆ2ê×°•+¬‰fŒÝ¦Èý5³6š9BûâF‹DkïRHªFÞ1IàaØé#<Ž™ù¨ÈÅl©öÏ0]?CÉLýs¶UÊ,“\¡©®Ò(šô¨Za¾FDºÊ·€'a>uzJ»TCy’žÿPK‰Â^PK˺$-junit/swingui/StatusLine.class}TkwÓVœ‹;ÊËqœÙ ¸ï–&@ÉÃÔT$ií†BT¶/ލbåH2¡ýØD8˜žö~?ª§s%Åvm>(ºÚÝ™Ùݹ~ûÏ_oÃ5Ô..mmVF •Y4übÉiùËÉÕ-c=Š®Ôm‹4·bz~G ¾æ4¤À𱢆Î7,ÓvšƒæûJT4¥‡ð¶Iߥšår9¿£ac)h×0€óIœÃ„†Dø6©T±‘Íö^MºU³f“1m8uÓÞ1]K£q=ÂJ¦Ç´@“¾RÄ|ýDc*ñ"fUâœÀ|ÿ||Ž'Òš³·ï´¤jiA`ˆh Ë?"{¤0q9…K¸"ëÇXu܆tKfÝwÜßxW`¼îJÓ—«ò™´Ã¨Àýeµ U/kБOá* '7Ø'l‰+¢°äÿ*Á×QLÑ2ï Œ5¥¿íÊ'Òue£býΦ²z¾7§ukO¶<ËiQȇøHêcNòtÇ$>ÃäðNqLégQ(i+¸©¤Ñ(q×ò¦ÿr59²„û bndΦq½]ç ÜzâLžáAeå‘nášc;nwÙSÍ6뿲 ãx)ã^_ákš?0™+›®ÓnQ„~2[õv›ª·­Ð”Ê\¾AIyç[~Û“žg6cŸR§Lù®ëpÁ16¬áAHÿ=u+8DZ«Ö~ˆúH¡^üw^0/öQ·¥ÉZ â1/|Åi»uY²”G{3½®˜©ç >sê.ò-§n"ÿ°|I§»<«¿ù¿¡=LÄÆ´×H¿D&<Æ£cöE5Åçªu=‡1‡!\" Ü()BÐ?øEeé…ט)"ÛÁ|!ÖÁ;…øŸx¯ƒ |riæ– KÜî¡/R0FéãÄNóm‚ Ìb’±,/ÑTÀ¸âãKÜ äëXÅ ²Ï²j ëDØ@)ÒSåYiÌPKFi9„ÑÁvR*=ît0°iŽi†]^$ólÀ• k»\â}Gd.ÃOCî¨ÛC<ª\—*GàêçîÆnÍq…ô/ ]C×s•›Ö9Š|€ª…ùª€d×þPK@¨Þ±xPK˺$-*junit/swingui/TestHierarchyRunView$1.classQ]KA=cRפ[£ñ3~¶ÔDìê› H!(‚‚ yŸl.fÂ:ÝÙ¨?«P-øÐÐUzgÖ§"šá~žsîÜùó÷ù7rØÇ–@uje‚äNé›TmJÌwE±ŒÃþÃuª;Šîª‡„ÀÌ@ŽdI}\u9›½ÏðH› µ(â5ÔM•Ò{ø 0iú*©°jó}ÙcBëA›>2öD1â”wÇ×:ùưG¹ÝZÇGŸŠÈcÚ‡‡©&0#Pj*M—ém—â¶ìFÜ[nCud¬lü’ÌÛ±¶ÇЭòØþHF)5ú¼*ê Ôxà·—tfSnä­÷%<,³„áJ†§žû¸ V¹AÇÑ(¶†iÒ¹²¯¬¼&öÕ2±Ü…æ?lD2I(Áo/þ¾e»N¶Ø3Á·ˆûìqì2õ_(Õ÷1ûÃõ”]—­,9ž9ö|¶6;¶‹\ËX¾±µ½SõŸ˜}ÂÚÿž`Åq,f}/Ö[džCo:Ìg|q¨Œ(ÿPK¬»Ÿº— PK˺$-(junit/swingui/TestHierarchyRunView.class•VùWWþBDvˆ¸€U kׂK•‚R (u©È`˜Á™  Ý÷}ßk÷íçöœÛrÚãÏý£zú½™I€d ­ž3dÞ»ïûîýî}÷Î_ÿþ'6 ?JØ1“Ö5;f-hútZ‹ª–}ZSMÅœLÞNëcšº C’P1£Ì+±”¢OÇÎǪ“¶Œ "…§s‡‚ÂS£¦ªž4K5%l(4Ik¶:¤èjª×±çRŸ¡Ûê¢íoOxoŸöÅG4î“Ð]ß´uLB ÏH¨6D[ÇÂ(Cyl £¡R¡R–õ¼“QB8 £D¨“ O«¶PBm´u@´èžŽ˽a4 "Nm–°óßuÞ¹WÆ -~±äÛöºAl a+¶K¨, —Ñ,¡AI$ÄˈšbÆ4CÐ,[ÕE.:¢«VçUÝŽùÚ:T÷ag;°K¦MWÏ¥g'TsT™H1øªcRI)¦&޽ŀÔ,†ý_b¡’“Ùœ —• f#š§¨21¡&D.œl–Pû¾”b‘£Úß­Ng‘Òw!&2¼‡ûÑ­X2KÛ5­M• ›òøÖ C–±Ÿ’!Γêe¤ÍIÆt(ZÀ³baÄ6‰Ó»º9ˆC!Àa å‚¥)'A z(àhRm²Åzryýˆ„ú5Á’ŒrR»6Ê‚ë3fç Yöó™îÀ!Ç ¦n޼ÛkêOõmVŠ Ù/ uµs IMˆ€©µH’#÷”©Ìª †yÝœâœÂiqIâ„UXyóŠMö°Ð# Æ€¸¯E”°Ñd­*©~EK¥MáfÔ7[$ƒ¼õ)ö’¼*pêÝÙ§cXTøˆ„ÆÂ²ÈÊx$Û Ó¶–ŠÑ?ƒõr!„‹Øä¶„aÃ`À5«ªÒ홤y—BÃeø¹-ã*ÝžÒtO¶kD·Öjžc½­ñ0®A”¼SK»å¶@.'  §§È7iÌÝŒë¶!¡.z©ÐkQIhÂzÆ»yI-•p[U¾qÜ7ìf…º~YR줌9ÑÓÈsìPV¶†ØŒÄ¾H¢Ů㥴H⼄²Yåº:¦Y»Q‹îúM&h*[8uþŠÖåôôjŸŽ.!8ëÖÓVŸÆ¶\N´›Ÿs\®*Ì 7™_uQ‚wn›°«öÑ›l2vdõÞFkµ8ëhÃû¤Li{Ô±“ˆþO]±¦Sî [Ic!kobH\Ý·$l^û Œw˜öõåéÓìO¿j伇÷CxP.KŒaÎÓÁãlXÏMr™i½Ÿ_VRe‘–›ê¬1¯f±ÃøÌ¾-JÜwì/9Èø’ò'=Áɶª#}¡2|…o$„FœùЯ‰¹ñ›p]"3/.†‹38T ͤ€Qñ/ÄWÄ?~ŽðYÂõ2„ùÜÈ7‹v¦¥í.*ÚÚï ªm 5ãwQ{õm¿ >ƒÆ%lçvS»¦iZøÜFX šÇk\ËgQÏi^‡Ýürˆr·Î…F+ÚZÐNX›œžWä÷"ÐЖÁÞª}¿âþÁöªÞA]u4ƒ“ËŒåŽ]šÉ³ÃahrÏæЇ‰¢õCèçIIÌ«Ûá¦n`g~Êa;ë»̰kãaJ8K,÷ü>ï|¾ž[v,ä„ÙJ)ÚVsç1äHÛ¹Zʵ´§ì`G£÷0vn ©ùxO ³½3ƒ+÷ðX$ÁäÁ`mð6ââ÷tàÚôG‘â ®GŠÝÅDwìýîŒÈµÁ Œ‘%Üß…ÕSÒ)É`ÁyÞZvø M'cìBbˆ`ÝË·nô0ÊØA~S\¡e‡ ã0Û_Üe7€œâi<Ž'^ fñ$ž"CTÍ‘œõHJ=ðÏóÓz’à}+€KsÀ¥9àR8 ¾%<à#]$nëå‹ßðmòÑûi{jEÑ”{èEøÎy~[‡³êPKÝh:Ê,` PK˺$-"junit/swingui/TestRunContext.classU޽A…ϵþ5B%ÑèlÁ<€R¢Z‘ úa¯5kÌ&»3x6…ðPb‡ÊmnòåÜïž×ûñD€ :„aꌲ¢¸)“8%¶\ص3óÌX¾ÛˆÐMåU -M"Vû”% ½“4±fŸß°.)Ç„Á8ú鎹¼ð-ËÏ_á,Ü: Û…TÚå\ødyïý÷YDª°Ë,f=#´7™Ë¼Pš ýÿFST¡‚*üTª„ê@¹h–„ÐòíPK¥ÞA·æPK˺$- junit/swingui/TestRunner$1.class•TkOA=C‹ ë`±È»à«b»¥øBAP •šF ~ê—Ýd‘Æo&‰üþ(ãiC+R¢MfæÞ¹wî=÷ìIþúþ1Ì È0¶¹v˜ Žlw7²sÛ27#ו~:o€1ôï‹C‘s„»›{³³/«¡C²u«²ÅŽ# t3˜‡ÂI¡£€•z·>¸áž í*Ã¥pÏÒsԳܩé"C*Ò ÃP3¯æ‹yäùïu&åtë†Ár Çöžï) ¿´dÓ»e†R¦s«ÒùÕÏ-™­0Ä Þ;ÉËd+ý0Ç5—{Ñ…!=ÊáàèSÖÇ$”•bH”mW¾Žv¤¿­j‰e¯*œŠðmå7/ãŠ$†TGÜé< ó#—a¤SŽÛD¤¨Ve  _¸€†ì™PÁ‹ÜPúo…+EŽ;˜2‘ÆÝV½ü¿Õû“ÖMDNHõ²°T½éSå—g`†´$}ßó5Íz‰#‡9³Èÿ%ÛvÐî3ô2\Wï+‰­™’úlñÈÄKU0‰ù•j-ã­ý®",Å…&BŸÇ£± ‡,¡é²bfy!µ ¾„FEº§#Yëáá¥9WÉV—Pë-êq@(ô/µ9—F…¬8T\÷‰é­Å’ö;ŠN$!Ûj}ñºˆÞøð/ ƒ%B©§´ü‘NG2ˆÑ„k+½(“¡ˆ•çÉœ‘Û-ìÆGàKÂm÷SƧQ<•'„5ð_øj}7buÒC•PÅÑ,‘6{4I"5»Ç{Ô Ä£5þ×€PìGiÊoÊ®Qz¦ïYÁÿnƒ9]>J|_~{%¶Ø/ïˆWûì}äØe:w(uvnP¾r5WÅhÛq–9öÙÚì Þ²%¬âÝœò™­¥ä;×(ߢñ7£ÚޱúT7gX¯‰N½æ4ëØpª'PùPKRW¹PK˺$-!junit/swingui/TestRunner$11.classußnQÆ¿ìÂvD-Ð?þiQF·½Ó´61D#ñ¢âí&p*šÝ³­¼¯`¢5ñÂð¡ŒsNIzav““3ßìÌï|3þþú<ž¡MØ8Mµ2ar¡ô$Uá€sœjÍqsß§ÑyF&äsÖ&|Ï‹×ãèÌpì!OX1S•4÷ë½,Ò¡Ô_h3e£FÒq¨¤îˆ°ÕÊni …î|Ì„|«= PĪ‚7°RB·åžÒü!ý|Âñ :™Imµ7E³a+«—É‚µ(Ïe¾&£ŠÇâ'^ g<&lгÿ¦~cg¬žò°FX5üÅt§‘žð8@Ýú®¡A¨e =lü IH[ì&îØÂ}›x ÎâT÷Se8À£+Ü6d²F¦M!öçi<â·Ê® |íñ¹m!ï¬è΢$á{²Ð٠ݯÜì—“SDI´/Ñ Ñ6ãw~âfg÷Êß\MÅæìz)ÂmÑÜ6[Åǽ‹{KÊÇ%¥ÞùŽò%Öw/ñ°âªÓ;×̪õDðèz…9öÚUÿ’m£& =‡'®÷)ZîmruÂùPKc_,¸ñPK˺$-!junit/swingui/TestRunner$12.classuR]OA=·]\º¬m©ò!ˆŸ x"ÁøÒ¨©ÙhbIߧ妦l“î,è¿ñ/˜&>øüQÆ;Ã&˜Ýdr?æžsϽ;þþú2öÐ"¬³D›(½ÔÉ0ÓÑ)§æs–$ujX>æ÷ÌH§ÍÂZ\Ôá„Pé~M̈âµ–º7„V1d»GðÚÓ3&”[Û½îðP ác¾‚ê„Z¬þ˜÷yvªú©mÄÓšôÔLÛ8OzV¢´+ì&+u-³u2ÜÉøìFáÝùßZÏ)\-ºõ±J¨ÙüÇç&é„XÃz€Gxlá‚|CÖs ç±€ótÛ»[Æp‘xU7°Í²ïî…%ÝÕp‹*.:“Ç{܌㽆óÞoñu†âe> ÁÖ–lw°×h.D•›‹Óq\W±‚¡ãë…lä ºà—ä†Qnë{‚›’ëeÑ•³Pœ9Ú; 7QTqÒꔪc2ÌFÍ‘£Vž„p ·ejQ§7\Çq|BšïKGÆ.£"=?¥)¡rŠe8ÝŸ°3ŸásÉÜ>©£ùã/ …~Ðz•+ßwŠþ¾”H_QÛÈ2Žo: ®ÿÛ¼Œ=:6e£üÜž°Öú q8¶$‘©l,LʱÙ!Xáë^8X ¬HwŽzØÒbDjKRËnà|Í’‹kø0VV†bÐnJeÅÖ…àó´{¹ å~A~’rG¾Ðúª$]#éFÛ'‘™{ŠáÌÙ'ÉÌ>Áèo¡åXhKŠEˆtIôûjˆ—ÀNÒ_M&[¨l„¬e´G™Ç„÷£Mœ‘bòÍ&Þibîš<“MäÇm¹+¿PÒòjË¿bžŒ g¦øÅ>yø+w’«O±&•ñ¾J |œ\§G„|­»m‘@¿N~Û„)eÖDµ‰ÝÃÒ1Dâ.cŠƒ ÅEZ¹‡óЇeÅǪ ¨ìÃQ ®Ôñ“ò*ßãg凊LHÝ£6ø6jDÁ*5Ø!©EZ°.I}q/Œ{^H* i¤æü PKyë,ŠÙâPK˺$-!junit/swingui/TestRunner$17.class}P]OÔ@=Ó.Ö-£ «+_" û°T´údÂW$$˜&îfß§u³©Ý¤þ£?Ã4ñÁÀ"ÜÛ%,B“ÎÜ{{Îé9÷üâï?¸x¦À\¿H óc“&ìêÜ~.ÒTgÍwï=‰¾:Ra¢ÒƒðSÔ×±õà ÔGS†«(ÑÆü#•4£ÂÚA*Ðh3êd(~Ø)ÇëÕηÔjkbª™¨H'$Ú©vlF$?Ø0dpK hÝ)w›³Ò¨ì¾h·µÒ“¨ù¨`BÂÃÃ*Ô%|ŒsõT Ö6©þX|tÖåìc«¤§2ÃýÕ°bM.0ß¾gad×Í J>{Óév”ÛLÅvhØÃœ€—kÛÕ'–vÔº+€Ä<^øxŽZigPd±Þ3ì¢6úßæ È}nv•ç:Ç[ÊTmSr\ª«à§Î‘¯;‡^‰GÔ?¦j“z—îZð“Á«3< VÏÐøUŸÑé3Áù^JO•TÁpLc†nÊKõPjüM§¤rŠÆo,þ¯óãÎÏ:òJÇÁRy¾Är‰¥M²~ PK=Áã±PK˺$-!junit/swingui/TestRunner$18.class•RkOQ=³-,]VŠ…V°¢ UÛò(X•*蚘4i”HÓï·ëµl]v“»»–‰øúà >þ‘qî–ØÄP7ÙÝ™¹gΜ;3g¿¾|E ëØ!±ïFµðÄõû±[ëÈ0zû¾T¥­† "Ìı¨yÂï×^ôÒ‰L¤¹QTÃEÏ“&&SÇÂ+ELB(´‡Ô¯•8’'z“sÉÌÁ[?:”‘ë&£C7,m®¶Ç áŒÉ]—Ïžêåñ°‹ËUº„t3x% ©r¥kÃFÖB³6,Lg` gÃÄ”¶æ Ù¶ëËçñQOªŽ¾ß´8Âë åjÿ<˜Ö² KcÕp÷XwJÅ>aþ"a&Š„'ˆýH»MÊ0‘ز±„ëÓ¸†„…qü&V¸ÙÂqd–ê„í4¦ò×Ѿ úŠóö„Ú±q % 7q›°8fâ.a"Œ„⹦Ë-ÝÇ ªÊXÉà)6þCFSß]ª}áKu¬cCë¨ñ*ŒÇ™Øâz¡Œ:A$<u-âHGÔ"XA¬ùÌգʎ$lè¥%Ø-í4=rϱɃOƒwL¯‚Þ¶3ÐONoÈÏàׯ%ögØzÂ~ŠÿÙêG\®®žb®ºvŠü»X௥Œ³„úJ’JŽ,òŸ/ÉöJ0R“¯Tß#ÿË„]¶æ>áNñÖ†æ&›Fä9¦…ñ –ñyã–ŸI‘Â輈ű‡Øæ2Iî#ê1*޾jËÀ äu\ÇÍߦâ4…†Û sR(9&wBõI -u)E”t°wr—aç?:Ù÷½¾Ou{ܧF6°©)3d†\vÂò0t"µ][¨*µÄ±4FÃ6É“xÃ0Shu•ÌÔtÜǽㅾ%Ûj.²±°M5Ý FKM‡K)$*4e)ÐÀÒÊ©±£= õ$hé˜#Û SìÈSú„liý#ÞG9¹(KEÌç Ú•÷<.ÐÎp™ ФÿSÅvK°ð+ß°=>]8F¸5±Q‰}'§{#<Œ‰sD <'ªXC ¼<%`w" zônGÉb‘\ªþ PK·æ@ž)1PK˺$- junit/swingui/TestRunner$3.class}“]OA†ßC íbù, ˆ¨Uúm¥ (*Ĥh¤Þ-e¤S·»É~½ô'4&þ¯MDÅ ãµÂ¢žÙ墥IwgæœóœygÞýý÷ÇO„0‹Ç„ËUß’^Î=Ö¾/s;Âõ¶|ËN¢ }U£näLÃÚÏ=Û­Š²§!Dh®ªlc×: ]^Eº‰þûÓlG'?øŽ[¼g·b‚ÖS üIë(¦±„en>Š~ֱ„¬¤‡xl‚Íó üPK’!R‰ÒPK˺$- junit/swingui/TestRunner$4.classuP]KA=×D7Y·F£Ukµ±’èú`APJE*B[ªä}²NuBœ…YÅ$ú*X”>øüQâ1P(îÀp?æœsÏÜǧ¿(a K„¹^®•͹ÒǹŠ¥±¿r­eÖÜ @„ñž8q_èãøG·' DXð]qncy&µw«RÝVÆJ¦&ŒØeš<¡]4b›P=¸ÐöDZ•0cG1î3«/SV:„ò^z$ ¥å•N„oB”1!@¥Š!Œjm¥å÷ü´+³CÑí3¶ÞNÑïˆL¹zÐ,;‹„ùÂiÍM¶Xþs?eö;ÍNå¡Áþ^ûÿW—{‡³EŠf ‘$Ò˜æ§s ñï $½“b]BxæY"÷•3_û'ºîX„è›+öúÂi°Á«(ƒ·Ê·îvñ w†ø†å:âl‹kßiÝ¡ÖZýƒ‰©{”{¹ô:“œE]w o9¦13PùÂÑa+­[LÜcþ+vpí5¦_p —-àƒg7òøÀC¡ˆ1”J-©ÄIzÝÉïô [iÅï·y"m=jæ­E†åÌiµ&Y,q·Ü‘üŒ“kÑe¨’¿÷öÿfsçp>KÑÃø>ŠþŽxg,bÃ]rιçÞ·¯—W¤±Ž†™v¬¤ö¢[©š±ôj"Ò±R",m9` …6¿á^‡«¦wÖh _;H3ÌÛ.¿Õž¸J{¾–ªÊH ¢:ècè×-•6iB5iÄCöòNé–ÐÒ'Æ®$Ü©—“)«u†Ìap%ÒåÕº‹†rÈ`Ø…ƒ,R(0ä«R‰Ó¸Ûa7:„-VŸwê<”¦î53Æ"Ã\â´ÒYÌs»Ü¹¯ƒ°+®Éßû™Ü:œJRt0EKkv¥âZ¸˜1ö§1ËÐg¥¬dq†Üe‡¾8–fƒü¯ò†a1¸'¦8ìð(6éÐiéÍ(fa¾½©v)Û¦Úv*ÏÈWÖ1ro1E‹2Þ­Î(e.EÓÃ8E† LöTö)ì@å#O˜û«ñA>­ÆÄ®§a²y,Xö¢å,aÙ²~ô€â7PK£í&ˆ³PK˺$- junit/swingui/TestRunner$7.classuÝJAÇÿ£¦i[–••ivá…µÝQHA ]”Øõ¨CMèlìÎ&=VÐtÑô Q/… Ú…å|Ì9¿ó?çýûõ qla¡p*©Ý`(ÕU(Ý–ôy¨”ð+õCñ†ßq—µ+î„Òî¥T=oxÔã·Zø)Ä’úZ•B5£X{ é‹{¥¯…–]êØ—TwÀPªF·l´ ¯'âÕ¶ƒILe€ã`É4b˜aÈ6¥gá #üïô©6×ôº¼ßæ¾4ñ8™0i—Èi•:IœÚÝ}/ w†2©ûoùcã[}ËQ¼ò´2]h ×ÂÁ²¿„&¬h0CæÂ ý®8‘F{ö—ºmºœS4ú<D€ºD­nC6óÅèŸDšâ y»›L¦ö‚éÚæ²¶fÖäìËQæÈsÈšl󖻀Å1å¬åÖ‘}Fá/ã“fYF~<Ä0Þ*ж»d{ÖP¶]#ûPKÓš©x”PK˺$- junit/swingui/TestRunner$8.classuP]KA=×D×ÄÕÕ´µ~§J4R×Ç@K©ˆ‚TTò>YouB2 »³Š?«P[èC@Té1 ˆ»0Ü=çÜsïß¿ÿ ‚Ø"¬ £mœßksSèøŠs{QÃY«€óu§â¡27ñYÀ‰ P!¬û®º·1ß±±ñAbujº:·,Ô“„){«óÖ¾Lè–øD¨]>{ËV'Âø¬÷EÔ·Ë);=Bõ0½fBe{§¢ŽÙ:ª˜ `º† Ì¢®6|ZŒúœ]©þP°nš¨aOeÚÕãfÕY$¬•NkuÄb¤ürçœ}K³_šâïµý\î.•)X’¥-g#m”å+Îþ2V ÄÞJ¹0¡~™YÂÇÚ¹žU÷‹ž¸âp¨òœsìË-ª³Êk¸ãH¬Á}òꘑ:”¬#µï´!jï>bá»Ç4`Ó³žô€ÆPKÏ“˜ˆ¯PK˺$- junit/swingui/TestRunner$9.classu]kA†ßmWí¶F›X“hÓ/¢!Y/+ ¥EZ(H[jð~\§fÄÌÂî¬ÒŸÈä¢? ?*äÌD(”îÂp>ö¼Ïygîîþ ‡#ì¶g©V&H–JOSœÉÄüLµ–q«çë3±Á\èið}<“¡ñ#4]W,M R›àShT¤*1’¥žž›s•´º¼aµâ„PþÖæ\²âTñܦdKÚ#B¾M$!wÐù(áe y¼òá¡PÄÖ åÒò[z1–ñ™Ïy¶:ˆB1‰XÙzÕÌ[‹„Fæ¶V-–…»ÜÿŠâ 9!첿ÿÝÿ³ÍÃzÑCPˆS=L•‘>¶­û-ìH:'Ù\Bi¥q(¿(k¾üzlUÿ«-ús‘$2A—Ÿ"~U>Uû6‹°ßŸ^písöžk×éÜ¢Ü9¼FåÒÍTÝÿ¡-Çy͵ÏÑv7°É‘PÛå#GK)t®P¹Aã_ÆÔlóÇÂ@?¾!]‰)+ý,)èXívõb@Ф4À«~ oFcáö@&çu4„·†³XnðoÑŸ‡uÔ†{!ÖÈ:(Еä*9õ+¦,!A£Ò­ìÅÂ!Íô`Úþ)ÈêXÀ'~B"1¬7Ú a Æe J~[Î+7ÛùÒÆù¶*à ÏÐ+Xúü£Å¿EPY:Ûhg&0uxdžh !ìoǧÄ~gîOg íD{†u8Úǰ£®fôÆ‚]s7Ú°] ²¥®¹¥vmCC]-´î¸ÃëZÓU¨9\ÞmVîêÒ+k»üѨ—æ@ «kê6¬¯[Uׂ—õu›l %)rpf=mã×éxž‚DgõhÞŠubÁ6hüAAnì¥|öFl_-´Â¢E´Ø$ƒ–~&3ZfÒrZjÑlª( I *æ]iêíÞˆ@]æ-ÜæïÚèù·3hÄ:ƒÑìMš6ëO·?U]~T¶tfo4DåÁœ#1‹VÓ*YƒeþÈV€.ͱ ¬EX%G–g‰‚9.É\à¡Fp”1ÕCk!Õ­X“íÊgg#²èZoÒ:j¶¨Ö¦l3 ö™üའ´ š[^ŸÓ7,Ow*áí,7Må¸ÁD6}ž‡6 ª/\¨ÿ7\¼ùG›tÃXSt¾™ÿÜEÆ‚ä8l0´-|b ÁÓ&’*`ÆíBôÓ“Ž'V·¨¶blpn¢à±c ï‘Ið±›yïYŠ£Ês©@gŽ®ìíèà¸q"TŸéÂÐ2Ÿ—º™ÕLê"x¿|OO ¨U¹ f Ù ±å'Q„!€#o,l³¨—õ ‹¶a°'Õ‡:Âí`\’vòL°a+R¿Ö…Ú™Otg¨­sC½E§²ùI:m¨}Ÿï¡3Mbßí½<ˤ3é;PÀ¨&ÎFëb:úXTJ#ÙŠ¿ yæŒ@:dBóëÚƒ:ôLrt?131Ñþ‘\@št>]”¡?éó<ô}æ8«º3örí–àj4ý—Òe…t ]¢L¯M¾åooo Š Žì´©c05¬:åõ³³AYôcº‚‰º;8©×ßçf‹~BW›ÔD?žH ;¼-€m6hº–®cP×ã{0 D\Ü£sÔ+n¤›xÅÏàmXðvîv„óÀ‹vÙàn8‡RµG†.üœnãÏ·ãsüXÀáÚ¢;l%¹“Ý!‹¦Ä6wûwtÚS¼t7¢`®‹ ¬P[ ƒFG½ëOÅÙå÷c‰³¾!ÚëÄoÛ4œ@#¨ºüÿèPÆÐXV±ûܼ.}¡ØC°¾˜ô =ÄÞi‹‡«Ð‚º®@w „Pð(]fÒ#ôv)<zýËízôGÛþ.—þ²AègRŸ¢§Y¨ÏÀD6è(/˜ÓëB½Ýˆ?DBcѳô‡Ï9æ“5ÅC/Ào…•:¤fWCG/Òoé÷À—Ó¤9Â{è¥Bz™É+îôGÑ@K%ÔÊû ½ÊP^ƒ6YK6Ýøº-;‰LAÄ “K¸7Ön¶cípÁ›øWA‹ÝÿÁÓ]–í_èm&þoŽ×k¶•¶J½9H´“}ààþn‡þ!hÁþnð]]Dï›ô}€¼¤ ©:'Ý©)­öhC%µãÿê¡Mú„“’á6h;Æ;GgøÊÃGdzès$0z¿üÛcs×D‚í þØý®²¼ÿÙÌ|eÒ—ô5öϱežnOmô‡ü[]×ÿ_“¾ ýÐŒ\Ü#Pf)HÎ+”)$!@ùhvXägøíš-ˆþ¶Xb—c Âïíì70E¡) „5Ô.ôˆ"Ss8ã­iced£è{j ?0ÙPlnú fK #O©#C=™ë>¤ˆñb¸hA)ÀzzÂ!LDòôAKŒcM1Z”q ’º#sïÞ˜äV§•ÌÂìÿ]ŠÌüF)\BŸ˜ Ÿ,|\x†#vì›ñ?Û™­%¦ŠiÈEÅtí}¶×ë ¸-`‰™ô"Ï‚ÚM¨G̶h±NT Z ­ïj÷…Â1ŸÍ½ÏYáK.ñÍñõFA¯Ýö×¾mô ”/cÒ丶‡·•¥és¡ ÑÎðöFT¯ÐÝUAWx« Ù9·/g’ æ‰ù¦8@,€dÓUÏ 9X[dŠÅl´¥I€u;Úš.À‡]A9IÚ¶Dq•žšº+°§Å¶PÛüP/§¶ÏÃ\ f zÄ·ÄõR¯¨1Å!œÂÆCÈ?B\¦åµÌé*QÇÊ¿:3Yc(œ9xÄ¡ˆ\5츫««½â0SÔ3°ÁMr‘G4š¢‰Mò€òlzèò|èq¶›u Wa§dÍ„û–hFr‚-H·|u;‚1ŸW YÅ,öˆ#MÑÊdÝZ|¥9…§ºƒó²Šq— ý}>dçØ§ÝËÉr‰nΈìQØbŠ6Ù°®°¿]Õ·qsbDyŠï¨ï†ª‚ÿ€è@º  ¯Eî7r1‹Ó[,Ö³ÁQy&ÞÒE—)NÈ‹ªéV(Ʀ‘$<ÝÇmXô€JqR"éàï+Ñö@ĉššWîÄ Ñk¢¨ÚÆ)t fO°ÄDx¼CmÊø¶)NáM)vñl †Úð Ólnÿʇ§ÏÐ<Ÿ!Î4Åéâ,n>Ù{dµK2%„Xcï¥Ý£ÊÚJ»KeÑ|ZÀ~ê¼DŠYm{µêôÖ¡W\ÀnÏ5র¶j¸‰Õéíu‘ qQš[pSY@ÅbbOe‰KQæ‰KÄe¦¸˜5Æ Ç®ÞìðŠBb[íÍGîpê½$»1˜+Oðǰß?W°š]™©²š{ø‰[ˤ­³7ÿ§¦¸Z\#H¶Ñ+®Ã&µH;߯@$ ÷ã¼±.-8Ÿ<E‹ ¶[b3{³¸Å©¯SëDÛ9{ÄÏ*Öwµ{ZóZâvT½â6ñ A¾ æ›Â1[êI¿ËµLó”hŽ¥ñãÚ5Û{ÔÎã3Ý÷?YÃ+Xb}ÌVŽ9:§<Çú\¾Nû¹}¦Ø+î…,º·èæE.Änbà´‘D›0YCäê ŽïÖºì†cK"5¶!Xâ!z•“€_fèxDÐX{½OG­@ÔÓ‹ìôE8½{,wÑ·ÙV'Lñ¨@‘t0höù}m½(ýºm0¾.M/öElè±Î€‹ I*–§ ÿÁÐÆšÃ€ÇÏØ4ÿÚN7£A%~Ã9âmÅRAoBD(E6Ãooa!•ØâKmÉ”›ÛJÜo-õˆ?˜â%LN,7:¯Oöš_} G¼jŠ×xµS-¬„ˆ+3¼r"5:ä¾ ïaWø'ƒµ%æqËß\]¼<â-S¼ÍXó·h|®8R›â²J•´¶øØÁ¾yÄ?¸"€ý¿'ÞOBN9€ÈVÐÄ·–Ú ÷nüz+?ÆVÒùâH’£JpkglS€ÿ\îéíqŠK|jOû ²t[H®Ì,ñ…x£.ÿR4ó<â+S|­7$[ðñ_¸D¢Ã;“ahrVJùÌBÂ;˜b¿”`ŒuÛm&+D ¼Èyp+2Hzç{¤×”:l‚.ÎL’„ù²Ký®‘J 2“Ãa(ž[¿6é%e1¼d›½iŽ‚¦@ŒÏÜÉ´Ã1ƒ|òÈ‘¦ÅÊ‘q¶ædω„#hÊ U¸sþfGYfʱrwGãþj{»>x™P>(qÌüD9‰—MF&‘âÐ` â´uît‰™bÊ©À?&¹' ã·“,1QLâ·¨EÓh:OîÍt Ím‘pW—Íáv»)ôØr'<¶¨'»éWFtjyŠ)wÈS-ñŽx—ñnÑšÊøÎ´Ä‹ö¾|Ç¢Éö¾œc‰ïŠïñØw-*£q>ª¼q‘ы҂ºÒ”WÈ«ìÌ9­ú“&ßDñÇ„_-ÊšyöBm'Zò:®¶O—×Û¦ÂG¯),y#—~ûåMœ†é”Òέ­-i ÍÈÜéLwýŽ4 ¢"| Çî•y£,}8¶!·„8×ÍÜS}9#æbQ¼Ã”wêÞ­øﶇ¼òNy—3²Ó’÷Ø#}|ꃑíÁöX§%ûíѽgBma¸‰{í¡hÉv˜ ¿«,y¿|€Çä« Á®.KþÒžø°;Xµ'=–ZøÖ‡ [Ðø„)Ÿäîk~P¸GìÉ9pOɧÀ3\:ÌG¡-ŸöD‚6DmÁ¤ Õ0/¹Àæ'6 !™å¶ê|ë*Aä•/Û'Òœ?Xò>=¸D¾j{¸äõL—zóÃ9¾ÚÐÓîçNüô\ApU¸­—£JÝ6[eõ!ìŽX"8É?ëS(‰ä6O/@rð?¡@d¶ê»v=d'Üû©É)LÓ¾CÒ—ï0ïæLéí`É–üŸº'ElÇœ¡ ÛÖù)ß—ÿ„ ƒÑºîVPÚ`ìcAÇ4…í¿ÖoD(f«M]–¡RòÇìr)ênÅ^´ûf¥!˜å F}ÑÞžž0ŸfûP…óí_O—?†Òª»Ú+ÿ•ª}v_Ô#?ã®ÎðvK~ÉËÏå¿íVƒ›hmø Å:ˆüÚ¢sõ©³ü/w4“R0çúx8sf.©&Ó\p<ÊÈÕ5N›“Õ0viôª|n¤Bov÷t2pxMUÀ£¨-íÎŒ aÑnW—Û’QVF×ý%î+xT8fCâK•ˆS«á™mFw7¥Üt<šSÈÒíKöõ.l=jT¢`Á·ÕÁ®@b|LbËb1Žò'd‰²Ò™¼ÜRe Ù³Tãa/åéß´rª‰¦«&%‹øj£p¾ûL5ZM±Ã¤Ö 5OIÏWÓÁ0_YãÊÐR3¡,˜8‹ËŠ®p#³¡ZAš+·¸î<›CÁäyµÑ¥KT.í#Õáî€W~¿fg”{Ôj¾í¤ÖôÀýì´ÔB1ÙT ’X+•MZ‚}¬ÖJ ã~”W(hVŽœ2×U–ÁrS-U8&hÈa¡G}Ëvƒ0æÆQcªCÔJȹÛî B?øÚG³sÕeœ‹Ã£N²»CŸ­®¢…*¢@Ͱíþhso[T±£·ËRÛ8^Õ(¤žm|ÿumGÆdâ -ǤکN6©I}zè\Ä«`¯:bpÇ\›¿¥NçJ´F|Pȧ?{ÕYœBSlƒ°ÔÙ¶®œ¯mÏôuØùŠW}W‚n<:ê>.'무œG¤Îut;oײ0!dc–ºˆS”OÔÅ(œÔÅÚÉPGªKQ‹ Å×FÔel1½¡Äý<¾—¤Û×êGܾ.P?¶¨˜JP–¨+Ùuö†œË F4î±ÔÕŠkߟ0"»k©k¹*ÕuvÔ¹Rj©¸+f¨ùÛÅœ@²±¹©·ÕÍ–|‰o‘Iu‹æÙÒ¨È]NçV­Ÿ«ÛÍíýÈ–ø`³=¼>ávÛŽa¨ FNÆRwƒhð|ð:>Œ6ƒQ¯ê·ë»rpª‰ŠÜõnNg©ö©{åÀ^q±GÝÏWfÝ¡9ö k¯BÖ^÷¾2˜Ûþ¥©P[r…üÓô(¢e²)4%·Õ¥6„Ôãê Þù'ùv‹æSiÓ¦Û£žá»ªˆ©¿VÏræßpûYÙæT NìùŒì!1þ[Sý.#êÛŸ¶~oªÔ`]úþ–¥^æ›PMêPýí­¶crh‘.ÜÕ«ê5^þ'ì}(°ÝÎÞ`Ê_Poò:%Øž+%php.÷87Ò†Øä%õ7&÷^Sý]½Ã]o§Ò¢ÝÎó:é\H;Ç·Ôû¶Ä?°äŸäëüöaFŠ—¼.¦>¶ ¨:·E¦þEWªOÔ§P~ûʇmŸ«“T_ð6%QÚ}ÛÁï®i]øR}ÅåkÛ^›ùšú/ÝÆXöÃkt¸5Ù˜A+2OGßÄ!Ñ™â=j™D}jiùì©Þ3<пžH˜½tMdk¯s7lVÎëÔ9<¾Q`˜ðF¡%k%_a6†™b¿xÎR?Ñ…žQ2ä¦.õ#L£”oZ 1ë@1Ê4FsÚ>̾A\jßäÆ,c¬¾)l”i5ŠtC:ò´£=œ™t§Ã˜h©çlz& RáÞäahä:°‚ä –× †¦S ÔcJIß„fÅ|l€>VS>»ò%®K3R:î)@<RcOt…,c6m”Üì`š«è:d¯ÆœTRöúÜ’CŽþŒlÊçñ&^æt$ÝC⩃öK熱¹Ö7€§…Æ"“Ö‹Á;B¬e,µyDj\¶É±ï7·¹ÉœNå¦z ’?ÕÇí^ãàdM‘«½‡ñ-Ô>Æ!:JúO><†ôù¼êÀÕ¥¯À,}G0«a©/ 8«±Æõ7_a½ij–}1ÆrÝÆf•æ¿Ñ°t¨+ÏCßãK@™÷Í  ÒO@AsèÿO0J¿${/ß|•FsþûÊÀ7å5ý¯%€,L¹¯›ˆ?ë/«$Ö.²Ôa¶®nN.¶ŒÕöà1ÉÁ%É×¥É×9ê±6²$d@Êû…­ú:›t6éÜK›éR0Ó¡À /ù:½¡½©‡Þ¤?ƒRƒë<‡–³ôo¬OÒ26• ¿µþ®\zÞʤç<Ðs> _)œßzQ =.=ôŽCÏ—žB—žw]zêË6@ïµ²ôÿ™ÃÉ\ §w ´àªæ¢æ 2øPÙ;ßq°Þúö_»]ˆùzü§)ŽÕë@2øÄÙY¹Ö¢Úú¢u€¾lU†Êë§ÿô j¨²µTý"¯Ox*îÃø9 Šá^DI\Œ¬äßq1nSeõT%ºñîHåFÈî&¨òÏàåo‚ƒ¾ dÜžÂ`­CV) Æ‹ Ì „;^áèTÕˆy{Å”†ÊÇi¢h¬Ü+f4VÅEùC¢bw(¨*Õ{ű¸µ_,Ùµ|T]&L£h7„²®ê.|½a¡sâˆýˆ§÷¦ìn•CQ>ÍË´é[4V,G‘˜mÒëâ Þ]¾ÇèPù&ÖñÊcÄ!ÙÊ~QÛPYrX\¬õ8¼_44V ˆ&ÛZˆ­ª¤+ÁÃúM•q±Áž¶ Óšæ ˆVž¶Óæ”ìàisô´¤€WêÄâa(Ú#`ãQÌc0‡Ça4!xžâ׫¿°ŸƒxŸG8~¡ôyû—à÷_¦£è•vqØ-¤õâ(q4Xš@5âq,°ÕÒ8qÞ˜Ýã…ßa÷‡Ž‡Y2 ÚlvÛ@qgcÕãäe¦Bà)2 b­Jõ‹íqqrå€8…™:5.¾“ÂÈL•¼Ôo€¥7á¢ÿŒ=ù 4æ-÷6Ôû-hÍ{)¾h‰Kl•8fƒŠšf‰sŬ'|QÁ!ñ!°Æó¾KœßúMÜT*.„Ö´Þ-Îß…X/.Þ|\\\Þ/~ð`©øÑ^q“Žá«[«úŵ ðÙü^*®ï74Tr°.7!Zï·Úñ:.î¨Ü­í¾ˆF‰Ý?ã 3ã,§¡7Ÿ`>…?£ÍôyŠÀvxXDJìÁ9eÎ[9-7winî÷¸y™~ÍÊŠ¸ˆÇÅÀ¦ÌÐû$ùuŠU™®Û0Å}â~mUˆxÛé̸‡‚½ÇÇ÷‹_5Â’žo{ųW’· ÿ|Ur»lööó?Æ@Ãâ4I(š&Œ”-šá Î#ŸxAü(‡ÓHñ;°ÆL½(~ïqŒãËl?åσ¨ÅK¬'/³kI"ÖY˜T( ÉÀÒ1"…ß2W/ŠÄi’æ÷U‡ƒjRÒ¥5TðfÀ÷ãûS:>ͨ |c¨DŒ³ìMÆÒ19ç$g)rUçëâ g§ƒÓgãü³ÆY*þÊš3 Þf¬Ë…u°N§b•Š™4ÏI¢*«ÏÅ:JüÝÁúŽx×ÁºÈÉà Ä{­ÃÅ)ý⃌˜ H‰ …‰˜À7³?s”ãà:îô#-©!ÉŸ#Y½xŸøRЀøšøO\*3éÙEFcå€,À 4ã²HÛÆL8¢jYâ Ÿ”$’W,¢ab18\ î„ò,…Ÿ]IÕ¢–æŠÕˆkh)žËÅÚ®võÒ" ub®ù •CòÝŽÿ­£Zóûåè†9–ißÈñ¿*.'TUÆ¥o@NåÑiM<:£s0:„ÏäáYqY™²:wÍT 6€Øð„›h²h¥r±DE‹Ä1´¾qž5¢=ÅÀkÝRh™¬‚¬yrެär/çÊx›ä<7‹ÜàxVq\—‹ãò@ä* •ûäA‚2RÑ ’‚0ÀrØÀòȃáIYF+ä·²RYÓÚ/WfªEw®Tözù|Љy/UÄåêÆ±@Ö4U@ŠõUø£A;LÙ‡¹Ì¨Àœu}ô=~®ï“-Ø€#ÁUK\‹‘ã—åñ‡-}²½b@vÎÖ>ä¡ûd7J£G0ê£ûy¨§O.À#²,ŸÅúä¶¹£À¶í“߆÷]âë—§-óð×3úäYü<»OžËÏïõÉóub#/Ä‹Ô,óV”yË ¥òòŠK†÷ËKñSW†‘(Ë3 C%¿ËŒä•˜î@»ÊËW)dPå§”ççå3ŒBw [yò’@äå éÊ›²Ê–à AUâBW à…F”yúåO–0}ªÄ“g$éÍÏ+ñ0}Idg©’†¤øÜ¼’‚UeÞ¸¼›rCÕpzÿ—?Kqó7p?Aœ7¥F¡i1xÛm°ÔíT)vбJ2­§Pƒ8•6‰Óè8q ΢ˆøíçЈÈ?B4¾FœG7‹óéq!= .¦_‹ï#ß¾„Þ—ÒÅå¢XüXøÄbž¸J¬?ÅÕ"$®§‰kÅÅâz¼Ý(v‹›ÄÃâfñ¤Ø%ž·ˆß‹[µ®vØú˜ˆtx³‹Ì<ñ[HPÿ´Ž~¢úäÍð°¨þÜ%oADÙ”†3Î|PºRÞ*ŽJâ1NÞ†1/xÚ,o—¿ ¾ïx±ü¾mb<æpIwbw/3Ë̉}òî2s”Ñ'ãxäõÉ}xôÉûÊ̱ž>ù~å÷ÉGFå×RÁ¨üü먠Ì,î“—™òÉÖQÆUä-1áBÕÄěǃÝþUŸüueUüéo2*Z²Ä4Z܉tx7MGòP‰¤a¾¸sX죭"N!ÑŸªÜDJ–ÏéD›ßž‡(¤~{f¯ôÛoñfè·ßá-O¿ýoùúíEù€®YÃ|â) ù{ùà0øXÔmua<›×ä)•Üí4öÉ׸ kJjœíÓî%@ô»/Åwˆ|Žä€žë€Îã‚6Ó=”²8Ï]ü†|ÓY|°®äyq\þ5#‹">–âQó\‘åÉ·äÛŒWþÍuÚ7:Qg @ýçýV.E?Dq"?¹’ ”&òS”&{0ò%þ÷Ÿ¦9È‘ÙkîO"¯ÐŠü$÷W0¶§j< …}ûú,¢ÍohŽxŽæ‰çm^H‰2KÜ– 7… 8úbçMò6gwR×ÒR5o¯ZÜ0 –¶V–ªeýêहÙól6µî(u›T–Zá´Ív¸-¿dDÂ]U›Ý‘‚ 0Ç’žÜ]µÊˇÙ`×h°‡æ[°&À¤¹°›žªþ¹ 9ÞnÔ®Bòê$Ìaß:-W~§šéÒ¹¢ª_‘ч’ci„„ùÉq4Qާ©rBJ©5ÍÍø†;_™j­î@K¾[æD­+ V—*©š¯¢ ºý\ª6èþ³:ÒiA«£öÀ<¤š›*âê8|hÛ§‚’–eÆœ¸:a¯êiÜE“Ý ¶ÚÉ,—UeÆ>Õ+ J~ä²<6ŒWÒd½®,o¯:+KÕiîÂ]TÃsÎ4®ËšôĤsw9d'¿}ÏýÆf4 iw­ë¤š ‰$'#öÑd9…|rd7fÉY´X–S­œMu²‚Ž‘•t¬œC[‘œ‡‘–÷")?UΧ+åºA.¤äbúƒ\¢e¾^w‘Ü|ov/r*ÅÕyZæ³hZ«ÎÇÞ,†¢^'gPö„œA[é$u¡vG½Ô¦Õ81ÿ"WIN†>‹³Å¸ú>§•quI²ó†œW].H÷qÕ’Š¢ G¹ Ì.§"y†2L–+h&’ÿd4œ•HêÕ]ËIÔ£ØjÎåLÕq\]Q!úÔUýa¹ª]KŨFʺÜŽqNá Š›Õ‡Ú««§aÜy«kvÑÜ ¸Ðëãê&hÛÏ*JÕ.h^om¨€Vý‚ bSu'[Å] <ÌÖCë‡e4À2iºl¢Ùr-Í•ëh<‚–Êõt°Üb-+:gÃ1Ú™â\ø†wk¹–^u(^áä#÷Šg¯¢bN÷ãªïJÊ3nW·SZº!LðHþt¸üDßw«#àəܗ0×¶˜Ç»2÷ò°w,Ø;žFI?XÜB“d Eä“]‘OvºÂ’oŒ¹gùzÖÒ ½£jo¿º¯b@=ßXªêW`sQ©Çúè-&¯¿b¡?ÍDÆÕo2N'd'Ê êÖ3hš<“*åYt€<›–ÈsR(ZêR´Ô¥è9(Af}JÏ®hó€zqôwN}±_½ÔÀA>÷HÙT9GÁó¼W¯ƒº?§ü¼¢£(ÇÔ¼DL50é/·{tÔƒ3 ´üJ~Jåù4V^U¹ªåE4¿k‘Ú7ËKh“v‚GPï¹ÛêhÓDö Pž"öçW’Çàâ]t韙¯¥1ò:š ¯OÙ­‰.‰Ž“|eËAsæpÖ¿(–C9>Òάª‰ûÔg™ûƒâêß•7këØÆÞþ?’ö ù™Xµʯßÿ¢ë®2ò\y"çÏ „›á«vÑ8ÔÓä­ØŸÃto¦ƒäpÌwjZÚT¸´®vh- †0X…4O݌2PÅëL¦Õõo5ŽÀ ¸&®Œy™a‹åÝ)‚)p‘¸‰ÆÙƒ‚óf‚‹\np‰ƒÿaLܹÎÙaŒÏ°+*ªâFQŸ¨â$Å9?Œ¸Q Ohá“Ü_7†'1ê<\ÞOù¨ÇŠåƒðúÁK<Œ0÷ÂÜ£°ÓÇST¬Ê¥¤Ê9GF®Ý ³´:ÇA•Qʹ”12‡?…íûtø…Ar)G¥øßJtËA[rÅÆèÖ~cÌ^ct¶a­êPöDà¶CÍáÿ^¦a(ùŠŽ%]lâÈ]ã]ÐÝ)FNªè7|»hXÃ]ÆôRcfܨT{jFäõEn?Òv´¢w0ú.Dø8‡÷a(ä0”blà놮<ù¯U¥på¹²…cœÕ5)æ7ægŠî#ìÓÇÐúOr¹_?s@/v‚îæÄ™šöÿ™µ²='ÎÔ{8vGiÖÊ@ΕÆÖLœY+;`-hÉÜÌéY O0NÌ¥yê¾Lœ?ÈZÚetgS›–ÞÛH'd¬”FHÿ6zð¼ yÐQz|é<ß³Ÿ¢Øy69ÏVçyŠó|Éy¾æ<ßvž_ÛOYàà8Átà)fçX \âlàª'\ž»G8ÿPKòµâŒPK˺$-"junit/swingui/TestSelector$1.class}P]kA=7‰n·¦Iµ~5­JÚ”ºí›`¥*A )yŸl®é„ílÙ™´øPê_´üþ(éIÛ…á~sîÙûë÷Ÿ(cO Ëã‰Ñ.±'ÚŒ&:Ùgëzœqêò¢½ cu¬’L™Qòq0–I„2¡ºêÄ%|ÌÆ%¯S§sÓÕÖ±á" ÂMw m{Kvt¯^ò‚Pí}6î€N…³£ù’°ºvi½O¨ìæC&”×Öû1j˜¯¡‚Û1"ÌUQ¡ÞÕ†?L\ì«A&Øf7OUÖW…öõ¬Yñ6 +×ìko‹Íº ¿¸Çŧ¼8äáÔãÿ®ðÖçÁcýÏüVY>ŠpŸ µ=Ê-Çxè]?À#q8ÓÕj„Z/Ÿ)¿ÓÞtão{Ï<¿7rúÝLYË[r„ ä¢òšþ*«ð_I^ ·¤Ž%{.uèt.Pïl|GãkÀ4ÊONƒÎ¢d±Dß½ƒ» K¸7Sy%Ñcç:ßÐ8Çò¿gâàKÐXšâf>ka%°Wç1žÖTh^PK¡eÀì”®PK˺$-"junit/swingui/TestSelector$2.class}QËJ#A=e¢mbkLßï! h‹+AE„ B$ûJ窕i«¡»¢ø2ó;êÀ,ü?J¼UÉBÄXPÜGsî£^ßþ¿ ƒuü˜kµµ2Az§ôU[”šEš8)oy£-y+ƒHê«à¬Ñây—•w& [Ò&8ŠuU¥†4%ú̵JË›\£Ú»ÈŽ@®v¯Í52gW1rO`qå;Òj] {7I ³²Z÷‘ÇpYŒøð0˜CF U¥é´}Ó äB6"Æ–ªq(£ºL”»É¬mS`á›zå-n³ ݈ç”\ÆÉ 5;=~µ…#ë»gzkz˜ÈÇ¿:15}ÌØ¦1+ È-­·63kq; éXÙŠ…7,OÀ?Ñü‡‘LSJ±É+É‚÷Ë·dwÄ6{úøæ1ıÏÞ6Ç.Sù‡Beí Å¿Sr(ûòàtÆØóÙÚ쌳˜ÀdWeŸ­ÅVQ|ÆÜgßÜÁ§1ÑÁu5¬7Ç^tœ%,;VG(½PK²®¦zŒ¼PK˺$-"junit/swingui/TestSelector$3.classQ]KA=7I]³Ý¨‰Vm• &¢+ø"´%¤Pô!’÷Íf0×YØØþ ±ÿ¤`[èC€?J¼3¦P ]îÇœsî™»¿~#‹l*£TÉÄo¤ºL¥{!â¤+á'aT?¶@„¥‘7öÜÀS—îyÄ7²„]ÝýüÌsÅX¨ÄíÈ?\*]%" /sÉPÆõ#žÖ™>î-!ßý¢’¡H¤Ïœw’‘§„ÚÞ,R£Gȵ d÷=6 6rXp`a> –‹©ÄYzÝÑ…×[ꄾô¼HêzÒÌi›„êŒyõc¶éŒ½ ­!¯D  68{mÝ2VËÓ¥-¬ þPøWm¥ rPÆš×xC 6¸óƒv7L#_|úYÅ¿§j~ÂGÅ?§xq,bñšràó)é½qÌC>6^rípvµé4b±¹ÿÅoS2(}skt–9s8êî ^q$¬bm¢ò~¢’oÞ£¸ÿ•EîØÀW#²ú œˆèlU–É f8›Ø2,28 ôPK¶e2NšÛPK˺$-"junit/swingui/TestSelector$4.class}PËJ1=±µcëhµ¾µZ]hE§‹.E”ª 7-u;¡FÆ™¤¿Dô/àÂð£Ä›´ˆˆ6î#çœ{r?>ßÞ‘À&Vò—PjOueØîH¯!”®‹@´t+˜Aðîñ®öĵw&C?êøüZ‹ØA‚!¥/¤*– Zû_m‡!]¿ õ…вEœ]IÈ=†ÂÚ Òz“!Y|ÁX[oºÁhI¸.†‘Jcã Ùš Åiçê\Ä ~6W‹ZÖm)jµ Tm©¶núVcÒ¬6iJ« „÷nd²;HøYMZ›ô¡? ?ªé£ Á}˜¹_çÌ9wÿþûýI¼EEàÍå(TÚÇ*¼)¿I±nPŸÚz•¿Ðd×U¬)¤( !P¸”×Ò—cíÓ5…Úç©9Ô¦H鮊Ëï6ë‹©?d“PwI«6cO lUU[N0è@²RmyÈ`É…ÏÃ#¤²Hà‰@®®Bú6º:§¨)Ïû<»\´e¿%#eòYÑ12xoÞ?ËÎôhÒœ ©ÃYìÜ*NL`•®/h¦±&à^æBЕ‘5xxŽ‚‹uŠ‹5¥±É†z·ÂL+è˘8•À¬ä¶\”°- Øea¡B–ÐŒ¢6}Rfùû€÷9dÏ–žøüÜ:°Ã+w°$óøNÃ|¦šA–s—³÷œ'øvk¿ð¸¶ÿ¹ïvæ)Ÿ|EžOÏÆ.s­XÎU<›1ϼÚäöo°qƒ;×öN±„3˳6ñ˜è%^1Se‹y]‹2•öàüPK0•@­PK˺$-0junit/swingui/TestSelector$ParallelSwapper.class}RkOA=Ón©Ô•–j‹å%bÅm , ñƒ<C4ihĤ¤ß·uh·Ùn›}@üY$¢‰üþ 5>Ð3 )&{fæÞsÏœ»_O>AKx&P˜þ¡í¶CÛÜ“~P—Žl}¯øÖò,Ç‘NýÐ ¤—„Èt­Ët,·mî6»ÌK".0uÊâ…®+=³Þ÷éÏË#û»AGzÙZD¶c6¢6ë¼ :¶_\˜®]/‡y£õ÷.i»Åš ›™[«ÆMEWÛ•Úvÿˆ¥†é4dtŒ"5в:’¸¥Ð=tÍvå›°×”ÞžÕt¤zB¿e9 ˳ÕþìPSOX¼A˰Ÿ|P¢êŠæóH`¸*·ZU‚3ÃçIÌÐ2÷¤¼ rFµTκŽ˜Kat_¯. òÆÕôªò㊪â1=>°œPòYš#÷Y"ª”ìÙíq<è ÎÇy™CyѬ ¤êýÐkÉ×¶ògü²˪ˆ‚ªêsÙv,ßWM&¯·.‰UNbÈ?ÌqB(“jd\³jˆ<» õSç:îp?F´Ã}œ1]þ„ñråwË‹ÇÈE‰y®cÑõ7R|'þ îòI÷Qˆ(Ó˜d£)§0}F|ĺÆÍÊôGÌ¿Ð*•Fâ…JA#\(@.ºJ(¤þÿ.$TÎ…ŒY¾øÉõÆñ›­ÿ`'XÃ_lD²¶NžËÚÄÊ2PŠDo¢L'ÏsT°H¯æ)z‰(Áû娟‰FåXŒüOûPKãšKPK˺$-1junit/swingui/TestSelector$TestCellRenderer.class•UmSU~.$l––H¥´-ÅdyI-­ÚBÑ6µm(-Ê[-¾õ²ÜÀâ’Äì¦_~ˆ3Žã7¿ôCÑ”ÑÇ~òG9>wwy 0£Éd÷îÝsžçœçœ{ò÷?¿ýVŒà[¡õzÙñóÞ3§¼ZwòóÊó甫l¿RÐ庳ª¼¢jªf@\X—Oåfè¿­J²îúÓN³a«@²4­d©hWÊééý^zo\ Uš«;¾ -Ú&Æ1)КÍ- Ä •e"d 1´ tÌ×”u#Ä:zöc.Ȳ\ÕÜ'ŒU凸ƒÙ€:ïJÍ,¯3³ñÜáhLœB:…Nt™ˆ£-‰ôœ Hm·â©•ö´ #|ÝË×ÓNY=¬o,«Ú¼\v•γbKwQÖýmÆü5Ç™þRSž³Ì¡YØBe£Z)«²/0™=Å”6?œkqi)L7/Ÿùù]&ü*úµ¶¯ tîyÍù5¢¸@ÅW¯êÊ­p«IÉp3RòÀ–‰‹LQ 77]Wgæ%c½=_Ö|ï‘㯱xG¡-™Âp ¡–Ó“ËÊ5gm½Úöd2·hâM\NáÆBÛyµéÃGÛ«xKÛ¾Í2¹TP ëYâO¥[W;|@a&¶Áfu‹,Ѧ€(rÃñÂʪn, ˜6‹xOzw*v­ lr S Ý•žàÏ”h¶˜+šxw´Rw2Í.·ê¥’> %éÕ—½¨‚=t<ª`÷1­‘P¯ MMrü¹iržÁÚùC}X)åæx†ûGúXà©–Õ*[W`ø?5O7Aá# õ˜¹e‹Çý±æý„]æWvz´;{¤ígø\Ã=¡6¥ôÊ Ö2éoUUTµÔ†ôí5åÝW[šó0H!·tL±6Jºã@›½&k7ý°HÖu”_°¯ö< ´‘lVhƒÅõ+ T©VžÙ‚ö« šB_²WØ/-6OŒ(ðç0Ô¹J½f«;Žž-§öO‘QMÁf+–˄Ӊ*:Ÿ9~ìøŠ§¿yö Ÿ¹Ä^¡‡!ôÇîq=“yMñé-ï§­—0­ô‰mtÿŠŒ•~%Xœù9€èã5Àãõ<:8x2¤8Ë3tç›ó¼ =’"è¿H—à}Â>×뉿Äë×Û†ÿÄÀ6²×^#m50úNXÖ/8ÓÀ•ŸÐ®—.­^£wzÛ^ìòŸgøà\êÀ ¹³dÉqÐ aŒÿ×0Ä2òE±èÕ5\â›À8-Áê&ùÏ©Wïâ½ « Üä*Nì 6±Å{ŠïZð5¾Aâ_PK˜Zþ~™ÄPK˺$- junit/swingui/TestSelector.classX xÕuþ´ë•×c[’ŸÂÈ–y®W’Æ`Á–d-ÉFp펤±V;Êî¬d ˜¤äÑ$}¤ ¥š¤vÒÆ­dÔÒ”@)IIÈ« iÚ†<É£4é3ô?3ûÒÃúúí§¹3÷žûŸsÏ랣ç~÷Ä”£QÞ+8çh&i»Mé ;9”±›z­´Ûc%¬˜ë¤BÁ𣿏yÌ_oÚßj› g(„rAh°ÅLƬ„`]Çš½×u’Í‚òÁƒ#‚à`‡v 4—J'I³r°'–r +îSÕÌ¥ò™I‹´Æ`«•Ž¥ì1×v’‚µóÍ+á#zò[ñv×T{dM “D=nŠ´$Zv•ÍSï4EüesÂmÚ—2G­æ_!©L2i¥<}´¨|ªæm}‚@‹·È}ÁÆÃÛú TbM¬%ßÂr‹3:æ$­¤Âzê-m¹=ö„FÚÛuÏFÔ„±çVöä}.Í ÝVÚ¾ÃHpW â1ÚŒ-aÔ¢®tÓMv2îL„pmÂMNÌTUu[ ŽãV¯#ØP"vA®f¼†q>."Ã笔f ¢ eØFÕª6êòîQzAùôÚ® ¶.²PÓ Üˆí*iS©¤-™TZìRúÅåJYqkÐNZqAÕÛ¾­cy³Ë°3Œ¸\°œŒ‹Ä H•ñðF=Ñ•‚U±”eº–Šï»Ù%‘%ÍìÃe\;ÑÔçOhÆUª†«•”¸Õ43‰‚k"‹I{ ®Ui÷ªø~-E••rò½¨-ŒVì3PåËÉõzrU¿ñTO“vz>ˆxþ³”ºCPö`¾À;¢•Ht[ɸ•²¨ü.†hÄgw(Œƒ¸R­– ¶Fæ„™Š^Jà‰Ûƒ^àFº×Y¢7„›” éfôc…žê–ùéÅO!ÜÆõ³KÞ¤éAG`b™nŒåÂknð‡@¬÷\ç[už»Æf:½«Ca *„• qTPvð@B>hR“a èž´›2cn^¨1A˜êiKjÆ ¤4ߌ´`¢Ûq\=)SXÎ Âå—èŒkz˜ é% aÒ·tο|Þ‚‘Es¬*ÿ-¸3Œ;pãÖ¡sÒɸÞªV-ÃÛ¸`ƽôjÑÕÓîõÞ.ØT Ø.§'î´Üa'Þ–JipÞGè `WftÀJõúé§Z³J¢ÏLÙú› ¸Ã6õpnÇÙýO“bfáç§N¦·4‹P‹Æ§@È´¶c éIHx¡^½0Ę„‡òIx}iä¶Ú£V2Íø¢©þ¤Yùiu÷:NbÄv5×”ÐçfIý'øS¥þ75„?ãù”!³•T¶þ\ÑÄC¥÷D{æí0aÇÝaµÝÀ_à#Ëñ>J[öÐ0­û—þÔ z_Iª7ðqÿ2ù7Æòwä¼lϬ=F_óÏ¿v±Ó«§„¥1–H+—†pJ°%²”éýó™0ÃãÌ…ôÆ=^Ëû¤à¼’ nSȦ¹DÓp3K ´#„'˜UNÛ— ku2tÝ–„É3 á³aœÑ•±Óɤ­¢„[H8‡Àð)|Nuÿ·‚†%8°&ý÷"ß¿ ãi廊|¹\äºe×’eç3xVy~qi¥\—Âx^ylÌ%ƒÂ]RäÖ07Ëø ¥õXÿ=^дÿ•¥Yï áÂx1oy¿ªXÊòs) üÚŸþ7&»A;Á«ìßý‰ß0QðúvRþßúO&½ oÛ1¦†VÿÿÑùÿ-Ì“ùëÞ×KJµö$µI Y°ú%k¥ÂR.Aò±½u·cÞ–fCBR¡xËYhÐô‚m‹VŸ%yüàÀQzªTVˆA•ÊJFcBo÷=rÿâjfúZ­¹ÎŽ•ÎȜ滛W_Ì¥‰ [±ÿ‚?x  îñÐ6î—Ï~QXh3‘±Jî Rr®Ô*§Íù;¨¤IUXÍ:GØ„âvzÌI[†\ µ@­\È9;Ý6:æNzræA¾Zf&V4*´·D¦Û$ªLëçU4’4ò.• +d»°¨Ég?ïJ×ÚLëØUᚢÔ-æ–^ŒC¹ŒÈvz?—ÚãT=h[©×L¹þ¾Ã†\.W„e§¼…enKX¼ÆÜ=®–×í‹*êJÙ¥âPÓ+\çÆ±1+Õb¦-¯Å«e·â]CCŒš.}"ͤ«™faãñß#{Y>KKižsCÚ¼â\öÑj¼\3)Ë›oO÷Ùi›nfÈõ>A;]²ØWäJCh]ñ °¶ XÖ˜!]j°å ËטVäõÍ´á,F"•Í?*zu©“zÝñ\W*ôÇ眽ú I¿¶ˆþ§®¤‹âWYmĘ́•òê*û¹u…–Ûò^YRˆ…Ä+î„åv1y´–F,[6èD<çQ 0C2HÃ%­cyS2,µ+dHOfžÉMÏëHKRˈ$”¿R!aNúgˆ.ÖÃ.œ2Ä‘1µù›©Óa3Ý餬×´AEGT ]â^{yÚyþ>Rõ“ê06㜇ÛÁ›¸ÃÄ pW G7nçŽA>‡0Ìß8l܇üx£xI?ždEÿyöÒÏ ß#—´ uŠûñ.À{{7ÞCëÛ{ñû”h3õþ>¼åäù>@ÄrZ-‚ }»+À Â3~°ƒ²x¸3Úð8>VÏ¿x0Áד|=É×,>yªpÎjÏ/Æ)Áí~ cÒ“©Îǣ̟âd%úWøkr[‰Mø4ßÊøcSãÿQTÞ›©ßø,ë§r§²8­êžÅ¬~þÿIkžÑÏ'³ø¼ÿù´~~!‹çüÏçõóËY|•6|Qß¿–Å7‹òîö¼òNò»‹žz'¿Žc µ¼‰ãfj­‘»Š:»–úºžã|lU{9ÞÄTÏfø²æô]¦ÿ5ðÏQ`TÐrUø³øýîå,þu¯ðíGõåSø©>^­LáWúxM¿­¯¬šÂÕ¯žÂïêWM‰ÔÏJyeEeEyeÅ´,›’°ò€#õYY•ƒëlP¸îµ!D8}{M¿m¨ ®AáøiÈÃéoÞ­ E¼®Æ ñôñj£Š§×+WªQÊÙï4÷ï Ô–¡& 5Åðž¯Õ<”šÀÙ`â5â­t/ýø0sÈ#XÏV¾¡ç~Mø.g¿ 'p Nâöî·á“°èg=m’^v7½ë8}ì~œ¢ý#Âg¸2Å_–‘3/b/à4['ðs|¿Á)Ó² OÉ:|N"lF/g|"K®ÈYz½ÔÉj©¤­-|UªøVFÔ{¤šoåĹVÖðž,k‰ä{ö!®”qܨÊRÍJMÙÃN  I¥xæ°G÷6¦Ïx¼×ûû Q½ï“sˆ*²©7m¤Q_\õ¡·<%[§äühV.*¯òBñ9Ž_â¦çK\xM\äbÛ‡¼ZYxbÃi¹Dð‚GË-@.óH^XêRÙ‘ƒúŠw[Ý9¨ÎM3òÆ8U¾ûšjOËUeTúVu.];#­ÂZ%®ÍÊu¹qÿ©ãåRë‹ñÈë_ž‘ά*nùƒ­r¾ÆXþ:síK̵ßÀV|“±ü-zË·y¤ï0î_b,³uÅË%9³» Ýn¹Aº)wöKô½WÊô»rbÕJÑÕ²7É͹Ó5åŒ>.çzžj~P¢š`!Q43µø›œ»>­úÓrDÐ9+·÷WáÙièÒWF•Å÷]ô’Í<úQñÔl¬ f%Y¨ ÎHŠo\ÊÐ8¯¿¬ô¡¦&P®dâ³2Ñmœ–;fämEá¶{wôÉüŠñ#l¡ çá'ÔÔOqûè«ù½¯¢“Ýs ¿ô±Û´ )Kîa\±ùÁ¹WÞîiªGŽ{wÊì“ûø b¥§³ »§w(y§(Ú^jø ¿îçx†£VOs|72Áñ=Ä{ÌãSÙÜø|n|ÑÿPKit#Þ ‹PK˺$-$junit/swingui/TestSuitePanel$1.class…TýSU=âZJ ­±´E 6…4Vk%E[¢µ©"‰Q¨J7áA—]fwC©ãïÎ8~·õcúW8#Á±£ãÏþQŽçm"Ô’¦Ì„½ï¾óν÷ÜûÞßÿüþ'z1ªÀÉõ†múï–i¯5ÌLYz~©aúrÞ°¥Ïj‡×-#cöZæzu]Ö| ½Ñ}ïBöª%5„úüºéÅÏ’ºØ;'0Pºmûué›5þ-ÊûDmŸ[u yËq? NQ¹½iØ+b‰¡.š¾.p!Ñ=VgÆ¥dE ”wV¤@o"YÑqC„Õ¡¡=ÑÁSÊ:ªCÇÓÊzF`°hÚr®±Q•nYN5ŠNͰ*†kªuÛRRŒuM.žei½nÃþOè†oZ™ ev\ §"CT`´…†ç© Q«I/P~ú r$;l—])g)…•ÓÇx/àEã]€Úšô‡mIö‘A!W é’8C@§&h˜dꫦ½Rš9ѹWó>"X.YÐqYò%6À3?m5—î—ñŠó<ãÕœÍÛÛw8l‰³V£p¯)ô”@Lío·4Èø¬>£$˜7üº†‹jfœ§ppÕtå¥É×I&9¤§ÅÇÎT˜K¸¬r¡¤vË| >¢/L.Ó×GärÕMÎ"Pš=ûPKž-¸.¹0PK˺$-7junit/swingui/TestSuitePanel$TestTreeCellRenderer.class•U[wUþN›6i:Ü -¤´P¤”I å’"…j°´µ­¢¢ÓvB§fâLB+^ïx¿!Vß|Ñ'.%°Ô%ðâƒ?Êåwæ„´1Y¬åËÌ9{ï³/ßþÎ>ÿóÛŸ¨Çn|'°w¶µò oÁÊ^(X‰qÓˬ¼9bdM»[nÇ]Óì7m{ÔÌN›®é!ôY㢱¨Ž%ò´Hœ43FÁ®a]/Μr]ÇMM9Y–Á•g¥¬O ˜žSj-3`XvÁ5Õ¶ñˆÅüŽ ÔëÑ @¿3mjhB8Œ4&Û1¦¥©§aµ”ÖaÀšA+kæ'Mwܘ´MÕ™2ì õä¾$ äg,O`ÿàÿ)¯•e$lƒE OΚSù ZBÌ|¿mxt»^.ÛøÂ> ±)Œ6D˜¤%ÓN˜šÞ V&„Í›ªS-d³ÈN¡wYì¨é9wŠ%Ô«b¬Œå]úé‹VC®a+ºÂØ‚mÐØDܶ|•’3§òÙ¡!¨t;Ö)]FuGD5„”Á.â1ZnÄpÍl~Æô$²=+³S(õE«ó#lyG­6è5,4$°Gâ¶·x¥ b?d±3‹ÃvUOESÁ0ÆArÄ+Lz%ïmz*UÓÿa$¥9sÎ}’Vä-éb.æ+uåêsë)öè¿téwæsN–¸Ó+šqZšöUGK§Ó©t)Qc!Ÿ({`ªý8)ÙŠ=©rÄ㊄gxQl-zeóý»* }=¥p:Œ'ð¤Àæjê• ƒ8ÃÎ(ƒŒkÌ› Ž;ç›1,@$I*Ò*C„UÒ­lþ‰B&#¯çcËÖ“#æ%[Ï‚/vÁÎhÈ¡W2ì¥rQ•wtBŽ5/ dI£‘Ë‘;ñZ¦U"•»y Òâüðª¬&ŽãŽc[9•×+2Â,^Õ8ý{å°|]­´oHíY\‘Tgç9ÂjpU Á/‰œ÷$ÃDš›‹9ƒTgÂÛ4x ë]gòÃp¦ òjL‘@µøLóŠ«b*›”'J´î¬1²WÚ bØV›T2ð˜?@,ù¬¯œø½2 Ôœ»þL5y¢ãADß°¼Z/ºˆràƒ[''-Wurªúÿÿ—Z¾hhæª!%±[X+bíϾé:~WÓ °‰"<ÚŽî4eŒõØø6÷§µÔé1zio鸇n¢[mzüMIó7ñå8-~JXÅ÷¡ÅN±K/Ç"‡J±\Æ’gÚw±ïL|­^Ä¡£ïÑ¿¯ï,âȲ÷6Âlç·›wPÖC;ý1奡â(c4 á=Ègþ8Nøµqªøâ&ñXEû;±]ñÎÖ@kCkckð’!&4˜lŠ4ÝÃЮGšîb(ŽßÅH²¹e4©E‘æ"&–‰ýŠø_hŽÉϵœOj?à˜ÒJß]ÒwKý”Ôw)}f m”ë%½.õ3tº‡Ù%l‹„îböwØç·sî-"Z/q©ˆ×b1Æ»\Ä›‘Ð2HiÂ$^Gˆ7òñÛŠ=„i/âØÇÕ~$9IŽóKáFpˆö‡aPj‘?9‚v‰°]!dW ÚÇ„ëÁú§ð| ßVp•¾ƒ·(þêž­óWïâ=Ÿrwð>Wu•«õý6ú«) 2ן𣅘ñøŸ’–=܆ÏIÊ8m¾À—lׯúŠyiŒrͯøk\ç_·Kø¡PK„²p7‘£ PK˺$-"junit/swingui/TestSuitePanel.classVkWWÝ—‡ c@TmU D‰h­¶ø(Æ”’(íÜÁa†ÎLD­}úhµµï÷ÓöèZ\u-W?õCTWϽCôKfî½çì}ξçœÉ¿ÿýõµØ‚?º¦³†æ„í9͘Êjá8·XVsø¨jpÝÆ˜V/ª—òá£î~mÁ3m©3|δ.Hߨf;Üà–õ õé¸Å9Ck´Bl2,OÇ’–©ëy›U¥6ù#AF–ËÒ#fŠë k¢‹£îòXîÖèx/Cm°÷C]„öÚrXsÂûM+Å­¨zÙÌ:4ûп‚:ƒÑ‚YÞ`D5Ô)n öžvm êÐîª!­h3ܰ5Óð ƒr ç-W)X‰Õ +JŠ˜3³¦Á âíbh¶¹3jñ4·,žŠiW(ÊŽ¢ Ð’¼k¬Á:†–E:zð¢‚õøà·5ØÈà%pW°µÁYò/&À7!(z|ä6fÎáÚTÆ!ñ‚2Ÿ6‹ó- «‹‘⦩ǵYW# ~;£R6Æí¨F’2êöF«û ú0€m ¶b;%fñ)Q9VA¦Â,VPƽ/ ß MRˆ~]3x̹¬s/^¡J2¦tžò‚ª¢e6ëDtÌá’‚‹ m«­oÓ¨ÍÇØµT„$ç¿-íeƒèéÈgg̹§e(UJù!ÃÀRý°á©G„ëúÝ ·DÇ^WpC|HšhŒŸÐWÂÅV²*>ÂÇBÓ[Tª–i’HÝKÆ1àÁ§ »‚Kwï­ÑˆÏÜÁçe³=&~O:š®9·=ø’¾ÕšqѼÀ£ª#ê(žT‰F¡Ù¿Æ7 ¾Â·4áø¥YÕ ædb~$“ܶ7leØóŒp{Ÿñ‰oˆ]6œ w´äìÃögÃV(%ff­$?¤‰aØZêÒ/¨F† È]¥®¤šk«tùXG¦”4ý«ª_b€ž4îå“& =—Ó9ýÝ ß&Z=@=½é¾ÇhIÌ£u+èue¢…mnNÍ£3‡h½žŽ6Äaa}80œÃ‰û2ŽQúí“1£h¢èÄzpý8t:„×iw g£§(r%íÆèÉh÷¤›ÁIʵ–žMÄ2Êál_¨no.Pùåñ8‰qšÞn]ÞÅ…o*&%E’H‘'#êtŠLeгDqŽÞÏ?…&)¦1áR“7¶@1Óª­@‘" NïiI±"ﲈ‚Á(ï$ÙÔ2…^Á ¬abÖ…8O6ª;ÓN4ôZCOêî¢1T»-‡+ãê=v¯€ , Õ¦w]Èqu»\^Z¿ƒw%×{xßå Ë5P/¸î•…|µ¨ê ¥ðA!×4 Š*ÀD"4k1.€„¨nÕ>Æ ªå›9ܾ_ð5B¾Žšžq³(àž‚8=øDŠS#>æ.gœ"7ãŒ;‰¾P×<¾x„ïÊïí6•û-j»ßŠJÃ_ÀõJÃïñyzñ#~¢§`ØX$Éx¹$ÍP„ù³„òâüZÁq‘–þ2ÇŠMüþŽ»R‘Ò¡àyøPK=¯ÛP#­ PK˺$-!junit/swingui/TestTreeModel.classW‰vǽ­Ù4£ÐÂ,Ë‹¤a±e6´€ŒYRd 9KKêAgºåîw‡ÍÎbg±6‰í,8‰â€ƒ†`lg!çø3rüù€8·ª[­z‡ƒºººê¾ûÞ»ïUÍçÿûèS„Ð ÖȺ“¶OêÆñ¼žÕlgÔÒ´Ãæ´–AQ°ê„:§¦³ªq<}tò„6åÄRP/fO¹ÛÒ7¤‹vED2æé(¨tñ3–šÓNšÖSÒÂn•¹xP·ÍÐ,[AÕ ´”wôlzŒvL‹Ëâ™~UÏæ- jŠTíGÌj\ËôY–) â™á¼! p}H§á= R-ÁZÇ„{HBA¨¥u,‰JT%ÆšEŸ‹˜ÄP“@-Ö$G"Ž2¬U°&€M õ ¬ë*ëîIb…;º7‰•îè¾$b(£fÆaP7´#ùܤf sJÍŽ©–.޽ɰ3£Ó©{—IC¶dÔ«Õéiz1Ä ZZ‹Ó¦Íi†“¾m Lù”i8ªnˆ°»»Š%°»õX[Ð!bÒ© As}Y-G¸ËÝ­Ø&–oW dl¼+& ê,-gÎiάp¿xv“xÐ¥³“Ü3º1-"£`_‰Ü—š½U€­’öt^ÍÚI<$,„ñ°‚ ÝFòºÃܤƒ<´ 7ìNâìM0ýû(Î’Ëbè¡m‡¯û!â`H¢õ¡?^H¢».IW2ušåxѵ,DbaPî0ÕcëϺÕ0ÄQ ‰éÇéãšÓ3£g§{Ì|É sÇF…õ¯ÚªÅMD4d}…gUg†MÁv¶n™àP:ÿÓ…û#̤vJt ÝÒŽ«g†Fµi÷Þ¬e¿ Ñ’ðK„¶Ô÷&Y#$8¨ÚŽ˜è1s³¦!å[ÝÒz»wILCK` ªk1 6†4hû tš —Ñ}ŸxåÑ€¼Œ¿ÁEW #LÒÖ\)ØBK­EJï3ò9ÍRÝ4HôiX"ë¢ì—ħü í”ãÞIh˜³Ô|5ó쯂¾H§íçsã²½IFFzô<^¨Àsx‘š˜QíæµØl)\ö¥—ñMÁç´ÔYÉñØ ¶ô)q°”MˆŠ™r©ÈÜZšÁTJRRSÐtg¾Ô0Õ^W"Ø,“YÕ’XUA†â¢öeÉ%ñcQŒ½x4)¿QG3˨0¨@I] ²‘ýL$¹?§Úƒ 1†7¹vÊEÑž{”Gu{PSY î&j@3lzbË]½Ú”IÏÄYù¶»ÍmÁk[J6®_âW œÇ;Tç¤jkîú5sj6¯õ›–,ÌEyl]®Üƒ´ÓÅeäŠ/Ão©3ïøW ÝLYºáŒO͑ѼÇïð{~.;u7¦Ó¨çf]íiÓåøãâàfÐþÄhÌŠ‰¬qKïä :#eýg\Là\b( í䘰螫Þõ‡Ägñw—ì ´€‚¸›\¡ q^‹+“k»31Ã'U›/Ë\™Ž‘‡l웂ϼۭ~‚O…Õ¿‰z³=£qÝöÝJòjG…iv>+J81bæ­)­_—7¡›®7l£a+"ñðÉ[™|òÖ%Ÿ+¼çJù\Ãõ•XÅ¿«ùvšWß2>»Ú® ºíjǯ n)×q¸~ KÃÆ¥aS[û6\’¸ù·ÖµdS)Ñ뉾U¼è¤ðß6ñk­k ›ÑÈQ+³/  íŸ!®«ªÛ.#Õ^@ú*¼áŽ%k+Éô¾÷ÑŸ¦"ôj½÷Ó²@ïòÑ÷{è r×ãK˜ ùe3£×R„—ðñ>/Þ鯈ùpû–öœE$4߯Ñþîp¨+rÛSášH»£mí©hGvÅjbo¡®cK¨€#œ¿ƒhMd¾&6&¢ÔDÄî±w¿ü¼lÞçÕÅü´“&‡m´»uØAïïgÜàlÿ>ˆ‡±{± =ü>Äë™ðaØeçû0ŒÇeÄÅè ŽÊähœ¸!âîÃ1LУjî~_¥¦ÑŒ¯q]”–Rø:çø+߀êùÿ¿ £áã¡õG„?Ax<ÔÆÐ__ÀS#ÝákÈ·µw¤ÂW0Ûq/ÀéŽ^ÀÚTô*žQpÏuÇR±Tä*^*ƒ˜ü–‚s_~±”™M̉È]9}«g«nA?ãp€þ¤Çüw€×­CEúÒ»3ÒãQÉ¿Œßñm|‡×3“ßÅ÷èq ïïßÇ+ôx=~? _{iUd\xÌ‹çqFVP%|ܤãâôôàEå¢Ï·J®"ÆcŒì0«aDrkswúܪðCüHr«ò¸EY¡"!ÎòéÙœà¡÷ÕÒæá-7PN™¼>š¿Åä8ŽÑäKðIi²ÑÝè›\홌²tŽI`?ÁO=C—$`—ïÜÖPW˜2}£›j®ß"r$3ö ©öhMxþLX³2eÿ)Rm“ÌÃ$á¦HhšÖXQ9Î8hÔë IpkÐ'¸ËÉ.œåHÚáÅdw ]òW)6È,E¸òÑ\úiY€PÙ†¥tDåä¬4—txæ¼Åßýîæ½^kHJßÿH¸8¾.Æ\QcHú”“,%—2Éxhy/eÍퟡ÷,ÊÛ¯£÷"ÇçÏb5Çç x÷°ìź©—±xžŠ{ /ÒË—xX¼Ìwº(™Í¾áfÏð:î{OV³‚_ã7…C…ø‡øCÕ|ÞÚê^á–W‹€ã>pÜ/š8þ"“\öŒïÈ}¹¡Ñúëm]ô5>_/ V…]!û‰€¾Ø øŸoÞð£@À¦`À·!.[Ë^ÃÇ> +ŽJ XÀõúx¯°Ò¬ô?óõk…Ë7°Jz^÷ý"ÜZ·ÖÇý{ nƒ‹ÛP÷ƒ;àþƒ}ÅÅ}B¶$–uའh¶q)ÐnOºÌ€.³@_)ªÁ&¿ÿ)wüëÿPK`uú®ÇˆPK̺$- junit/textui/ResultPrinter.classW‰_ç~FY—AeŒŠa†.‹ºi¢&Q£BAIl“8,³²dÙ!³³"µÍÑš¤ÍÑ´é)½’^önlu5I›¦w›¶¿Þ÷}¦EÚçýfvXa°êof¾ï{Ÿ÷zÞ÷ûöåWŸK± ¯hX7QÈeœ¤cžp ™ä ™/dÛíLÎ1íJhVMÇdÖÈKŒN˜)§K54¸RiÛ˜4§-ûžä°™wú3yÇ̉\…†Êô!;C uý "c%îc›ÆäÙÑee “9 Z¯†e;3DÜ¥áªxàþ¶ƒB]Ö˜©ai¼í Ž*¬ˆ „•:–#²KP££ay[­ae&gî/LŽšö°1š¥T´ßJÙƒ†‘oo2äŒgòt§ñ(ÐÒeÓž+S2§!ï €+·£Ol­R[o51 ÅûÄælˆÐ¾«KËݶmÙÔßxY<‘Œ¡I$›5T+É#“-Øf^ÇkÜ•kJ˜=–E[u¼ÖÓ|[á̹¨… ± ¹áÌ$âõ1‚ í‘a ¬É)Š/?f:¥¤®‰·¦IG׊Þ×iX°¡×S‘‚Îætl•$nÁ6 µ;»‡ îßs¬XÊÊ9™\Á ãFòÇ#„â Q2¹c*$[±]dixýüõÎB:-<¼™Î‹GÛcaìÊPb:hš™5¦òæ˜,vä]!ÑÔ×¶P—Ž.ì—º‰fLM™¹1 ƒŒZ0åÚA„[p«h&ÏÃŽURWÔvúeï>¿6ƒÒU‰ZczüY[B*8™l²;W˜4mÃÉX9ÂÝÁndžˆÚÞe„Â,¢^pP‘Új1Œ ºJÏ^3Íj'ø¦ø"ؽÁyy=Þ Ñº“¾¦}–ÞíZq”èÞ¤²CǨkAJú»7m36mä™:Æj}¼÷²áÍHÈ&È\nÏò±= 6–*E†0¦4,ÉsAzR G•``ªrlÝYsÒ”0]š#·RáqLW¡€4,(G^uV⥪t£©¡)¸Ò=½À7áÍÀûXƒãF~Ÿe›ž9y•¶#:Àƒ¢þ- Ú¨euZWÖ,’%¦6å¦<äÌL©F¸ m XFCM™¥nãÒñ¨kËc<ÊV‡m#e.ÚKΈ/Oà"ÿ$ÉêZªaÃe….9q\ó*ñn:zÜÈÌ´Ti˜“÷â}¼ïg–Û˜íÓ$‘0ŠENx9WÚSòƒøP'ñáyeíeû²¼û¨ðîiëÜfô1FÛ‘àèø„”ñI|Ò§»+Çd§‘7U«ÏJœ¡Çl¬=™,+uCÛzEý…&|ŸàÓøËP!•2óùt!«ã xP*닌ÇÀma<Ëg,Æ—Y—4Å+¿snù§Ý1‡V…qAÂxŽ”È‡ñma|4îéèí?0Ø=ÔÔÔÆ×¥¶¸=#”t×oPÿÆX¬t,ÉÔ·¸‡Sî'ß)uj9f“îáÜcÙ“»Ù÷¸™QèÍå#'XW*¼›éôðrßÇ—íyräé•V‹B½ú ~*2?£ûÆØ˜²JÃæ`ï(·­i¹-¨+ˆÖƯ¤”§êƒ¥¹Íñï=ó@ÈJª÷â¤a÷¢Ì›íÈçM[ ºGqZÙïZÔÆŸH˜+“`!ñür+bí"ºu9ó`;î>msÿ ÝCVÁN™$ª4‘KîH›ÅS4±ÐC’ >!w1•ÞÎ8Öp¾ :Çj~ p‡ìY™¸€U‰¥çM´ŸGíYN-AÇ(€ÕkP‹œ­çL½+†5¸J¯ÄZªa'b®÷ÀS¼ÚŠt]"VDc¢½ˆZeh›SQ Žë96Р„ºšŠ•š!à«©Cí„—·¼7‹›i”«°‹ß²V“(âº"nGô¦"vÎ)[¡›”¬â•M”è®§$$—Cðn%û[Ê_À®‘èž èL4ÑSD_ûT$¨¢Š6–…«Å÷£EYOúÊ}ÒSv ¿Ü\0>Ãü;=RÄ]sÀµœ¤‚kÉœ\Eƒ@ þEÓ ×tËÿåuÂ}…_’³™†Y„Î6„žF»™qF¦¡ˆ{¢“ Í&þE-?Fg÷÷Ý»`_ÞßÚ:CÖ´?‡ /ád]¨ˆûO…4N¼UÃìÿ3g~³"÷ 4çFºr®ÃÂN܉›‘åóv+·¶¸ûnÍàRyŸÁÃ^fðÞÆä!ߎˆ*!^<§¹"‰Õí´ûq‰ç;ç'½“%×ÅòÚ[F^Ýשã]xJéÔ=!9Ö=ü1~)n–BÔp`¢³Œ •}¤ˆgTx>>?y½Ìv_™Æf_c³¯±Ù×È‹€ÏRñS#5|ê">¿Îí_„.|H~ãx ¯z„›%à—N£¿¼ÏÝ'ÀWè÷…]‹dR8úüTD¿*Œx±Œ9Ýå@/qÊúfз] 1yÿ®û~˜ï.ˆ‡0çß6eñ¬ÔAú8D¿†åÎÿ‡q#LÉÒárÿq¾?EZÆ]e±˜õc1ë× ¤x±èðÚGõEü¨ñÑZü˜¥ðóg}õËTfÒepÕ>\µ× 4ùçÁ%Õ7P‘8‡Úù0e­¬ÂƒÑð üÒîçn±%¢øë€˜æiø»1áѱU÷O!àÈ9D„Žò¬[Æ%¿ðJ¿ù‡Ò)þO¶‡iø#¸†]aNo«¯·Õ×û/%ÿïÿPK6°ÖG×PK̺$-junit/textui/TestRunner.classW‰TÕþnòÈ Ã°8HHtP ÉLBY*±XH&@IJõ1ó’ Ìß¼! ­Öª­U\j­-¬m\¨… ‹Ý»ïûö´ýÎ}o&“aˆM~™¹ïÞs¿óïžsîË{ÿ¹rÕhÆ¿æÌ¥N‹cqr‰–^+ëìÌ¥Ó–íƒRXà.Úz¦e“™µJ ªü;ìDÚ±l……]“vZÙ\ÒñV[‚=»ÚÚÚ{zîißÓÙ« :f¶eÒYÇL;}f2gUƒ?´ëØØÙµkg»¶“9Ò˜Õ¾§­}GoçömÅÙ*…š;ô·A¡º¡±OÁhËÄ-…9ÍÃfKÒL¶ôÍ:VʇM29Ga^—^LdZ4¯ǶÌTk7bÞtÌE­B]CE“ƾ f£.€*Ô+ÌîJ¤­m¹ÔËî5$é4Ô•‰™É>ÓNȳ7i8C‰¬B}×u¦(7]_2n ,îni˜JY—Ú­Bí6j2b'8+Ss0°,ˆi¨™ÎÅßpᬪy¢ 7zÁj±Ú’f6Û*BÖ»Þl3edìCšrOޏ>4 rSËÑ¢°º@l²ikcÅi—6ÕŽb¥°]¥0Ýá¼v¬pÃ5\Äh™Â´x†z±ÎÝöA–Ûj+{§n¾*8ؘŽï64¯¿[†¼æ:k{ß'”u¸K8}˜,³" sâ€à åte̸ŒÃ 0¯œŠ²º$¾dÒzK#nÚñ2;:Ø,ÊD‡3‘´â - •c(ѵwÈÎŒHrê kX{NŽÒ«‰Ò(3c<âƒLlGœÌ+ÍÖF"=¨¡übµn¥®±ðº=Œ91–”cMè¨psÔ:ë¤Òª»è“DïA¯Æ9„x¼+Áâׇ°¸òá tíÅ>Aùó0–³m+íô&RVw"™”fƒÙÄÇqO€]â^N%<”ÔjÅ@ÄSñˆJMÓå(‰1Õž­²iCÒ ²ÉÌe¥¹4ì•…CHJÌ)NŒè,W{%ÿ=]N­êô¬œ«Ê}[Ù¬tÜ}ò1ÝÑlMR*h‡I ;AŒHg ãˆBU"]ÚS;Óù‰žz?žú …¹ |x”9Šku;ƒøà!|º`¯¨ýHÌv™´Ò>eŠÇÚ†}•³pšŽGaeEƒ©+ùq|N„|‚·Òˆ™íÉÅbV6;Kjz{ƒ8†§$Až& ëˆm4tÊ<‹ÏKRòáÅB7O²3¾Œí¼„S$eÚƒÌ×¹âç³”5¹Ô‹s=P| üxŠ6KVùñÆä{U#úp†©fÝ—3“ٲΰýÀA+Æt§noálßÀÛÌ–æ˜ç Ä[Ì6cnßw{ƲJm¥’,pQnµ¼ öã“¡ÜjSn`@šä’Ûº‹'öã¹µ¨Ñ8®‹×k²}–ÕùõmÉçxß心ïq»9<ÌŠPhú¿è¹ŽIòø¡¸ú‘¢ð£á»ÙL›¬Ø¡0Ûy¸ÝNƛÍTÊôã'Ò93îö ~*žÇñ3…Þ]’ëÃWIxŸ>‰ýa}cò=L„k Y¶NsNdÃÎ7Î èq¯gމÔ~ü"€ÇD°W_¡‘Ê‘UºF‚ø5~#âÿVai[&—Œ‡Ó'ì6sÕôÂú*\OÝ_¦]!/¦Òî¢ÁŸ¼+EØ3iÙ÷¦½pÕùR…ê d-§øèÉäì˜Õ‘—¯ÙÚ-oXÌê6øâhð›¯DÕÃÇ,'´¼N"Àç%ÏA>Ï,yž…Ç|­âç œYË9– ü‘ó˜?†›Îi«ü”>,!úR,ä(èÚanÖo¸|‘ô0Ú5`fdáþèaI9P”M¨Ö5ö€d´ó%·z´«@d ˆD/¢qoäÍy%®bP·—`Š˜D(Ž¥W³•û$„™ãXÞOÜ—pûîršwæú’xgb5Öð[€V–‘›5Žªþ1¬íŠFò¸ãí2¤ÍÔjK ¹YÄmÕ ÖàNÒr³‹äÄjΦ‘ÇÆÝåaïàþR¨%Ès°ÉCö£M#+|„§â"¯*œð86yËÏ=ß_ñt;±ÕÛß©³sçÊ6î×#îbQy…»uºÉH®Ò£.tkõ·a»»F£U€½·$²RØŒ["Ûùþ±)! yźVœ>г»\œDEqÖS¡Õ;6_$ZÍã*ßž*!â+ñia”ºËz‡´RL¥þmÍ‘ hÌcÿ%˜ëŒhóe TAÆ5µ5µ†µÎ/Ë͵þ<Fæ‘nžð»L×ù}ì 6s7ËjwØrô|˜e6‚eF߯ym!é^ku)=Ê`Xw˜•IJdˆ K,ƒ¶uÄsáR2?Ì‘Ÿ³|ƒó"‰ó[2µnÁ çÜ@ŽžÇ'óxd÷(Œîsòß15©ew9×Òð ?âÊÃ|~ó¹:¡]]‘cf&µó|ÖóxŠ6âqEi=>ÙÝ”Ç3'à3.á ÕüE¨û<^àìÉW’ø+𠾪“£Á«=é°¯R³*¯áëºcóŌߣº–ý‘·Úψ%ò³¡×»«7T¯5F‹Î3V…ÞÌãÜqø £Ø®'¾©'B‘裆âscÝ£X­—.ë¥ÛÙ8ÆûCßû—ðý<~zyüœÁŽÂ/¶Ýzwôêéÿžl ½®÷±>Öúå~õn„Êün½©7I&¯7dIcþ˜õìF&šXêžçoA¶} Çy'ÐI^@/ò_¢L/S–SLóÓçÖå«âºM!ÀkÜÿ&>C¤·ðΖ$åÙâŸÕKJÁ_X¿’”oè$¨¦èñW~Çø)Ék§^‹nð÷oÅV±ÅkÙAê¥"†>þÉ­õ=_$÷|Iâ‹<‚ø»×€þQ¼¥6x¨5e7”{\&Ó+%X5E¬ïvRø§Þó¯ÿPK𢗠 ÊPK´¼~,stylesheet.css­”ÁŽÓ0†Ÿ€wi/KÕД‡öT¶”…BËJœ'Í$µêØ+Û ”Uß±ãn’’K%|¨š‰¿柱3›ÀWl0×;°î( ìžÈÁdöj6 d¡V°ŽrBùgÃoýO†ùk¿s Ï;-µYrpuêÀ!æö,ŽAiˆ`qZË Ü¶ÑR먹dZxýÆê‰‡¤ °”d¦|<•M,QÎ;~mìÉeÎAÆyúä.òÝ“lȉNamÊA†Sý†(Ñ ­À_„îüöŽïùˆæŽ¤œ_Ž0¹¸ƒÐã¨çÒïÒ4p4‡x;;Ø;÷Ú{ö õ,vÞVð"îúbm%׋µ'µó¶Þ^]Ù¿Ó]üOÝ¿PK¯Ê@óîdPK ®»$- ýAMETA-INF/PK®»$-/c„10'META-INF/MANIFEST.MFPK rº$-ýAšjunit/PK ʺ$- ýA¾junit/awtui/PK ʺ$-ýAèjunit/extensions/PK ʺ$-ýAjunit/framework/PK ­»$- ýAEjunit/runner/PK ˺$-ýApjunit/swingui/PK sº$-ýAœjunit/swingui/icons/PK ̺$- ýAÎjunit/textui/PK ®»$- ýAùjunit3.8.1/PKʺ$-؉Þ䎡"junit/awtui/AboutDialog$1.classPKʺ$-€¸àeu†ýjunit/awtui/AboutDialog$2.classPKʺ$-×uÔ˜Lt ¿junit/awtui/AboutDialog.classPKʺ$-(äQØ V junit/awtui/Logo.classPKʺ$-äž;lx- ëjunit/awtui/ProgressBar.classPKʺ$-f†¯sƒ¨®junit/awtui/TestRunner$1.classPKʺ$-M ¼31»}junit/awtui/TestRunner$10.classPKʺ$-§ qG\7ûjunit/awtui/TestRunner$2.classPKʺ$-_£Zh²¯£junit/awtui/TestRunner$3.classPKʺ$-±NÓ≤¡ junit/awtui/TestRunner$4.classPKʺ$-±þ*»Nv"junit/awtui/TestRunner$5.classPKʺ$-qø·‹¤%junit/awtui/TestRunner$6.classPKʺ$-D´܇¦ç&junit/awtui/TestRunner$7.classPKʺ$-REI‚¡º(junit/awtui/TestRunner$8.classPKʺ$-³Ž±ÊZ3ˆ*junit/awtui/TestRunner$9.classPKʺ$-k1nv{:.,junit/awtui/TestRunner.classPKʺ$-fc”Cî³(îIjunit/extensions/ActiveTestSuite$1.classPKʺ$-øŒôU9&2Ljunit/extensions/ActiveTestSuite.classPKʺ$-Œ—Þje(ÛOjunit/extensions/ExceptionTestCase.classPKʺ$-‘›éâÒ#›Rjunit/extensions/RepeatedTest.classPKʺ$-9!éº $¾Ujunit/extensions/TestDecorator.classPKʺ$-^?úVéz"!Xjunit/extensions/TestSetup$1.classPKʺ$-`V‘è  ZZjunit/extensions/TestSetup.classPKʺ$-Ú!5#K  \junit/framework/Assert.classPKʺ$-GƒœÍ*%fjunit/framework/AssertionFailedError.classPKʺ$-Þ×Qd¶­'•gjunit/framework/ComparisonFailure.classPKʺ$-dî?/š¿! kjunit/framework/Protectable.classPKʺ$-(gØõ˜¸‰ljunit/framework/Test.classPKʺ$-Ûæ[  imjunit/framework/TestCase.classPKʺ$-€4Ò»1Ö!Usjunit/framework/TestFailure.classPKʺ$-©bÔV"Õvjunit/framework/TestListener.classPKʺ$-cÌ#_„Š"ùwjunit/framework/TestResult$1.classPKʺ$-äÊ×O|¤ Íyjunit/framework/TestResult.classPKʺ$-¯$Šxm!—€junit/framework/TestSuite$1.classPKʺ$-áy»+ h^‚junit/framework/TestSuite.classPKʺ$-õr—@ÜÉ$!Öjunit/runner/BaseTestRunner.classPKʺ$-LÑÍLê )¢junit/runner/ClassPathTestCollector.classPK‚³E,¿Cûö•  Y©junit/runner/excluded.propertiesPKʺ$-ê´ë¿ÿ$<ªjunit/runner/FailureDetailView.classPK˺$-®2Hį] 'M«junit/runner/LoadingTestCollector.classPK1‡,´XWYóÄQ°junit/runner/logo.gifPK˺$-…È"”í+‡±junit/runner/ReloadingTestSuiteLoader.classPK˺$-¬l‹…&ͳjunit/runner/SimpleTestCollector.classPK1‡,›¾#Gšs¬µjunit/runner/smalllogo.gifPK˺$-'ï\}®Ý!޶junit/runner/Sorter$Swapper.classPK˺$-L+ÓÓh‹·junit/runner/Sorter.classPK˺$-Gd¡Ñ‰*:ºjunit/runner/StandardTestSuiteLoader.classPK˺$-Z‰Ãù ?&¼junit/runner/TestCaseClassLoader.classPK˺$-Åsõë« hÉjunit/runner/TestCollector.classPK˺$-C {í Å"FÊjunit/runner/TestRunListener.classPK˺$-¼ÔŒðÄ2"¡Ëjunit/runner/TestSuiteLoader.classPK®»$-ëãY›ûhµÌjunit/runner/Version.classPK˺$-ìW©!øÍjunit/swingui/AboutDialog$1.classPK˺$-yŽ!ÖÏjunit/swingui/AboutDialog$2.classPK˺$-œí¹ ²*žÑjunit/swingui/AboutDialog.classPK˺$-«É×2ù Ùjunit/swingui/CounterPanel.classPK˺$-XÀ`a`?âjunit/swingui/DefaultFailureDetailView$StackEntryRenderer.classPK˺$-˜±¨p0@ëäjunit/swingui/DefaultFailureDetailView$StackTraceListModel.classPK˺$-­V>x),‰èjunit/swingui/DefaultFailureDetailView.classPK˺$- 8§’å$[ìjunit/swingui/FailureRunView$1.classPK˺$-s*œ\~:?îjunit/swingui/FailureRunView$FailureListCellRenderer.classPK˺$-¥½;Én "ójunit/swingui/FailureRunView.classPKœ‡,ƒÀsý(dùjunit/swingui/icons/error.gifPKœ‡,0ôv%^ûjunit/swingui/icons/failure.gifPKœ‡,*ÓÆØ¼{!þjunit/swingui/icons/hierarchy.gifPKœ‡,D·•ŸWU ÿjunit/swingui/icons/ok.gifPK˺$-‰Â^«ÿjunit/swingui/ProgressBar.classPK˺$-@¨Þ±xVjunit/swingui/StatusLine.classPK˺$-¬»Ÿº— */junit/swingui/TestHierarchyRunView$1.classPK˺$-Ýh:Ê,` (junit/swingui/TestHierarchyRunView.classPK˺$-¥ÞA·æ" junit/swingui/TestRunContext.classPK˺$-x{ò±1 §junit/swingui/TestRunner$1.classPK˺$-RW¹!‚junit/swingui/TestRunner$10.classPK˺$-c_,¸ñ!ajunit/swingui/TestRunner$11.classPK˺$-ÀÖs@³ý!hjunit/swingui/TestRunner$12.classPK˺$-Þ.ëï…½!jjunit/swingui/TestRunner$13.classPK˺$-À æì !>junit/swingui/TestRunner$14.classPK˺$-RÀµŽŸ!junit/swingui/TestRunner$15.classPK˺$-yë,ŠÙâ!÷junit/swingui/TestRunner$16.classPK˺$-=Áã±!"junit/swingui/TestRunner$17.classPK˺$-wŒI, !$junit/swingui/TestRunner$18.classPK˺$-{âÆ…!Œ&junit/swingui/TestRunner$19.classPK˺$-·æ@ž)1 ê'junit/swingui/TestRunner$2.classPK˺$-’!R‰Ò a*junit/swingui/TestRunner$3.classPK˺$-•8ŒÅŽ® 8-junit/swingui/TestRunner$4.classPK˺$-¤Ìf² /junit/swingui/TestRunner$5.classPK˺$-£í&ˆ³ ï0junit/swingui/TestRunner$6.classPK˺$-Óš©x” Å2junit/swingui/TestRunner$7.classPK˺$-Ï“˜ˆ¯ ‹4junit/swingui/TestRunner$8.classPK˺$-=3Œ® a6junit/swingui/TestRunner$9.classPK˺$-mÛƒ+»^;8junit/swingui/TestRunner.classPK˺$-òµâŒ djunit/swingui/TestRunView.classPK˺$-¡eÀì”®"Xejunit/swingui/TestSelector$1.classPK˺$-²®¦zŒ¼" Creative Commons Public Domain

Copyright-Only Dedication (based on United States law) or Public Domain Certification

The person or persons who have associated work with this document (the "Dedicator" or "Certifier") hereby either (a) certifies that, to the best of his knowledge, the work of authorship identified is in the public domain of the country from which the work is published, or (b) hereby dedicates whatever copyright the dedicators holds in the work of authorship identified below (the "Work") to the public domain. A certifier, morever, dedicates any copyright interest he may have in the associated work, and for these purposes, is described as a "dedicator" below.

A certifier has taken reasonable steps to verify the copyright status of this work. Certifier recognizes that his good faith efforts may not shield him from liability if in fact the work certified is not in the public domain.

Dedicator makes this dedication for the benefit of the public at large and to the detriment of the Dedicator's heirs and successors. Dedicator intends this dedication to be an overt act of relinquishment in perpetuity of all present and future rights under copyright law, whether vested or contingent, in the Work. Dedicator understands that such relinquishment of all rights includes the relinquishment of all rights to enforce (by lawsuit or otherwise) those copyrights in the Work.

Dedicator recognizes that, once placed in the public domain, the Work may be freely reproduced, distributed, transmitted, used, modified, built upon, or otherwise exploited by anyone for any purpose, commercial or non-commercial, and in any way, including by methods that have not yet been invented or conceived.

backport-util-concurrent-3.1-src/LEGAL0000644001750700037720000000051210366731013016453 0ustar dawidkdclThe backport-util-concurrent software has been released to the public domain, as explained at: http://creativecommons.org/licenses/publicdomain. Acknowledgements: backport-util-concurrent is based in large part on the public domain sources from: 1) JSR166, 2) package dl.util.concurrent, 3) Doug Lea's "collections" package. backport-util-concurrent-3.1-src/README.html0000644001750700037720000010073010643137555017543 0ustar dawidkdcl backport-util-concurrent - Distributed Computing Laboratory

backport-util-concurrent

Backport of JSR 166 (java.util.concurrent) to Java 1.2, 1.3, 1.4, and ... 5.0, and 6.0

http://dcl.mathcs.emory.edu/util/backport-util-concurrent/

Release: 3.1, for Java 1.4


Overview

This package is the backport of java.util.concurrent API, introduced in Java 5.0 and further refined in Java 6.0, to older Java platforms. The backport is based on public-domain sources from the JSR 166 CVS repository, the dl.util.concurrent package, and the Doug Lea's collections package.

The ambition of this project is to provide a concurrency library that works with uncompromised performance on all Java platforms currently in use, allowing development of fully portable concurrent applications. OK, let's get real - the traget scope is Java 1.3 and above, and some limited 1.2.

The backport is close to complete; unsupported functionality is limited to: 1) classes that rely on explicit JVM support and cannot be emulated at a satisfactory performance level on platforms before 5.0, 2) some of the functions described in the original javadoc as "designed primarily for use in monitoring in system state, not for synchronization control".

The ultimate purpose of the backport is to enable gradual migration to java.util.concurrent. In a perfect world, everybody would instantly and simultaneously upgrade to Java 6.0 once it comes out. In reality, many people are, for various reasons, still stuck to older platforms. The backport allows them to use the JSR 166 goodies without upgrading just yet. And once they are ready to switch, their concurrency code will require only very minor modifications, such as changing the import statements.

Note: Retrotranslator in an interesting alternative to using the backport directly.

Features

The following functionality of java.util.concurrent is supported in the backport:

  • All JSR 166 executors, utilities, and everything related (thread pools, FutureTask, scheduled tasks and executors, etc.)
  • Locks: ReentrantLock, Semaphore, ReentrantReadWriteLock (see Compatibility), Conditions
  • Queues: synchronous, array, linked, delay, and priority queues
  • Deques: array, and linked deques
  • Atomics: everything except reflection-based updaters
  • Other concurrency utils: CountDownLatch, CyclicBarrier, Exchanger
  • Concurrent collections: ConcurrentHashMap, CopyOnWriteArrayList, CopyOnWriteArraySet, ConcurrentLinkedQueue, ConcurrentSkipList[Map,Set]
  • Retrofitted standard collections

License

This software is released to the public domain, in the spirit of the original code written by Doug Lea. The code can be used for any purpose, modified, and redistributed without acknowledgment. No warranty is provided, either express or implied.

JSR 166 functionality is tied closely to the Java 5.0+ Virtual Machine, and some aspects of it cannot be fully backported to older platforms. This section discusses these differences between the backport and JSR 166.

Package Names

Since user libraries cannot define classes in java.* packages, all the original package names have been prefixed with edu.emory.mathcs.backport. For instance, java.util.concurrent.Future becomes edu.emory.mathcs.backport.java.util.concurrent.Future.

Differences between releases

The backport is based on latest JSR 166 source code and thus includes functionality that has been added in Java 6.0. Pay attention to the "since" javadoc tags if a strict conformance with Java 5.0 is desired. Examples of "since 1.6" functionality include: deques, navigable maps and sets (including ConcurrentSkipList[Map,Set]), "newTaskFor" in AbstractExecutorService, "lazySet" in atomics, RunnableFuture and RunnableScheduledFuture, "allowCoreThreadTimeout" in ThreadPoolExecutor, "decorateTask" in ScheduledThreadPoolExecutor, MINUTES, HOURS, and DAYS in TimeUnit, and appropriate retrofits in collection classes.

Backport is developed carefully to retain link-time compatibility, i.e. it is generally safe to replace an old library JAR with a new one (with a possible exception of APIs based on beta releases, e.g. current "since 1.6" classes and methods). Serial compatibility (i.e. ability of one version to deserialize objects that has been serialized using a different version) is maintained on a best-effort basis, and not always guaranteed. Please see details below. (Note that concurrency tools are usually not intended for persistent storage anyway). Compile-time compatibility: applications using wildcard imports (e.g. java.util.* and edu.emory.mathcs.backport.java.util.*) may cease to compile with updated backport versions (containing new classes) due to import ambiguities. In such cases, you must dis-ambiguate imports (i.e. use explicit imports as appropriate) and recompile.

Notes for version 3.0-3.1: Link-time and serial compatibility is fully preserved.

Notes for version 2.2: Link-time and serial compatibility is fully preserved for "since 1.5" APIs. For "since 1.6" APIs, link-time and serial compatibility is preserved except for navigable maps and sets, which API has recently changed slightly in Java 6.0 beta.

Notes for version 2.1: Link-time compatibility is preserved fully. Serial compatibility is preserved except for the class ReentrantReadWriteLock.

Notes for version 2.0:

  • the "concurrent.Concurrent" class has been removed as of backport 2.0.
  • Serialized representations of several lock classes have changed between versions 1.1_01 and 2.0, as a result of certain bug fixes and performance improvements (see changelog). This means that locks and collections serialized with 1.1_01 will not be deserialized properly by 2.0.

Differences between versions for Java 1.2 - 1.3, 1.4, 5.0, and 6.0

Within the same release, backport versions optimized for Java 1.2 - 1.3, 1.4, 5.0, and 6.0, are source-level and link-time compatible. That is, (1) sources compiled using one version will compile using another version, and (2) classes compiled with one version can be used with another version without recompiling. However, they are not serially compatible - that is, objects serialized using one version cannot be deserialized using another version.

Unsupported functionality

Detailed listing of functionality that has not been backported is presented below.

Java 5.0 Syntax

Package java.util.concurrent exploits new language features introduced in Java 5.0. In particular, most API classes are generic types. In the backport, they have been flattened to standard, non-generic classes. Still, programs linked against the backport should compile with Java 5.0 (after changing package names). Nevertheless, you may want to consider gradually switching to using generics once you make the transition to Java 5.0, since it gives better compile-time type checking.

In Condition

Method long awaitNanos(long nanosTimeout) is not supported, since the emulation cannot reliably report remaining times with nanosecond precision. Thus, it probably would be too dangerous to leave the emulated method in the Condition interface. However, the method is still available, for those who know what they are doing, in the util.concurrent.helpers.Utils class.

In ReentrantLock

the following monitoring methods are supported only for fair locks: boolean hasQueuedThreads(), int getQueueLength(), Collection getQueuedThreads(), boolean isQueued(), boolean hasWaiters(Condition), int getWaitQueueLength(Condition), Collection getWaitingThreads(Condition).

In ReentrantReadWriteLock

The backport implementation for Java 1.2 - 1.3 and 1.4 is based on dl.util.concurrent class ReentrantWriterPreferenceReadWriteLock, and thus slightly departs from java.util.concurrent that does not specify acquisition order but allows to enable/disable fairness. The backport implementation does not have a single-parameter constructor allowing to specify fairness policy; it always behaves like writer-preference lock with no fairness guarantees. Because of these characteristics, this class is compliant with JSR 166 specification of non-fair reentrant read-write locks, while the exact semantics of fair locks are not supported (and the appropriate constructor is thus not provided).

Also, the following instrumentation and status methods are not supported: Collection getQueuedWriterThreads(), Collection getQueuedReaderThreads(), boolean hasQueuedThreads(), boolean hasQueuedThread(Thread), Collection getQueuedThreads(), boolean hasWaiters(Condition), int getWaitQueueLength(Condition), Collection getWaitingThreads(Condition).

In Semaphore

Blocking atomic multi-acquires: acquire(int permits) and tryAcquire(int permits, long timeout, TimeUnit unit) are supported only for FAIR semaphores.

Platform-level functionality

To emulate System.nanoTime(), not present on JVM < 5.0, the method nanoTime() is provided in the class dl.util.concurrent.helpers.Utils. On Java 1.4.2 and above, it attempts to use high-precision timer via sun.misc.Perf (thanks to Craig Mattocks for suggesting this). On older Java platforms, or when sun.misc.Perf is not supported, it falls back to System.currentTimeMillis(). In the Java 5.0 and 6.0 version, it delegates to System.nanoTime().

Class ThreadHelpers is provided to emulate certain aspects of Thread.UncaughtExceptionHandler.

Note on nanosecond precision timing

The backport strives to honor nanosecond timeouts, if such are requested, by using two-parameter variant of Object.wait() in Java 1.2 - 1.3 and 1.4 versions. However, most Java platforms will round up the timeout to full milliseconds anyway. In Java 5.0 and 6.0 versions, the backport uses native nanosecond APIs.

Low-level concurrency classes

The following classes are not supported: LockSupport, AbstractQueuedSynchronizer, AbstractQueuedLongSynchronizer.

Rationale: these classes depend on explicit JVM support, delegating to low-level OS concurrency primitives. There seems to be no simple way of emulating them without introducing prohibitive performance overhead.

Atomic utilities

The following "atomic" utilities are not supported: Atomic[Integer,Long,Reference]FieldUpdater.

Rationale: on many platforms, these utilities cannot be emulated without a prohibitive overhead, negating their usefulness.

The backport has been around since December 2004. It has been downloaded tens of thousands of times. It has been successfully used in many open-source and commercial projects. Arguably, it has become a de-facto standard concurrency library for Java 1.4, and by now, it is very well tested by its users.

Moreover, the backport is based on a very stable and robust code base of JSR 166 and dl.util.concurrent. This partially explains why so few bugs have been reported against it. Once again, I would like to express gratitude to the JSR 166 expert group for doing such a great job, and for their commitment to open source.

Unit tests

Version 3.1 of the library passes all the relevant 1859 unit tests from TCK test package designed for java.util.concurrent (the tests of unsupported functionality were skipped).

The following unit tests have been completed (listed in the alphabetical order): AbstractExecutorServiceTest, AbstractQueueTest, ArrayBlockingQueueTest, ArrayDequeTest, AtomicBooleanTest, AtomicIntegerArrayTest, AtomicIntegerTest, AtomicLongArrayTest, AtomicLongTest, AtomicMarkableReferenceTest, AtomicReferenceArrayTest, AtomicReferenceTest, AtomicStampedReferenceTest, ConcurrentHashMapTest, ConcurrentLinkedQueueTest, ConcurrentSkipListMapTest, ConcurrentSkipListSubMapTest, ConcurrentSkipListSetTest, ConcurrentSkipListSubSetTest, CopyOnWriteArrayListTest, CopyOnWriteArraySetTest, CountDownLatchTest, CyclicBarrierTest, DelayQueueTest, EntryTest, ExchangerTest, ExecutorsTest, ExecutorCompletionServiceTest, FutureTaskTest, LinkedBlockingDequeTest, LinkedBlockingQueueTest, LinkedListTest, PriorityBlockingQueueTest, PriorityQueueTest, ReentrantLockTest, ReentrantReadWriteLockTest, ScheduledExecutorTest, ScheduledExecutorSubclassTest, SemaphoreTest, SynchronousQueueTest, SystemTest (testing Utils.nanoTime()), ThreadLocalTest, ThreadPoolExecutorTest, ThreadPoolExecutorSubclassTest, TimeUnitTest, TreeMapTest, TreeSubMapTest, TreeSetTest, TreeSubSetTest.

Stress tests

The backport is being stress-tested using the "loops" tests from JSR 166 (courtesy of Doug Lea and the JSR 166 Expert Group). The tests, included in the development source bundle, thoroughly evaluate behavior and performance of various types of locks, queues, maps, futures, and other API classes, under various conditions (contention etc.) and circumstances, including cancellation.

Despite exhaustive testing, as any software, this library may still contain bugs. If you find one, please report it, or better yet, contribute a fix.

Known problems

Note: A bug has been reported against Sun 1.4.2_04 JVMs, and fixed in 1.4.2_06 (see ID 4917709) that makes those JVMs to occassionally crash with SIGSEGV during backport stress tests, particularly MapLoops and MapChecks. It is therefore recommended to use JVM versions 1.4.2_06 or newer when using the backport (although the crashes seem to not happen also on 1.4.2_03, and perhaps on earlier JVMs). Detected in version: 2.0.

Note: due to what is apparently a bug in SUN JVM implementations for Solaris, observed on 1.4.2_03 and 1.4.2_06, the 'ExecutorsTest.testPrivilegedThreadFactory()' unit test fails with ClassNotFoundException when launched from a class path that has backport classes stored as individual files in the "classes" directory. The problem disappears when the classes are put in a JAR file. The bug is most likely related to handling context class loaders. It is therefore advised to use JAR files instead of class files when running code that explicitly or implicitly modifies context class loaders, as does privileged thread factory. Detected in version: 2.0.

Note: missed signals have been observed on Linux 2.6.3-7 kernel for SMP w/64GB support under contention and in the presence of frequent timeouts. (The bug was captured during TimeoutProducerConsumerLoops on SynchronousQueue). Apparently, this is caused by a kernel bug. The problem have been observed on several different JVMs. It does not occur on newer kernels. Detected in version: 2.0.

As evident from the above, IT IS CRUCIAL THAT YOU RUN THE STRESS TESTS on the target configuration before using the backport in a production environment. Concurrency issues are tricky, and possible bugs in JVMs, operating systems, and this software, usually won't show up until under heavy loads. Stress tests included with this distribution test this software under extreme conditions, so if they are consistently passing, there's a very good chance that everything works fine.

Changelog

Version 3.1 (Jul 5, 2006)
SVN logs: [Java 1.4, Java 1.2 - 1.3, Java 5.0, Java 6.0]

  • New features
    • Version for Java 6.0 available! The 5.0 and 6.0 version matches the performance of java.util.concurrent.
    • Javadoc clarifications and small improvements, following JSR 166.
  • Bug fixes
    • 6523756: ThreadPoolExecutor shutdownNow vs execute race.
    • 6464365: FutureTask.{set,setException} not called by run().
    • 6529795: (coll)Iterator.remove() fails if next() threw NoSuchElementException.
Version 3.0 (Nov 11, 2006)
SVN logs: [Java 1.4, Java 5.0, Java 1.2 - 1.3]
  • New features
    • Versions for Java 1.2, 1.3, and 5.0 available! The 5.0 version matches the performance of java.util.concurrent.
    • Unit tests now support JUnit's graphical interface.
    • Added missing methods in TimeUnit to fully emulate enumeration functionality. Patch contributed by Andy Gerwick.
    • A few small optimizations: better hash function in ConcurrentHashMap, better toArray in views of ConcurrentSkipListMap
    • Many Javadoc clarifications, following JSR 166.
  • Bug fixes
    • Reconcillation with JSR 166 code base: refactored thread pools, fixing many minor problems, including 6440728, 6435792, improve shutdownNow guarantees, Don't create thread when terminated, Make isTerminating match spec, Preserve core pool size when tasks encounter exceptions, Distinguish throws of RuntimeExceptions vs Errors.
    • Class CheckedMap not serializable. Thanks to Xavier Le Vourch for finding the bug and contributing the fix.
    • Subtle inconsistency with JSR166 in what type of exception is thrown when one tries to release non-owned RRWL. Thanks to Jesse Wilson for reporting this bug.
    • Missing signals in condition.awaitUninterruptibly on some platforms. Thanks to Piccand Régis for reporting this bug.
Version 2.2 (Jun 4, 2006) [CVS log]
  • New features
    • The backport now compiles under Java 5.0.
    • Enhancements in the Navigable[Map,Set] interfaces.
    • Blocking atomic multi-acquires in fair semaphores.
    • Javadoc enhancements (reconciled with recent java.util.concurrent).
    • Shutdown upon finalization for factory-created executors.
  • Bug fixes
    • broken type-checked map in Collections. Thanks for Taras Puchko for finding this bug and submitting the fix.
    • Collections.reverseComparator(Comparator) not working properly when null passed as the argument.
  • Tests
    • Updated and reconciled with java.util.concurrent tests.
Version 2.1 (Jan 28, 2006) [CVS log]
  • New features
    • Descending iterators in deques
    • Use newTaskFor() in ExecutionCompletionService.submit()
    • toArray(Object[]) appends null at the end in LinkedBlockingQueue
    • Overflow detection in ReentrantLock
    • ReentrantReadWriteLock: better conformance with JSR 166 by adding public inner classes for ReadLock and WriteLock
    • CopyOnWriteArraySet.equals() optimized towards small sets
    • Snapshot iterators in queues
    • Improved performance of toArray() in several collection classes
    • More collection stuff ported, including new things in Arrays, and base collection classes with toArray() supporting concurrent collections
    • Improved comparison of ScheduledFutureTasks in the ScheduledThreadPoolExecutor
  • Licensing
    • New, public domain implementations for CopyOnWriteArrayList, TreeMap, TreeSet, LinkedList, Collections, Arrays
  • Bug fixes
    • Methods equals() and hashCode() were broken in PriorityQueue. The fix allows PriorityQueues to be used as hash keys.
    • ReentrantReadWriteLock.getWriteHoldCount could return a posititive value even if the write lock was not owned by the inquiring thread
    • Condition variables were not working properly with reentrant locks when the hold count was greater than 1. Await methods were releasing only a single hold, not all of them, as they should
    • Handling of non-comparable entries (which is an erroneous condition) by priority queues has been made more deterministic. (This issue/fix does not affect correctly written programs)
    • Fix of CR 6312056 (ConcurrentHashMap.entrySet().iterator() can return entry with never-existent value)
    • Livelock in Exchanger if used by more than two threads
    • Erroneous behavior of interrupted CyclicBarrier and locks on some (buggy) JVMs (thanks to Yew-Yap Goh for reporting this)
  • Tests
    • New and improved "loops" tests, including CollectionLoops, IteratorLoops, StringMapLoops, TSPExchangerTest, TimeoutExchangerLoops, UnboundedQueueFillEmptyLoops, EntryTest
    • New "serial compatibility" test
Version 2.0_01 (Aug 3, 2005) [CVS log]
  • Compatibility fix: ConcurrentHashMap was no longer inheriting from java.util.AbstractMap, although it was in version 1.1_01. Now it does again.
  • Licensing: new, public-domain implementation of PriorityQueue, and refactoring of backported AbstractMap so that it also contains only the public domain code.
Version 2.0 (Jul 6, 2005) [CVS log]
  • New features
  • Bug fixes
    • Upon deserialization, ReentrantLock, ReentrantReadWriteLock, and Semaphore were potentially in a locked (or even illegal) state, contrary to the javadoc
    • In the fair implementation of ReentrantLock, wait queues of condition variables were not actually fair - they are now
    • LinkedBlockingQueue had potential deadlocks in remove() and toArray(). It has now been replaced by a completely new implementation, based on java.u.c (rather than dl.u.c)
    • Race condition in Condition.awaitUninterruptibly() could cause signals to be missed if they were coinciding with interrupt attempts
  • Tests
    • Updated unit tests for atomics, AbstractQueuedSynchonizer, ConcurrentHashMap, CyclicBarrier, ExecutorCompletionService, LinkedBlockingQueue, ReentrantLock, ReentrantReadWriteLock, ScheduledExecutor, ThreadPoolExecutor
    • New unit tests for ConcurrentLinkedQueue, ConcurrentSkipList[Map,Set], Utils.nanoTime(), LinkedList, Tree[Map,Set]
    • Updated numerous stress tests, and new ones added: CachedThreadPoolLoops, [Collection,Map]WordLoops, CASLoops, and more
Version 1.1_01 (Feb 7, 2005) [CVS log]
  • Bugfix: race condition in the fair implementation of ReentrantLock caused it to occassionally cause IllegalMonitorState exceptions. Non-fair implementation was not affected, however, classes that depend on fair reentrant locks, namely: fair ArrayBlockingQueue, fair SynchronousQueue, and PriorityQueue, were affected. Thanks to Ramesh Nethi for reporting this bug and helping to track it down.
  • Testing: backport has been stress-tested using the "loops" tests (courtesy of Doug Lea and the JSR 166 Expert Group). The tests are included in the development source bundle.
Version 1.1 (Jan 21, 2005) [CVS log]
  • Bugfix: on Windows platforms with Java 1.4.2, the library were sometimes behaving as if timeouts were ignored or misinterpreted, typically resulting in indefinite waits. This resulted from an internal timer overflow that occurred every several hours, and was also manifested as a discontinuity in System.nanoTime() values. The problem would happen if the overflow occurred during blocked timed wait, if additionally a spurious wakeup occurred after the overflow but before timeout in the underlying Object.wait(). This has now been fixed; 1.0_01 users are urged to upgrade to version 1.1. Thanks to Ramesh Nethi for reporting this bug and greatly contributing to tracking it down.
  • Feature: backport has been reconciled with JSR 166 CVS repository on Jan 14, 2005. This results in a handful of new things:
    • New time units: MINUTES, HOURS, and DAYS.
    • allowCoreThreadTimeOut in ThreadPoolExecutor, which enables bounded pools that kills threads if they are idle for too long.
    • ThreadPoolExecutor now handles excessive interruption requests more gracefully (previously, it was reported to be able to crash older JVMs).
    • Deques.
    • Javadoc improvements.
Version 1.0_01 (Dec 28, 2004) [CVS log]
  • Feature: development source bundle with ant scripts allowing to build and test the distribution is now available for download.
  • Feature: emulation of UncaughtExceptionHandler, in class ThreadHelpers.
  • Documentation: improved, more consistent and accurate javadoc.
  • Bugfix: NoClassDefFoundError when using nanoTime() on Java prior to 1.4.2. Thanks to Gabriel Wolosin for reporting this bug.
  • Bugfix: deadlocks in ConcurrentLinkedQueue when drainTo() or clear() was invoked when there was blocked put(). Thanks to Jean Morissette for reporting this bug.
  • Bugfix: minor glitch in Utils.nanoTime() would cause timer to lose accuracy, about 1ns every 11 days, if JVM was running continuously. (Note: as it turned out, the fix itself had a bug; see the log for version 1.1)
Version 1.0 (Dec 1, 2004)
  • Initial revision

Documentation and Support

For more information:

  • Browse Javadoc
  • Consult the original java.util.concurrent documentation and Java 5.0 Concurrency Utilities Overview
  • Check the project Web page for updates.
  • For questions, comments, and discussion, use the Concurrency-Interest mailing list (courtesy of Doug Lea and the JSR 166 Expert Group). Please clearly indicate that your message regards the backport rather than the original JSR 166 API, by prefixing the subject line with "backport: " and including appropriate annotation in the message body. You may also send an e-mail directly to dawid.kurzyniec at gmail.com..


Distributed Computing Laboratory, Emory University
Google, Inc.
backport-util-concurrent-3.1-src/backport-util-concurrent.iml0000644001750700037720000000171110643141777023363 0ustar dawidkdcl backport-util-concurrent-3.1-src/src/0000755001750700037720000000000010643402427016477 5ustar dawidkdclbackport-util-concurrent-3.1-src/src/sun/0000755001750700037720000000000010643402427017304 5ustar dawidkdclbackport-util-concurrent-3.1-src/src/sun/misc/0000755001750700037720000000000010643402427020237 5ustar dawidkdclbackport-util-concurrent-3.1-src/src/sun/misc/Perf.java0000644001750700037720000000134710153210664021777 0ustar dawidkdclpackage sun.misc; /** * Compilation stub for pre-1.4.2 JREs. Thanks to it, the whole backport * package compiles and works with 1.4.2 as well as wih earlier JREs, and takes * advantage of native Perf class when running on 1.4.2 while seamlessly * falling back to System.currentTimeMillis() on previous JREs. This class * should NOT be included in the binary distribution of backport. * * @author Dawid Kurzyniec * @version 1.0 */ public final class Perf { private static final Perf perf = new Perf(); public static Perf getPerf() { return perf; } private Perf() {} public long highResCounter() { return System.currentTimeMillis(); } public long highResFrequency() { return 1000L; } } backport-util-concurrent-3.1-src/src/edu/0000755001750700037720000000000010643402427017254 5ustar dawidkdclbackport-util-concurrent-3.1-src/src/edu/emory/0000755001750700037720000000000010643402427020407 5ustar dawidkdclbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/0000755001750700037720000000000010643402427021666 5ustar dawidkdclbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/0000755001750700037720000000000010643402427023473 5ustar dawidkdclbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/0000755001750700037720000000000010643402427024414 5ustar dawidkdclbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/0000755001750700037720000000000010643402427025371 5ustar dawidkdclbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/0000755001750700037720000000000010643402427027553 5ustar dawidkdclbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/helpers/0000755001750700037720000000000010643402427031215 5ustar dawidkdcl././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/helpers/package.htmlbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/helpers/package.0000644001750700037720000000030610551304747032614 0ustar dawidkdcl Auxiliary and helper classes for backport.util.concurrent, NOT present in java.util.concurrent. ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/helpers/Utils.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/helpers/Utils.ja0000644001750700037720000003425010365512774032645 0ustar dawidkdcl/* * Written by Dawid Kurzyniec, based on code written by Doug Lea with assistance * from members of JCP JSR-166 Expert Group. Released to the public domain, * as explained at http://creativecommons.org/licenses/publicdomain. * * Thanks to Craig Mattocks for suggesting to use sun.misc.Perf. */ package edu.emory.mathcs.backport.java.util.concurrent.helpers; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import java.security.AccessController; import java.security.PrivilegedAction; import java.lang.reflect.Array; import java.util.Iterator; import java.util.Collection; /** *

* This class groups together the functionality of java.util.concurrent that * cannot be fully and reliably implemented in backport, but for which some * form of emulation is possible. *

* Currently, this class contains methods related to nanosecond-precision * timing, particularly via the {@link #nanoTime} method. To measure time * accurately, this method by default uses java.sun.Perf on * JDK1.4.2 and it falls back to System.currentTimeMillis * on earlier JDKs. * * @author Dawid Kurzyniec * @version 1.0 */ public final class Utils { private final static NanoTimer nanoTimer; private final static String providerProp = "edu.emory.mathcs.backport.java.util.concurrent.NanoTimerProvider"; static { NanoTimer timer = null; try { String nanoTimerClassName = (String) AccessController.doPrivileged(new PrivilegedAction() { public Object run() { return System.getProperty(providerProp); } }); if (nanoTimerClassName != null) { Class cls = Class.forName(nanoTimerClassName); timer = (NanoTimer) cls.newInstance(); } } catch (Exception e) { System.err.println("WARNING: unable to load the system-property-defined " + "nanotime provider; switching to the default"); e.printStackTrace(); } if (timer == null) { try { timer = new SunPerfProvider(); } catch (Throwable e) {} } if (timer == null) { timer = new MillisProvider(); } nanoTimer = timer; } private Utils() {} /** * Returns the current value of the most precise available system timer, * in nanoseconds. This method can only be used to measure elapsed time and * is not related to any other notion of system or wall-clock time. The * value returned represents nanoseconds since some fixed but arbitrary * time (perhaps in the future, so values may be negative). This method * provides nanosecond precision, but not necessarily nanosecond accuracy. * No guarantees are made about how frequently values change. Differences * in successive calls that span greater than approximately 292 years * (2^63 nanoseconds) will not accurately compute elapsed time due to * numerical overflow. *

* Implementation note:By default, this method uses * sun.misc.Perf on Java 1.4.2, and falls back to * System.currentTimeMillis() emulation on earlier JDKs. Custom * timer can be provided via the system property * edu.emory.mathcs.backport.java.util.concurrent.NanoTimerProvider. * The value of the property should name a class implementing * {@link NanoTimer} interface. *

* Note: on JDK 1.4.2, sun.misc.Perf timer seems to have * resolution of the order of 1 microsecond, measured on Linux. * * @return The current value of the system timer, in nanoseconds. */ public static long nanoTime() { return nanoTimer.nanoTime(); } /** * Causes the current thread to wait until it is signalled or interrupted, * or the specified waiting time elapses. This method originally appears * in the {@link Condition} interface, but it was moved to here since it * can only be emulated, with very little accuracy guarantees: the * efficient implementation requires accurate nanosecond timer and native * support for nanosecond-precision wait queues, which are not usually * present in JVMs prior to 1.5. Loss of precision may cause total waiting * times to be systematically shorter than specified when re-waits occur. * *

The lock associated with this condition is atomically * released and the current thread becomes disabled for thread scheduling * purposes and lies dormant until one of five things happens: *

    *
  • Some other thread invokes the {@link * edu.emory.mathcs.backport.java.util.concurrent.locks.Condition#signal} * method for this * Condition and the current thread happens to be chosen as the * thread to be awakened; or *
  • Some other thread invokes the {@link * edu.emory.mathcs.backport.java.util.concurrent.locks.Condition#signalAll} * method for this * Condition; or *
  • Some other thread {@link Thread#interrupt interrupts} the current * thread, and interruption of thread suspension is supported; or *
  • The specified waiting time elapses; or *
  • A "spurious wakeup" occurs. *
* *

In all cases, before this method can return the current thread must * re-acquire the lock associated with this condition. When the * thread returns it is guaranteed to hold this lock. * *

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@link Thread#interrupt interrupted} while waiting * and interruption of thread suspension is supported, *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. It is not specified, in the first * case, whether or not the test for interruption occurs before the lock * is released. * *

The method returns an estimate of the number of nanoseconds * remaining to wait given the supplied nanosTimeout * value upon return, or a value less than or equal to zero if it * timed out. Accuracy of this estimate is directly dependent on the * accuracy of {@link #nanoTime}. This value can be used to determine * whether and how long to re-wait in cases where the wait returns but an * awaited condition still does not hold. Typical uses of this method take * the following form: * *

     * synchronized boolean aMethod(long timeout, TimeUnit unit) {
     *   long nanosTimeout = unit.toNanos(timeout);
     *   while (!conditionBeingWaitedFor) {
     *     if (nanosTimeout > 0)
     *         nanosTimeout = theCondition.awaitNanos(nanosTimeout);
     *      else
     *        return false;
     *   }
     *   // ...
     * }
     * 
* *

Implementation Considerations *

The current thread is assumed to hold the lock associated with this * Condition when this method is called. * It is up to the implementation to determine if this is * the case and if not, how to respond. Typically, an exception will be * thrown (such as {@link IllegalMonitorStateException}) and the * implementation must document that fact. * *

A condition implementation can favor responding to an interrupt over * normal method return in response to a signal, or over indicating the * elapse of the specified waiting time. In either case the implementation * must ensure that the signal is redirected to another waiting thread, if * there is one. * * @param cond the condition to wait for * @param nanosTimeout the maximum time to wait, in nanoseconds * @return A value less than or equal to zero if the wait has * timed out; otherwise an estimate, that * is strictly less than the nanosTimeout argument, * of the time still remaining when this method returned. * * @throws InterruptedException if the current thread is interrupted (and * interruption of thread suspension is supported). */ public static long awaitNanos(Condition cond, long nanosTimeout) throws InterruptedException { if (nanosTimeout <= 0) return nanosTimeout; long now = nanoTime(); cond.await(nanosTimeout, TimeUnit.NANOSECONDS); return nanosTimeout - (nanoTime() - now); } private static final class SunPerfProvider implements NanoTimer { final sun.misc.Perf perf; final long multiplier, divisor; SunPerfProvider() { perf = (sun.misc.Perf) AccessController.doPrivileged(new PrivilegedAction() { public Object run() { return sun.misc.Perf.getPerf(); } }); // trying to avoid BOTH overflow and rounding errors long numerator = 1000000000; long denominator = perf.highResFrequency(); long gcd = gcd(numerator, denominator); this.multiplier = numerator / gcd; this.divisor = denominator / gcd; } public long nanoTime() { long ctr = perf.highResCounter(); // anything less sophisticated suffers either from rounding errors // (FP arithmetics, backport v1.0) or overflow, when gcd is small // (a bug in backport v1.0_01 reported by Ramesh Nethi) return ((ctr / divisor) * multiplier) + (ctr % divisor) * multiplier / divisor; // even the above can theoretically cause problems if your JVM is // running for sufficiently long time, but "sufficiently" means 292 // years (worst case), or 30,000 years (common case). // Details: when the ticks ctr overflows, there is no way to avoid // discontinuity in computed nanos, even in infinite arithmetics, // unless we count number of overflows that the ctr went through // since the JVM started. This follows from the fact that // (2^64*multiplier/divisor) mod (2^64) > 0 in general case. // Theoretically we could find out the number of overflows by // checking System.currentTimeMillis(), but this is unreliable // since the system time can unpredictably change during the JVM // lifetime. // The time to overflow is 2^63 / ticks frequency. With current // ticks frequencies of several MHz, it gives about 30,000 years // before the problem happens. If ticks frequency reaches 1 GHz, the // time to overflow is 292 years. It is unlikely that the frequency // ever exceeds 1 GHz. We could double the time to overflow // (to 2^64 / frequency) by using unsigned arithmetics, e.g. by // adding the following correction whenever the ticks is negative: // -2*((Long.MIN_VALUE / divisor) * multiplier + // (Long.MIN_VALUE % divisor) * multiplier / divisor) // But, with the worst case of as much as 292 years, it does not // seem justified. } } private static final class MillisProvider implements NanoTimer { MillisProvider() {} public long nanoTime() { return System.currentTimeMillis() * 1000000; } } private static long gcd(long a, long b) { long r; while (b>0) { r = a % b; a = b; b = r; } return a; } public static Object[] collectionToArray(Collection c) { // guess the array size; expect to possibly be different int len = c.size(); Object[] arr = new Object[len]; Iterator itr = c.iterator(); int idx = 0; while (true) { while (idx < len && itr.hasNext()) { arr[idx++] = itr.next(); } if (!itr.hasNext()) { if (idx == len) return arr; // otherwise have to trim return Arrays.copyOf(arr, idx, Object[].class); } // otherwise, have to grow int newcap = ((arr.length/2)+1)*3; if (newcap < arr.length) { // overflow if (arr.length < Integer.MAX_VALUE) { newcap = Integer.MAX_VALUE; } else { throw new OutOfMemoryError("required array size too large"); } } arr = Arrays.copyOf(arr, newcap, Object[].class); len = newcap; } } public static Object[] collectionToArray(Collection c, Object[] a) { Class aType = a.getClass(); // guess the array size; expect to possibly be different int len = c.size(); Object[] arr = (a.length >= len ? a : (Object[])Array.newInstance(aType.getComponentType(), len)); Iterator itr = c.iterator(); int idx = 0; while (true) { while (idx < len && itr.hasNext()) { arr[idx++] = itr.next(); } if (!itr.hasNext()) { if (idx == len) return arr; if (arr == a) { // orig array -> null terminate a[idx] = null; return a; } else { // have to trim return Arrays.copyOf(arr, idx, aType); } } // otherwise, have to grow int newcap = ((arr.length/2)+1)*3; if (newcap < arr.length) { // overflow if (arr.length < Integer.MAX_VALUE) { newcap = Integer.MAX_VALUE; } else { throw new OutOfMemoryError("required array size too large"); } } arr = Arrays.copyOf(arr, newcap, aType); len = newcap; } } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/helpers/ThreadHelpers.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/helpers/ThreadHe0000644001750700037720000000470110164344645032633 0ustar dawidkdcl/* * Written by Dawid Kurzyniec and released to the public domain, as explained * at http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.helpers; /** * Emulation of some new functionality present in java.lang.Thread in J2SE 5.0. * * @author Dawid Kurzyniec * @version 1.0 */ public class ThreadHelpers { private ThreadHelpers() {} /** * Returns wrapped runnable that ensures that if an exception occurs * during the execution, the specified exception handler is invoked. * @param runnable runnable for which exceptions are to be intercepted * @param handler the exception handler to call when exception occurs * during execution of the given runnable * @return wrapped runnable */ public static Runnable assignExceptionHandler(final Runnable runnable, final UncaughtExceptionHandler handler) { if (runnable == null || handler == null) { throw new NullPointerException(); } return new Runnable() { public void run() { try { runnable.run(); } catch (Throwable error) { try { handler.uncaughtException(Thread.currentThread(), error); } catch (Throwable ignore) {} } } }; } /** * Abstraction of the exception handler which receives notifications of * exceptions occurred possibly in various parts of the system. Exception * handlers present attractive approach to exception handling in multi-threaded * systems, as they can handle exceptions that occurred in different threads. *

* This class is analogous to Thread.UncaughtExceptionHandler in J2SE 5.0. * Obviously you cannot use it the same way, e.g. you cannot assign the * handler to the thread so that it is invoked when thread terminates. * However, it can be {@link ThreadHelpers#assignExceptionHandler emulated}. */ public static interface UncaughtExceptionHandler { /** * Notification of the uncaught exception that occurred within specified * thread. * @param thread the thread where the exception occurred * @param error the exception */ void uncaughtException(Thread thread, Throwable error); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/helpers/WaitQueue.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/helpers/WaitQueu0000644001750700037720000001173310431405567032714 0ustar dawidkdcl/* based on file: QueuedSemaphore.java Originally written by Doug Lea and released into the public domain. This may be used for any purposes whatsoever without acknowledgment. Thanks for the assistance and support of Sun Microsystems Labs, and everyone contributing, testing, and using this code. History: Date Who What 11Jun1998 dl Create public version 5Aug1998 dl replaced int counters with longs 24Aug1999 dl release(n): screen arguments */ package edu.emory.mathcs.backport.java.util.concurrent.helpers; import java.util.Collection; import edu.emory.mathcs.backport.java.util.concurrent.*; /** * Base class for internal queue classes for semaphores, etc. * Relies on subclasses to actually implement queue mechanics. * NOTE: this class is NOT present in java.util.concurrent. **/ public abstract class WaitQueue { public abstract void insert(WaitNode w); // assumed not to block public abstract WaitNode extract(); // should return null if empty public abstract void putBack(WaitNode w); public abstract boolean hasNodes(); public abstract int getLength(); public abstract Collection getWaitingThreads(); public abstract boolean isWaiting(Thread thread); public static interface QueuedSync { // invoked with sync on wait node, (atomically) just before enqueuing boolean recheck(WaitNode node); // invoked with sync on wait node, (atomically) just before signalling void takeOver(WaitNode node); } public static class WaitNode { boolean waiting = true; WaitNode next = null; final Thread owner; public WaitNode() { this.owner = Thread.currentThread(); } public Thread getOwner() { return owner; } public synchronized boolean signal(QueuedSync sync) { boolean signalled = waiting; if (signalled) { waiting = false; notify(); sync.takeOver(this); } return signalled; } public synchronized boolean doTimedWait(QueuedSync sync, long nanos) throws InterruptedException { if (sync.recheck(this) || !waiting) return true; else if (nanos <= 0) { waiting = false; return false; } else { long deadline = Utils.nanoTime() + nanos; try { for (; ; ) { TimeUnit.NANOSECONDS.timedWait(this, nanos); if (!waiting) // definitely signalled return true; else { nanos = deadline - Utils.nanoTime(); if (nanos <= 0) { // timed out waiting = false; return false; } } } } catch (InterruptedException ex) { if (waiting) { // no notification waiting = false; // invalidate for the signaller throw ex; } else { // thread was interrupted after it was notified Thread.currentThread().interrupt(); return true; } } } } public synchronized void doWait(QueuedSync sync) throws InterruptedException { if (!sync.recheck(this)) { try { while (waiting) wait(); } catch (InterruptedException ex) { if (waiting) { // no notification waiting = false; // invalidate for the signaller throw ex; } else { // thread was interrupted after it was notified Thread.currentThread().interrupt(); return; } } } } public synchronized void doWaitUninterruptibly(QueuedSync sync) { if (!sync.recheck(this)) { boolean wasInterrupted = Thread.interrupted(); try { while (waiting) { try { wait(); } catch (InterruptedException ex) { wasInterrupted = true; // no need to notify; if we were signalled, we // must be not waiting, and we'll act like signalled } } } finally { if (wasInterrupted) Thread.currentThread().interrupt(); } } } } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/helpers/FIFOWaitQueue.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/helpers/FIFOWait0000644001750700037720000000414510432751727032522 0ustar dawidkdclpackage edu.emory.mathcs.backport.java.util.concurrent.helpers; import java.util.Collection; import java.util.ArrayList; import java.util.List; /** * Simple linked list queue used in FIFOSemaphore. * Methods are not synchronized; they depend on synch of callers. * Must be public, since it is used by Semaphore (outside this package). * NOTE: this class is NOT present in java.util.concurrent. **/ public class FIFOWaitQueue extends WaitQueue implements java.io.Serializable { private final static long serialVersionUID = 2416444691925378811L; protected transient WaitNode head_ = null; protected transient WaitNode tail_ = null; public FIFOWaitQueue() {} public void insert(WaitNode w) { if (tail_ == null) head_ = tail_ = w; else { tail_.next = w; tail_ = w; } } public WaitNode extract() { if (head_ == null) return null; else { WaitNode w = head_; head_ = w.next; if (head_ == null) tail_ = null; w.next = null; return w; } } public void putBack(WaitNode w) { w.next = head_; head_ = w; if (tail_ == null) tail_ = w; } public boolean hasNodes() { return head_ != null; } public int getLength() { int count = 0; WaitNode node = head_; while (node != null) { if (node.waiting) count++; node = node.next; } return count; } public Collection getWaitingThreads() { List list = new ArrayList(); int count = 0; WaitNode node = head_; while (node != null) { if (node.waiting) list.add(node.owner); node = node.next; } return list; } public boolean isWaiting(Thread thread) { if (thread == null) throw new NullPointerException(); for (WaitNode node = head_; node != null; node = node.next) { if (node.waiting && node.owner == thread) return true; } return false; } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/helpers/NanoTimer.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/helpers/NanoTime0000644001750700037720000000224010153210664032644 0ustar dawidkdcl/* * Written by Dawid Kurzyniec and released to the public domain, as explained * at http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.helpers; /** * Interface to specify custom implementation of precise timer. * * @author Dawid Kurzyniec * @version 1.0 */ public interface NanoTimer { /** * Returns the current value of the most precise available system timer, * in nanoseconds. This method can only be used to measure elapsed time and * is not related to any other notion of system or wall-clock time. The * value returned represents nanoseconds since some fixed but arbitrary * time (perhaps in the future, so values may be negative). This method * provides nanosecond precision, but not necessarily nanosecond accuracy. * No guarantees are made about how frequently values change. Differences * in successive calls that span greater than approximately 292 years * (263 nanoseconds) will not accurately compute elapsed time due to * numerical overflow. * * @return The current value of the system timer, in nanoseconds. */ long nanoTime(); } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/0000755001750700037720000000000010643402427030666 5ustar dawidkdcl././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/ReadWriteLock.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/ReadWriteL0000644001750700037720000001135510262044454032617 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.locks; /** * A ReadWriteLock maintains a pair of associated {@link * Lock locks}, one for read-only operations and one for writing. * The {@link #readLock read lock} may be held simultaneously by * multiple reader threads, so long as there are no writers. The * {@link #writeLock write lock} is exclusive. * *

All ReadWriteLock implementations must guarantee that * the memory synchronization effects of writeLock operations * (as specified in the {@link Lock} interface) also hold with respect * to the associated readLock. That is, a thread successfully * acquiring the read lock will see all updates made upon previous * release of the write lock. * *

A read-write lock allows for a greater level of concurrency in * accessing shared data than that permitted by a mutual exclusion lock. * It exploits the fact that while only a single thread at a time (a * writer thread) can modify the shared data, in many cases any * number of threads can concurrently read the data (hence reader * threads). * In theory, the increase in concurrency permitted by the use of a read-write * lock will lead to performance improvements over the use of a mutual * exclusion lock. In practice this increase in concurrency will only be fully * realized on a multi-processor, and then only if the access patterns for * the shared data are suitable. * *

Whether or not a read-write lock will improve performance over the use * of a mutual exclusion lock depends on the frequency that the data is * read compared to being modified, the duration of the read and write * operations, and the contention for the data - that is, the number of * threads that will try to read or write the data at the same time. * For example, a collection that is initially populated with data and * thereafter infrequently modified, while being frequently searched * (such as a directory of some kind) is an ideal candidate for the use of * a read-write lock. However, if updates become frequent then the data * spends most of its time being exclusively locked and there is little, if any * increase in concurrency. Further, if the read operations are too short * the overhead of the read-write lock implementation (which is inherently * more complex than a mutual exclusion lock) can dominate the execution * cost, particularly as many read-write lock implementations still serialize * all threads through a small section of code. Ultimately, only profiling * and measurement will establish whether the use of a read-write lock is * suitable for your application. * * *

Although the basic operation of a read-write lock is straight-forward, * there are many policy decisions that an implementation must make, which * may affect the effectiveness of the read-write lock in a given application. * Examples of these policies include: *

    *
  • Determining whether to grant the read lock or the write lock, when * both readers and writers are waiting, at the time that a writer releases * the write lock. Writer preference is common, as writes are expected to be * short and infrequent. Reader preference is less common as it can lead to * lengthy delays for a write if the readers are frequent and long-lived as * expected. Fair, or "in-order" implementations are also possible. * *
  • Determining whether readers that request the read lock while a * reader is active and a writer is waiting, are granted the read lock. * Preference to the reader can delay the writer indefinitely, while * preference to the writer can reduce the potential for concurrency. * *
  • Determining whether the locks are reentrant: can a thread with the * write lock reacquire it? Can it acquire a read lock while holding the * write lock? Is the read lock itself reentrant? * *
  • Can the write lock be downgraded to a read lock without allowing * an intervening writer? Can a read lock be upgraded to a write lock, * in preference to other waiting readers or writers? * *
* You should consider all of these things when evaluating the suitability * of a given implementation for your application. * * @see ReentrantReadWriteLock * @see Lock * @see ReentrantLock * * @since 1.5 * @author Doug Lea */ public interface ReadWriteLock { /** * Returns the lock used for reading. * * @return the lock used for reading. */ Lock readLock(); /** * Returns the lock used for writing. * * @return the lock used for writing. */ Lock writeLock(); } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/FIFOCondVar.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/FIFOCondVa0000644001750700037720000001110710431260156032423 0ustar dawidkdcl/* File: ConditionVariable.java Originally written by Doug Lea and released into the public domain. This may be used for any purposes whatsoever without acknowledgment. Thanks for the assistance and support of Sun Microsystems Labs, and everyone contributing, testing, and using this code. History: Date Who What 11Jun1998 dl Create public version */ package edu.emory.mathcs.backport.java.util.concurrent.locks; import java.util.Collection; import java.util.Date; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; class FIFOCondVar extends CondVar implements Condition, java.io.Serializable { private static final WaitQueue.QueuedSync sync = new WaitQueue.QueuedSync() { public boolean recheck(WaitQueue.WaitNode node) { return false; } public void takeOver(WaitQueue.WaitNode node) {} }; // wait queue; only accessed when holding the lock private final WaitQueue wq = new FIFOWaitQueue(); /** * Create a new CondVar that relies on the given mutual exclusion lock. * @param lock A non-reentrant mutual exclusion lock. */ FIFOCondVar(ExclusiveLock lock) { super(lock); } public void awaitUninterruptibly() { int holdCount = lock.getHoldCount(); if (holdCount == 0) { throw new IllegalMonitorStateException(); } WaitQueue.WaitNode n = new WaitQueue.WaitNode(); wq.insert(n); for (int i=holdCount; i>0; i--) lock.unlock(); try { n.doWaitUninterruptibly(sync); } finally { for (int i=holdCount; i>0; i--) lock.lock(); } } public void await() throws InterruptedException { int holdCount = lock.getHoldCount(); if (holdCount == 0) { throw new IllegalMonitorStateException(); } if (Thread.interrupted()) throw new InterruptedException(); WaitQueue.WaitNode n = new WaitQueue.WaitNode(); wq.insert(n); for (int i=holdCount; i>0; i--) lock.unlock(); try { n.doWait(sync); } finally { for (int i=holdCount; i>0; i--) lock.lock(); } } public boolean await(long timeout, TimeUnit unit) throws InterruptedException { int holdCount = lock.getHoldCount(); if (holdCount == 0) { throw new IllegalMonitorStateException(); } if (Thread.interrupted()) throw new InterruptedException(); long nanos = unit.toNanos(timeout); WaitQueue.WaitNode n = new WaitQueue.WaitNode(); wq.insert(n); boolean success = false; for (int i=holdCount; i>0; i--) lock.unlock(); try { success = n.doTimedWait(sync, nanos); } finally { for (int i=holdCount; i>0; i--) lock.lock(); } return success; } // public long awaitNanos(long timeout) throws InterruptedException { // throw new UnsupportedOperationException(); // } // public boolean awaitUntil(Date deadline) throws InterruptedException { if (deadline == null) throw new NullPointerException(); long abstime = deadline.getTime(); long start = System.currentTimeMillis(); long msecs = abstime - start; return await(msecs, TimeUnit.MILLISECONDS); } public void signal() { if (!lock.isHeldByCurrentThread()) { throw new IllegalMonitorStateException(); } for (;;) { WaitQueue.WaitNode w = wq.extract(); if (w == null) return; // no one to signal if (w.signal(sync)) return; // notify if still waiting, else skip } } public void signalAll() { if (!lock.isHeldByCurrentThread()) { throw new IllegalMonitorStateException(); } for (;;) { WaitQueue.WaitNode w = wq.extract(); if (w == null) return; // no more to signal w.signal(sync); } } protected boolean hasWaiters() { if (!lock.isHeldByCurrentThread()) { throw new IllegalMonitorStateException(); } return wq.hasNodes(); } protected int getWaitQueueLength() { if (!lock.isHeldByCurrentThread()) { throw new IllegalMonitorStateException(); } return wq.getLength(); } protected Collection getWaitingThreads() { if (!lock.isHeldByCurrentThread()) { throw new IllegalMonitorStateException(); } return wq.getWaitingThreads(); } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/Condition.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/Condition.0000644001750700037720000004660710431777052032636 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.locks; import edu.emory.mathcs.backport.java.util.concurrent.*; import java.util.Date; /** * {@code Condition} factors out the {@code Object} monitor * methods ({@link Object#wait() wait}, {@link Object#notify notify} * and {@link Object#notifyAll notifyAll}) into distinct objects to * give the effect of having multiple wait-sets per object, by * combining them with the use of arbitrary {@link Lock} implementations. * Where a {@code Lock} replaces the use of {@code synchronized} methods * and statements, a {@code Condition} replaces the use of the Object * monitor methods. * *

Conditions (also known as condition queues or * condition variables) provide a means for one thread to * suspend execution (to "wait") until notified by another * thread that some state condition may now be true. Because access * to this shared state information occurs in different threads, it * must be protected, so a lock of some form is associated with the * condition. The key property that waiting for a condition provides * is that it atomically releases the associated lock and * suspends the current thread, just like {@code Object.wait}. * *

A {@code Condition} instance is intrinsically bound to a lock. * To obtain a {@code Condition} instance for a particular {@link Lock} * instance use its {@link Lock#newCondition newCondition()} method. * *

As an example, suppose we have a bounded buffer which supports * {@code put} and {@code take} methods. If a * {@code take} is attempted on an empty buffer, then the thread will block * until an item becomes available; if a {@code put} is attempted on a * full buffer, then the thread will block until a space becomes available. * We would like to keep waiting {@code put} threads and {@code take} * threads in separate wait-sets so that we can use the optimization of * only notifying a single thread at a time when items or spaces become * available in the buffer. This can be achieved using two * {@link Condition} instances. *

 * class BoundedBuffer {
 *   final Lock lock = new ReentrantLock();
 *   final Condition notFull  = lock.newCondition(); 
 *   final Condition notEmpty = lock.newCondition(); 
 *
 *   final Object[] items = new Object[100];
 *   int putptr, takeptr, count;
 *
 *   public void put(Object x) throws InterruptedException {
 *     lock.lock();
 *     try {
 *       while (count == items.length)
 *         notFull.await();
 *       items[putptr] = x;
 *       if (++putptr == items.length) putptr = 0;
 *       ++count;
 *       notEmpty.signal();
 *     } finally {
 *       lock.unlock();
 *     }
 *   }
 *
 *   public Object take() throws InterruptedException {
 *     lock.lock();
 *     try {
 *       while (count == 0)
 *         notEmpty.await();
 *       Object x = items[takeptr];
 *       if (++takeptr == items.length) takeptr = 0;
 *       --count;
 *       notFull.signal();
 *       return x;
 *     } finally {
 *       lock.unlock();
 *     }
 *   }
 * }
 * 
* * (The {@link edu.emory.mathcs.backport.java.util.concurrent.ArrayBlockingQueue} class provides * this functionality, so there is no reason to implement this * sample usage class.) * *

A {@code Condition} implementation can provide behavior and semantics * that is * different from that of the {@code Object} monitor methods, such as * guaranteed ordering for notifications, or not requiring a lock to be held * when performing notifications. * If an implementation provides such specialized semantics then the * implementation must document those semantics. * *

Note that {@code Condition} instances are just normal objects and can * themselves be used as the target in a {@code synchronized} statement, * and can have their own monitor {@link Object#wait wait} and * {@link Object#notify notification} methods invoked. * Acquiring the monitor lock of a {@code Condition} instance, or using its * monitor methods, has no specified relationship with acquiring the * {@link Lock} associated with that {@code Condition} or the use of its * {@linkplain #await waiting} and {@linkplain #signal signalling} methods. * It is recommended that to avoid confusion you never use {@code Condition} * instances in this way, except perhaps within their own implementation. * *

Except where noted, passing a {@code null} value for any parameter * will result in a {@link NullPointerException} being thrown. * *

Implementation Considerations

* *

When waiting upon a {@code Condition}, a "spurious * wakeup" is permitted to occur, in * general, as a concession to the underlying platform semantics. * This has little practical impact on most application programs as a * {@code Condition} should always be waited upon in a loop, testing * the state predicate that is being waited for. An implementation is * free to remove the possibility of spurious wakeups but it is * recommended that applications programmers always assume that they can * occur and so always wait in a loop. * *

The three forms of condition waiting * (interruptible, non-interruptible, and timed) may differ in their ease of * implementation on some platforms and in their performance characteristics. * In particular, it may be difficult to provide these features and maintain * specific semantics such as ordering guarantees. * Further, the ability to interrupt the actual suspension of the thread may * not always be feasible to implement on all platforms. * *

Consequently, an implementation is not required to define exactly the * same guarantees or semantics for all three forms of waiting, nor is it * required to support interruption of the actual suspension of the thread. * *

An implementation is required to * clearly document the semantics and guarantees provided by each of the * waiting methods, and when an implementation does support interruption of * thread suspension then it must obey the interruption semantics as defined * in this interface. * *

As interruption generally implies cancellation, and checks for * interruption are often infrequent, an implementation can favor responding * to an interrupt over normal method return. This is true even if it can be * shown that the interrupt occurred after another action may have unblocked * the thread. An implementation should document this behavior. * * @since 1.5 * @author Doug Lea */ public interface Condition { /** * Causes the current thread to wait until it is signalled or * {@linkplain Thread#interrupt interrupted}. * *

The lock associated with this {@code Condition} is atomically * released and the current thread becomes disabled for thread scheduling * purposes and lies dormant until one of four things happens: *

    *
  • Some other thread invokes the {@link #signal} method for this * {@code Condition} and the current thread happens to be chosen as the * thread to be awakened; or *
  • Some other thread invokes the {@link #signalAll} method for this * {@code Condition}; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} the * current thread, and interruption of thread suspension is supported; or *
  • A "spurious wakeup" occurs. *
* *

In all cases, before this method can return the current thread must * re-acquire the lock associated with this condition. When the * thread returns it is guaranteed to hold this lock. * *

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@linkplain Thread#interrupt interrupted} while waiting * and interruption of thread suspension is supported, *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. It is not specified, in the first * case, whether or not the test for interruption occurs before the lock * is released. * *

Implementation Considerations * *

The current thread is assumed to hold the lock associated with this * {@code Condition} when this method is called. * It is up to the implementation to determine if this is * the case and if not, how to respond. Typically, an exception will be * thrown (such as {@link IllegalMonitorStateException}) and the * implementation must document that fact. * *

An implementation can favor responding to an interrupt over normal * method return in response to a signal. In that case the implementation * must ensure that the signal is redirected to another waiting thread, if * there is one. * * @throws InterruptedException if the current thread is interrupted * (and interruption of thread suspension is supported) */ void await() throws InterruptedException; /** * Causes the current thread to wait until it is signalled. * *

The lock associated with this condition is atomically * released and the current thread becomes disabled for thread scheduling * purposes and lies dormant until one of three things happens: *

    *
  • Some other thread invokes the {@link #signal} method for this * {@code Condition} and the current thread happens to be chosen as the * thread to be awakened; or *
  • Some other thread invokes the {@link #signalAll} method for this * {@code Condition}; or *
  • A "spurious wakeup" occurs. *
* *

In all cases, before this method can return the current thread must * re-acquire the lock associated with this condition. When the * thread returns it is guaranteed to hold this lock. * *

If the current thread's interrupted status is set when it enters * this method, or it is {@linkplain Thread#interrupt interrupted} * while waiting, it will continue to wait until signalled. When it finally * returns from this method its interrupted status will still * be set. * *

Implementation Considerations * *

The current thread is assumed to hold the lock associated with this * {@code Condition} when this method is called. * It is up to the implementation to determine if this is * the case and if not, how to respond. Typically, an exception will be * thrown (such as {@link IllegalMonitorStateException}) and the * implementation must document that fact. */ void awaitUninterruptibly(); // /** // * Causes the current thread to wait until it is signalled or interrupted, // * or the specified waiting time elapses. // * // *

The lock associated with this condition is atomically // * released and the current thread becomes disabled for thread scheduling // * purposes and lies dormant until one of five things happens: // *

    // *
  • Some other thread invokes the {@link #signal} method for this // * Condition and the current thread happens to be chosen as the // * thread to be awakened; or // *
  • Some other thread invokes the {@link #signalAll} method for this // * Condition; or // *
  • Some other thread {@link Thread#interrupt interrupts} the current // * thread, and interruption of thread suspension is supported; or // *
  • The specified waiting time elapses; or // *
  • A "spurious wakeup" occurs. // *
// * // *

In all cases, before this method can return the current thread must // * re-acquire the lock associated with this condition. When the // * thread returns it is guaranteed to hold this lock. // * // *

If the current thread: // *

    // *
  • has its interrupted status set on entry to this method; or // *
  • is {@link Thread#interrupt interrupted} while waiting // * and interruption of thread suspension is supported, // *
// * then {@link InterruptedException} is thrown and the current thread's // * interrupted status is cleared. It is not specified, in the first // * case, whether or not the test for interruption occurs before the lock // * is released. // * // *

The method returns an estimate of the number of nanoseconds // * remaining to wait given the supplied nanosTimeout // * value upon return, or a value less than or equal to zero if it // * timed out. This value can be used to determine whether and how // * long to re-wait in cases where the wait returns but an awaited // * condition still does not hold. Typical uses of this method take // * the following form: // * // *

//     * synchronized boolean aMethod(long timeout, TimeUnit unit) {
//     *   long nanosTimeout = unit.toNanos(timeout);
//     *   while (!conditionBeingWaitedFor) {
//     *     if (nanosTimeout > 0)
//     *         nanosTimeout = theCondition.awaitNanos(nanosTimeout);
//     *      else
//     *        return false;
//     *   }
//     *   // ...
//     * }
//     * 
// * // *

Design note: This method requires a nanosecond argument so // * as to avoid truncation errors in reporting remaining times. // * Such precision loss would make it difficult for programmers to // * ensure that total waiting times are not systematically shorter // * than specified when re-waits occur. // * // *

Implementation Considerations // *

The current thread is assumed to hold the lock associated with this // * Condition when this method is called. // * It is up to the implementation to determine if this is // * the case and if not, how to respond. Typically, an exception will be // * thrown (such as {@link IllegalMonitorStateException}) and the // * implementation must document that fact. // * // *

An implementation can favor responding to an interrupt over normal // * method return in response to a signal, or over indicating the elapse // * of the specified waiting time. In either case the implementation // * must ensure that the signal is redirected to another waiting thread, if // * there is one. // * // * @param nanosTimeout the maximum time to wait, in nanoseconds // * @return A value less than or equal to zero if the wait has // * timed out; otherwise an estimate, that // * is strictly less than the nanosTimeout argument, // * of the time still remaining when this method returned. // * // * @throws InterruptedException if the current thread is interrupted (and // * interruption of thread suspension is supported). // */ // long awaitNanos(long nanosTimeout) throws InterruptedException; /** * Causes the current thread to wait until it is signalled or interrupted, * or the specified waiting time elapses. This method is behaviorally * equivalent to:
*

     *   awaitNanos(unit.toNanos(time)) > 0
     * 
* @param time the maximum time to wait * @param unit the time unit of the {@code time} argument * @return {@code false} if the waiting time detectably elapsed * before return from the method, else {@code true} * @throws InterruptedException if the current thread is interrupted * (and interruption of thread suspension is supported) */ boolean await(long time, TimeUnit unit) throws InterruptedException; /** * Causes the current thread to wait until it is signalled or interrupted, * or the specified deadline elapses. * *

The lock associated with this condition is atomically * released and the current thread becomes disabled for thread scheduling * purposes and lies dormant until one of five things happens: *

    *
  • Some other thread invokes the {@link #signal} method for this * {@code Condition} and the current thread happens to be chosen as the * thread to be awakened; or *
  • Some other thread invokes the {@link #signalAll} method for this * {@code Condition}; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} the * current thread, and interruption of thread suspension is supported; or *
  • The specified deadline elapses; or *
  • A "spurious wakeup" occurs. *
* *

In all cases, before this method can return the current thread must * re-acquire the lock associated with this condition. When the * thread returns it is guaranteed to hold this lock. * * *

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@linkplain Thread#interrupt interrupted} while waiting * and interruption of thread suspension is supported, *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. It is not specified, in the first * case, whether or not the test for interruption occurs before the lock * is released. * * *

The return value indicates whether the deadline has elapsed, * which can be used as follows: *

     * synchronized boolean aMethod(Date deadline) {
     *   boolean stillWaiting = true;
     *   while (!conditionBeingWaitedFor) {
     *     if (stillWaiting)
     *         stillWaiting = theCondition.awaitUntil(deadline);
     *      else
     *        return false;
     *   }
     *   // ...
     * }
     * 
* *

Implementation Considerations * *

The current thread is assumed to hold the lock associated with this * {@code Condition} when this method is called. * It is up to the implementation to determine if this is * the case and if not, how to respond. Typically, an exception will be * thrown (such as {@link IllegalMonitorStateException}) and the * implementation must document that fact. * *

An implementation can favor responding to an interrupt over normal * method return in response to a signal, or over indicating the passing * of the specified deadline. In either case the implementation * must ensure that the signal is redirected to another waiting thread, if * there is one. * * @param deadline the absolute time to wait until * @return {@code false} if the deadline has elapsed upon return, else * {@code true} * @throws InterruptedException if the current thread is interrupted * (and interruption of thread suspension is supported) */ boolean awaitUntil(Date deadline) throws InterruptedException; /** * Wakes up one waiting thread. * *

If any threads are waiting on this condition then one * is selected for waking up. That thread must then re-acquire the * lock before returning from {@code await}. */ void signal(); /** * Wakes up all waiting threads. * *

If any threads are waiting on this condition then they are * all woken up. Each thread must re-acquire the lock before it can * return from {@code await}. */ void signalAll(); } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/Lock.java0000644001750700037720000003353410431774517032440 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.locks; import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit; /** * {@code Lock} implementations provide more extensive locking * operations than can be obtained using {@code synchronized} methods * and statements. They allow more flexible structuring, may have * quite different properties, and may support multiple associated * {@link Condition} objects. * *

A lock is a tool for controlling access to a shared resource by * multiple threads. Commonly, a lock provides exclusive access to a * shared resource: only one thread at a time can acquire the lock and * all access to the shared resource requires that the lock be * acquired first. However, some locks may allow concurrent access to * a shared resource, such as the read lock of a {@link ReadWriteLock}. * *

The use of {@code synchronized} methods or statements provides * access to the implicit monitor lock associated with every object, but * forces all lock acquisition and release to occur in a block-structured way: * when multiple locks are acquired they must be released in the opposite * order, and all locks must be released in the same lexical scope in which * they were acquired. * *

While the scoping mechanism for {@code synchronized} methods * and statements makes it much easier to program with monitor locks, * and helps avoid many common programming errors involving locks, * there are occasions where you need to work with locks in a more * flexible way. For example, some algorithms for traversing * concurrently accessed data structures require the use of * "hand-over-hand" or "chain locking": you * acquire the lock of node A, then node B, then release A and acquire * C, then release B and acquire D and so on. Implementations of the * {@code Lock} interface enable the use of such techniques by * allowing a lock to be acquired and released in different scopes, * and allowing multiple locks to be acquired and released in any * order. * *

With this increased flexibility comes additional * responsibility. The absence of block-structured locking removes the * automatic release of locks that occurs with {@code synchronized} * methods and statements. In most cases, the following idiom * should be used: * *

     Lock l = ...;
 *     l.lock();
 *     try {
 *         // access the resource protected by this lock
 *     } finally {
 *         l.unlock();
 *     }
 * 
* * When locking and unlocking occur in different scopes, care must be * taken to ensure that all code that is executed while the lock is * held is protected by try-finally or try-catch to ensure that the * lock is released when necessary. * *

{@code Lock} implementations provide additional functionality * over the use of {@code synchronized} methods and statements by * providing a non-blocking attempt to acquire a lock ({@link * #tryLock()}), an attempt to acquire the lock that can be * interrupted ({@link #lockInterruptibly}, and an attempt to acquire * the lock that can timeout ({@link #tryLock(long, TimeUnit)}). * *

A {@code Lock} class can also provide behavior and semantics * that is quite different from that of the implicit monitor lock, * such as guaranteed ordering, non-reentrant usage, or deadlock * detection. If an implementation provides such specialized semantics * then the implementation must document those semantics. * *

Note that {@code Lock} instances are just normal objects and can * themselves be used as the target in a {@code synchronized} statement. * Acquiring the * monitor lock of a {@code Lock} instance has no specified relationship * with invoking any of the {@link #lock} methods of that instance. * It is recommended that to avoid confusion you never use {@code Lock} * instances in this way, except within their own implementation. * *

Except where noted, passing a {@code null} value for any * parameter will result in a {@link NullPointerException} being * thrown. * *

Memory Synchronization

* *

All {@code Lock} implementations must enforce the same * memory synchronization semantics as provided by the built-in monitor * lock, as described in * The Java Language Specification, Third Edition (17.4 Memory Model): *

    *
  • A successful {@code lock} operation has the same memory * synchronization effects as a successful Lock action. *
  • A successful {@code unlock} operation has the same * memory synchronization effects as a successful Unlock action. *
* * Unsuccessful locking and unlocking operations, and reentrant * locking/unlocking operations, do not require any memory * synchronization effects. * *

Implementation Considerations

* *

The three forms of lock acquisition (interruptible, * non-interruptible, and timed) may differ in their performance * characteristics, ordering guarantees, or other implementation * qualities. Further, the ability to interrupt the ongoing * acquisition of a lock may not be available in a given {@code Lock} * class. Consequently, an implementation is not required to define * exactly the same guarantees or semantics for all three forms of * lock acquisition, nor is it required to support interruption of an * ongoing lock acquisition. An implementation is required to clearly * document the semantics and guarantees provided by each of the * locking methods. It must also obey the interruption semantics as * defined in this interface, to the extent that interruption of lock * acquisition is supported: which is either totally, or only on * method entry. * *

As interruption generally implies cancellation, and checks for * interruption are often infrequent, an implementation can favor responding * to an interrupt over normal method return. This is true even if it can be * shown that the interrupt occurred after another action may have unblocked * the thread. An implementation should document this behavior. * * @see ReentrantLock * @see Condition * @see ReadWriteLock * * @since 1.5 * @author Doug Lea */ public interface Lock { /** * Acquires the lock. * *

If the lock is not available then the current thread becomes * disabled for thread scheduling purposes and lies dormant until the * lock has been acquired. * *

Implementation Considerations * *

A {@code Lock} implementation may be able to detect erroneous use * of the lock, such as an invocation that would cause deadlock, and * may throw an (unchecked) exception in such circumstances. The * circumstances and the exception type must be documented by that * {@code Lock} implementation. */ void lock(); /** * Acquires the lock unless the current thread is * {@linkplain Thread#interrupt interrupted}. * *

Acquires the lock if it is available and returns immediately. * *

If the lock is not available then the current thread becomes * disabled for thread scheduling purposes and lies dormant until * one of two things happens: * *

    *
  • The lock is acquired by the current thread; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} the * current thread, and interruption of lock acquisition is supported. *
* *

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@linkplain Thread#interrupt interrupted} while acquiring the * lock, and interruption of lock acquisition is supported, *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * *

Implementation Considerations * *

The ability to interrupt a lock acquisition in some * implementations may not be possible, and if possible may be an * expensive operation. The programmer should be aware that this * may be the case. An implementation should document when this is * the case. * *

An implementation can favor responding to an interrupt over * normal method return. * *

A {@code Lock} implementation may be able to detect * erroneous use of the lock, such as an invocation that would * cause deadlock, and may throw an (unchecked) exception in such * circumstances. The circumstances and the exception type must * be documented by that {@code Lock} implementation. * * @throws InterruptedException if the current thread is * interrupted while acquiring the lock (and interruption * of lock acquisition is supported). */ void lockInterruptibly() throws InterruptedException; /** * Acquires the lock only if it is free at the time of invocation. * *

Acquires the lock if it is available and returns immediately * with the value {@code true}. * If the lock is not available then this method will return * immediately with the value {@code false}. * *

A typical usage idiom for this method would be: *

     *      Lock lock = ...;
     *      if (lock.tryLock()) {
     *          try {
     *              // manipulate protected state
     *          } finally {
     *              lock.unlock();
     *          }
     *      } else {
     *          // perform alternative actions
     *      }
     * 
* This usage ensures that the lock is unlocked if it was acquired, and * doesn't try to unlock if the lock was not acquired. * * @return {@code true} if the lock was acquired and * {@code false} otherwise */ boolean tryLock(); /** * Acquires the lock if it is free within the given waiting time and the * current thread has not been {@linkplain Thread#interrupt interrupted}. * *

If the lock is available this method returns immediately * with the value {@code true}. * If the lock is not available then * the current thread becomes disabled for thread scheduling * purposes and lies dormant until one of three things happens: *

    *
  • The lock is acquired by the current thread; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} the * current thread, and interruption of lock acquisition is supported; or *
  • The specified waiting time elapses *
* *

If the lock is acquired then the value {@code true} is returned. * *

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@linkplain Thread#interrupt interrupted} while acquiring * the lock, and interruption of lock acquisition is supported, *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * *

If the specified waiting time elapses then the value {@code false} * is returned. * If the time is * less than or equal to zero, the method will not wait at all. * *

Implementation Considerations * *

The ability to interrupt a lock acquisition in some implementations * may not be possible, and if possible may * be an expensive operation. * The programmer should be aware that this may be the case. An * implementation should document when this is the case. * *

An implementation can favor responding to an interrupt over normal * method return, or reporting a timeout. * *

A {@code Lock} implementation may be able to detect * erroneous use of the lock, such as an invocation that would cause * deadlock, and may throw an (unchecked) exception in such circumstances. * The circumstances and the exception type must be documented by that * {@code Lock} implementation. * * @param time the maximum time to wait for the lock * @param unit the time unit of the {@code time} argument * @return {@code true} if the lock was acquired and {@code false} * if the waiting time elapsed before the lock was acquired * * @throws InterruptedException if the current thread is interrupted * while acquiring the lock (and interruption of lock * acquisition is supported) */ boolean tryLock(long time, TimeUnit unit) throws InterruptedException; /** * Releases the lock. * *

Implementation Considerations * *

A {@code Lock} implementation will usually impose * restrictions on which thread can release a lock (typically only the * holder of the lock can release it) and may throw * an (unchecked) exception if the restriction is violated. * Any restrictions and the exception * type must be documented by that {@code Lock} implementation. */ void unlock(); /** * Returns a new {@link Condition} instance that is bound to this * {@code Lock} instance. * *

Before waiting on the condition the lock must be held by the * current thread. * A call to {@link Condition#await()} will atomically release the lock * before waiting and re-acquire the lock before the wait returns. * *

Implementation Considerations * *

The exact operation of the {@link Condition} instance depends on * the {@code Lock} implementation and must be documented by that * implementation. * * @return A new {@link Condition} instance for this {@code Lock} instance * @throws UnsupportedOperationException if this {@code Lock} * implementation does not support conditions */ Condition newCondition(); } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantReadWriteLock.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantR0000644001750700037720000014573410522545735032721 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.locks; import java.util.HashMap; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; /** * An implementation of {@link ReadWriteLock} supporting similar * semantics to {@link ReentrantLock}. *

This class has the following properties: * *

    *
  • Acquisition order * *

    The order of entry * to the read and write lock is unspecified, subject to reentrancy * constraints. A nonfair lock that is continously contended may * indefinitely postpone one or more reader or writer threads, but * will normally have higher throughput than a fair lock. *

    * * DEPARTURE FROM java.util.concurrent: this implementation impose * a writer-preferrence and thus its acquisition order may be different * than in java.util.concurrent. * *

  • Reentrancy * *

    This lock allows both readers and writers to reacquire read or * write locks in the style of a {@link ReentrantLock}. Non-reentrant * readers are not allowed until all write locks held by the writing * thread have been released. * *

    Additionally, a writer can acquire the read lock, but not * vice-versa. Among other applications, reentrancy can be useful * when write locks are held during calls or callbacks to methods that * perform reads under read locks. If a reader tries to acquire the * write lock it will never succeed. * *

  • Lock downgrading *

    Reentrancy also allows downgrading from the write lock to a read lock, * by acquiring the write lock, then the read lock and then releasing the * write lock. However, upgrading from a read lock to the write lock is * not possible. * *

  • Interruption of lock acquisition *

    The read lock and write lock both support interruption during lock * acquisition. * *

  • {@link Condition} support *

    The write lock provides a {@link Condition} implementation that * behaves in the same way, with respect to the write lock, as the * {@link Condition} implementation provided by * {@link ReentrantLock#newCondition} does for {@link ReentrantLock}. * This {@link Condition} can, of course, only be used with the write lock. * *

    The read lock does not support a {@link Condition} and * {@code readLock().newCondition()} throws * {@code UnsupportedOperationException}. * *

  • Instrumentation *

    This class supports methods to determine whether locks * are held or contended. These methods are designed for monitoring * system state, not for synchronization control. *

* *

Serialization of this class behaves in the same way as built-in * locks: a deserialized lock is in the unlocked state, regardless of * its state when serialized. * *

Sample usages. Here is a code sketch showing how to exploit * reentrancy to perform lock downgrading after updating a cache (exception * handling is elided for simplicity): *

 * class CachedData {
 *   Object data;
 *   volatile boolean cacheValid;
 *   ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
 *
 *   void processCachedData() {
 *     rwl.readLock().lock();
 *     if (!cacheValid) {
 *        // Must release read lock before acquiring write lock
 *        rwl.readLock().unlock();
 *        rwl.writeLock().lock();
 *        // Recheck state because another thread might have acquired
 *        //   write lock and changed state before we did.
 *        if (!cacheValid) {
 *          data = ...
 *          cacheValid = true;
 *        }
 *        // Downgrade by acquiring read lock before releasing write lock
 *        rwl.readLock().lock();
 *        rwl.writeLock().unlock(); // Unlock write, still hold read
 *     }
 *
 *     use(data);
 *     rwl.readLock().unlock();
 *   }
 * }
 * 
* * ReentrantReadWriteLocks can be used to improve concurrency in some * uses of some kinds of Collections. This is typically worthwhile * only when the collections are expected to be large, accessed by * more reader threads than writer threads, and entail operations with * overhead that outweighs synchronization overhead. For example, here * is a class using a TreeMap that is expected to be large and * concurrently accessed. * *
{@code
 * class RWDictionary {
 *    private final Map m = new TreeMap();
 *    private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
 *    private final Lock r = rwl.readLock();
 *    private final Lock w = rwl.writeLock();
 *
 *    public Data get(String key) {
 *        r.lock();
 *        try { return m.get(key); }
 *        finally { r.unlock(); }
 *    }
 *    public String[] allKeys() {
 *        r.lock();
 *        try { return m.keySet().toArray(); }
 *        finally { r.unlock(); }
 *    }
 *    public Data put(String key, Data value) {
 *        w.lock();
 *        try { return m.put(key, value); }
 *        finally { w.unlock(); }
 *    }
 *    public void clear() {
 *        w.lock();
 *        try { m.clear(); }
 *        finally { w.unlock(); }
 *    }
 * }}
* *

Implementation Notes

* *

This lock supports a maximum of 65535 recursive write locks * and 65535 read locks. Attempts to exceed these limits result in * {@link Error} throws from locking methods. * * @since 1.5 * @author Doug Lea * */ public class ReentrantReadWriteLock implements ReadWriteLock, java.io.Serializable { private static final long serialVersionUID = -3463448656717690166L; final ReadLock readerLock_ = new ReadLock(this); final WriteLock writerLock_ = new WriteLock(this); final Sync sync; /** * Creates a new {@code ReentrantReadWriteLock} with * default (nonfair) ordering properties. */ public ReentrantReadWriteLock() { this.sync = new NonfairSync(); } public Lock writeLock() { return writerLock_; } public Lock readLock() { return readerLock_; } /** * Synchronization implementation for ReentrantReadWriteLock. * Subclassed into fair and nonfair versions. */ private abstract static class Sync implements java.io.Serializable { private static final int NONE = 0; private static final int READER = 1; private static final int WRITER = 2; transient int activeReaders_ = 0; transient Thread activeWriter_ = null; transient int waitingReaders_ = 0; transient int waitingWriters_ = 0; /** Number of acquires on write lock by activeWriter_ thread **/ transient int writeHolds_ = 0; /** Number of acquires on read lock by any reader thread **/ transient HashMap readers_ = new HashMap(); /** cache/reuse the special Integer value one to speed up readlocks **/ static final Integer IONE = new Integer(1); Sync() {} /* Each of these variants is needed to maintain atomicity of wait counts during wait loops. They could be made faster by manually inlining each other. We hope that compilers do this for us though. */ synchronized boolean startReadFromNewReader() { boolean pass = startRead(); if (!pass) ++waitingReaders_; return pass; } synchronized boolean startWriteFromNewWriter() { boolean pass = startWrite(); if (!pass) ++waitingWriters_; return pass; } synchronized boolean startReadFromWaitingReader() { boolean pass = startRead(); if (pass) --waitingReaders_; return pass; } synchronized boolean startWriteFromWaitingWriter() { boolean pass = startWrite(); if (pass) --waitingWriters_; return pass; } /* A bunch of small synchronized methods are needed to allow communication from the Lock objects back to this object, that serves as controller */ synchronized void cancelledWaitingReader() { --waitingReaders_; } synchronized void cancelledWaitingWriter() { --waitingWriters_; } boolean allowReader() { return (activeWriter_ == null && waitingWriters_ == 0) || activeWriter_ == Thread.currentThread(); } synchronized boolean startRead() { Thread t = Thread.currentThread(); Object c = readers_.get(t); if (c != null) { // already held -- just increment hold count readers_.put(t, new Integer( ( (Integer) (c)).intValue() + 1)); ++activeReaders_; return true; } else if (allowReader()) { readers_.put(t, IONE); ++activeReaders_; return true; } else return false; } synchronized boolean startWrite() { if (activeWriter_ == Thread.currentThread()) { // already held; re-acquire ++writeHolds_; return true; } else if (writeHolds_ == 0) { if (activeReaders_ == 0 || (readers_.size() == 1 && readers_.get(Thread.currentThread()) != null)) { activeWriter_ = Thread.currentThread(); writeHolds_ = 1; return true; } else return false; } else return false; } synchronized int endRead() { Thread t = Thread.currentThread(); Object c = readers_.get(t); if (c == null) throw new IllegalMonitorStateException(); --activeReaders_; if (c != IONE) { // more than one hold; decrement count int h = ( (Integer) (c)).intValue() - 1; Integer ih = (h == 1) ? IONE : new Integer(h); readers_.put(t, ih); return NONE; } else { readers_.remove(t); if (writeHolds_ > 0) // a write lock is still held by current thread return NONE; else if (activeReaders_ == 0 && waitingWriters_ > 0) return WRITER; else return NONE; } } synchronized int endWrite() { if (activeWriter_ != Thread.currentThread()) { throw new IllegalMonitorStateException(); } --writeHolds_; if (writeHolds_ > 0) // still being held return NONE; else { activeWriter_ = null; if (waitingReaders_ > 0 && allowReader()) return READER; else if (waitingWriters_ > 0) return WRITER; else return NONE; } } synchronized Thread getOwner() { return activeWriter_; } synchronized int getReadLockCount() { return activeReaders_; } synchronized boolean isWriteLocked() { return activeWriter_ != null; } synchronized boolean isWriteLockedByCurrentThread() { return activeWriter_ == Thread.currentThread(); } synchronized int getWriteHoldCount() { return isWriteLockedByCurrentThread() ? writeHolds_ : 0; } synchronized int getReadHoldCount() { if (activeReaders_ == 0) return 0; Thread t = Thread.currentThread(); Integer i = (Integer)readers_.get(t); return (i == null) ? 0 : i.intValue(); } final synchronized boolean hasQueuedThreads() { return waitingWriters_ > 0 || waitingReaders_ > 0; } final synchronized int getQueueLength() { return waitingWriters_ + waitingReaders_; } private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException { in.defaultReadObject(); // readers_ is transient, need to reinitialize. Let's flush the memory // and ensure visibility by synchronizing (all other accesses to // readers_ are also synchronized on "this") synchronized (this) { readers_ = new HashMap(); } } } /** * Nonfair version of Sync */ private static class NonfairSync extends Sync { NonfairSync() {} } /** * The lock returned by method {@link ReentrantReadWriteLock#readLock}. */ public static class ReadLock implements Lock, java.io.Serializable { private static final long serialVersionUID = -5992448646407690164L; final ReentrantReadWriteLock lock; /** * Constructor for use by subclasses * * @param lock the outer lock object * @throws NullPointerException if the lock is null */ protected ReadLock(ReentrantReadWriteLock lock) { if (lock == null) throw new NullPointerException(); this.lock = lock; } /** * Acquires the read lock. * *

Acquires the read lock if the write lock is not held by * another thread and returns immediately. * *

If the write lock is held by another thread then * the current thread becomes disabled for thread scheduling * purposes and lies dormant until the read lock has been acquired. */ public void lock() { synchronized (this) { if (lock.sync.startReadFromNewReader()) return; boolean wasInterrupted = Thread.interrupted(); try { while (true) { try { ReadLock.this.wait(); } catch (InterruptedException ex) { wasInterrupted = true; // no need to propagate the potentially masked // signal, since readers are always notified all } if (lock.sync.startReadFromWaitingReader()) return; } } finally { if (wasInterrupted) Thread.currentThread().interrupt(); } } } /** * Acquires the read lock unless the current thread is * {@linkplain Thread#interrupt interrupted}. * *

Acquires the read lock if the write lock is not held * by another thread and returns immediately. * *

If the write lock is held by another thread then the * current thread becomes disabled for thread scheduling * purposes and lies dormant until one of two things happens: * *

    * *
  • The read lock is acquired by the current thread; or * *
  • Some other thread {@linkplain Thread#interrupt interrupts} * the current thread. * *
* *

If the current thread: * *

    * *
  • has its interrupted status set on entry to this method; or * *
  • is {@linkplain Thread#interrupt interrupted} while * acquiring the read lock, * *
* * then {@link InterruptedException} is thrown and the current * thread's interrupted status is cleared. * *

In this implementation, as this method is an explicit * interruption point, preference is given to responding to * the interrupt over normal or reentrant acquisition of the * lock. * * @throws InterruptedException if the current thread is interrupted */ public void lockInterruptibly() throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); InterruptedException ie = null; synchronized (this) { if (!lock.sync.startReadFromNewReader()) { for (; ; ) { try { ReadLock.this.wait(); if (lock.sync.startReadFromWaitingReader()) return; } catch (InterruptedException ex) { lock.sync.cancelledWaitingReader(); ie = ex; break; } } } } if (ie != null) { // fall through outside synch on interrupt. // This notification is not really needed here, // but may be in plausible subclasses lock.writerLock_.signalWaiters(); throw ie; } } /** * Acquires the read lock only if the write lock is not held by * another thread at the time of invocation. * *

Acquires the read lock if the write lock is not held by * another thread and returns immediately with the value * {@code true}. Even when this lock has been set to use a * fair ordering policy, a call to {@code tryLock()} * will immediately acquire the read lock if it is * available, whether or not other threads are currently * waiting for the read lock. This "barging" behavior * can be useful in certain circumstances, even though it * breaks fairness. If you want to honor the fairness setting * for this lock, then use {@link #tryLock(long, TimeUnit) * tryLock(0, TimeUnit.SECONDS) } which is almost equivalent * (it also detects interruption). * *

If the write lock is held by another thread then * this method will return immediately with the value * {@code false}. * * @return {@code true} if the read lock was acquired */ public boolean tryLock() { return lock.sync.startRead(); } /** * Acquires the read lock if the write lock is not held by * another thread within the given waiting time and the * current thread has not been {@linkplain Thread#interrupt * interrupted}. * *

Acquires the read lock if the write lock is not held by * another thread and returns immediately with the value * {@code true}. If this lock has been set to use a fair * ordering policy then an available lock will not be * acquired if any other threads are waiting for the * lock. This is in contrast to the {@link #tryLock()} * method. If you want a timed {@code tryLock} that does * permit barging on a fair lock then combine the timed and * un-timed forms together: * *

if (lock.tryLock() || lock.tryLock(timeout, unit) ) { ... }
         * 
* *

If the write lock is held by another thread then the * current thread becomes disabled for thread scheduling * purposes and lies dormant until one of three things happens: * *

    * *
  • The read lock is acquired by the current thread; or * *
  • Some other thread {@linkplain Thread#interrupt interrupts} * the current thread; or * *
  • The specified waiting time elapses. * *
* *

If the read lock is acquired then the value {@code true} is * returned. * *

If the current thread: * *

    * *
  • has its interrupted status set on entry to this method; or * *
  • is {@linkplain Thread#interrupt interrupted} while * acquiring the read lock, * *
then {@link InterruptedException} is thrown and the * current thread's interrupted status is cleared. * *

If the specified waiting time elapses then the value * {@code false} is returned. If the time is less than or * equal to zero, the method will not wait at all. * *

In this implementation, as this method is an explicit * interruption point, preference is given to responding to * the interrupt over normal or reentrant acquisition of the * lock, and over reporting the elapse of the waiting time. * * @param timeout the time to wait for the read lock * @param unit the time unit of the timeout argument * @return {@code true} if the read lock was acquired * @throws InterruptedException if the current thread is interrupted * @throws NullPointerException if the time unit is null * */ public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); InterruptedException ie = null; long nanos = unit.toNanos(timeout); synchronized (this) { if (nanos <= 0) return lock.sync.startRead(); else if (lock.sync.startReadFromNewReader()) return true; else { long deadline = Utils.nanoTime() + nanos; for (; ; ) { try { TimeUnit.NANOSECONDS.timedWait(ReadLock.this, nanos); } catch (InterruptedException ex) { lock.sync.cancelledWaitingReader(); ie = ex; break; } if (lock.sync.startReadFromWaitingReader()) return true; else { nanos = deadline - Utils.nanoTime(); if (nanos <= 0) { lock.sync.cancelledWaitingReader(); break; } } } } } // safeguard on interrupt or timeout: lock.writerLock_.signalWaiters(); if (ie != null) throw ie; else return false; // timed out } /** * Attempts to release this lock. * *

If the number of readers is now zero then the lock * is made available for write lock attempts. */ public void unlock() { switch (lock.sync.endRead()) { case Sync.NONE: return; case Sync.READER: lock.readerLock_.signalWaiters(); return; case Sync.WRITER: lock.writerLock_.signalWaiters(); return; } } /** * Throws {@code UnsupportedOperationException} because * {@code ReadLocks} do not support conditions. * * @throws UnsupportedOperationException always */ public Condition newCondition() { throw new UnsupportedOperationException(); } synchronized void signalWaiters() { notifyAll(); } /** * Returns a string identifying this lock, as well as its lock state. * The state, in brackets, includes the String {@code "Read locks ="} * followed by the number of held read locks. * * @return a string identifying this lock, as well as its lock state */ public String toString() { int r = lock.getReadLockCount(); return super.toString() + "[Read locks = " + r + "]"; } } /** * The lock returned by method {@link ReentrantReadWriteLock#writeLock}. */ public static class WriteLock implements Lock, CondVar.ExclusiveLock, java.io.Serializable { private static final long serialVersionUID = -4992448646407690164L; final ReentrantReadWriteLock lock; /** * Constructor for use by subclasses * * @param lock the outer lock object * @throws NullPointerException if the lock is null */ protected WriteLock(ReentrantReadWriteLock lock) { if (lock == null) throw new NullPointerException(); this.lock = lock; } /** * Acquires the write lock. * *

Acquires the write lock if neither the read nor write lock * are held by another thread * and returns immediately, setting the write lock hold count to * one. * *

If the current thread already holds the write lock then the * hold count is incremented by one and the method returns * immediately. * *

If the lock is held by another thread then the current * thread becomes disabled for thread scheduling purposes and * lies dormant until the write lock has been acquired, at which * time the write lock hold count is set to one. */ public void lock() { synchronized (this) { if (lock.sync.startWriteFromNewWriter()) return; boolean wasInterrupted = Thread.interrupted(); try { while (true) { try { WriteLock.this.wait(); } catch (InterruptedException ex) { wasInterrupted = true; // no need to notify; if we were notified, // we will act as notified, and succeed in // startWrite and return } if (lock.sync.startWriteFromWaitingWriter()) return; } } finally { if (wasInterrupted) Thread.currentThread().interrupt(); } } } /** * Acquires the write lock unless the current thread is * {@linkplain Thread#interrupt interrupted}. * *

Acquires the write lock if neither the read nor write lock * are held by another thread * and returns immediately, setting the write lock hold count to * one. * *

If the current thread already holds this lock then the * hold count is incremented by one and the method returns * immediately. * *

If the lock is held by another thread then the current * thread becomes disabled for thread scheduling purposes and * lies dormant until one of two things happens: * *

    * *
  • The write lock is acquired by the current thread; or * *
  • Some other thread {@linkplain Thread#interrupt interrupts} * the current thread. * *
* *

If the write lock is acquired by the current thread then the * lock hold count is set to one. * *

If the current thread: * *

    * *
  • has its interrupted status set on entry to this method; * or * *
  • is {@linkplain Thread#interrupt interrupted} while * acquiring the write lock, * *
* * then {@link InterruptedException} is thrown and the current * thread's interrupted status is cleared. * *

In this implementation, as this method is an explicit * interruption point, preference is given to responding to * the interrupt over normal or reentrant acquisition of the * lock. * * @throws InterruptedException if the current thread is interrupted */ public void lockInterruptibly() throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); InterruptedException ie = null; synchronized (this) { if (!lock.sync.startWriteFromNewWriter()) { for (; ; ) { try { WriteLock.this.wait(); if (lock.sync.startWriteFromWaitingWriter()) return; } catch (InterruptedException ex) { lock.sync.cancelledWaitingWriter(); WriteLock.this.notify(); ie = ex; break; } } } } if (ie != null) { // Fall through outside synch on interrupt. // On exception, we may need to signal readers. // It is not worth checking here whether it is strictly necessary. lock.readerLock_.signalWaiters(); throw ie; } } /** * Acquires the write lock only if it is not held by another thread * at the time of invocation. * *

Acquires the write lock if neither the read nor write lock * are held by another thread * and returns immediately with the value {@code true}, * setting the write lock hold count to one. Even when this lock has * been set to use a fair ordering policy, a call to * {@code tryLock()} will immediately acquire the * lock if it is available, whether or not other threads are * currently waiting for the write lock. This "barging" * behavior can be useful in certain circumstances, even * though it breaks fairness. If you want to honor the * fairness setting for this lock, then use {@link * #tryLock(long, TimeUnit) tryLock(0, TimeUnit.SECONDS) } * which is almost equivalent (it also detects interruption). * *

If the current thread already holds this lock then the * hold count is incremented by one and the method returns * {@code true}. * *

If the lock is held by another thread then this method * will return immediately with the value {@code false}. * * @return {@code true} if the lock was free and was acquired * by the current thread, or the write lock was already held * by the current thread; and {@code false} otherwise. */ public boolean tryLock() { return lock.sync.startWrite(); } /** * Acquires the write lock if it is not held by another thread * within the given waiting time and the current thread has * not been {@linkplain Thread#interrupt interrupted}. * *

Acquires the write lock if neither the read nor write lock * are held by another thread * and returns immediately with the value {@code true}, * setting the write lock hold count to one. If this lock has been * set to use a fair ordering policy then an available lock * will not be acquired if any other threads are * waiting for the write lock. This is in contrast to the {@link * #tryLock()} method. If you want a timed {@code tryLock} * that does permit barging on a fair lock then combine the * timed and un-timed forms together: * *

if (lock.tryLock() || lock.tryLock(timeout, unit) ) { ... }
         * 
* *

If the current thread already holds this lock then the * hold count is incremented by one and the method returns * {@code true}. * *

If the lock is held by another thread then the current * thread becomes disabled for thread scheduling purposes and * lies dormant until one of three things happens: * *

    * *
  • The write lock is acquired by the current thread; or * *
  • Some other thread {@linkplain Thread#interrupt interrupts} * the current thread; or * *
  • The specified waiting time elapses * *
* *

If the write lock is acquired then the value {@code true} is * returned and the write lock hold count is set to one. * *

If the current thread: * *

    * *
  • has its interrupted status set on entry to this method; * or * *
  • is {@linkplain Thread#interrupt interrupted} while * acquiring the write lock, * *
* * then {@link InterruptedException} is thrown and the current * thread's interrupted status is cleared. * *

If the specified waiting time elapses then the value * {@code false} is returned. If the time is less than or * equal to zero, the method will not wait at all. * *

In this implementation, as this method is an explicit * interruption point, preference is given to responding to * the interrupt over normal or reentrant acquisition of the * lock, and over reporting the elapse of the waiting time. * * @param timeout the time to wait for the write lock * @param unit the time unit of the timeout argument * * @return {@code true} if the lock was free and was acquired * by the current thread, or the write lock was already held by the * current thread; and {@code false} if the waiting time * elapsed before the lock could be acquired. * * @throws InterruptedException if the current thread is interrupted * @throws NullPointerException if the time unit is null * */ public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); InterruptedException ie = null; long nanos = unit.toNanos(timeout); synchronized (this) { if (nanos <= 0) return lock.sync.startWrite(); else if (lock.sync.startWriteFromNewWriter()) return true; else { long deadline = Utils.nanoTime() + nanos; for (; ; ) { try { TimeUnit.NANOSECONDS.timedWait(WriteLock.this, nanos); } catch (InterruptedException ex) { lock.sync.cancelledWaitingWriter(); WriteLock.this.notify(); ie = ex; break; } if (lock.sync.startWriteFromWaitingWriter()) return true; else { nanos = deadline - Utils.nanoTime(); if (nanos <= 0) { lock.sync.cancelledWaitingWriter(); WriteLock.this.notify(); break; } } } } } lock.readerLock_.signalWaiters(); if (ie != null) throw ie; else return false; // timed out } /** * Attempts to release this lock. * *

If the current thread is the holder of this lock then * the hold count is decremented. If the hold count is now * zero then the lock is released. If the current thread is * not the holder of this lock then {@link * IllegalMonitorStateException} is thrown. * * @throws IllegalMonitorStateException if the current thread does not * hold this lock. */ public void unlock() { switch (lock.sync.endWrite()) { case Sync.NONE: return; case Sync.READER: lock.readerLock_.signalWaiters(); return; case Sync.WRITER: lock.writerLock_.signalWaiters(); return; } } /** * Returns a {@link Condition} instance for use with this * {@link Lock} instance. *

The returned {@link Condition} instance supports the same * usages as do the {@link Object} monitor methods ({@link * Object#wait() wait}, {@link Object#notify notify}, and {@link * Object#notifyAll notifyAll}) when used with the built-in * monitor lock. * *

    * *
  • If this write lock is not held when any {@link * Condition} method is called then an {@link * IllegalMonitorStateException} is thrown. (Read locks are * held independently of write locks, so are not checked or * affected. However it is essentially always an error to * invoke a condition waiting method when the current thread * has also acquired read locks, since other threads that * could unblock it will not be able to acquire the write * lock.) * *
  • When the condition {@linkplain Condition#await() waiting} * methods are called the write lock is released and, before * they return, the write lock is reacquired and the lock hold * count restored to what it was when the method was called. * *
  • If a thread is {@linkplain Thread#interrupt interrupted} while * waiting then the wait will terminate, an {@link * InterruptedException} will be thrown, and the thread's * interrupted status will be cleared. * *
  • Waiting threads are signalled in FIFO order. * *
  • The ordering of lock reacquisition for threads returning * from waiting methods is the same as for threads initially * acquiring the lock, which is in the default case not specified, * but for fair locks favors those threads that have been * waiting the longest. * *
* * @return the Condition object */ public Condition newCondition() { return new CondVar(this); } synchronized void signalWaiters() { notify(); } /** * Returns a string identifying this lock, as well as its lock * state. The state, in brackets includes either the String * {@code "Unlocked"} or the String {@code "Locked by"} * followed by the {@linkplain Thread#getName name} of the owning thread. * * @return a string identifying this lock, as well as its lock state */ public String toString() { Thread o = lock.getOwner(); return super.toString() + ((o == null) ? "[Unlocked]" : "[Locked by thread " + o.getName() + "]"); } /** * Queries if this write lock is held by the current thread. * Identical in effect to {@link * ReentrantReadWriteLock#isWriteLockedByCurrentThread}. * * @return {@code true} if the current thread holds this lock and * {@code false} otherwise * @since 1.6 */ public boolean isHeldByCurrentThread() { return lock.sync.isWriteLockedByCurrentThread(); } /** * Queries the number of holds on this write lock by the current * thread. A thread has a hold on a lock for each lock action * that is not matched by an unlock action. Identical in effect * to {@link ReentrantReadWriteLock#getWriteHoldCount}. * * @return the number of holds on this lock by the current thread, * or zero if this lock is not held by the current thread * @since 1.6 */ public int getHoldCount() { return lock.sync.getWriteHoldCount(); } } // Instrumentation and status /** * Returns {@code true} if this lock has fairness set true. * * @return {@code true} if this lock has fairness set true */ public final boolean isFair() { return false; } /** * Returns the thread that currently owns the write lock, or * {@code null} if not owned. When this method is called by a * thread that is not the owner, the return value reflects a * best-effort approximation of current lock status. For example, * the owner may be momentarily {@code null} even if there are * threads trying to acquire the lock but have not yet done so. * This method is designed to facilitate construction of * subclasses that provide more extensive lock monitoring * facilities. * * @return the owner, or {@code null} if not owned */ protected Thread getOwner() { return sync.getOwner(); } /** * Queries the number of read locks held for this lock. This * method is designed for use in monitoring system state, not for * synchronization control. * @return the number of read locks held. */ public int getReadLockCount() { return sync.getReadLockCount(); } /** * Queries if the write lock is held by any thread. This method is * designed for use in monitoring system state, not for * synchronization control. * * @return {@code true} if any thread holds the write lock and * {@code false} otherwise */ public boolean isWriteLocked() { return sync.isWriteLocked(); } /** * Queries if the write lock is held by the current thread. * * @return {@code true} if the current thread holds the write lock and * {@code false} otherwise */ public boolean isWriteLockedByCurrentThread() { return sync.isWriteLockedByCurrentThread(); } /** * Queries the number of reentrant write holds on this lock by the * current thread. A writer thread has a hold on a lock for * each lock action that is not matched by an unlock action. * * @return the number of holds on the write lock by the current thread, * or zero if the write lock is not held by the current thread */ public int getWriteHoldCount() { return sync.getWriteHoldCount(); } /** * Queries the number of reentrant read holds on this lock by the * current thread. A reader thread has a hold on a lock for * each lock action that is not matched by an unlock action. * * @return the number of holds on the read lock by the current thread, * or zero if the read lock is not held by the current thread * @since 1.6 */ public int getReadHoldCount() { return sync.getReadHoldCount(); } // /** // * Returns a collection containing threads that may be waiting to // * acquire the write lock. Because the actual set of threads may // * change dynamically while constructing this result, the returned // * collection is only a best-effort estimate. The elements of the // * returned collection are in no particular order. This method is // * designed to facilitate construction of subclasses that provide // * more extensive lock monitoring facilities. // * @return the collection of threads // */ // protected Collection getQueuedWriterThreads() { // return sync.getExclusiveQueuedThreads(); // } // // /** // * Returns a collection containing threads that may be waiting to // * acquire the read lock. Because the actual set of threads may // * change dynamically while constructing this result, the returned // * collection is only a best-effort estimate. The elements of the // * returned collection are in no particular order. This method is // * designed to facilitate construction of subclasses that provide // * more extensive lock monitoring facilities. // * @return the collection of threads // */ // protected Collection getQueuedReaderThreads() { // return sync.getSharedQueuedThreads(); // } // /** * Queries whether any threads are waiting to acquire the read or * write lock. Note that because cancellations may occur at any * time, a {@code true} return does not guarantee that any other * thread will ever acquire a lock. This method is designed * primarily for use in monitoring of the system state. * * @return {@code true} if there may be other threads waiting to * acquire the lock */ public final boolean hasQueuedThreads() { return sync.hasQueuedThreads(); } // // /** // * Queries whether the given thread is waiting to acquire either // * the read or write lock. Note that because cancellations may // * occur at any time, a true return does not guarantee // * that this thread will ever acquire a lock. This method is // * designed primarily for use in monitoring of the system state. // * // * @param thread the thread // * @return true if the given thread is queued waiting for this lock. // * @throws NullPointerException if thread is null // */ // public final boolean hasQueuedThread(Thread thread) { // return sync.isQueued(thread); // } /** * Returns an estimate of the number of threads waiting to acquire * either the read or write lock. The value is only an estimate * because the number of threads may change dynamically while this * method traverses internal data structures. This method is * designed for use in monitoring of the system state, not for * synchronization control. * * @return the estimated number of threads waiting for this lock */ public final int getQueueLength() { return sync.getQueueLength(); } // /** // * Returns a collection containing threads that may be waiting to // * acquire either the read or write lock. Because the actual set // * of threads may change dynamically while constructing this // * result, the returned collection is only a best-effort estimate. // * The elements of the returned collection are in no particular // * order. This method is designed to facilitate construction of // * subclasses that provide more extensive monitoring facilities. // * @return the collection of threads // */ // protected Collection getQueuedThreads() { // return sync.getQueuedThreads(); // } // // /** // * Queries whether any threads are waiting on the given condition // * associated with the write lock. Note that because timeouts and // * interrupts may occur at any time, a true return does // * not guarantee that a future signal will awaken any // * threads. This method is designed primarily for use in // * monitoring of the system state. // * @param condition the condition // * @return true if there are any waiting threads. // * @throws IllegalMonitorStateException if this lock // * is not held // * @throws IllegalArgumentException if the given condition is // * not associated with this lock // * @throws NullPointerException if condition null // */ // public boolean hasWaiters(Condition condition) { // if (condition == null) // throw new NullPointerException(); // if (!(condition instanceof AbstractQueuedSynchronizer.ConditionObject)) // throw new IllegalArgumentException("not owner"); // return sync.hasWaiters((AbstractQueuedSynchronizer.ConditionObject)condition); // } // /** // * Returns an estimate of the number of threads waiting on the // * given condition associated with the write lock. Note that because // * timeouts and interrupts may occur at any time, the estimate // * serves only as an upper bound on the actual number of waiters. // * This method is designed for use in monitoring of the system // * state, not for synchronization control. // * @param condition the condition // * @return the estimated number of waiting threads. // * @throws IllegalMonitorStateException if this lock // * is not held // * @throws IllegalArgumentException if the given condition is // * not associated with this lock // * @throws NullPointerException if condition null // */ // public int getWaitQueueLength(Condition condition) { // if (condition == null) // throw new NullPointerException(); // if (!(condition instanceof AbstractQueuedSynchronizer.ConditionObject)) // throw new IllegalArgumentException("not owner"); // return sync.getWaitQueueLength((AbstractQueuedSynchronizer.ConditionObject)condition); // } // // /** // * Returns a collection containing those threads that may be // * waiting on the given condition associated with the write lock. // * Because the actual set of threads may change dynamically while // * constructing this result, the returned collection is only a // * best-effort estimate. The elements of the returned collection // * are in no particular order. This method is designed to // * facilitate construction of subclasses that provide more // * extensive condition monitoring facilities. // * @param condition the condition // * @return the collection of threads // * @throws IllegalMonitorStateException if this lock // * is not held // * @throws IllegalArgumentException if the given condition is // * not associated with this lock // * @throws NullPointerException if condition null // */ // protected Collection getWaitingThreads(Condition condition) { // if (condition == null) // throw new NullPointerException(); // if (!(condition instanceof AbstractQueuedSynchronizer.ConditionObject)) // throw new IllegalArgumentException("not owner"); // return sync.getWaitingThreads((AbstractQueuedSynchronizer.ConditionObject)condition); // } /** * Returns a string identifying this lock, as well as its lock state. * The state, in brackets, includes the String {@code "Write locks ="} * followed by the number of reentrantly held write locks, and the * String {@code "Read locks ="} followed by the number of held * read locks. * * @return a string identifying this lock, as well as its lock state */ public String toString() { return super.toString() + "[Write locks = " + getWriteHoldCount() + ", Read locks = " + getReadLockCount() + "]"; } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantLock.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantL0000644001750700037720000010273710431774517032710 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.locks; import java.util.Collection; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; /** * A reentrant mutual exclusion {@link Lock} with the same basic * behavior and semantics as the implicit monitor lock accessed using * {@code synchronized} methods and statements, but with extended * capabilities. * *

A {@code ReentrantLock} is owned by the thread last * successfully locking, but not yet unlocking it. A thread invoking * {@code lock} will return, successfully acquiring the lock, when * the lock is not owned by another thread. The method will return * immediately if the current thread already owns the lock. This can * be checked using methods {@link #isHeldByCurrentThread}, and {@link * #getHoldCount}. * *

The constructor for this class accepts an optional * fairness parameter. When set {@code true}, under * contention, locks favor granting access to the longest-waiting * thread. Otherwise this lock does not guarantee any particular * access order. Programs using fair locks accessed by many threads * may display lower overall throughput (i.e., are slower; often much * slower) than those using the default setting, but have smaller * variances in times to obtain locks and guarantee lack of * starvation. Note however, that fairness of locks does not guarantee * fairness of thread scheduling. Thus, one of many threads using a * fair lock may obtain it multiple times in succession while other * active threads are not progressing and not currently holding the * lock. * Also note that the untimed {@link #tryLock() tryLock} method does not * honor the fairness setting. It will succeed if the lock * is available even if other threads are waiting. * *

It is recommended practice to always immediately * follow a call to {@code lock} with a {@code try} block, most * typically in a before/after construction such as: * *

 * class X {
 *   private final ReentrantLock lock = new ReentrantLock();
 *   // ...
 *
 *   public void m() {
 *     lock.lock();  // block until condition holds
 *     try {
 *       // ... method body
 *     } finally {
 *       lock.unlock()
 *     }
 *   }
 * }
 * 
* *

In addition to implementing the {@link Lock} interface, this * class defines methods {@code isLocked} and * {@code getLockQueueLength}, as well as some associated * {@code protected} access methods that may be useful for * instrumentation and monitoring. * *

Serialization of this class behaves in the same way as built-in * locks: a deserialized lock is in the unlocked state, regardless of * its state when serialized. * *

This lock supports a maximum of 2147483647 recursive locks by * the same thread. Attempts to exceed this limit result in * {@link Error} throws from locking methods. * * @since 1.5 * @author Doug Lea * @author Dawid Kurzyniec */ public class ReentrantLock implements Lock, java.io.Serializable, CondVar.ExclusiveLock { private static final long serialVersionUID = 7373984872572414699L; private final Sync sync; /** * Base of synchronization control for this lock. Subclassed * into fair and nonfair versions below. */ static abstract class Sync implements java.io.Serializable { private static final long serialVersionUID = -5179523762034025860L; protected transient Thread owner_ = null; protected transient int holds_ = 0; protected Sync() {} /** * Performs {@link Lock#lock}. The main reason for subclassing * is to allow fast path for nonfair version. */ public abstract void lock(); public abstract void lockInterruptibly() throws InterruptedException; final void incHolds() { int nextHolds = ++holds_; if (nextHolds < 0) throw new Error("Maximum lock count exceeded"); holds_ = nextHolds; } public boolean tryLock() { Thread caller = Thread.currentThread(); synchronized (this) { if (owner_ == null) { owner_ = caller; holds_ = 1; return true; } else if (caller == owner_) { incHolds(); return true; } } return false; } public abstract boolean tryLock(long nanos) throws InterruptedException; public abstract void unlock(); public synchronized int getHoldCount() { return isHeldByCurrentThread() ? holds_ : 0; } public synchronized boolean isHeldByCurrentThread() { return holds_ > 0 && Thread.currentThread() == owner_; } public synchronized boolean isLocked() { return owner_ != null; } public abstract boolean isFair(); protected synchronized Thread getOwner() { return owner_; } public boolean hasQueuedThreads() { throw new UnsupportedOperationException("Use FAIR version"); } public int getQueueLength() { throw new UnsupportedOperationException("Use FAIR version"); } public Collection getQueuedThreads() { throw new UnsupportedOperationException("Use FAIR version"); } public boolean isQueued(Thread thread) { throw new UnsupportedOperationException("Use FAIR version"); } } /** * Sync object for non-fair locks */ final static class NonfairSync extends Sync { private static final long serialVersionUID = 7316153563782823691L; NonfairSync() {} /** * Performs lock. Try immediate barge, backing up to normal * acquire on failure. */ public void lock() { Thread caller = Thread.currentThread(); synchronized (this) { if (owner_ == null) { owner_ = caller; holds_ = 1; return; } else if (caller == owner_) { incHolds(); return; } else { boolean wasInterrupted = Thread.interrupted(); try { while (true) { try { wait(); } catch (InterruptedException e) { wasInterrupted = true; // no need to notify; if we were signalled, we // will act as signalled, ignoring the // interruption } if (owner_ == null) { owner_ = caller; holds_ = 1; return; } } } finally { if (wasInterrupted) Thread.currentThread().interrupt(); } } } } public void lockInterruptibly() throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); Thread caller = Thread.currentThread(); synchronized (this) { if (owner_ == null) { owner_ = caller; holds_ = 1; return; } else if (caller == owner_) { incHolds(); return; } else { try { do { wait(); } while (owner_ != null); owner_ = caller; holds_ = 1; return; } catch (InterruptedException ex) { if (owner_ == null) notify(); throw ex; } } } } public boolean tryLock(long nanos) throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); Thread caller = Thread.currentThread(); synchronized (this) { if (owner_ == null) { owner_ = caller; holds_ = 1; return true; } else if (caller == owner_) { incHolds(); return true; } else if (nanos <= 0) return false; else { long deadline = Utils.nanoTime() + nanos; try { for (; ; ) { TimeUnit.NANOSECONDS.timedWait(this, nanos); if (caller == owner_) { incHolds(); return true; } else if (owner_ == null) { owner_ = caller; holds_ = 1; return true; } else { nanos = deadline - Utils.nanoTime(); if (nanos <= 0) return false; } } } catch (InterruptedException ex) { if (owner_ == null) notify(); throw ex; } } } } public synchronized void unlock() { if (Thread.currentThread() != owner_) throw new IllegalMonitorStateException("Not owner"); if (--holds_ == 0) { owner_ = null; notify(); } } public final boolean isFair() { return false; } } /** * Sync object for fair locks */ final static class FairSync extends Sync implements WaitQueue.QueuedSync { private static final long serialVersionUID = -3000897897090466540L; private transient WaitQueue wq_ = new FIFOWaitQueue(); FairSync() {} public synchronized boolean recheck(WaitQueue.WaitNode node) { Thread caller = Thread.currentThread(); if (owner_ == null) { owner_ = caller; holds_ = 1; return true; } else if (caller == owner_) { incHolds(); return true; } wq_.insert(node); return false; } public synchronized void takeOver(WaitQueue.WaitNode node) { // assert (holds_ == 1 && owner_ == Thread.currentThread() owner_ = node.getOwner(); } public void lock() { Thread caller = Thread.currentThread(); synchronized (this) { if (owner_ == null) { owner_ = caller; holds_ = 1; return; } else if (caller == owner_) { incHolds(); return; } } WaitQueue.WaitNode n = new WaitQueue.WaitNode(); n.doWaitUninterruptibly(this); } public void lockInterruptibly() throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); Thread caller = Thread.currentThread(); synchronized (this) { if (owner_ == null) { owner_ = caller; holds_ = 1; return; } else if (caller == owner_) { incHolds(); return; } } WaitQueue.WaitNode n = new WaitQueue.WaitNode(); n.doWait(this); } public boolean tryLock(long nanos) throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); Thread caller = Thread.currentThread(); synchronized (this) { if (owner_ == null) { owner_ = caller; holds_ = 1; return true; } else if (caller == owner_) { incHolds(); return true; } } WaitQueue.WaitNode n = new WaitQueue.WaitNode(); return n.doTimedWait(this, nanos); } protected synchronized WaitQueue.WaitNode getSignallee(Thread caller) { if (caller != owner_) throw new IllegalMonitorStateException("Not owner"); // assert (holds_ > 0) if (holds_ >= 2) { // current thread will keep the lock --holds_; return null; } // assert (holds_ == 1) WaitQueue.WaitNode w = wq_.extract(); if (w == null) { // if none, clear for new arrivals owner_ = null; holds_ = 0; } return w; } public void unlock() { Thread caller = Thread.currentThread(); for (;;) { WaitQueue.WaitNode w = getSignallee(caller); if (w == null) return; // no one to signal if (w.signal(this)) return; // notify if still waiting, else skip } } public final boolean isFair() { return true; } public synchronized boolean hasQueuedThreads() { return wq_.hasNodes(); } public synchronized int getQueueLength() { return wq_.getLength(); } public synchronized Collection getQueuedThreads() { return wq_.getWaitingThreads(); } public synchronized boolean isQueued(Thread thread) { return wq_.isWaiting(thread); } private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException { in.defaultReadObject(); synchronized (this) { wq_ = new FIFOWaitQueue(); } } } /** * Creates an instance of {@code ReentrantLock}. * This is equivalent to using {@code ReentrantLock(false)}. */ public ReentrantLock() { sync = new NonfairSync(); } /** * Creates an instance of {@code ReentrantLock} with the * given fairness policy. * * @param fair {@code true} if this lock should use a fair ordering policy */ public ReentrantLock(boolean fair) { sync = (fair)? (Sync)new FairSync() : new NonfairSync(); } /** * Acquires the lock. * *

Acquires the lock if it is not held by another thread and returns * immediately, setting the lock hold count to one. * *

If the current thread already holds the lock then the hold * count is incremented by one and the method returns immediately. * *

If the lock is held by another thread then the * current thread becomes disabled for thread scheduling * purposes and lies dormant until the lock has been acquired, * at which time the lock hold count is set to one. */ public void lock() { sync.lock(); } /** * Acquires the lock unless the current thread is * {@linkplain Thread#interrupt interrupted}. * *

Acquires the lock if it is not held by another thread and returns * immediately, setting the lock hold count to one. * *

If the current thread already holds this lock then the hold count * is incremented by one and the method returns immediately. * *

If the lock is held by another thread then the * current thread becomes disabled for thread scheduling * purposes and lies dormant until one of two things happens: * *

    * *
  • The lock is acquired by the current thread; or * *
  • Some other thread {@linkplain Thread#interrupt interrupts} the * current thread. * *
* *

If the lock is acquired by the current thread then the lock hold * count is set to one. * *

If the current thread: * *

    * *
  • has its interrupted status set on entry to this method; or * *
  • is {@linkplain Thread#interrupt interrupted} while acquiring * the lock, * *
* * then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * *

In this implementation, as this method is an explicit * interruption point, preference is given to responding to the * interrupt over normal or reentrant acquisition of the lock. * * @throws InterruptedException if the current thread is interrupted */ public void lockInterruptibly() throws InterruptedException { sync.lockInterruptibly(); } /** * Acquires the lock only if it is not held by another thread at the time * of invocation. * *

Acquires the lock if it is not held by another thread and * returns immediately with the value {@code true}, setting the * lock hold count to one. Even when this lock has been set to use a * fair ordering policy, a call to {@code tryLock()} will * immediately acquire the lock if it is available, whether or not * other threads are currently waiting for the lock. * This "barging" behavior can be useful in certain * circumstances, even though it breaks fairness. If you want to honor * the fairness setting for this lock, then use * {@link #tryLock(long, TimeUnit) tryLock(0, TimeUnit.SECONDS) } * which is almost equivalent (it also detects interruption). * *

If the current thread already holds this lock then the hold * count is incremented by one and the method returns {@code true}. * *

If the lock is held by another thread then this method will return * immediately with the value {@code false}. * * @return {@code true} if the lock was free and was acquired by the * current thread, or the lock was already held by the current * thread; and {@code false} otherwise */ public boolean tryLock() { return sync.tryLock(); } /** * Acquires the lock if it is not held by another thread within the given * waiting time and the current thread has not been * {@linkplain Thread#interrupt interrupted}. * *

Acquires the lock if it is not held by another thread and returns * immediately with the value {@code true}, setting the lock hold count * to one. If this lock has been set to use a fair ordering policy then * an available lock will not be acquired if any other threads * are waiting for the lock. This is in contrast to the {@link #tryLock()} * method. If you want a timed {@code tryLock} that does permit barging on * a fair lock then combine the timed and un-timed forms together: * *

if (lock.tryLock() || lock.tryLock(timeout, unit) ) { ... }
     * 
* *

If the current thread * already holds this lock then the hold count is incremented by one and * the method returns {@code true}. * *

If the lock is held by another thread then the * current thread becomes disabled for thread scheduling * purposes and lies dormant until one of three things happens: * *

    * *
  • The lock is acquired by the current thread; or * *
  • Some other thread {@linkplain Thread#interrupt interrupts} * the current thread; or * *
  • The specified waiting time elapses * *
* *

If the lock is acquired then the value {@code true} is returned and * the lock hold count is set to one. * *

If the current thread: * *

    * *
  • has its interrupted status set on entry to this method; or * *
  • is {@linkplain Thread#interrupt interrupted} while * acquiring the lock, * *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * *

If the specified waiting time elapses then the value {@code false} * is returned. If the time is less than or equal to zero, the method * will not wait at all. * *

In this implementation, as this method is an explicit * interruption point, preference is given to responding to the * interrupt over normal or reentrant acquisition of the lock, and * over reporting the elapse of the waiting time. * * @param timeout the time to wait for the lock * @param unit the time unit of the timeout argument * @return {@code true} if the lock was free and was acquired by the * current thread, or the lock was already held by the current * thread; and {@code false} if the waiting time elapsed before * the lock could be acquired * @throws InterruptedException if the current thread is interrupted * @throws NullPointerException if the time unit is null * */ public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException { return sync.tryLock(unit.toNanos(timeout)); } /** * Attempts to release this lock. * *

If the current thread is the holder of this lock then the hold * count is decremented. If the hold count is now zero then the lock * is released. If the current thread is not the holder of this * lock then {@link IllegalMonitorStateException} is thrown. * * @throws IllegalMonitorStateException if the current thread does not * hold this lock */ public void unlock() { sync.unlock(); } /** * Returns a {@link Condition} instance for use with this * {@link Lock} instance. * *

The returned {@link Condition} instance supports the same * usages as do the {@link Object} monitor methods ({@link * Object#wait() wait}, {@link Object#notify notify}, and {@link * Object#notifyAll notifyAll}) when used with the built-in * monitor lock. * *

    * *
  • If this lock is not held when any of the {@link Condition} * {@linkplain Condition#await() waiting} or {@linkplain * Condition#signal signalling} methods are called, then an {@link * IllegalMonitorStateException} is thrown. * *
  • When the condition {@linkplain Condition#await() waiting} * methods are called the lock is released and, before they * return, the lock is reacquired and the lock hold count restored * to what it was when the method was called. * *
  • If a thread is {@linkplain Thread#interrupt interrupted} * while waiting then the wait will terminate, an {@link * InterruptedException} will be thrown, and the thread's * interrupted status will be cleared. * *
  • Waiting threads are signalled in FIFO order. * *
  • The ordering of lock reacquisition for threads returning * from waiting methods is the same as for threads initially * acquiring the lock, which is in the default case not specified, * but for fair locks favors those threads that have been * waiting the longest. * *
* * @return the Condition object */ public Condition newCondition() { return isFair() ? (Condition)new FIFOCondVar(this) : new CondVar(this); } /** * Queries the number of holds on this lock by the current thread. * *

A thread has a hold on a lock for each lock action that is not * matched by an unlock action. * *

The hold count information is typically only used for testing and * debugging purposes. For example, if a certain section of code should * not be entered with the lock already held then we can assert that * fact: * *

     * class X {
     *   ReentrantLock lock = new ReentrantLock();
     *   // ...
     *   public void m() {
     *     assert lock.getHoldCount() == 0;
     *     lock.lock();
     *     try {
     *       // ... method body
     *     } finally {
     *       lock.unlock();
     *     }
     *   }
     * }
     * 
* * @return the number of holds on this lock by the current thread, * or zero if this lock is not held by the current thread */ public int getHoldCount() { return sync.getHoldCount(); } /** * Queries if this lock is held by the current thread. * *

Analogous to the {@link Thread#holdsLock} method for built-in * monitor locks, this method is typically used for debugging and * testing. For example, a method that should only be called while * a lock is held can assert that this is the case: * *

     * class X {
     *   ReentrantLock lock = new ReentrantLock();
     *   // ...
     *
     *   public void m() {
     *       assert lock.isHeldByCurrentThread();
     *       // ... method body
     *   }
     * }
     * 
* *

It can also be used to ensure that a reentrant lock is used * in a non-reentrant manner, for example: * *

     * class X {
     *   ReentrantLock lock = new ReentrantLock();
     *   // ...
     *
     *   public void m() {
     *       assert !lock.isHeldByCurrentThread();
     *       lock.lock();
     *       try {
     *           // ... method body
     *       } finally {
     *           lock.unlock();
     *       }
     *   }
     * }
     * 
* * @return {@code true} if current thread holds this lock and * {@code false} otherwise */ public boolean isHeldByCurrentThread() { return sync.isHeldByCurrentThread(); } /** * Queries if this lock is held by any thread. This method is * designed for use in monitoring of the system state, * not for synchronization control. * * @return {@code true} if any thread holds this lock and * {@code false} otherwise */ public boolean isLocked() { return sync.isLocked(); } /** * Returns {@code true} if this lock has fairness set true. * * @return {@code true} if this lock has fairness set true */ public final boolean isFair() { return sync.isFair(); } /** * Returns the thread that currently owns this lock, or * {@code null} if not owned. When this method is called by a * thread that is not the owner, the return value reflects a * best-effort approximation of current lock status. For example, * the owner may be momentarily {@code null} even if there are * threads trying to acquire the lock but have not yet done so. * This method is designed to facilitate construction of * subclasses that provide more extensive lock monitoring * facilities. * * @return the owner, or {@code null} if not owned */ protected Thread getOwner() { return sync.getOwner(); } /** * Queries whether any threads are waiting to acquire this lock. Note that * because cancellations may occur at any time, a {@code true} * return does not guarantee that any other thread will ever * acquire this lock. This method is designed primarily for use in * monitoring of the system state. * * @return {@code true} if there may be other threads waiting to * acquire the lock */ public final boolean hasQueuedThreads() { return sync.hasQueuedThreads(); } /** * Queries whether the given thread is waiting to acquire this * lock. Note that because cancellations may occur at any time, a * {@code true} return does not guarantee that this thread * will ever acquire this lock. This method is designed primarily for use * in monitoring of the system state. * * @param thread the thread * @return {@code true} if the given thread is queued waiting for this lock * @throws NullPointerException if the thread is null */ public final boolean hasQueuedThread(Thread thread) { return sync.isQueued(thread); } /** * Returns an estimate of the number of threads waiting to * acquire this lock. The value is only an estimate because the number of * threads may change dynamically while this method traverses * internal data structures. This method is designed for use in * monitoring of the system state, not for synchronization * control. * * @return the estimated number of threads waiting for this lock */ public final int getQueueLength() { return sync.getQueueLength(); } /** * Returns a collection containing threads that may be waiting to * acquire this lock. Because the actual set of threads may change * dynamically while constructing this result, the returned * collection is only a best-effort estimate. The elements of the * returned collection are in no particular order. This method is * designed to facilitate construction of subclasses that provide * more extensive monitoring facilities. * * @return the collection of threads */ protected Collection getQueuedThreads() { return sync.getQueuedThreads(); } /** * Queries whether any threads are waiting on the given condition * associated with this lock. Note that because timeouts and * interrupts may occur at any time, a {@code true} return does * not guarantee that a future {@code signal} will awaken any * threads. This method is designed primarily for use in * monitoring of the system state. * * @param condition the condition * @return {@code true} if there are any waiting threads * @throws IllegalMonitorStateException if this lock is not held * @throws IllegalArgumentException if the given condition is * not associated with this lock * @throws NullPointerException if the condition is null */ public boolean hasWaiters(Condition condition) { return asCondVar(condition).hasWaiters(); } /** * Returns an estimate of the number of threads waiting on the * given condition associated with this lock. Note that because * timeouts and interrupts may occur at any time, the estimate * serves only as an upper bound on the actual number of waiters. * This method is designed for use in monitoring of the system * state, not for synchronization control. * * @param condition the condition * @return the estimated number of waiting threads * @throws IllegalMonitorStateException if this lock is not held * @throws IllegalArgumentException if the given condition is * not associated with this lock * @throws NullPointerException if the condition is null */ public int getWaitQueueLength(Condition condition) { return asCondVar(condition).getWaitQueueLength(); } /** * Returns a collection containing those threads that may be * waiting on the given condition associated with this lock. * Because the actual set of threads may change dynamically while * constructing this result, the returned collection is only a * best-effort estimate. The elements of the returned collection * are in no particular order. This method is designed to * facilitate construction of subclasses that provide more * extensive condition monitoring facilities. * * @param condition the condition * @return the collection of threads * @throws IllegalMonitorStateException if this lock is not held * @throws IllegalArgumentException if the given condition is * not associated with this lock * @throws NullPointerException if the condition is null */ protected Collection getWaitingThreads(Condition condition) { return asCondVar(condition).getWaitingThreads(); } /** * Returns a string identifying this lock, as well as its lock state. * The state, in brackets, includes either the String {@code "Unlocked"} * or the String {@code "Locked by"} followed by the * {@linkplain Thread#getName name} of the owning thread. * * @return a string identifying this lock, as well as its lock state */ public String toString() { Thread o = getOwner(); return super.toString() + ((o == null) ? "[Unlocked]" : "[Locked by thread " + o.getName() + "]"); } private CondVar asCondVar(Condition condition) { if (condition == null) throw new NullPointerException(); if (!(condition instanceof CondVar)) throw new IllegalArgumentException("not owner"); CondVar condVar = (CondVar)condition; if (condVar.lock != this) throw new IllegalArgumentException("not owner"); return condVar; } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/CondVar.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/CondVar.ja0000644001750700037720000001416610525221062032537 0ustar dawidkdcl/* File: ConditionVariable.java Originally written by Doug Lea and released into the public domain. This may be used for any purposes whatsoever without acknowledgment. Thanks for the assistance and support of Sun Microsystems Labs, and everyone contributing, testing, and using this code. History: Date Who What 11Jun1998 dl Create public version */ package edu.emory.mathcs.backport.java.util.concurrent.locks; import java.util.Collection; import java.util.Date; import edu.emory.mathcs.backport.java.util.concurrent.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; class CondVar implements Condition, java.io.Serializable { /** The lock **/ protected final ExclusiveLock lock; /** * Create a new CondVar that relies on the given mutual * exclusion lock. * @param lock A non-reentrant mutual exclusion lock. **/ CondVar(ExclusiveLock lock) { this.lock = lock; } public void awaitUninterruptibly() { int holdCount = lock.getHoldCount(); if (holdCount == 0) { throw new IllegalMonitorStateException(); } // avoid instant spurious wakeup if thread already interrupted boolean wasInterrupted = Thread.interrupted(); try { synchronized (this) { for (int i=holdCount; i>0; i--) lock.unlock(); try { wait(); } catch (InterruptedException ex) { wasInterrupted = true; // may have masked the signal and there is no way // to tell; we must wake up spuriously } } } finally { for (int i=holdCount; i>0; i--) lock.lock(); if (wasInterrupted) { Thread.currentThread().interrupt(); } } } public void await() throws InterruptedException { int holdCount = lock.getHoldCount(); if (holdCount == 0) { throw new IllegalMonitorStateException(); } if (Thread.interrupted()) throw new InterruptedException(); try { synchronized (this) { for (int i=holdCount; i>0; i--) lock.unlock(); try { wait(); } catch (InterruptedException ex) { notify(); throw ex; } } } finally { for (int i=holdCount; i>0; i--) lock.lock(); } } public boolean await(long timeout, TimeUnit unit) throws InterruptedException { int holdCount = lock.getHoldCount(); if (holdCount == 0) { throw new IllegalMonitorStateException(); } if (Thread.interrupted()) throw new InterruptedException(); long nanos = unit.toNanos(timeout); boolean success = false; try { synchronized (this) { for (int i=holdCount; i>0; i--) lock.unlock(); try { if (nanos > 0) { long start = Utils.nanoTime(); TimeUnit.NANOSECONDS.timedWait(this, nanos); // DK: due to coarse-grained (millis) clock, it seems // preferable to acknowledge timeout (success == false) // when the equality holds (timing is exact) success = Utils.nanoTime() - start < nanos; } } catch (InterruptedException ex) { notify(); throw ex; } } } finally { for (int i=holdCount; i>0; i--) lock.lock(); } return success; } // public long awaitNanos(long timeout) throws InterruptedException { // throw new UnsupportedOperationException(); // } // public boolean awaitUntil(Date deadline) throws InterruptedException { if (deadline == null) throw new NullPointerException(); int holdCount = lock.getHoldCount(); if (holdCount == 0) { throw new IllegalMonitorStateException(); } long abstime = deadline.getTime(); if (Thread.interrupted()) throw new InterruptedException(); boolean success = false; try { synchronized (this) { for (int i=holdCount; i>0; i--) lock.unlock(); try { long start = System.currentTimeMillis(); long msecs = abstime - start; if (msecs > 0) { wait(msecs); // DK: due to coarse-grained (millis) clock, it seems // preferable to acknowledge timeout (success == false) // when the equality holds (timing is exact) success = System.currentTimeMillis() - start < msecs; } } catch (InterruptedException ex) { notify(); throw ex; } } } finally { for (int i=holdCount; i>0; i--) lock.lock(); } return success; } public synchronized void signal() { if (!lock.isHeldByCurrentThread()) { throw new IllegalMonitorStateException(); } notify(); } public synchronized void signalAll() { if (!lock.isHeldByCurrentThread()) { throw new IllegalMonitorStateException(); } notifyAll(); } protected ExclusiveLock getLock() { return lock; } protected boolean hasWaiters() { throw new UnsupportedOperationException("Use FAIR version"); } protected int getWaitQueueLength() { throw new UnsupportedOperationException("Use FAIR version"); } protected Collection getWaitingThreads() { throw new UnsupportedOperationException("Use FAIR version"); } static interface ExclusiveLock extends Lock { boolean isHeldByCurrentThread(); int getHoldCount(); } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/package.htmlbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/locks/package.ht0000755001750700037720000000477110253107031032620 0ustar dawidkdcl Locks Interfaces and classes providing a framework for locking and waiting for conditions that is distinct from built-in synchronization and monitors. The framework permits much greater flexibility in the use of locks and conditions, at the expense of more awkward syntax.

The {@link edu.emory.mathcs.backport.java.util.concurrent.locks.Lock} interface supports locking disciplines that differ in semantics (reentrant, fair, etc), and that can be used in non-block-structured contexts including hand-over-hand and lock reordering algorithms. The main implementation is {@link edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantLock}.

The {@link edu.emory.mathcs.backport.java.util.concurrent.locks.ReadWriteLock} interface similarly defines locks that may be shared among readers but are exclusive to writers. Only a single implementation, {@link edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantReadWriteLock}, is provided, since it covers most standard usage contexts. But programmers may create their own implementations to cover nonstandard requirements.

The {@link edu.emory.mathcs.backport.java.util.concurrent.locks.Condition} interface describes condition variables that may be associated with Locks. These are similar in usage to the implicit monitors accessed using Object.wait, but offer extended capabilities. In particular, multiple Condition objects may be associated with a single Lock. To avoid compatibility issues, the names of Condition methods are different than the corresponding Object versions. @since 1.5 ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ExecutionException.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ExecutionExcepti0000644001750700037720000000411110431774517032767 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * Exception thrown when attempting to retrieve the result of a task * that aborted by throwing an exception. This exception can be * inspected using the {@link #getCause()} method. * * @see Future * @since 1.5 * @author Doug Lea */ public class ExecutionException extends Exception { private static final long serialVersionUID = 7830266012832686185L; /** * Constructs an ExecutionException with no detail message. * The cause is not initialized, and may subsequently be * initialized by a call to {@link #initCause(Throwable) initCause}. */ protected ExecutionException() { } /** * Constructs an ExecutionException with the specified detail * message. The cause is not initialized, and may subsequently be * initialized by a call to {@link #initCause(Throwable) initCause}. * * @param message the detail message */ protected ExecutionException(String message) { super(message); } /** * Constructs an ExecutionException with the specified detail * message and cause. * * @param message the detail message * @param cause the cause (which is saved for later retrieval by the * {@link #getCause()} method) */ public ExecutionException(String message, Throwable cause) { super(message, cause); } /** * Constructs an ExecutionException with the specified cause. * The detail message is set to: *

     *  (cause == null ? null : cause.toString())
* (which typically contains the class and detail message of * cause). * * @param cause the cause (which is saved for later retrieval by the * {@link #getCause()} method) */ public ExecutionException(Throwable cause) { super(cause); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/SynchronousQueue.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/SynchronousQueue0000644001750700037720000006234110461021764033042 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; import java.util.Collection; import java.util.Iterator; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; import java.util.NoSuchElementException; /** * A {@linkplain BlockingQueue blocking queue} in which each insert * operation must wait for a corresponding remove operation by another * thread, and vice versa. A synchronous queue does not have any * internal capacity, not even a capacity of one. You cannot * peek at a synchronous queue because an element is only * present when you try to remove it; you cannot insert an element * (using any method) unless another thread is trying to remove it; * you cannot iterate as there is nothing to iterate. The * head of the queue is the element that the first queued * inserting thread is trying to add to the queue; if there is no such * queued thread then no element is available for removal and * poll() will return null. For purposes of other * Collection methods (for example contains), a * SynchronousQueue acts as an empty collection. This queue * does not permit null elements. * *

Synchronous queues are similar to rendezvous channels used in * CSP and Ada. They are well suited for handoff designs, in which an * object running in one thread must sync up with an object running * in another thread in order to hand it some information, event, or * task. * *

This class supports an optional fairness policy for ordering * waiting producer and consumer threads. By default, this ordering * is not guaranteed. However, a queue constructed with fairness set * to true grants threads access in FIFO order. Fairness * generally decreases throughput but reduces variability and avoids * starvation. * *

This class and its iterator implement all of the * optional methods of the {@link Collection} and {@link * Iterator} interfaces. * *

This class is a member of the * * Java Collections Framework. * * @since 1.5 * @author Doug Lea */ public class SynchronousQueue extends AbstractQueue implements BlockingQueue, java.io.Serializable { private static final long serialVersionUID = -3223113410248163686L; /* This implementation divides actions into two cases for puts: * An arriving producer that does not already have a waiting consumer creates a node holding item, and then waits for a consumer to take it. * An arriving producer that does already have a waiting consumer fills the slot node created by the consumer, and notifies it to continue. And symmetrically, two for takes: * An arriving consumer that does not already have a waiting producer creates an empty slot node, and then waits for a producer to fill it. * An arriving consumer that does already have a waiting producer takes item from the node created by the producer, and notifies it to continue. When a put or take waiting for the actions of its counterpart aborts due to interruption or timeout, it marks the node it created as "CANCELLED", which causes its counterpart to retry the entire put or take sequence. This requires keeping two simple queues, waitingProducers and waitingConsumers. Each of these can be FIFO (preserves fairness) or LIFO (improves throughput). */ /** Lock protecting both wait queues */ private final ReentrantLock qlock; /** Queue holding waiting puts */ private final WaitQueue waitingProducers; /** Queue holding waiting takes */ private final WaitQueue waitingConsumers; /** * Creates a SynchronousQueue with nonfair access policy. */ public SynchronousQueue() { this(false); } /** * Creates a SynchronousQueue with specified fairness policy. * @param fair if true, threads contend in FIFO order for access; * otherwise the order is unspecified. */ public SynchronousQueue(boolean fair) { if (fair) { qlock = new ReentrantLock(true); waitingProducers = new FifoWaitQueue(); waitingConsumers = new FifoWaitQueue(); } else { qlock = new ReentrantLock(); waitingProducers = new LifoWaitQueue(); waitingConsumers = new LifoWaitQueue(); } } /** * Queue to hold waiting puts/takes; specialized to Fifo/Lifo below. * These queues have all transient fields, but are serializable * in order to recover fairness settings when deserialized. */ static abstract class WaitQueue implements java.io.Serializable { /** Creates, adds, and returns node for x. */ abstract Node enq(Object x); /** Removes and returns node, or null if empty. */ abstract Node deq(); /** Removes a cancelled node to avoid garbage retention. */ abstract void unlink(Node node); /** Returns true if a cancelled node might be on queue. */ abstract boolean shouldUnlink(Node node); } /** * FIFO queue to hold waiting puts/takes. */ static final class FifoWaitQueue extends WaitQueue implements java.io.Serializable { private static final long serialVersionUID = -3623113410248163686L; private transient Node head; private transient Node last; Node enq(Object x) { Node p = new Node(x); if (last == null) last = head = p; else last = last.next = p; return p; } Node deq() { Node p = head; if (p != null) { if ((head = p.next) == null) last = null; p.next = null; } return p; } boolean shouldUnlink(Node node) { return (node == last || node.next != null); } void unlink(Node node) { Node p = head; Node trail = null; while (p != null) { if (p == node) { Node next = p.next; if (trail == null) head = next; else trail.next = next; if (last == node) last = trail; break; } trail = p; p = p.next; } } } /** * LIFO queue to hold waiting puts/takes. */ static final class LifoWaitQueue extends WaitQueue implements java.io.Serializable { private static final long serialVersionUID = -3633113410248163686L; private transient Node head; Node enq(Object x) { return head = new Node(x, head); } Node deq() { Node p = head; if (p != null) { head = p.next; p.next = null; } return p; } boolean shouldUnlink(Node node) { // Return false if already dequeued or is bottom node (in which // case we might retain at most one garbage node) return (node == head || node.next != null); } void unlink(Node node) { Node p = head; Node trail = null; while (p != null) { if (p == node) { Node next = p.next; if (trail == null) head = next; else trail.next = next; break; } trail = p; p = p.next; } } } /** * Unlinks the given node from consumer queue. Called by cancelled * (timeout, interrupt) waiters to avoid garbage retention in the * absence of producers. */ private void unlinkCancelledConsumer(Node node) { // Use a form of double-check to avoid unnecessary locking and // traversal. The first check outside lock might // conservatively report true. if (waitingConsumers.shouldUnlink(node)) { qlock.lock(); try { if (waitingConsumers.shouldUnlink(node)) waitingConsumers.unlink(node); } finally { qlock.unlock(); } } } /** * Unlinks the given node from producer queue. Symmetric * to unlinkCancelledConsumer. */ private void unlinkCancelledProducer(Node node) { if (waitingProducers.shouldUnlink(node)) { qlock.lock(); try { if (waitingProducers.shouldUnlink(node)) waitingProducers.unlink(node); } finally { qlock.unlock(); } } } /** * Nodes each maintain an item and handle waits and signals for * getting and setting it. The class extends * AbstractQueuedSynchronizer to manage blocking, using AQS state * 0 for waiting, 1 for ack, -1 for cancelled. */ static final class Node implements java.io.Serializable { private static final long serialVersionUID = -3223113410248163686L; /** Synchronization state value representing that node acked */ private static final int ACK = 1; /** Synchronization state value representing that node cancelled */ private static final int CANCEL = -1; int state = 0; /** The item being transferred */ Object item; /** Next node in wait queue */ Node next; /** Creates a node with initial item */ Node(Object x) { item = x; } /** Creates a node with initial item and next */ Node(Object x, Node n) { item = x; next = n; } /** * Takes item and nulls out field (for sake of GC) * * PRE: lock owned */ private Object extract() { Object x = item; item = null; return x; } /** * Tries to cancel on interrupt; if so rethrowing, * else setting interrupt state * * PRE: lock owned */ private void checkCancellationOnInterrupt(InterruptedException ie) throws InterruptedException { if (state == 0) { state = CANCEL; notify(); throw ie; } Thread.currentThread().interrupt(); } /** * Fills in the slot created by the consumer and signal consumer to * continue. */ synchronized boolean setItem(Object x) { if (state != 0) return false; item = x; state = ACK; notify(); return true; } /** * Removes item from slot created by producer and signal producer * to continue. */ synchronized Object getItem() { if (state != 0) return null; state = ACK; notify(); return extract(); } /** * Waits for a consumer to take item placed by producer. */ synchronized void waitForTake() throws InterruptedException { try { while (state == 0) wait(); } catch (InterruptedException ie) { checkCancellationOnInterrupt(ie); } } /** * Waits for a producer to put item placed by consumer. */ synchronized Object waitForPut() throws InterruptedException { try { while (state == 0) wait(); } catch (InterruptedException ie) { checkCancellationOnInterrupt(ie); } return extract(); } private boolean attempt(long nanos) throws InterruptedException { if (state != 0) return true; if (nanos <= 0) { state = CANCEL; notify(); return false; } long deadline = Utils.nanoTime() + nanos; while (true) { TimeUnit.NANOSECONDS.timedWait(this, nanos); if (state != 0) return true; nanos = deadline - Utils.nanoTime(); if (nanos <= 0) { state = CANCEL; notify(); return false; } } } /** * Waits for a consumer to take item placed by producer or time out. */ synchronized boolean waitForTake(long nanos) throws InterruptedException { try { if (!attempt(nanos)) return false; } catch (InterruptedException ie) { checkCancellationOnInterrupt(ie); } return true; } /** * Waits for a producer to put item placed by consumer, or time out. */ synchronized Object waitForPut(long nanos) throws InterruptedException { try { if (!attempt(nanos)) return null; } catch (InterruptedException ie) { checkCancellationOnInterrupt(ie); } return extract(); } } /** * Adds the specified element to this queue, waiting if necessary for * another thread to receive it. * * @throws InterruptedException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public void put(Object e) throws InterruptedException { if (e == null) throw new NullPointerException(); final ReentrantLock qlock = this.qlock; for (;;) { Node node; boolean mustWait; if (Thread.interrupted()) throw new InterruptedException(); qlock.lock(); try { node = waitingConsumers.deq(); if ( (mustWait = (node == null)) ) node = waitingProducers.enq(e); } finally { qlock.unlock(); } if (mustWait) { try { node.waitForTake(); return; } catch (InterruptedException ex) { unlinkCancelledProducer(node); throw ex; } } else if (node.setItem(e)) return; // else consumer cancelled, so retry } } /** * Inserts the specified element into this queue, waiting if necessary * up to the specified wait time for another thread to receive it. * * @return true if successful, or false if the * specified waiting time elapses before a consumer appears. * @throws InterruptedException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public boolean offer(Object e, long timeout, TimeUnit unit) throws InterruptedException { if (e == null) throw new NullPointerException(); long nanos = unit.toNanos(timeout); final ReentrantLock qlock = this.qlock; for (;;) { Node node; boolean mustWait; if (Thread.interrupted()) throw new InterruptedException(); qlock.lock(); try { node = waitingConsumers.deq(); if ( (mustWait = (node == null)) ) node = waitingProducers.enq(e); } finally { qlock.unlock(); } if (mustWait) { try { boolean x = node.waitForTake(nanos); if (!x) unlinkCancelledProducer(node); return x; } catch (InterruptedException ex) { unlinkCancelledProducer(node); throw ex; } } else if (node.setItem(e)) return true; // else consumer cancelled, so retry } } /** * Retrieves and removes the head of this queue, waiting if necessary * for another thread to insert it. * * @return the head of this queue * @throws InterruptedException {@inheritDoc} */ public Object take() throws InterruptedException { final ReentrantLock qlock = this.qlock; for (;;) { Node node; boolean mustWait; if (Thread.interrupted()) throw new InterruptedException(); qlock.lock(); try { node = waitingProducers.deq(); if ( (mustWait = (node == null)) ) node = waitingConsumers.enq(null); } finally { qlock.unlock(); } if (mustWait) { try { Object x = node.waitForPut(); return (Object)x; } catch (InterruptedException ex) { unlinkCancelledConsumer(node); throw ex; } } else { Object x = node.getItem(); if (x != null) return (Object)x; // else cancelled, so retry } } } /** * Retrieves and removes the head of this queue, waiting * if necessary up to the specified wait time, for another thread * to insert it. * * @return the head of this queue, or null if the * specified waiting time elapses before an element is present. * @throws InterruptedException {@inheritDoc} */ public Object poll(long timeout, TimeUnit unit) throws InterruptedException { long nanos = unit.toNanos(timeout); final ReentrantLock qlock = this.qlock; for (;;) { Node node; boolean mustWait; if (Thread.interrupted()) throw new InterruptedException(); qlock.lock(); try { node = waitingProducers.deq(); if ( (mustWait = (node == null)) ) node = waitingConsumers.enq(null); } finally { qlock.unlock(); } if (mustWait) { try { Object x = node.waitForPut(nanos); if (x == null) unlinkCancelledConsumer(node); return (Object)x; } catch (InterruptedException ex) { unlinkCancelledConsumer(node); throw ex; } } else { Object x = node.getItem(); if (x != null) return (Object)x; // else cancelled, so retry } } } // Untimed nonblocking versions /** * Inserts the specified element into this queue, if another thread is * waiting to receive it. * * @param e the element to add * @return true if the element was added to this queue, else * false * @throws NullPointerException if the specified element is null */ public boolean offer(Object e) { if (e == null) throw new NullPointerException(); final ReentrantLock qlock = this.qlock; for (;;) { Node node; qlock.lock(); try { node = waitingConsumers.deq(); } finally { qlock.unlock(); } if (node == null) return false; else if (node.setItem(e)) return true; // else retry } } /** * Retrieves and removes the head of this queue, if another thread * is currently making an element available. * * @return the head of this queue, or null if no * element is available. */ public Object poll() { final ReentrantLock qlock = this.qlock; for (;;) { Node node; qlock.lock(); try { node = waitingProducers.deq(); } finally { qlock.unlock(); } if (node == null) return null; else { Object x = node.getItem(); if (x != null) return (Object)x; // else retry } } } /** * Always returns true. * A SynchronousQueue has no internal capacity. * * @return true */ public boolean isEmpty() { return true; } /** * Always returns zero. * A SynchronousQueue has no internal capacity. * * @return zero */ public int size() { return 0; } /** * Always returns zero. * A SynchronousQueue has no internal capacity. * * @return zero */ public int remainingCapacity() { return 0; } /** * Does nothing. * A SynchronousQueue has no internal capacity. */ public void clear() {} /** * Always returns false. * A SynchronousQueue has no internal capacity. * * @param o object to be checked for containment in this queue * @return false */ public boolean contains(Object o) { return false; } /** * Always returns false. * A SynchronousQueue has no internal capacity. * * @param o the element to remove * @return false */ public boolean remove(Object o) { return false; } /** * Returns false unless the given collection is empty. * A SynchronousQueue has no internal capacity. * * @param c the collection * @return false unless the given collection is empty * @throws NullPointerException if the specified collection is null */ public boolean containsAll(Collection c) { return c.isEmpty(); } /** * Always returns false. * A SynchronousQueue has no internal capacity. * * @param c the collection * @return false */ public boolean removeAll(Collection c) { return false; } /** * Always returns false. * A SynchronousQueue has no internal capacity. * * @param c the collection * @return false */ public boolean retainAll(Collection c) { return false; } /** * Always returns null. * A SynchronousQueue does not return elements * unless actively waited on. * * @return null */ public Object peek() { return null; } static class EmptyIterator implements Iterator { public boolean hasNext() { return false; } public Object next() { throw new NoSuchElementException(); } public void remove() { throw new IllegalStateException(); } } /** * Returns an empty iterator in which hasNext always returns * false. * * @return an empty iterator */ public Iterator iterator() { return new EmptyIterator(); } /** * Returns a zero-length array. * @return a zero-length array */ public Object[] toArray() { return new Object[0]; } /** * Sets the zeroeth element of the specified array to null * (if the array has non-zero length) and returns it. * * @param a the array * @return the specified array * @throws NullPointerException if the specified array is null */ public Object[] toArray(Object[] a) { if (a.length > 0) a[0] = null; return a; } /** * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public int drainTo(Collection c) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); int n = 0; Object e; while ( (e = poll()) != null) { c.add(e); ++n; } return n; } /** * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public int drainTo(Collection c, int maxElements) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); int n = 0; Object e; while (n < maxElements && (e = poll()) != null) { c.add(e); ++n; } return n; } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ThreadFactory.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ThreadFactory.ja0000644001750700037720000000247410461021764032634 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * An object that creates new threads on demand. Using thread factories * removes hardwiring of calls to {@link Thread#Thread(Runnable) new Thread}, * enabling applications to use special thread subclasses, priorities, etc. * *

* The simplest implementation of this interface is just: *

 * class SimpleThreadFactory implements ThreadFactory {
 *   public Thread newThread(Runnable r) {
 *     return new Thread(r);
 *   }
 * }
 * 
* * The {@link Executors#defaultThreadFactory} method provides a more * useful simple implementation, that sets the created thread context * to known values before returning it. * @since 1.5 * @author Doug Lea */ public interface ThreadFactory { /** * Constructs a new {@code Thread}. Implementations may also initialize * priority, name, daemon status, {@code ThreadGroup}, etc. * * @param r a runnable to be executed by new thread instance * @return constructed thread, or {@code null} if the request to * create a thread is rejected */ Thread newThread(Runnable r); } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ExecutorCompletionService.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ExecutorCompleti0000644001750700037720000001416010633347506033000 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.*; // for javadoc (till 6280605 is fixed) /** * A {@link CompletionService} that uses a supplied {@link Executor} * to execute tasks. This class arranges that submitted tasks are, * upon completion, placed on a queue accessible using take. * The class is lightweight enough to be suitable for transient use * when processing groups of tasks. * *

* * Usage Examples. * * Suppose you have a set of solvers for a certain problem, each * returning a value of some type Result, and would like to * run them concurrently, processing the results of each of them that * return a non-null value, in some method use(Result r). You * could write this as: * *

 *   void solve(Executor e,
 *              Collection<Callable<Result>> solvers)
 *     throws InterruptedException, ExecutionException {
 *       CompletionService<Result> ecs
 *           = new ExecutorCompletionService<Result>(e);
 *       for (Callable<Result> s : solvers)
 *           ecs.submit(s);
 *       int n = solvers.size();
 *       for (int i = 0; i < n; ++i) {
 *           Result r = ecs.take().get();
 *           if (r != null)
 *               use(r);
 *       }
 *   }
 * 
* * Suppose instead that you would like to use the first non-null result * of the set of tasks, ignoring any that encounter exceptions, * and cancelling all other tasks when the first one is ready: * *
 *   void solve(Executor e,
 *              Collection<Callable<Result>> solvers)
 *     throws InterruptedException {
 *       CompletionService<Result> ecs
 *           = new ExecutorCompletionService<Result>(e);
 *       int n = solvers.size();
 *       List<Future<Result>> futures
 *           = new ArrayList<Future<Result>>(n);
 *       Result result = null;
 *       try {
 *           for (Callable<Result> s : solvers)
 *               futures.add(ecs.submit(s));
 *           for (int i = 0; i < n; ++i) {
 *               try {
 *                   Result r = ecs.take().get();
 *                   if (r != null) {
 *                       result = r;
 *                       break;
 *                   }
 *               } catch (ExecutionException ignore) {}
 *           }
 *       }
 *       finally {
 *           for (Future<Result> f : futures)
 *               f.cancel(true);
 *       }
 *
 *       if (result != null)
 *           use(result);
 *   }
 * 
*/ public class ExecutorCompletionService implements CompletionService { private final Executor executor; private final AbstractExecutorService aes; private final BlockingQueue completionQueue; /** * FutureTask extension to enqueue upon completion */ private class QueueingFuture extends FutureTask { QueueingFuture(RunnableFuture task) { super(task, null); this.task = task; } protected void done() { completionQueue.add(task); } private final Future task; } private RunnableFuture newTaskFor(Callable task) { if (aes == null) return new FutureTask(task); else return aes.newTaskFor(task); } private RunnableFuture newTaskFor(Runnable task, Object result) { if (aes == null) return new FutureTask(task, result); else return aes.newTaskFor(task, result); } /** * Creates an ExecutorCompletionService using the supplied * executor for base task execution and a * {@link LinkedBlockingQueue} as a completion queue. * * @param executor the executor to use * @throws NullPointerException if executor is null */ public ExecutorCompletionService(Executor executor) { if (executor == null) throw new NullPointerException(); this.executor = executor; this.aes = (executor instanceof AbstractExecutorService) ? (AbstractExecutorService) executor : null; this.completionQueue = new LinkedBlockingQueue(); } /** * Creates an ExecutorCompletionService using the supplied * executor for base task execution and the supplied queue as its * completion queue. * * @param executor the executor to use * @param completionQueue the queue to use as the completion queue * normally one dedicated for use by this service. This queue is * treated as unbounded -- failed attempted Queue.add * operations for completed taskes cause them not to be * retrievable. * @throws NullPointerException if executor or completionQueue are null */ public ExecutorCompletionService(Executor executor, BlockingQueue completionQueue) { if (executor == null || completionQueue == null) throw new NullPointerException(); this.executor = executor; this.aes = (executor instanceof AbstractExecutorService) ? (AbstractExecutorService) executor : null; this.completionQueue = completionQueue; } public Future submit(Callable task) { if (task == null) throw new NullPointerException(); RunnableFuture f = newTaskFor(task); executor.execute(new QueueingFuture(f)); return f; } public Future submit(Runnable task, Object result) { if (task == null) throw new NullPointerException(); RunnableFuture f = newTaskFor(task, result); executor.execute(new QueueingFuture(f)); return f; } public Future take() throws InterruptedException { return (Future)completionQueue.take(); } public Future poll() { return (Future)completionQueue.poll(); } public Future poll(long timeout, TimeUnit unit) throws InterruptedException { return (Future)completionQueue.poll(timeout, unit); } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentSkipListMap.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentSkipLi0000644001750700037720000033447310633345604032754 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.*; import java.util.Random; import java.util.Comparator; import java.util.Map; import java.util.SortedMap; import java.util.Collection; import java.util.Set; import java.util.Iterator; import java.util.ArrayList; import java.util.NoSuchElementException; import java.util.SortedSet; import java.util.List; /** * A scalable concurrent {@link ConcurrentNavigableMap} implementation. * The map is sorted according to the {@linkplain Comparable natural * ordering} of its keys, or by a {@link Comparator} provided at map * creation time, depending on which constructor is used. * *

This class implements a concurrent variant of SkipLists providing * expected average log(n) time cost for the * containsKey, get, put and * remove operations and their variants. Insertion, removal, * update, and access operations safely execute concurrently by * multiple threads. Iterators are weakly consistent, returning * elements reflecting the state of the map at some point at or since * the creation of the iterator. They do not throw {@link * java.util.ConcurrentModificationException}, and may proceed concurrently with * other operations. Ascending key ordered views and their iterators * are faster than descending ones. * *

All Map.Entry pairs returned by methods in this class * and its views represent snapshots of mappings at the time they were * produced. They do not support the Entry.setValue * method. (Note however that it is possible to change mappings in the * associated map using put, putIfAbsent, or * replace, depending on exactly which effect you need.) * *

Beware that, unlike in most collections, the size * method is not a constant-time operation. Because of the * asynchronous nature of these maps, determining the current number * of elements requires a traversal of the elements. Additionally, * the bulk operations putAll, equals, and * clear are not guaranteed to be performed * atomically. For example, an iterator operating concurrently with a * putAll operation might view only some of the added * elements. * *

This class and its views and iterators implement all of the * optional methods of the {@link Map} and {@link Iterator} * interfaces. Like most other concurrent collections, this class does * not permit the use of null keys or values because some * null return values cannot be reliably distinguished from the absence of * elements. * *

This class is a member of the * * Java Collections Framework. * * @author Doug Lea * @since 1.6 */ public class ConcurrentSkipListMap extends AbstractMap implements ConcurrentNavigableMap, Cloneable, java.io.Serializable { /* * This class implements a tree-like two-dimensionally linked skip * list in which the index levels are represented in separate * nodes from the base nodes holding data. There are two reasons * for taking this approach instead of the usual array-based * structure: 1) Array based implementations seem to encounter * more complexity and overhead 2) We can use cheaper algorithms * for the heavily-traversed index lists than can be used for the * base lists. Here's a picture of some of the basics for a * possible list with 2 levels of index: * * Head nodes Index nodes * +-+ right +-+ +-+ * |2|---------------->| |--------------------->| |->null * +-+ +-+ +-+ * | down | | * v v v * +-+ +-+ +-+ +-+ +-+ +-+ * |1|----------->| |->| |------>| |----------->| |------>| |->null * +-+ +-+ +-+ +-+ +-+ +-+ * v | | | | | * Nodes next v v v v v * +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ * | |->|A|->|B|->|C|->|D|->|E|->|F|->|G|->|H|->|I|->|J|->|K|->null * +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ * * The base lists use a variant of the HM linked ordered set * algorithm. See Tim Harris, "A pragmatic implementation of * non-blocking linked lists" * http://www.cl.cam.ac.uk/~tlh20/publications.html and Maged * Michael "High Performance Dynamic Lock-Free Hash Tables and * List-Based Sets" * http://www.research.ibm.com/people/m/michael/pubs.htm. The * basic idea in these lists is to mark the "next" pointers of * deleted nodes when deleting to avoid conflicts with concurrent * insertions, and when traversing to keep track of triples * (predecessor, node, successor) in order to detect when and how * to unlink these deleted nodes. * * Rather than using mark-bits to mark list deletions (which can * be slow and space-intensive using AtomicMarkedReference), nodes * use direct CAS'able next pointers. On deletion, instead of * marking a pointer, they splice in another node that can be * thought of as standing for a marked pointer (indicating this by * using otherwise impossible field values). Using plain nodes * acts roughly like "boxed" implementations of marked pointers, * but uses new nodes only when nodes are deleted, not for every * link. This requires less space and supports faster * traversal. Even if marked references were better supported by * JVMs, traversal using this technique might still be faster * because any search need only read ahead one more node than * otherwise required (to check for trailing marker) rather than * unmasking mark bits or whatever on each read. * * This approach maintains the essential property needed in the HM * algorithm of changing the next-pointer of a deleted node so * that any other CAS of it will fail, but implements the idea by * changing the pointer to point to a different node, not by * marking it. While it would be possible to further squeeze * space by defining marker nodes not to have key/value fields, it * isn't worth the extra type-testing overhead. The deletion * markers are rarely encountered during traversal and are * normally quickly garbage collected. (Note that this technique * would not work well in systems without garbage collection.) * * In addition to using deletion markers, the lists also use * nullness of value fields to indicate deletion, in a style * similar to typical lazy-deletion schemes. If a node's value is * null, then it is considered logically deleted and ignored even * though it is still reachable. This maintains proper control of * concurrent replace vs delete operations -- an attempted replace * must fail if a delete beat it by nulling field, and a delete * must return the last non-null value held in the field. (Note: * Null, rather than some special marker, is used for value fields * here because it just so happens to mesh with the Map API * requirement that method get returns null if there is no * mapping, which allows nodes to remain concurrently readable * even when deleted. Using any other marker value here would be * messy at best.) * * Here's the sequence of events for a deletion of node n with * predecessor b and successor f, initially: * * +------+ +------+ +------+ * ... | b |------>| n |----->| f | ... * +------+ +------+ +------+ * * 1. CAS n's value field from non-null to null. * From this point on, no public operations encountering * the node consider this mapping to exist. However, other * ongoing insertions and deletions might still modify * n's next pointer. * * 2. CAS n's next pointer to point to a new marker node. * From this point on, no other nodes can be appended to n. * which avoids deletion errors in CAS-based linked lists. * * +------+ +------+ +------+ +------+ * ... | b |------>| n |----->|marker|------>| f | ... * +------+ +------+ +------+ +------+ * * 3. CAS b's next pointer over both n and its marker. * From this point on, no new traversals will encounter n, * and it can eventually be GCed. * +------+ +------+ * ... | b |----------------------------------->| f | ... * +------+ +------+ * * A failure at step 1 leads to simple retry due to a lost race * with another operation. Steps 2-3 can fail because some other * thread noticed during a traversal a node with null value and * helped out by marking and/or unlinking. This helping-out * ensures that no thread can become stuck waiting for progress of * the deleting thread. The use of marker nodes slightly * complicates helping-out code because traversals must track * consistent reads of up to four nodes (b, n, marker, f), not * just (b, n, f), although the next field of a marker is * immutable, and once a next field is CAS'ed to point to a * marker, it never again changes, so this requires less care. * * Skip lists add indexing to this scheme, so that the base-level * traversals start close to the locations being found, inserted * or deleted -- usually base level traversals only traverse a few * nodes. This doesn't change the basic algorithm except for the * need to make sure base traversals start at predecessors (here, * b) that are not (structurally) deleted, otherwise retrying * after processing the deletion. * * Index levels are maintained as lists with volatile next fields, * using CAS to link and unlink. Races are allowed in index-list * operations that can (rarely) fail to link in a new index node * or delete one. (We can't do this of course for data nodes.) * However, even when this happens, the index lists remain sorted, * so correctly serve as indices. This can impact performance, * but since skip lists are probabilistic anyway, the net result * is that under contention, the effective "p" value may be lower * than its nominal value. And race windows are kept small enough * that in practice these failures are rare, even under a lot of * contention. * * The fact that retries (for both base and index lists) are * relatively cheap due to indexing allows some minor * simplifications of retry logic. Traversal restarts are * performed after most "helping-out" CASes. This isn't always * strictly necessary, but the implicit backoffs tend to help * reduce other downstream failed CAS's enough to outweigh restart * cost. This worsens the worst case, but seems to improve even * highly contended cases. * * Unlike most skip-list implementations, index insertion and * deletion here require a separate traversal pass occuring after * the base-level action, to add or remove index nodes. This adds * to single-threaded overhead, but improves contended * multithreaded performance by narrowing interference windows, * and allows deletion to ensure that all index nodes will be made * unreachable upon return from a public remove operation, thus * avoiding unwanted garbage retention. This is more important * here than in some other data structures because we cannot null * out node fields referencing user keys since they might still be * read by other ongoing traversals. * * Indexing uses skip list parameters that maintain good search * performance while using sparser-than-usual indices: The * hardwired parameters k=1, p=0.5 (see method randomLevel) mean * that about one-quarter of the nodes have indices. Of those that * do, half have one level, a quarter have two, and so on (see * Pugh's Skip List Cookbook, sec 3.4). The expected total space * requirement for a map is slightly less than for the current * implementation of edu.emory.mathcs.backport.java.util.TreeMap. * * Changing the level of the index (i.e, the height of the * tree-like structure) also uses CAS. The head index has initial * level/height of one. Creation of an index with height greater * than the current level adds a level to the head index by * CAS'ing on a new top-most head. To maintain good performance * after a lot of removals, deletion methods heuristically try to * reduce the height if the topmost levels appear to be empty. * This may encounter races in which it possible (but rare) to * reduce and "lose" a level just as it is about to contain an * index (that will then never be encountered). This does no * structural harm, and in practice appears to be a better option * than allowing unrestrained growth of levels. * * The code for all this is more verbose than you'd like. Most * operations entail locating an element (or position to insert an * element). The code to do this can't be nicely factored out * because subsequent uses require a snapshot of predecessor * and/or successor and/or value fields which can't be returned * all at once, at least not without creating yet another object * to hold them -- creating such little objects is an especially * bad idea for basic internal search operations because it adds * to GC overhead. (This is one of the few times I've wished Java * had macros.) Instead, some traversal code is interleaved within * insertion and removal operations. The control logic to handle * all the retry conditions is sometimes twisty. Most search is * broken into 2 parts. findPredecessor() searches index nodes * only, returning a base-level predecessor of the key. findNode() * finishes out the base-level search. Even with this factoring, * there is a fair amount of near-duplication of code to handle * variants. * * For explanation of algorithms sharing at least a couple of * features with this one, see Mikhail Fomitchev's thesis * (http://www.cs.yorku.ca/~mikhail/), Keir Fraser's thesis * (http://www.cl.cam.ac.uk/users/kaf24/), and Hakan Sundell's * thesis (http://www.cs.chalmers.se/~phs/). * * Given the use of tree-like index nodes, you might wonder why * this doesn't use some kind of search tree instead, which would * support somewhat faster search operations. The reason is that * there are no known efficient lock-free insertion and deletion * algorithms for search trees. The immutability of the "down" * links of index nodes (as opposed to mutable "left" fields in * true trees) makes this tractable using only CAS operations. * * Notation guide for local variables * Node: b, n, f for predecessor, node, successor * Index: q, r, d for index node, right, down. * t for another index node * Head: h * Levels: j * Keys: k, key * Values: v, value * Comparisons: c */ private static final long serialVersionUID = -8627078645895051609L; /** * Generates the initial random seed for the cheaper per-instance * random number generators used in randomLevel. */ private static final Random seedGenerator = new Random(); /** * Special value used to identify base-level header */ private static final Object BASE_HEADER = new Object(); /** * The topmost head index of the skiplist. */ private transient volatile HeadIndex head; /** * The comparator used to maintain order in this map, or null * if using natural ordering. * @serial */ private final Comparator comparator; /** * Seed for simple random number generator. Not volatile since it * doesn't matter too much if different threads don't see updates. */ private transient int randomSeed; /** Lazily initialized key set */ private transient KeySet keySet; /** Lazily initialized entry set */ private transient EntrySet entrySet; /** Lazily initialized values collection */ private transient Values values; /** Lazily initialized descending key set */ private transient ConcurrentNavigableMap descendingMap; /** * Initializes or resets state. Needed by constructors, clone, * clear, readObject. and ConcurrentSkipListSet.clone. * (Note that comparator must be separately initialized.) */ final void initialize() { keySet = null; entrySet = null; values = null; descendingMap = null; randomSeed = seedGenerator.nextInt() | 0x0100; // ensure nonzero head = new HeadIndex(new Node(null, BASE_HEADER, null), null, null, 1); } /** * compareAndSet head node */ private synchronized boolean casHead(HeadIndex cmp, HeadIndex val) { if (head == cmp) { head = val; return true; } else { return false; } } /* ---------------- Nodes -------------- */ /** * Nodes hold keys and values, and are singly linked in sorted * order, possibly with some intervening marker nodes. The list is * headed by a dummy node accessible as head.node. The value field * is declared only as Object because it takes special non-V * values for marker and header nodes. */ static final class Node { final Object key; volatile Object value; volatile Node next; /** * Creates a new regular node. */ Node(Object key, Object value, Node next) { this.key = key; this.value = value; this.next = next; } /** * Creates a new marker node. A marker is distinguished by * having its value field point to itself. Marker nodes also * have null keys, a fact that is exploited in a few places, * but this doesn't distinguish markers from the base-level * header node (head.node), which also has a null key. */ Node(Node next) { this.key = null; this.value = this; this.next = next; } /** * compareAndSet value field */ synchronized boolean casValue(Object cmp, Object val) { if (value == cmp) { value = val; return true; } else { return false; } } /** * compareAndSet next field */ synchronized boolean casNext(Node cmp, Node val) { if (next == cmp) { next = val; return true; } else { return false; } } /** * Returns true if this node is a marker. This method isn't * actually called in any current code checking for markers * because callers will have already read value field and need * to use that read (not another done here) and so directly * test if value points to node. * @return true if this node is a marker node */ boolean isMarker() { return value == this; } /** * Returns true if this node is the header of base-level list. * @return true if this node is header node */ boolean isBaseHeader() { return value == BASE_HEADER; } /** * Tries to append a deletion marker to this node. * @param f the assumed current successor of this node * @return true if successful */ boolean appendMarker(Node f) { return casNext(f, new Node(f)); } /** * Helps out a deletion by appending marker or unlinking from * predecessor. This is called during traversals when value * field seen to be null. * @param b predecessor * @param f successor */ void helpDelete(Node b, Node f) { /* * Rechecking links and then doing only one of the * help-out stages per call tends to minimize CAS * interference among helping threads. */ if (f == next && this == b.next) { if (f == null || f.value != f) // not already marked appendMarker(f); else b.casNext(this, f.next); } } /** * Returns value if this node contains a valid key-value pair, * else null. * @return this node's value if it isn't a marker or header or * is deleted, else null. */ Object getValidValue() { Object v = value; if (v == this || v == BASE_HEADER) return null; return v; } /** * Creates and returns a new SimpleImmutableEntry holding current * mapping if this node holds a valid value, else null. * @return new entry or null */ AbstractMap.SimpleImmutableEntry createSnapshot() { Object v = getValidValue(); if (v == null) return null; return new AbstractMap.SimpleImmutableEntry(key, v); } } /* ---------------- Indexing -------------- */ /** * Index nodes represent the levels of the skip list. Note that * even though both Nodes and Indexes have forward-pointing * fields, they have different types and are handled in different * ways, that can't nicely be captured by placing field in a * shared abstract class. */ static class Index { final Node node; final Index down; volatile Index right; /** * Creates index node with given values. */ Index(Node node, Index down, Index right) { this.node = node; this.down = down; this.right = right; } /** * compareAndSet right field */ final synchronized boolean casRight(Index cmp, Index val) { if (right == cmp) { right = val; return true; } return false; } /** * Returns true if the node this indexes has been deleted. * @return true if indexed node is known to be deleted */ final boolean indexesDeletedNode() { return node.value == null; } /** * Tries to CAS newSucc as successor. To minimize races with * unlink that may lose this index node, if the node being * indexed is known to be deleted, it doesn't try to link in. * @param succ the expected current successor * @param newSucc the new successor * @return true if successful */ final boolean link(Index succ, Index newSucc) { Node n = node; newSucc.right = succ; return n.value != null && casRight(succ, newSucc); } /** * Tries to CAS right field to skip over apparent successor * succ. Fails (forcing a retraversal by caller) if this node * is known to be deleted. * @param succ the expected current successor * @return true if successful */ final boolean unlink(Index succ) { return !indexesDeletedNode() && casRight(succ, succ.right); } } /* ---------------- Head nodes -------------- */ /** * Nodes heading each level keep track of their level. */ static final class HeadIndex extends Index { final int level; HeadIndex(Node node, Index down, Index right, int level) { super(node, down, right); this.level = level; } } /* ---------------- Comparison utilities -------------- */ /** * Represents a key with a comparator as a Comparable. * * Because most sorted collections seem to use natural ordering on * Comparables (Strings, Integers, etc), most internal methods are * geared to use them. This is generally faster than checking * per-comparison whether to use comparator or comparable because * it doesn't require a (Comparable) cast for each comparison. * (Optimizers can only sometimes remove such redundant checks * themselves.) When Comparators are used, * ComparableUsingComparators are created so that they act in the * same way as natural orderings. This penalizes use of * Comparators vs Comparables, which seems like the right * tradeoff. */ static final class ComparableUsingComparator implements Comparable { final Object actualKey; final Comparator cmp; ComparableUsingComparator(Object key, Comparator cmp) { this.actualKey = key; this.cmp = cmp; } public int compareTo(Object k2) { return cmp.compare(actualKey, k2); } } /** * If using comparator, return a ComparableUsingComparator, else * cast key as Comparable, which may cause ClassCastException, * which is propagated back to caller. */ private Comparable comparable(Object key) throws ClassCastException { if (key == null) throw new NullPointerException(); if (comparator != null) return new ComparableUsingComparator(key, comparator); else return (Comparable)key; } /** * Compares using comparator or natural ordering. Used when the * ComparableUsingComparator approach doesn't apply. */ int compare(Object k1, Object k2) throws ClassCastException { Comparator cmp = comparator; if (cmp != null) return cmp.compare(k1, k2); else return ((Comparable)k1).compareTo(k2); } /** * Returns true if given key greater than or equal to least and * strictly less than fence, bypassing either test if least or * fence are null. Needed mainly in submap operations. */ boolean inHalfOpenRange(Object key, Object least, Object fence) { if (key == null) throw new NullPointerException(); return ((least == null || compare(key, least) >= 0) && (fence == null || compare(key, fence) < 0)); } /** * Returns true if given key greater than or equal to least and less * or equal to fence. Needed mainly in submap operations. */ boolean inOpenRange(Object key, Object least, Object fence) { if (key == null) throw new NullPointerException(); return ((least == null || compare(key, least) >= 0) && (fence == null || compare(key, fence) <= 0)); } /* ---------------- Traversal -------------- */ /** * Returns a base-level node with key strictly less than given key, * or the base-level header if there is no such node. Also * unlinks indexes to deleted nodes found along the way. Callers * rely on this side-effect of clearing indices to deleted nodes. * @param key the key * @return a predecessor of key */ private Node findPredecessor(Comparable key) { if (key == null) throw new NullPointerException(); // don't postpone errors for (;;) { Index q = head; Index r = q.right; for (;;) { if (r != null) { Node n = r.node; Object k = n.key; if (n.value == null) { if (!q.unlink(r)) break; // restart r = q.right; // reread r continue; } if (key.compareTo(k) > 0) { q = r; r = r.right; continue; } } Index d = q.down; if (d != null) { q = d; r = d.right; } else return q.node; } } } /** * Returns node holding key or null if no such, clearing out any * deleted nodes seen along the way. Repeatedly traverses at * base-level looking for key starting at predecessor returned * from findPredecessor, processing base-level deletions as * encountered. Some callers rely on this side-effect of clearing * deleted nodes. * * Restarts occur, at traversal step centered on node n, if: * * (1) After reading n's next field, n is no longer assumed * predecessor b's current successor, which means that * we don't have a consistent 3-node snapshot and so cannot * unlink any subsequent deleted nodes encountered. * * (2) n's value field is null, indicating n is deleted, in * which case we help out an ongoing structural deletion * before retrying. Even though there are cases where such * unlinking doesn't require restart, they aren't sorted out * here because doing so would not usually outweigh cost of * restarting. * * (3) n is a marker or n's predecessor's value field is null, * indicating (among other possibilities) that * findPredecessor returned a deleted node. We can't unlink * the node because we don't know its predecessor, so rely * on another call to findPredecessor to notice and return * some earlier predecessor, which it will do. This check is * only strictly needed at beginning of loop, (and the * b.value check isn't strictly needed at all) but is done * each iteration to help avoid contention with other * threads by callers that will fail to be able to change * links, and so will retry anyway. * * The traversal loops in doPut, doRemove, and findNear all * include the same three kinds of checks. And specialized * versions appear in findFirst, and findLast and their * variants. They can't easily share code because each uses the * reads of fields held in locals occurring in the orders they * were performed. * * @param key the key * @return node holding key, or null if no such */ private Node findNode(Comparable key) { for (;;) { Node b = findPredecessor(key); Node n = b.next; for (;;) { if (n == null) return null; Node f = n.next; if (n != b.next) // inconsistent read break; Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break; } if (v == n || b.value == null) // b is deleted break; int c = key.compareTo(n.key); if (c == 0) return n; if (c < 0) return null; b = n; n = f; } } } /** * Specialized variant of findNode to perform Map.get. Does a weak * traversal, not bothering to fix any deleted index nodes, * returning early if it happens to see key in index, and passing * over any deleted base nodes, falling back to getUsingFindNode * only if it would otherwise return value from an ongoing * deletion. Also uses "bound" to eliminate need for some * comparisons (see Pugh Cookbook). Also folds uses of null checks * and node-skipping because markers have null keys. * @param okey the key * @return the value, or null if absent */ private Object doGet(Object okey) { Comparable key = comparable(okey); Node bound = null; Index q = head; Index r = q.right; Node n; Object k; int c; for (;;) { Index d; // Traverse rights if (r != null && (n = r.node) != bound && (k = n.key) != null) { if ((c = key.compareTo(k)) > 0) { q = r; r = r.right; continue; } else if (c == 0) { Object v = n.value; return (v != null)? v : getUsingFindNode(key); } else bound = n; } // Traverse down if ((d = q.down) != null) { q = d; r = d.right; } else break; } // Traverse nexts for (n = q.node.next; n != null; n = n.next) { if ((k = n.key) != null) { if ((c = key.compareTo(k)) == 0) { Object v = n.value; return (v != null)? v : getUsingFindNode(key); } else if (c < 0) break; } } return null; } /** * Performs map.get via findNode. Used as a backup if doGet * encounters an in-progress deletion. * @param key the key * @return the value, or null if absent */ private Object getUsingFindNode(Comparable key) { /* * Loop needed here and elsewhere in case value field goes * null just as it is about to be returned, in which case we * lost a race with a deletion, so must retry. */ for (;;) { Node n = findNode(key); if (n == null) return null; Object v = n.value; if (v != null) return v; } } /* ---------------- Insertion -------------- */ /** * Main insertion method. Adds element if not present, or * replaces value if present and onlyIfAbsent is false. * @param kkey the key * @param value the value that must be associated with key * @param onlyIfAbsent if should not insert if already present * @return the old value, or null if newly inserted */ private Object doPut(Object kkey, Object value, boolean onlyIfAbsent) { Comparable key = comparable(kkey); for (;;) { Node b = findPredecessor(key); Node n = b.next; for (;;) { if (n != null) { Node f = n.next; if (n != b.next) // inconsistent read break;; Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break; } if (v == n || b.value == null) // b is deleted break; int c = key.compareTo(n.key); if (c > 0) { b = n; n = f; continue; } if (c == 0) { if (onlyIfAbsent || n.casValue(v, value)) return v; else break; // restart if lost race to replace value } // else c < 0; fall through } Node z = new Node(kkey, value, n); if (!b.casNext(n, z)) break; // restart if lost race to append to b int level = randomLevel(); if (level > 0) insertIndex(z, level); return null; } } } /** * Returns a random level for inserting a new node. * Hardwired to k=1, p=0.5, max 31 (see above and * Pugh's "Skip List Cookbook", sec 3.4). * * This uses the simplest of the generators described in George * Marsaglia's "Xorshift RNGs" paper. This is not a high-quality * generator but is acceptable here. */ private int randomLevel() { int x = randomSeed; x ^= x << 13; x ^= x >>> 17; randomSeed = x ^= x << 5; if ((x & 0x8001) != 0) // test highest and lowest bits return 0; int level = 1; while (((x >>>= 1) & 1) != 0) ++level; return level; } /** * Creates and adds index nodes for the given node. * @param z the node * @param level the level of the index */ private void insertIndex(Node z, int level) { HeadIndex h = head; int max = h.level; if (level <= max) { Index idx = null; for (int i = 1; i <= level; ++i) idx = new Index(z, idx, null); addIndex(idx, h, level); } else { // Add a new level /* * To reduce interference by other threads checking for * empty levels in tryReduceLevel, new levels are added * with initialized right pointers. Which in turn requires * keeping levels in an array to access them while * creating new head index nodes from the opposite * direction. */ level = max + 1; Index[] idxs = (Index[])new Index[level+1]; Index idx = null; for (int i = 1; i <= level; ++i) idxs[i] = idx = new Index(z, idx, null); HeadIndex oldh; int k; for (;;) { oldh = head; int oldLevel = oldh.level; if (level <= oldLevel) { // lost race to add level k = level; break; } HeadIndex newh = oldh; Node oldbase = oldh.node; for (int j = oldLevel+1; j <= level; ++j) newh = new HeadIndex(oldbase, newh, idxs[j], j); if (casHead(oldh, newh)) { k = oldLevel; break; } } addIndex(idxs[k], oldh, k); } } /** * Adds given index nodes from given level down to 1. * @param idx the topmost index node being inserted * @param h the value of head to use to insert. This must be * snapshotted by callers to provide correct insertion level * @param indexLevel the level of the index */ private void addIndex(Index idx, HeadIndex h, int indexLevel) { // Track next level to insert in case of retries int insertionLevel = indexLevel; Comparable key = comparable(idx.node.key); if (key == null) throw new NullPointerException(); // Similar to findPredecessor, but adding index nodes along // path to key. for (;;) { int j = h.level; Index q = h; Index r = q.right; Index t = idx; for (;;) { if (r != null) { Node n = r.node; // compare before deletion check avoids needing recheck int c = key.compareTo(n.key); if (n.value == null) { if (!q.unlink(r)) break; r = q.right; continue; } if (c > 0) { q = r; r = r.right; continue; } } if (j == insertionLevel) { // Don't insert index if node already deleted if (t.indexesDeletedNode()) { findNode(key); // cleans up return; } if (!q.link(r, t)) break; // restart if (--insertionLevel == 0) { // need final deletion check before return if (t.indexesDeletedNode()) findNode(key); return; } } if (--j >= insertionLevel && j < indexLevel) t = t.down; q = q.down; r = q.right; } } } /* ---------------- Deletion -------------- */ /** * Main deletion method. Locates node, nulls value, appends a * deletion marker, unlinks predecessor, removes associated index * nodes, and possibly reduces head index level. * * Index nodes are cleared out simply by calling findPredecessor. * which unlinks indexes to deleted nodes found along path to key, * which will include the indexes to this node. This is done * unconditionally. We can't check beforehand whether there are * index nodes because it might be the case that some or all * indexes hadn't been inserted yet for this node during initial * search for it, and we'd like to ensure lack of garbage * retention, so must call to be sure. * * @param okey the key * @param value if non-null, the value that must be * associated with key * @return the node, or null if not found */ final Object doRemove(Object okey, Object value) { Comparable key = comparable(okey); for (;;) { Node b = findPredecessor(key); Node n = b.next; for (;;) { if (n == null) return null; Node f = n.next; if (n != b.next) // inconsistent read break; Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break; } if (v == n || b.value == null) // b is deleted break; int c = key.compareTo(n.key); if (c < 0) return null; if (c > 0) { b = n; n = f; continue; } if (value != null && !value.equals(v)) return null; if (!n.casValue(v, null)) break; if (!n.appendMarker(f) || !b.casNext(n, f)) findNode(key); // Retry via findNode else { findPredecessor(key); // Clean index if (head.right == null) tryReduceLevel(); } return v; } } } /** * Possibly reduce head level if it has no nodes. This method can * (rarely) make mistakes, in which case levels can disappear even * though they are about to contain index nodes. This impacts * performance, not correctness. To minimize mistakes as well as * to reduce hysteresis, the level is reduced by one only if the * topmost three levels look empty. Also, if the removed level * looks non-empty after CAS, we try to change it back quick * before anyone notices our mistake! (This trick works pretty * well because this method will practically never make mistakes * unless current thread stalls immediately before first CAS, in * which case it is very unlikely to stall again immediately * afterwards, so will recover.) * * We put up with all this rather than just let levels grow * because otherwise, even a small map that has undergone a large * number of insertions and removals will have a lot of levels, * slowing down access more than would an occasional unwanted * reduction. */ private void tryReduceLevel() { HeadIndex h = head; HeadIndex d; HeadIndex e; if (h.level > 3 && (d = (HeadIndex)h.down) != null && (e = (HeadIndex)d.down) != null && e.right == null && d.right == null && h.right == null && casHead(h, d) && // try to set h.right != null) // recheck casHead(d, h); // try to backout } /* ---------------- Finding and removing first element -------------- */ /** * Specialized variant of findNode to get first valid node. * @return first node or null if empty */ Node findFirst() { for (;;) { Node b = head.node; Node n = b.next; if (n == null) return null; if (n.value != null) return n; n.helpDelete(b, n.next); } } /** * Removes first entry; returns its snapshot. * @return null if empty, else snapshot of first entry */ Map.Entry doRemoveFirstEntry() { for (;;) { Node b = head.node; Node n = b.next; if (n == null) return null; Node f = n.next; if (n != b.next) continue; Object v = n.value; if (v == null) { n.helpDelete(b, f); continue; } if (!n.casValue(v, null)) continue; if (!n.appendMarker(f) || !b.casNext(n, f)) findFirst(); // retry clearIndexToFirst(); return new AbstractMap.SimpleImmutableEntry(n.key, v); } } /** * Clears out index nodes associated with deleted first entry. */ private void clearIndexToFirst() { for (;;) { Index q = head; for (;;) { Index r = q.right; if (r != null && r.indexesDeletedNode() && !q.unlink(r)) break; if ((q = q.down) == null) { if (head.right == null) tryReduceLevel(); return; } } } } /* ---------------- Finding and removing last element -------------- */ /** * Specialized version of find to get last valid node. * @return last node or null if empty */ Node findLast() { /* * findPredecessor can't be used to traverse index level * because this doesn't use comparisons. So traversals of * both levels are folded together. */ Index q = head; for (;;) { Index d, r; if ((r = q.right) != null) { if (r.indexesDeletedNode()) { q.unlink(r); q = head; // restart } else q = r; } else if ((d = q.down) != null) { q = d; } else { Node b = q.node; Node n = b.next; for (;;) { if (n == null) return (b.isBaseHeader())? null : b; Node f = n.next; // inconsistent read if (n != b.next) break; Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break; } if (v == n || b.value == null) // b is deleted break; b = n; n = f; } q = head; // restart } } } /** * Specialized variant of findPredecessor to get predecessor of last * valid node. Needed when removing the last entry. It is possible * that all successors of returned node will have been deleted upon * return, in which case this method can be retried. * @return likely predecessor of last node */ private Node findPredecessorOfLast() { for (;;) { Index q = head; for (;;) { Index d, r; if ((r = q.right) != null) { if (r.indexesDeletedNode()) { q.unlink(r); break; // must restart } // proceed as far across as possible without overshooting if (r.node.next != null) { q = r; continue; } } if ((d = q.down) != null) q = d; else return q.node; } } } /** * Removes last entry; returns its snapshot. * Specialized variant of doRemove. * @return null if empty, else snapshot of last entry */ Map.Entry doRemoveLastEntry() { for (;;) { Node b = findPredecessorOfLast(); Node n = b.next; if (n == null) { if (b.isBaseHeader()) // empty return null; else continue; // all b's successors are deleted; retry } for (;;) { Node f = n.next; if (n != b.next) // inconsistent read break; Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break; } if (v == n || b.value == null) // b is deleted break; if (f != null) { b = n; n = f; continue; } if (!n.casValue(v, null)) break; Object key = n.key; Comparable ck = comparable(key); if (!n.appendMarker(f) || !b.casNext(n, f)) findNode(ck); // Retry via findNode else { findPredecessor(ck); // Clean index if (head.right == null) tryReduceLevel(); } return new AbstractMap.SimpleImmutableEntry(key, v); } } } /* ---------------- Relational operations -------------- */ // Control values OR'ed as arguments to findNear private static final int EQ = 1; private static final int LT = 2; private static final int GT = 0; // Actually checked as !LT /** * Utility for ceiling, floor, lower, higher methods. * @param kkey the key * @param rel the relation -- OR'ed combination of EQ, LT, GT * @return nearest node fitting relation, or null if no such */ Node findNear(Object kkey, int rel) { Comparable key = comparable(kkey); for (;;) { Node b = findPredecessor(key); Node n = b.next; for (;;) { if (n == null) return ((rel & LT) == 0 || b.isBaseHeader())? null : b; Node f = n.next; if (n != b.next) // inconsistent read break; Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break; } if (v == n || b.value == null) // b is deleted break; int c = key.compareTo(n.key); if ((c == 0 && (rel & EQ) != 0) || (c < 0 && (rel & LT) == 0)) return n; if ( c <= 0 && (rel & LT) != 0) return (b.isBaseHeader())? null : b; b = n; n = f; } } } /** * Returns SimpleImmutableEntry for results of findNear. * @param key the key * @param rel the relation -- OR'ed combination of EQ, LT, GT * @return Entry fitting relation, or null if no such */ AbstractMap.SimpleImmutableEntry getNear(Object key, int rel) { for (;;) { Node n = findNear(key, rel); if (n == null) return null; AbstractMap.SimpleImmutableEntry e = n.createSnapshot(); if (e != null) return e; } } /* ---------------- Constructors -------------- */ /** * Constructs a new, empty map, sorted according to the * {@linkplain Comparable natural ordering} of the keys. */ public ConcurrentSkipListMap() { this.comparator = null; initialize(); } /** * Constructs a new, empty map, sorted according to the specified * comparator. * * @param comparator the comparator that will be used to order this map. * If null, the {@linkplain Comparable natural * ordering} of the keys will be used. */ public ConcurrentSkipListMap(Comparator comparator) { this.comparator = comparator; initialize(); } /** * Constructs a new map containing the same mappings as the given map, * sorted according to the {@linkplain Comparable natural ordering} of * the keys. * * @param m the map whose mappings are to be placed in this map * @throws ClassCastException if the keys in m are not * {@link Comparable}, or are not mutually comparable * @throws NullPointerException if the specified map or any of its keys * or values are null */ public ConcurrentSkipListMap(Map m) { this.comparator = null; initialize(); putAll(m); } /** * Constructs a new map containing the same mappings and using the * same ordering as the specified sorted map. * * @param m the sorted map whose mappings are to be placed in this * map, and whose comparator is to be used to sort this map * @throws NullPointerException if the specified sorted map or any of * its keys or values are null */ public ConcurrentSkipListMap(SortedMap m) { this.comparator = m.comparator(); initialize(); buildFromSorted(m); } /** * Returns a shallow copy of this ConcurrentSkipListMap * instance. (The keys and values themselves are not cloned.) * * @return a shallow copy of this map */ public Object clone() { ConcurrentSkipListMap clone = null; try { clone = (ConcurrentSkipListMap) super.clone(); } catch (CloneNotSupportedException e) { throw new InternalError(); } clone.initialize(); clone.buildFromSorted(this); return clone; } /** * Streamlined bulk insertion to initialize from elements of * given sorted map. Call only from constructor or clone * method. */ private void buildFromSorted(SortedMap map) { if (map == null) throw new NullPointerException(); HeadIndex h = head; Node basepred = h.node; // Track the current rightmost node at each level. Uses an // ArrayList to avoid committing to initial or maximum level. ArrayList preds = new ArrayList(); // initialize for (int i = 0; i <= h.level; ++i) preds.add(null); Index q = h; for (int i = h.level; i > 0; --i) { preds.set(i, q); q = q.down; } Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry)it.next(); int j = randomLevel(); if (j > h.level) j = h.level + 1; Object k = e.getKey(); Object v = e.getValue(); if (k == null || v == null) throw new NullPointerException(); Node z = new Node(k, v, null); basepred.next = z; basepred = z; if (j > 0) { Index idx = null; for (int i = 1; i <= j; ++i) { idx = new Index(z, idx, null); if (i > h.level) h = new HeadIndex(h.node, h, idx, i); if (i < preds.size()) { ((Index)preds.get(i)).right = idx; preds.set(i, idx); } else preds.add(idx); } } } head = h; } /* ---------------- Serialization -------------- */ /** * Save the state of this map to a stream. * * @serialData The key (Object) and value (Object) for each * key-value mapping represented by the map, followed by * null. The key-value mappings are emitted in key-order * (as determined by the Comparator, or by the keys' natural * ordering if no Comparator). */ private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException { // Write out the Comparator and any hidden stuff s.defaultWriteObject(); // Write out keys and values (alternating) for (Node n = findFirst(); n != null; n = n.next) { Object v = n.getValidValue(); if (v != null) { s.writeObject(n.key); s.writeObject(v); } } s.writeObject(null); } /** * Reconstitute the map from a stream. */ private void readObject(final java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { // Read in the Comparator and any hidden stuff s.defaultReadObject(); // Reset transients initialize(); /* * This is nearly identical to buildFromSorted, but is * distinct because readObject calls can't be nicely adapted * as the kind of iterator needed by buildFromSorted. (They * can be, but doing so requires type cheats and/or creation * of adaptor classes.) It is simpler to just adapt the code. */ HeadIndex h = head; Node basepred = h.node; ArrayList preds = new ArrayList(); for (int i = 0; i <= h.level; ++i) preds.add(null); Index q = h; for (int i = h.level; i > 0; --i) { preds.set(i, q); q = q.down; } for (;;) { Object k = s.readObject(); if (k == null) break; Object v = s.readObject(); if (v == null) throw new NullPointerException(); Object key = k; Object val = v; int j = randomLevel(); if (j > h.level) j = h.level + 1; Node z = new Node(key, val, null); basepred.next = z; basepred = z; if (j > 0) { Index idx = null; for (int i = 1; i <= j; ++i) { idx = new Index(z, idx, null); if (i > h.level) h = new HeadIndex(h.node, h, idx, i); if (i < preds.size()) { ((Index)preds.get(i)).right = idx; preds.set(i, idx); } else preds.add(idx); } } } head = h; } /* ------ Map API methods ------ */ /** * Returns true if this map contains a mapping for the specified * key. * * @param key key whose presence in this map is to be tested * @return true if this map contains a mapping for the specified key * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key is null */ public boolean containsKey(Object key) { return doGet(key) != null; } /** * Returns the value to which the specified key is mapped, * or {@code null} if this map contains no mapping for the key. * *

More formally, if this map contains a mapping from a key * {@code k} to a value {@code v} such that {@code key} compares * equal to {@code k} according to the map's ordering, then this * method returns {@code v}; otherwise it returns {@code null}. * (There can be at most one such mapping.) * * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key is null */ public Object get(Object key) { return doGet(key); } /** * Associates the specified value with the specified key in this map. * If the map previously contained a mapping for the key, the old * value is replaced. * * @param key key with which the specified value is to be associated * @param value value to be associated with the specified key * @return the previous value associated with the specified key, or * null if there was no mapping for the key * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key or value is null */ public Object put(Object key, Object value) { if (value == null) throw new NullPointerException(); return doPut(key, value, false); } /** * Removes the mapping for the specified key from this map if present. * * @param key key for which mapping should be removed * @return the previous value associated with the specified key, or * null if there was no mapping for the key * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key is null */ public Object remove(Object key) { return doRemove(key, null); } /** * Returns true if this map maps one or more keys to the * specified value. This operation requires time linear in the * map size. * * @param value value whose presence in this map is to be tested * @return true if a mapping to value exists; * false otherwise * @throws NullPointerException if the specified value is null */ public boolean containsValue(Object value) { if (value == null) throw new NullPointerException(); for (Node n = findFirst(); n != null; n = n.next) { Object v = n.getValidValue(); if (v != null && value.equals(v)) return true; } return false; } /** * Returns the number of key-value mappings in this map. If this map * contains more than Integer.MAX_VALUE elements, it * returns Integer.MAX_VALUE. * *

Beware that, unlike in most collections, this method is * NOT a constant-time operation. Because of the * asynchronous nature of these maps, determining the current * number of elements requires traversing them all to count them. * Additionally, it is possible for the size to change during * execution of this method, in which case the returned result * will be inaccurate. Thus, this method is typically not very * useful in concurrent applications. * * @return the number of elements in this map */ public int size() { long count = 0; for (Node n = findFirst(); n != null; n = n.next) { if (n.getValidValue() != null) ++count; } return (count >= Integer.MAX_VALUE)? Integer.MAX_VALUE : (int)count; } /** * Returns true if this map contains no key-value mappings. * @return true if this map contains no key-value mappings */ public boolean isEmpty() { return findFirst() == null; } /** * Removes all of the mappings from this map. */ public void clear() { initialize(); } /* ---------------- View methods -------------- */ /* * Note: Lazy initialization works for views because view classes * are stateless/immutable so it doesn't matter wrt correctness if * more than one is created (which will only rarely happen). Even * so, the following idiom conservatively ensures that the method * returns the one it created if it does so, not one created by * another racing thread. */ /** * Returns a {@link NavigableSet} view of the keys contained in this map. * The set's iterator returns the keys in ascending order. * The set is backed by the map, so changes to the map are * reflected in the set, and vice-versa. The set supports element * removal, which removes the corresponding mapping from the map, * via the {@code Iterator.remove}, {@code Set.remove}, * {@code removeAll}, {@code retainAll}, and {@code clear} * operations. It does not support the {@code add} or {@code addAll} * operations. * *

The view's {@code iterator} is a "weakly consistent" iterator * that will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. * *

This method is equivalent to method {@code navigableKeySet}. * * @return a navigable set view of the keys in this map */ public Set keySet() { KeySet ks = keySet; return (ks != null) ? ks : (keySet = new KeySet(this)); } public NavigableSet navigableKeySet() { KeySet ks = keySet; return (ks != null) ? ks : (keySet = new KeySet(this)); } /** * Returns a {@link Collection} view of the values contained in this map. * The collection's iterator returns the values in ascending order * of the corresponding keys. * The collection is backed by the map, so changes to the map are * reflected in the collection, and vice-versa. The collection * supports element removal, which removes the corresponding * mapping from the map, via the Iterator.remove, * Collection.remove, removeAll, * retainAll and clear operations. It does not * support the add or addAll operations. * *

The view's iterator is a "weakly consistent" iterator * that will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. */ public Collection values() { Values vs = values; return (vs != null) ? vs : (values = new Values(this)); } /** * Returns a {@link Set} view of the mappings contained in this map. * The set's iterator returns the entries in ascending key order. * The set is backed by the map, so changes to the map are * reflected in the set, and vice-versa. The set supports element * removal, which removes the corresponding mapping from the map, * via the Iterator.remove, Set.remove, * removeAll, retainAll and clear * operations. It does not support the add or * addAll operations. * *

The view's iterator is a "weakly consistent" iterator * that will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. * *

The Map.Entry elements returned by * iterator.next() do not support the * setValue operation. * * @return a set view of the mappings contained in this map, * sorted in ascending key order */ public Set entrySet() { EntrySet es = entrySet; return (es != null) ? es : (entrySet = new EntrySet(this)); } public NavigableMap descendingMap() { ConcurrentNavigableMap dm = descendingMap; return (dm != null) ? dm : (descendingMap = new SubMap (this, null, false, null, false, true)); } public NavigableSet descendingKeySet() { return descendingMap().navigableKeySet(); } /* ---------------- AbstractMap Overrides -------------- */ /** * Compares the specified object with this map for equality. * Returns true if the given object is also a map and the * two maps represent the same mappings. More formally, two maps * m1 and m2 represent the same mappings if * m1.entrySet().equals(m2.entrySet()). This * operation may return misleading results if either map is * concurrently modified during execution of this method. * * @param o object to be compared for equality with this map * @return true if the specified object is equal to this map */ public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof Map)) return false; Map m = (Map) o; try { for (Iterator itr = this.entrySet().iterator(); itr.hasNext();) { Map.Entry e = (Map.Entry)itr.next(); if (! e.getValue().equals(m.get(e.getKey()))) return false; } for (Iterator itr = m.entrySet().iterator(); itr.hasNext();) { Map.Entry e = (Map.Entry)itr.next(); Object k = e.getKey(); Object v = e.getValue(); if (k == null || v == null || !v.equals(get(k))) return false; } return true; } catch (ClassCastException unused) { return false; } catch (NullPointerException unused) { return false; } } /* ------ ConcurrentMap API methods ------ */ /** * {@inheritDoc} * * @return the previous value associated with the specified key, * or null if there was no mapping for the key * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key or value is null */ public Object putIfAbsent(Object key, Object value) { if (value == null) throw new NullPointerException(); return doPut(key, value, true); } /** * {@inheritDoc} * * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key is null */ public boolean remove(Object key, Object value) { if (key == null) throw new NullPointerException(); if (value == null) return false; return doRemove(key, value) != null; } /** * {@inheritDoc} * * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if any of the arguments are null */ public boolean replace(Object key, Object oldValue, Object newValue) { if (oldValue == null || newValue == null) throw new NullPointerException(); Comparable k = comparable(key); for (;;) { Node n = findNode(k); if (n == null) return false; Object v = n.value; if (v != null) { if (!oldValue.equals(v)) return false; if (n.casValue(v, newValue)) return true; } } } /** * {@inheritDoc} * * @return the previous value associated with the specified key, * or null if there was no mapping for the key * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key or value is null */ public Object replace(Object key, Object value) { if (value == null) throw new NullPointerException(); Comparable k = comparable(key); for (;;) { Node n = findNode(k); if (n == null) return null; Object v = n.value; if (v != null && n.casValue(v, value)) return v; } } /* ------ SortedMap API methods ------ */ public Comparator comparator() { return comparator; } /** * @throws NoSuchElementException {@inheritDoc} */ public Object firstKey() { Node n = findFirst(); if (n == null) throw new NoSuchElementException(); return n.key; } /** * @throws NoSuchElementException {@inheritDoc} */ public Object lastKey() { Node n = findLast(); if (n == null) throw new NoSuchElementException(); return n.key; } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if {@code fromKey} or {@code toKey} is null * @throws IllegalArgumentException {@inheritDoc} */ public NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive) { if (fromKey == null || toKey == null) throw new NullPointerException(); return new SubMap (this, fromKey, fromInclusive, toKey, toInclusive, false); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if {@code toKey} is null * @throws IllegalArgumentException {@inheritDoc} */ public NavigableMap headMap(Object toKey, boolean inclusive) { if (toKey == null) throw new NullPointerException(); return new SubMap (this, null, false, toKey, inclusive, false); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if {@code fromKey} is null * @throws IllegalArgumentException {@inheritDoc} */ public NavigableMap tailMap(Object fromKey, boolean inclusive) { if (fromKey == null) throw new NullPointerException(); return new SubMap (this, fromKey, inclusive, null, false, false); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if {@code fromKey} or {@code toKey} is null * @throws IllegalArgumentException {@inheritDoc} */ public SortedMap subMap(Object fromKey, Object toKey) { return subMap(fromKey, true, toKey, false); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if {@code toKey} is null * @throws IllegalArgumentException {@inheritDoc} */ public SortedMap headMap(Object toKey) { return headMap(toKey, false); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if {@code fromKey} is null * @throws IllegalArgumentException {@inheritDoc} */ public SortedMap tailMap(Object fromKey) { return tailMap(fromKey, true); } /* ---------------- Relational operations -------------- */ /** * Returns a key-value mapping associated with the greatest key * strictly less than the given key, or null if there is * no such key. The returned entry does not support the * Entry.setValue method. * * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified key is null */ public Map.Entry lowerEntry(Object key) { return getNear(key, LT); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified key is null */ public Object lowerKey(Object key) { Node n = findNear(key, LT); return (n == null)? null : n.key; } /** * Returns a key-value mapping associated with the greatest key * less than or equal to the given key, or null if there * is no such key. The returned entry does not support * the Entry.setValue method. * * @param key the key * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified key is null */ public Map.Entry floorEntry(Object key) { return getNear(key, LT|EQ); } /** * @param key the key * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified key is null */ public Object floorKey(Object key) { Node n = findNear(key, LT|EQ); return (n == null)? null : n.key; } /** * Returns a key-value mapping associated with the least key * greater than or equal to the given key, or null if * there is no such entry. The returned entry does not * support the Entry.setValue method. * * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified key is null */ public Map.Entry ceilingEntry(Object key) { return getNear(key, GT|EQ); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified key is null */ public Object ceilingKey(Object key) { Node n = findNear(key, GT|EQ); return (n == null)? null : n.key; } /** * Returns a key-value mapping associated with the least key * strictly greater than the given key, or null if there * is no such key. The returned entry does not support * the Entry.setValue method. * * @param key the key * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified key is null */ public Map.Entry higherEntry(Object key) { return getNear(key, GT); } /** * @param key the key * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified key is null */ public Object higherKey(Object key) { Node n = findNear(key, GT); return (n == null)? null : n.key; } /** * Returns a key-value mapping associated with the least * key in this map, or null if the map is empty. * The returned entry does not support * the Entry.setValue method. */ public Map.Entry firstEntry() { for (;;) { Node n = findFirst(); if (n == null) return null; AbstractMap.SimpleImmutableEntry e = n.createSnapshot(); if (e != null) return e; } } /** * Returns a key-value mapping associated with the greatest * key in this map, or null if the map is empty. * The returned entry does not support * the Entry.setValue method. */ public Map.Entry lastEntry() { for (;;) { Node n = findLast(); if (n == null) return null; AbstractMap.SimpleImmutableEntry e = n.createSnapshot(); if (e != null) return e; } } /** * Removes and returns a key-value mapping associated with * the least key in this map, or null if the map is empty. * The returned entry does not support * the Entry.setValue method. */ public Map.Entry pollFirstEntry() { return doRemoveFirstEntry(); } /** * Removes and returns a key-value mapping associated with * the greatest key in this map, or null if the map is empty. * The returned entry does not support * the Entry.setValue method. */ public Map.Entry pollLastEntry() { return doRemoveLastEntry(); } /* ---------------- Iterators -------------- */ /** * Base of iterator classes: */ abstract class Iter implements Iterator { /** the last node returned by next() */ Node lastReturned; /** the next node to return from next(); */ Node next; /** Cache of next value field to maintain weak consistency */ Object nextValue; /** Initializes ascending iterator for entire range. */ Iter() { for (;;) { next = findFirst(); if (next == null) break; Object x = next.value; if (x != null && x != next) { nextValue = x; break; } } } public final boolean hasNext() { return next != null; } /** Advances next to higher entry. */ final void advance() { if (next == null) throw new NoSuchElementException(); lastReturned = next; for (;;) { next = next.next; if (next == null) break; Object x = next.value; if (x != null && x != next) { nextValue = x; break; } } } public void remove() { Node l = lastReturned; if (l == null) throw new IllegalStateException(); // It would not be worth all of the overhead to directly // unlink from here. Using remove is fast enough. ConcurrentSkipListMap.this.remove(l.key); lastReturned = null; } } final class ValueIterator extends Iter { public Object next() { Object v = nextValue; advance(); return v; } } final class KeyIterator extends Iter { public Object next() { Node n = next; advance(); return n.key; } } final class EntryIterator extends Iter { public Object next() { Node n = next; Object v = nextValue; advance(); return new AbstractMap.SimpleImmutableEntry(n.key, v); } } // Factory methods for iterators needed by ConcurrentSkipListSet etc Iterator keyIterator() { return new KeyIterator(); } Iterator valueIterator() { return new ValueIterator(); } Iterator entryIterator() { return new EntryIterator(); } /* ---------------- View Classes -------------- */ /* * View classes are static, delegating to a ConcurrentNavigableMap * to allow use by SubMaps, which outweighs the ugliness of * needing type-tests for Iterator methods. */ static final List toList(Collection c) { // Using size() here would be a pessimization. List list = new ArrayList(); for (Iterator itr = c.iterator(); itr.hasNext();) { list.add(itr.next()); } return list; } static final class KeySet extends AbstractSet implements NavigableSet { private final ConcurrentNavigableMap m; KeySet(ConcurrentNavigableMap map) { m = map; } public int size() { return m.size(); } public boolean isEmpty() { return m.isEmpty(); } public boolean contains(Object o) { return m.containsKey(o); } public boolean remove(Object o) { return m.remove(o) != null; } public void clear() { m.clear(); } public Object lower(Object e) { return m.lowerKey(e); } public Object floor(Object e) { return m.floorKey(e); } public Object ceiling(Object e) { return m.ceilingKey(e); } public Object higher(Object e) { return m.higherKey(e); } public Comparator comparator() { return m.comparator(); } public Object first() { return m.firstKey(); } public Object last() { return m.lastKey(); } public Object pollFirst() { Map.Entry e = m.pollFirstEntry(); return e == null? null : e.getKey(); } public Object pollLast() { Map.Entry e = m.pollLastEntry(); return e == null? null : e.getKey(); } public Object[] toArray() { return toList(this).toArray(); } public Object[] toArray(Object[] a) { return toList(this).toArray(a); } public Iterator iterator() { if (m instanceof ConcurrentSkipListMap) return ((ConcurrentSkipListMap)m).keyIterator(); else return ((ConcurrentSkipListMap.SubMap)m).keyIterator(); } public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof Set)) return false; Collection c = (Collection) o; try { return containsAll(c) && c.containsAll(this); } catch (ClassCastException unused) { return false; } catch (NullPointerException unused) { return false; } } public Iterator descendingIterator() { return descendingSet().iterator(); } public NavigableSet subSet(Object fromElement, boolean fromInclusive, Object toElement, boolean toInclusive) { return new ConcurrentSkipListSet ((ConcurrentNavigableMap) m.subMap(fromElement, fromInclusive, toElement, toInclusive)); } public NavigableSet headSet(Object toElement, boolean inclusive) { return new ConcurrentSkipListSet( (ConcurrentNavigableMap)m.headMap(toElement, inclusive)); } public NavigableSet tailSet(Object fromElement, boolean inclusive) { return new ConcurrentSkipListSet( (ConcurrentNavigableMap)m.tailMap(fromElement, inclusive)); } public SortedSet subSet(Object fromElement, Object toElement) { return subSet(fromElement, true, toElement, false); } public SortedSet headSet(Object toElement) { return headSet(toElement, false); } public SortedSet tailSet(Object fromElement) { return tailSet(fromElement, true); } public NavigableSet descendingSet() { return new ConcurrentSkipListSet( (ConcurrentNavigableMap)m.descendingMap()); } } static final class Values extends AbstractCollection { private final ConcurrentNavigableMap m; Values(ConcurrentNavigableMap map) { m = map; } public Iterator iterator() { if (m instanceof ConcurrentSkipListMap) return ((ConcurrentSkipListMap)m).valueIterator(); else return ((SubMap)m).valueIterator(); } public boolean isEmpty() { return m.isEmpty(); } public int size() { return m.size(); } public boolean contains(Object o) { return m.containsValue(o); } public void clear() { m.clear(); } public Object[] toArray() { return toList(this).toArray(); } public Object[] toArray(Object[] a) { return toList(this).toArray(a); } } static final class EntrySet extends AbstractSet { private final ConcurrentNavigableMap m; EntrySet(ConcurrentNavigableMap map) { m = map; } public Iterator iterator() { if (m instanceof ConcurrentSkipListMap) return ((ConcurrentSkipListMap)m).entryIterator(); else return ((SubMap)m).entryIterator(); } public boolean contains(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry e = (Map.Entry)o; Object v = m.get(e.getKey()); return v != null && v.equals(e.getValue()); } public boolean remove(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry e = (Map.Entry)o; return m.remove(e.getKey(), e.getValue()); } public boolean isEmpty() { return m.isEmpty(); } public int size() { return m.size(); } public void clear() { m.clear(); } public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof Set)) return false; Collection c = (Collection) o; try { return containsAll(c) && c.containsAll(this); } catch (ClassCastException unused) { return false; } catch (NullPointerException unused) { return false; } } public Object[] toArray() { return toList(this).toArray(); } public Object[] toArray(Object[] a) { return toList(this).toArray(a); } } /** * Submaps returned by {@link ConcurrentSkipListMap} submap operations * represent a subrange of mappings of their underlying * maps. Instances of this class support all methods of their * underlying maps, differing in that mappings outside their range are * ignored, and attempts to add mappings outside their ranges result * in {@link IllegalArgumentException}. Instances of this class are * constructed only using the subMap, headMap, and * tailMap methods of their underlying maps. * * @serial include */ static final class SubMap extends AbstractMap implements ConcurrentNavigableMap, Cloneable, java.io.Serializable { private static final long serialVersionUID = -7647078645895051609L; /** Underlying map */ private final ConcurrentSkipListMap m; /** lower bound key, or null if from start */ private final Object lo; /** upper bound key, or null if to end */ private final Object hi; /** inclusion flag for lo */ private final boolean loInclusive; /** inclusion flag for hi */ private final boolean hiInclusive; /** direction */ private final boolean isDescending; // Lazily initialized view holders private transient KeySet keySetView; private transient Set entrySetView; private transient Collection valuesView; /** * Creates a new submap, initializing all fields */ SubMap(ConcurrentSkipListMap map, Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive, boolean isDescending) { if (fromKey != null && toKey != null && map.compare(fromKey, toKey) > 0) throw new IllegalArgumentException("inconsistent range"); this.m = map; this.lo = fromKey; this.hi = toKey; this.loInclusive = fromInclusive; this.hiInclusive = toInclusive; this.isDescending = isDescending; } /* ---------------- Utilities -------------- */ private boolean tooLow(Object key) { if (lo != null) { int c = m.compare(key, lo); if (c < 0 || (c == 0 && !loInclusive)) return true; } return false; } private boolean tooHigh(Object key) { if (hi != null) { int c = m.compare(key, hi); if (c > 0 || (c == 0 && !hiInclusive)) return true; } return false; } private boolean inBounds(Object key) { return !tooLow(key) && !tooHigh(key); } private void checkKeyBounds(Object key) throws IllegalArgumentException { if (key == null) throw new NullPointerException(); if (!inBounds(key)) throw new IllegalArgumentException("key out of range"); } /** * Returns true if node key is less than upper bound of range */ private boolean isBeforeEnd(ConcurrentSkipListMap.Node n) { if (n == null) return false; if (hi == null) return true; Object k = n.key; if (k == null) // pass by markers and headers return true; int c = m.compare(k, hi); if (c > 0 || (c == 0 && !hiInclusive)) return false; return true; } /** * Returns lowest node. This node might not be in range, so * most usages need to check bounds */ private ConcurrentSkipListMap.Node loNode() { if (lo == null) return m.findFirst(); else if (loInclusive) return m.findNear(lo, m.GT|m.EQ); else return m.findNear(lo, m.GT); } /** * Returns highest node. This node might not be in range, so * most usages need to check bounds */ private ConcurrentSkipListMap.Node hiNode() { if (hi == null) return m.findLast(); else if (hiInclusive) return m.findNear(hi, m.LT|m.EQ); else return m.findNear(hi, m.LT); } /** * Returns lowest absolute key (ignoring directonality) */ private Object lowestKey() { ConcurrentSkipListMap.Node n = loNode(); if (isBeforeEnd(n)) return n.key; else throw new NoSuchElementException(); } /** * Returns highest absolute key (ignoring directonality) */ private Object highestKey() { ConcurrentSkipListMap.Node n = hiNode(); if (n != null) { Object last = n.key; if (inBounds(last)) return last; } throw new NoSuchElementException(); } private Map.Entry lowestEntry() { for (;;) { ConcurrentSkipListMap.Node n = loNode(); if (!isBeforeEnd(n)) return null; Map.Entry e = n.createSnapshot(); if (e != null) return e; } } private Map.Entry highestEntry() { for (;;) { ConcurrentSkipListMap.Node n = hiNode(); if (n == null || !inBounds(n.key)) return null; Map.Entry e = n.createSnapshot(); if (e != null) return e; } } private Map.Entry removeLowest() { for (;;) { Node n = loNode(); if (n == null) return null; Object k = n.key; if (!inBounds(k)) return null; Object v = m.doRemove(k, null); if (v != null) return new AbstractMap.SimpleImmutableEntry(k, v); } } private Map.Entry removeHighest() { for (;;) { Node n = hiNode(); if (n == null) return null; Object k = n.key; if (!inBounds(k)) return null; Object v = m.doRemove(k, null); if (v != null) return new AbstractMap.SimpleImmutableEntry(k, v); } } /** * Submap version of ConcurrentSkipListMap.getNearEntry */ private Map.Entry getNearEntry(Object key, int rel) { if (isDescending) { // adjust relation for direction if ((rel & m.LT) == 0) rel |= m.LT; else rel &= ~m.LT; } if (tooLow(key)) return ((rel & m.LT) != 0)? null : lowestEntry(); if (tooHigh(key)) return ((rel & m.LT) != 0)? highestEntry() : null; for (;;) { Node n = m.findNear(key, rel); if (n == null || !inBounds(n.key)) return null; Object k = n.key; Object v = n.getValidValue(); if (v != null) return new AbstractMap.SimpleImmutableEntry(k, v); } } // Almost the same as getNearEntry, except for keys private Object getNearKey(Object key, int rel) { if (isDescending) { // adjust relation for direction if ((rel & m.LT) == 0) rel |= m.LT; else rel &= ~m.LT; } if (tooLow(key)) { if ((rel & m.LT) == 0) { ConcurrentSkipListMap.Node n = loNode(); if (isBeforeEnd(n)) return n.key; } return null; } if (tooHigh(key)) { if ((rel & m.LT) != 0) { ConcurrentSkipListMap.Node n = hiNode(); if (n != null) { Object last = n.key; if (inBounds(last)) return last; } } return null; } for (;;) { Node n = m.findNear(key, rel); if (n == null || !inBounds(n.key)) return null; Object k = n.key; Object v = n.getValidValue(); if (v != null) return k; } } /* ---------------- Map API methods -------------- */ public boolean containsKey(Object key) { if (key == null) throw new NullPointerException(); Object k = key; return inBounds(k) && m.containsKey(k); } public Object get(Object key) { if (key == null) throw new NullPointerException(); Object k = key; return ((!inBounds(k)) ? null : m.get(k)); } public Object put(Object key, Object value) { checkKeyBounds(key); return m.put(key, value); } public Object remove(Object key) { Object k = key; return (!inBounds(k))? null : m.remove(k); } public int size() { long count = 0; for (ConcurrentSkipListMap.Node n = loNode(); isBeforeEnd(n); n = n.next) { if (n.getValidValue() != null) ++count; } return count >= Integer.MAX_VALUE? Integer.MAX_VALUE : (int)count; } public boolean isEmpty() { return !isBeforeEnd(loNode()); } public boolean containsValue(Object value) { if (value == null) throw new NullPointerException(); for (ConcurrentSkipListMap.Node n = loNode(); isBeforeEnd(n); n = n.next) { Object v = n.getValidValue(); if (v != null && value.equals(v)) return true; } return false; } public void clear() { for (ConcurrentSkipListMap.Node n = loNode(); isBeforeEnd(n); n = n.next) { if (n.getValidValue() != null) m.remove(n.key); } } /* ---------------- ConcurrentMap API methods -------------- */ public Object putIfAbsent(Object key, Object value) { checkKeyBounds(key); return m.putIfAbsent(key, value); } public boolean remove(Object key, Object value) { Object k = key; return inBounds(k) && m.remove(k, value); } public boolean replace(Object key, Object oldValue, Object newValue) { checkKeyBounds(key); return m.replace(key, oldValue, newValue); } public Object replace(Object key, Object value) { checkKeyBounds(key); return m.replace(key, value); } /* ---------------- SortedMap API methods -------------- */ public Comparator comparator() { Comparator cmp = m.comparator(); if (isDescending) return Collections.reverseOrder(cmp); else return cmp; } /** * Utility to create submaps, where given bounds override * unbounded(null) ones and/or are checked against bounded ones. */ private SubMap newSubMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive) { if (isDescending) { // flip senses Object tk = fromKey; fromKey = toKey; toKey = tk; boolean ti = fromInclusive; fromInclusive = toInclusive; toInclusive = ti; } if (lo != null) { if (fromKey == null) { fromKey = lo; fromInclusive = loInclusive; } else { int c = m.compare(fromKey, lo); if (c < 0 || (c == 0 && !loInclusive && fromInclusive)) throw new IllegalArgumentException("key out of range"); } } if (hi != null) { if (toKey == null) { toKey = hi; toInclusive = hiInclusive; } else { int c = m.compare(toKey, hi); if (c > 0 || (c == 0 && !hiInclusive && toInclusive)) throw new IllegalArgumentException("key out of range"); } } return new SubMap(m, fromKey, fromInclusive, toKey, toInclusive, isDescending); } public NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive) { if (fromKey == null || toKey == null) throw new NullPointerException(); return newSubMap(fromKey, fromInclusive, toKey, toInclusive); } public NavigableMap headMap(Object toKey, boolean inclusive) { if (toKey == null) throw new NullPointerException(); return newSubMap(null, false, toKey, inclusive); } public NavigableMap tailMap(Object fromKey, boolean inclusive) { if (fromKey == null) throw new NullPointerException(); return newSubMap(fromKey, inclusive, null, false); } public SortedMap subMap(Object fromKey, Object toKey) { return subMap(fromKey, true, toKey, false); } public SortedMap headMap(Object toKey) { return headMap(toKey, false); } public SortedMap tailMap(Object fromKey) { return tailMap(fromKey, true); } public NavigableMap descendingMap() { return new SubMap(m, lo, loInclusive, hi, hiInclusive, !isDescending); } /* ---------------- Relational methods -------------- */ public Map.Entry ceilingEntry(Object key) { return getNearEntry(key, (m.GT|m.EQ)); } public Object ceilingKey(Object key) { return getNearKey(key, (m.GT|m.EQ)); } public Map.Entry lowerEntry(Object key) { return getNearEntry(key, (m.LT)); } public Object lowerKey(Object key) { return getNearKey(key, (m.LT)); } public Map.Entry floorEntry(Object key) { return getNearEntry(key, (m.LT|m.EQ)); } public Object floorKey(Object key) { return getNearKey(key, (m.LT|m.EQ)); } public Map.Entry higherEntry(Object key) { return getNearEntry(key, (m.GT)); } public Object higherKey(Object key) { return getNearKey(key, (m.GT)); } public Object firstKey() { return isDescending? highestKey() : lowestKey(); } public Object lastKey() { return isDescending? lowestKey() : highestKey(); } public Map.Entry firstEntry() { return isDescending? highestEntry() : lowestEntry(); } public Map.Entry lastEntry() { return isDescending? lowestEntry() : highestEntry(); } public Map.Entry pollFirstEntry() { return isDescending? removeHighest() : removeLowest(); } public Map.Entry pollLastEntry() { return isDescending? removeLowest() : removeHighest(); } /* ---------------- Submap Views -------------- */ public Set keySet() { KeySet ks = keySetView; return (ks != null) ? ks : (keySetView = new KeySet(this)); } public NavigableSet navigableKeySet() { KeySet ks = keySetView; return (ks != null) ? ks : (keySetView = new KeySet(this)); } public Collection values() { Collection vs = valuesView; return (vs != null) ? vs : (valuesView = new Values(this)); } public Set entrySet() { Set es = entrySetView; return (es != null) ? es : (entrySetView = new EntrySet(this)); } public NavigableSet descendingKeySet() { return descendingMap().navigableKeySet(); } Iterator keyIterator() { return new SubMapKeyIterator(); } Iterator valueIterator() { return new SubMapValueIterator(); } Iterator entryIterator() { return new SubMapEntryIterator(); } /** * Variant of main Iter class to traverse through submaps. */ abstract class SubMapIter implements Iterator { /** the last node returned by next() */ Node lastReturned; /** the next node to return from next(); */ Node next; /** Cache of next value field to maintain weak consistency */ Object nextValue; SubMapIter() { for (;;) { next = isDescending ? hiNode() : loNode(); if (next == null) break; Object x = next.value; if (x != null && x != next) { if (! inBounds(next.key)) next = null; else nextValue = x; break; } } } public final boolean hasNext() { return next != null; } final void advance() { if (next == null) throw new NoSuchElementException(); lastReturned = next; if (isDescending) descend(); else ascend(); } private void ascend() { for (;;) { next = next.next; if (next == null) break; Object x = next.value; if (x != null && x != next) { if (tooHigh(next.key)) next = null; else nextValue = x; break; } } } private void descend() { for (;;) { next = m.findNear(lastReturned.key, LT); if (next == null) break; Object x = next.value; if (x != null && x != next) { if (tooLow(next.key)) next = null; else nextValue = x; break; } } } public void remove() { Node l = lastReturned; if (l == null) throw new IllegalStateException(); m.remove(l.key); lastReturned = null; } } final class SubMapValueIterator extends SubMapIter { public Object next() { Object v = nextValue; advance(); return v; } } final class SubMapKeyIterator extends SubMapIter { public Object next() { Node n = next; advance(); return n.key; } } final class SubMapEntryIterator extends SubMapIter { public Object next() { Node n = next; Object v = nextValue; advance(); return new AbstractMap.SimpleImmutableEntry(n.key, v); } } } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ExecutorService.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ExecutorService.0000644001750700037720000003326310461021764032701 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.*; // for javadoc (till 6280605 is fixed) import java.util.List; import java.util.Collection; /** * An {@link Executor} that provides methods to manage termination and * methods that can produce a {@link Future} for tracking progress of * one or more asynchronous tasks. * *

An ExecutorService can be shut down, which will cause * it to reject new tasks. Two different methods are provided for * shutting down an ExecutorService. The {@link #shutdown} * method will allow previously submitted tasks to execute before * terminating, while the {@link #shutdownNow} method prevents waiting * tasks from starting and attempts to stop currently executing tasks. * Upon termination, an executor has no tasks actively executing, no * tasks awaiting execution, and no new tasks can be submitted. An * unused ExecutorService should be shut down to allow * reclamation of its resources. * *

Method submit extends base method {@link * Executor#execute} by creating and returning a {@link Future} that * can be used to cancel execution and/or wait for completion. * Methods invokeAny and invokeAll perform the most * commonly useful forms of bulk execution, executing a collection of * tasks and then waiting for at least one, or all, to * complete. (Class {@link ExecutorCompletionService} can be used to * write customized variants of these methods.) * *

The {@link Executors} class provides factory methods for the * executor services provided in this package. * *

Usage Example

* * Here is a sketch of a network service in which threads in a thread * pool service incoming requests. It uses the preconfigured {@link * Executors#newFixedThreadPool} factory method: * *
 * class NetworkService implements Runnable {
 *   private final ServerSocket serverSocket;
 *   private final ExecutorService pool;
 *
 *   public NetworkService(int port, int poolSize)
 *       throws IOException {
 *     serverSocket = new ServerSocket(port);
 *     pool = Executors.newFixedThreadPool(poolSize);
 *   }
 *
 *   public void run() { // run the service
 *     try {
 *       for (;;) {
 *         pool.execute(new Handler(serverSocket.accept()));
 *       }
 *     } catch (IOException ex) {
 *       pool.shutdown();
 *     }
 *   }
 * }
 *
 * class Handler implements Runnable {
 *   private final Socket socket;
 *   Handler(Socket socket) { this.socket = socket; }
 *   public void run() {
 *     // read and service request on socket
 *   }
 * }
 * 
* * The following method shuts down an ExecutorService in two phases, * first by calling shutdown to reject incoming tasks, and then * calling shutdownNow, if necessary, to cancel any lingering tasks: * *
 * void shutdownAndAwaitTermination(ExecutorService pool) {
 *   pool.shutdown(); // Disable new tasks from being submitted
 *   try {
 *     // Wait a while for existing tasks to terminate
 *     if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
 *       pool.shutdownNow(); // Cancel currently executing tasks
 *       // Wait a while for tasks to respond to being cancelled
 *       if (!pool.awaitTermination(60, TimeUnit.SECONDS))
 *           System.err.println("Pool did not terminate");
 *     }
 *   } catch (InterruptedException ie) {
 *     // (Re-)Cancel if current thread also interrupted
 *     pool.shutdownNow();
 *     // Preserve interrupt status
 *     Thread.currentThread().interrupt();
 *   }
 * }
 * 
* *

Memory consistency effects: Actions in a thread prior to the * submission of a {@code Runnable} or {@code Callable} task to an * {@code ExecutorService} * happen-before * any actions taken by that task, which in turn happen-before the * result is retrieved via {@code Future.get()}. * * @since 1.5 * @author Doug Lea */ public interface ExecutorService extends Executor { /** * Initiates an orderly shutdown in which previously submitted * tasks are executed, but no new tasks will be accepted. * Invocation has no additional effect if already shut down. * * @throws SecurityException if a security manager exists and * shutting down this ExecutorService may manipulate * threads that the caller is not permitted to modify * because it does not hold {@link * java.lang.RuntimePermission}("modifyThread"), * or the security manager's checkAccess method * denies access. */ void shutdown(); /** * Attempts to stop all actively executing tasks, halts the * processing of waiting tasks, and returns a list of the tasks that were * awaiting execution. * *

There are no guarantees beyond best-effort attempts to stop * processing actively executing tasks. For example, typical * implementations will cancel via {@link Thread#interrupt}, so any * task that fails to respond to interrupts may never terminate. * * @return list of tasks that never commenced execution * @throws SecurityException if a security manager exists and * shutting down this ExecutorService may manipulate * threads that the caller is not permitted to modify * because it does not hold {@link * java.lang.RuntimePermission}("modifyThread"), * or the security manager's checkAccess method * denies access. */ List shutdownNow(); /** * Returns true if this executor has been shut down. * * @return true if this executor has been shut down */ boolean isShutdown(); /** * Returns true if all tasks have completed following shut down. * Note that isTerminated is never true unless * either shutdown or shutdownNow was called first. * * @return true if all tasks have completed following shut down */ boolean isTerminated(); /** * Blocks until all tasks have completed execution after a shutdown * request, or the timeout occurs, or the current thread is * interrupted, whichever happens first. * * @param timeout the maximum time to wait * @param unit the time unit of the timeout argument * @return true if this executor terminated and * false if the timeout elapsed before termination * @throws InterruptedException if interrupted while waiting */ boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException; /** * Submits a value-returning task for execution and returns a * Future representing the pending results of the task. The * Future's get method will return the task's result upon * successful completion. * *

* If you would like to immediately block waiting * for a task, you can use constructions of the form * result = exec.submit(aCallable).get(); * *

Note: The {@link Executors} class includes a set of methods * that can convert some other common closure-like objects, * for example, {@link java.security.PrivilegedAction} to * {@link Callable} form so they can be submitted. * * @param task the task to submit * @return a Future representing pending completion of the task * @throws RejectedExecutionException if the task cannot be * scheduled for execution * @throws NullPointerException if the task is null */ Future submit(Callable task); /** * Submits a Runnable task for execution and returns a Future * representing that task. The Future's get method will * return the given result upon successful completion. * * @param task the task to submit * @param result the result to return * @return a Future representing pending completion of the task * @throws RejectedExecutionException if the task cannot be * scheduled for execution * @throws NullPointerException if the task is null */ Future submit(Runnable task, Object result); /** * Submits a Runnable task for execution and returns a Future * representing that task. The Future's get method will * return null upon successful completion. * * @param task the task to submit * @return a Future representing pending completion of the task * @throws RejectedExecutionException if the task cannot be * scheduled for execution * @throws NullPointerException if the task is null */ Future submit(Runnable task); /** * Executes the given tasks, returning a list of Futures holding * their status and results when all complete. * {@link Future#isDone} is true for each * element of the returned list. * Note that a completed task could have * terminated either normally or by throwing an exception. * The results of this method are undefined if the given * collection is modified while this operation is in progress. * * @param tasks the collection of tasks * @return A list of Futures representing the tasks, in the same * sequential order as produced by the iterator for the * given task list, each of which has completed. * @throws InterruptedException if interrupted while waiting, in * which case unfinished tasks are cancelled. * @throws NullPointerException if tasks or any of its elements are null * @throws RejectedExecutionException if any task cannot be * scheduled for execution */ List invokeAll(Collection tasks) throws InterruptedException; /** * Executes the given tasks, returning a list of Futures holding * their status and results * when all complete or the timeout expires, whichever happens first. * {@link Future#isDone} is true for each * element of the returned list. * Upon return, tasks that have not completed are cancelled. * Note that a completed task could have * terminated either normally or by throwing an exception. * The results of this method are undefined if the given * collection is modified while this operation is in progress. * * @param tasks the collection of tasks * @param timeout the maximum time to wait * @param unit the time unit of the timeout argument * @return a list of Futures representing the tasks, in the same * sequential order as produced by the iterator for the * given task list. If the operation did not time out, * each task will have completed. If it did time out, some * of these tasks will not have completed. * @throws InterruptedException if interrupted while waiting, in * which case unfinished tasks are cancelled * @throws NullPointerException if tasks, any of its elements, or * unit are null * @throws RejectedExecutionException if any task cannot be scheduled * for execution */ List invokeAll(Collection tasks, long timeout, TimeUnit unit) throws InterruptedException; /** * Executes the given tasks, returning the result * of one that has completed successfully (i.e., without throwing * an exception), if any do. Upon normal or exceptional return, * tasks that have not completed are cancelled. * The results of this method are undefined if the given * collection is modified while this operation is in progress. * * @param tasks the collection of tasks * @return the result returned by one of the tasks * @throws InterruptedException if interrupted while waiting * @throws NullPointerException if tasks or any of its elements * are null * @throws IllegalArgumentException if tasks is empty * @throws ExecutionException if no task successfully completes * @throws RejectedExecutionException if tasks cannot be scheduled * for execution */ Object invokeAny(Collection tasks) throws InterruptedException, ExecutionException; /** * Executes the given tasks, returning the result * of one that has completed successfully (i.e., without throwing * an exception), if any do before the given timeout elapses. * Upon normal or exceptional return, tasks that have not * completed are cancelled. * The results of this method are undefined if the given * collection is modified while this operation is in progress. * * @param tasks the collection of tasks * @param timeout the maximum time to wait * @param unit the time unit of the timeout argument * @return the result returned by one of the tasks. * @throws InterruptedException if interrupted while waiting * @throws NullPointerException if tasks, any of its elements, or * unit are null * @throws TimeoutException if the given timeout elapses before * any task successfully completes * @throws ExecutionException if no task successfully completes * @throws RejectedExecutionException if tasks cannot be scheduled * for execution */ Object invokeAny(Collection tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException; } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/CancellationException.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/CancellationExce0000644001750700037720000000170110153210664032672 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * Exception indicating that the result of a value-producing task, * such as a {@link FutureTask}, cannot be retrieved because the task * was cancelled. * * @since 1.5 * @author Doug Lea */ public class CancellationException extends IllegalStateException { private static final long serialVersionUID = -9202173006928992231L; /** * Constructs a CancellationException with no detail message. */ public CancellationException() {} /** * Constructs a CancellationException with the specified detail * message. * * @param message the detail message */ public CancellationException(String message) { super(message); } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentLinkedQueue.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentLinked0000644001750700037720000003651410461021764032757 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.*; import java.io.*; import java.util.Collection; import java.util.Iterator; import java.util.NoSuchElementException; /** * An unbounded thread-safe {@linkplain Queue queue} based on linked nodes. * This queue orders elements FIFO (first-in-first-out). * The head of the queue is that element that has been on the * queue the longest time. * The tail of the queue is that element that has been on the * queue the shortest time. New elements * are inserted at the tail of the queue, and the queue retrieval * operations obtain elements at the head of the queue. * A ConcurrentLinkedQueue is an appropriate choice when * many threads will share access to a common collection. * This queue does not permit null elements. * *

This implementation employs an efficient "wait-free" * algorithm based on one described in Simple, * Fast, and Practical Non-Blocking and Blocking Concurrent Queue * Algorithms by Maged M. Michael and Michael L. Scott. * *

Beware that, unlike in most collections, the size method * is NOT a constant-time operation. Because of the * asynchronous nature of these queues, determining the current number * of elements requires a traversal of the elements. * *

This class and its iterator implement all of the * optional methods of the {@link Collection} and {@link * Iterator} interfaces. * *

Memory consistency effects: As with other concurrent * collections, actions in a thread prior to placing an object into a * {@code ConcurrentLinkedQueue} * happen-before * actions subsequent to the access or removal of that element from * the {@code ConcurrentLinkedQueue} in another thread. * *

This class is a member of the * * Java Collections Framework. * * @since 1.5 * @author Doug Lea * */ public class ConcurrentLinkedQueue extends AbstractQueue implements Queue, java.io.Serializable { private static final long serialVersionUID = 196745693267521676L; private final Object headLock = new SerializableLock(); private final Object tailLock = new SerializableLock(); /* * This is a straight adaptation of Michael & Scott algorithm. * For explanation, read the paper. The only (minor) algorithmic * difference is that this version supports lazy deletion of * internal nodes (method remove(Object)) -- remove CAS'es item * fields to null. The normal queue operations unlink but then * pass over nodes with null item fields. Similarly, iteration * methods ignore those with nulls. * * Also note that like most non-blocking algorithms in this * package, this implementation relies on the fact that in garbage * collected systems, there is no possibility of ABA problems due * to recycled nodes, so there is no need to use "counted * pointers" or related techniques seen in versions used in * non-GC'ed settings. */ private static class Node { private volatile Object item; private volatile Node next; Node(Object x) { item = x; } Node(Object x, Node n) { item = x; next = n; } Object getItem() { return item; } synchronized boolean casItem(Object cmp, Object val) { if (item == cmp) { item = val; return true; } else { return false; } } synchronized void setItem(Object val) { item = val; } Node getNext() { return next; } synchronized boolean casNext(Node cmp, Node val) { if (next == cmp) { next = val; return true; } else { return false; } } synchronized void setNext(Node val) { next = val; } } private boolean casTail(Node cmp, Node val) { synchronized (tailLock) { if (tail == cmp) { tail = val; return true; } else { return false; } } } private boolean casHead(Node cmp, Node val) { synchronized (headLock) { if (head == cmp) { head = val; return true; } else { return false; } } } /** * Pointer to header node, initialized to a dummy node. The first * actual node is at head.getNext(). */ private transient volatile Node head = new Node(null, null); /** Pointer to last node on list **/ private transient volatile Node tail = head; /** * Creates a ConcurrentLinkedQueue that is initially empty. */ public ConcurrentLinkedQueue() {} /** * Creates a ConcurrentLinkedQueue * initially containing the elements of the given collection, * added in traversal order of the collection's iterator. * @param c the collection of elements to initially contain * @throws NullPointerException if the specified collection or any * of its elements are null */ public ConcurrentLinkedQueue(Collection c) { for (Iterator it = c.iterator(); it.hasNext();) add(it.next()); } // Have to override just to update the javadoc /** * Inserts the specified element at the tail of this queue. * * @return true (as specified by {@link Collection#add}) * @throws NullPointerException if the specified element is null */ public boolean add(Object e) { return offer(e); } /** * Inserts the specified element at the tail of this queue. * * @return true (as specified by {@link Queue#offer}) * @throws NullPointerException if the specified element is null */ public boolean offer(Object e) { if (e == null) throw new NullPointerException(); Node n = new Node(e, null); for(;;) { Node t = tail; Node s = t.getNext(); if (t == tail) { if (s == null) { if (t.casNext(s, n)) { casTail(t, n); return true; } } else { casTail(t, s); } } } } public Object poll() { for (;;) { Node h = head; Node t = tail; Node first = h.getNext(); if (h == head) { if (h == t) { if (first == null) return null; else casTail(t, first); } else if (casHead(h, first)) { Object item = first.getItem(); if (item != null) { first.setItem(null); return item; } // else skip over deleted item, continue loop, } } } } public Object peek() { // same as poll except don't remove item for (;;) { Node h = head; Node t = tail; Node first = h.getNext(); if (h == head) { if (h == t) { if (first == null) return null; else casTail(t, first); } else { Object item = first.getItem(); if (item != null) return item; else // remove deleted node and continue casHead(h, first); } } } } /** * Returns the first actual (non-header) node on list. This is yet * another variant of poll/peek; here returning out the first * node, not element (so we cannot collapse with peek() without * introducing race.) */ Node first() { for (;;) { Node h = head; Node t = tail; Node first = h.getNext(); if (h == head) { if (h == t) { if (first == null) return null; else casTail(t, first); } else { if (first.getItem() != null) return first; else // remove deleted node and continue casHead(h, first); } } } } /** * Returns true if this queue contains no elements. * * @return true if this queue contains no elements */ public boolean isEmpty() { return first() == null; } /** * Returns the number of elements in this queue. If this queue * contains more than Integer.MAX_VALUE elements, returns * Integer.MAX_VALUE. * *

Beware that, unlike in most collections, this method is * NOT a constant-time operation. Because of the * asynchronous nature of these queues, determining the current * number of elements requires an O(n) traversal. * * @return the number of elements in this queue */ public int size() { int count = 0; for (Node p = first(); p != null; p = p.getNext()) { if (p.getItem() != null) { // Collections.size() spec says to max out if (++count == Integer.MAX_VALUE) break; } } return count; } /** * Returns true if this queue contains the specified element. * More formally, returns true if and only if this queue contains * at least one element e such that o.equals(e). * * @param o object to be checked for containment in this queue * @return true if this queue contains the specified element */ public boolean contains(Object o) { if (o == null) return false; for (Node p = first(); p != null; p = p.getNext()) { Object item = p.getItem(); if (item != null && o.equals(item)) return true; } return false; } /** * Removes a single instance of the specified element from this queue, * if it is present. More formally, removes an element e such * that o.equals(e), if this queue contains one or more such * elements. * Returns true if this queue contained the specified element * (or equivalently, if this queue changed as a result of the call). * * @param o element to be removed from this queue, if present * @return true if this queue changed as a result of the call */ public boolean remove(Object o) { if (o == null) return false; for (Node p = first(); p != null; p = p.getNext()) { Object item = p.getItem(); if (item != null && o.equals(item) && p.casItem(item, null)) return true; } return false; } /** * Returns an iterator over the elements in this queue in proper sequence. * The returned iterator is a "weakly consistent" iterator that * will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. * * @return an iterator over the elements in this queue in proper sequence */ public Iterator iterator() { return new Itr(); } private class Itr implements Iterator { /** * Next node to return item for. */ private Node nextNode; /** * nextItem holds on to item fields because once we claim * that an element exists in hasNext(), we must return it in * the following next() call even if it was in the process of * being removed when hasNext() was called. */ private Object nextItem; /** * Node of the last returned item, to support remove. */ private Node lastRet; Itr() { advance(); } /** * Moves to next valid node and returns item to return for * next(), or null if no such. */ private Object advance() { lastRet = nextNode; Object x = nextItem; Node p = (nextNode == null) ? first() : nextNode.getNext(); for (;;) { if (p == null) { nextNode = null; nextItem = null; return x; } Object item = p.getItem(); if (item != null) { nextNode = p; nextItem = item; return x; } else // skip over nulls p = p.getNext(); } } public boolean hasNext() { return nextNode != null; } public Object next() { if (nextNode == null) throw new NoSuchElementException(); return advance(); } public void remove() { Node l = lastRet; if (l == null) throw new IllegalStateException(); // rely on a future traversal to relink. l.setItem(null); lastRet = null; } } /** * Save the state to a stream (that is, serialize it). * * @serialData All of the elements (each an E) in * the proper order, followed by a null * @param s the stream */ private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException { // Write out any hidden stuff s.defaultWriteObject(); // Write out all elements in the proper order. for (Node p = first(); p != null; p = p.getNext()) { Object item = p.getItem(); if (item != null) s.writeObject(item); } // Use trailing null as sentinel s.writeObject(null); } /** * Reconstitute the Queue instance from a stream (that is, * deserialize it). * @param s the stream */ private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { // Read in capacity, and any hidden stuff s.defaultReadObject(); head = new Node(null, null); tail = head; // Read in all elements and place in queue for (;;) { Object item = s.readObject(); if (item == null) break; else offer(item); } } private static class SerializableLock implements Serializable {} } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/0000755001750700037720000000000010643402427031027 5ustar dawidkdcl././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicStampedReference.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicSta0000644001750700037720000001445410461021106032633 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.atomic; /** * An {@code AtomicStampedReference} maintains an object reference * along with an integer "stamp", that can be updated atomically. * *

Implementation note. This implementation maintains stamped * references by creating internal objects representing "boxed" * [reference, integer] pairs. * * @since 1.5 * @author Doug Lea */ public class AtomicStampedReference { private static class ReferenceIntegerPair { private final Object reference; private final int integer; ReferenceIntegerPair(Object r, int i) { reference = r; integer = i; } } private final AtomicReference atomicRef; /** * Creates a new {@code AtomicStampedReference} with the given * initial values. * * @param initialRef the initial reference * @param initialStamp the initial stamp */ public AtomicStampedReference(Object initialRef, int initialStamp) { atomicRef = new AtomicReference( new ReferenceIntegerPair(initialRef, initialStamp)); } /** * Returns the current value of the reference. * * @return the current value of the reference */ public Object getReference() { return getPair().reference; } /** * Returns the current value of the stamp. * * @return the current value of the stamp */ public int getStamp() { return getPair().integer; } /** * Returns the current values of both the reference and the stamp. * Typical usage is {@code int[1] holder; ref = v.get(holder); }. * * @param stampHolder an array of size of at least one. On return, * {@code stampholder[0]} will hold the value of the stamp. * @return the current value of the reference */ public Object get(int[] stampHolder) { ReferenceIntegerPair p = getPair(); stampHolder[0] = p.integer; return p.reference; } /** * Atomically sets the value of both the reference and stamp * to the given update values if the * current reference is {@code ==} to the expected reference * and the current stamp is equal to the expected stamp. * *

May fail spuriously * and does not provide ordering guarantees, so is only rarely an * appropriate alternative to {@code compareAndSet}. * * @param expectedReference the expected value of the reference * @param newReference the new value for the reference * @param expectedStamp the expected value of the stamp * @param newStamp the new value for the stamp * @return true if successful */ public boolean weakCompareAndSet(Object expectedReference, Object newReference, int expectedStamp, int newStamp) { ReferenceIntegerPair current = getPair(); return expectedReference == current.reference && expectedStamp == current.integer && ((newReference == current.reference && newStamp == current.integer) || atomicRef.weakCompareAndSet(current, new ReferenceIntegerPair(newReference, newStamp))); } /** * Atomically sets the value of both the reference and stamp * to the given update values if the * current reference is {@code ==} to the expected reference * and the current stamp is equal to the expected stamp. * * @param expectedReference the expected value of the reference * @param newReference the new value for the reference * @param expectedStamp the expected value of the stamp * @param newStamp the new value for the stamp * @return true if successful */ public boolean compareAndSet(Object expectedReference, Object newReference, int expectedStamp, int newStamp) { ReferenceIntegerPair current = getPair(); return expectedReference == current.reference && expectedStamp == current.integer && ((newReference == current.reference && newStamp == current.integer) || atomicRef.compareAndSet(current, new ReferenceIntegerPair(newReference, newStamp))); } /** * Unconditionally sets the value of both the reference and stamp. * * @param newReference the new value for the reference * @param newStamp the new value for the stamp */ public void set(Object newReference, int newStamp) { ReferenceIntegerPair current = getPair(); if (newReference != current.reference || newStamp != current.integer) atomicRef.set(new ReferenceIntegerPair(newReference, newStamp)); } /** * Atomically sets the value of the stamp to the given update value * if the current reference is {@code ==} to the expected * reference. Any given invocation of this operation may fail * (return {@code false}) spuriously, but repeated invocation * when the current value holds the expected value and no other * thread is also attempting to set the value will eventually * succeed. * * @param expectedReference the expected value of the reference * @param newStamp the new value for the stamp * @return true if successful */ public boolean attemptStamp(Object expectedReference, int newStamp) { ReferenceIntegerPair current = getPair(); return expectedReference == current.reference && (newStamp == current.integer || atomicRef.compareAndSet(current, new ReferenceIntegerPair(expectedReference, newStamp))); } private ReferenceIntegerPair getPair() { return (ReferenceIntegerPair)atomicRef.get(); } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicIntegerArray.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicInt0000644001750700037720000001417610461021106032637 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.atomic; /** * An {@code int} array in which elements may be updated atomically. * See the {@link edu.emory.mathcs.backport.java.util.concurrent.atomic} package * specification for description of the properties of atomic * variables. * @since 1.5 * @author Doug Lea */ public class AtomicIntegerArray implements java.io.Serializable { private static final long serialVersionUID = 2862133569453604235L; private final int[] array; /** * Creates a new AtomicIntegerArray of given length. * * @param length the length of the array */ public AtomicIntegerArray(int length) { array = new int[length]; } /** * Creates a new AtomicIntegerArray with the same length as, and * all elements copied from, the given array. * * @param array the array to copy elements from * @throws NullPointerException if array is null */ public AtomicIntegerArray(int[] array) { if (array == null) throw new NullPointerException(); int length = array.length; this.array = new int[length]; System.arraycopy(array, 0, this.array, 0, array.length); } /** * Returns the length of the array. * * @return the length of the array */ public final int length() { return array.length; } /** * Gets the current value at position {@code i}. * * @param i the index * @return the current value */ public final synchronized int get(int i) { return array[i]; } /** * Sets the element at position {@code i} to the given value. * * @param i the index * @param newValue the new value */ public final synchronized void set(int i, int newValue) { array[i] = newValue; } /** * Eventually sets the element at position {@code i} to the given value. * * @param i the index * @param newValue the new value * @since 1.6 */ public final synchronized void lazySet(int i, int newValue) { array[i] = newValue; } /** * Atomically sets the element at position {@code i} to the given * value and returns the old value. * * @param i the index * @param newValue the new value * @return the previous value */ public final synchronized int getAndSet(int i, int newValue) { int old = array[i]; array[i] = newValue; return old; } /** * Atomically sets the element at position {@code i} to the given * updated value if the current value {@code ==} the expected value. * * @param i the index * @param expect the expected value * @param update the new value * @return true if successful. False return indicates that * the actual value was not equal to the expected value. */ public final synchronized boolean compareAndSet(int i, int expect, int update) { if (array[i] == expect) { array[i] = update; return true; } else { return false; } } /** * Atomically sets the element at position {@code i} to the given * updated value if the current value {@code ==} the expected value. * *

May fail spuriously * and does not provide ordering guarantees, so is only rarely an * appropriate alternative to {@code compareAndSet}. * * @param i the index * @param expect the expected value * @param update the new value * @return true if successful. */ public final synchronized boolean weakCompareAndSet(int i, int expect, int update) { if (array[i] == expect) { array[i] = update; return true; } else { return false; } } /** * Atomically increments by one the element at index {@code i}. * * @param i the index * @return the previous value */ public final synchronized int getAndIncrement(int i) { return array[i]++; } /** * Atomically decrements by one the element at index {@code i}. * * @param i the index * @return the previous value */ public final synchronized int getAndDecrement(int i) { return array[i]--; } /** * Atomically adds the given value to the element at index {@code i}. * * @param i the index * @param delta the value to add * @return the previous value */ public final synchronized int getAndAdd(int i, int delta) { int old = array[i]; array[i] += delta; return old; } /** * Atomically increments by one the element at index {@code i}. * * @param i the index * @return the updated value */ public final synchronized int incrementAndGet(int i) { return ++array[i]; } /** * Atomically decrements by one the element at index {@code i}. * * @param i the index * @return the updated value */ public final synchronized int decrementAndGet(int i) { return --array[i]; } /** * Atomically adds the given value to the element at index {@code i}. * * @param i the index * @param delta the value to add * @return the updated value */ public final synchronized int addAndGet(int i, int delta) { return array[i] += delta; } /** * Returns the String representation of the current values of array. * @return the String representation of the current values of array. */ public synchronized String toString() { if (array.length == 0) return "[]"; StringBuffer buf = new StringBuffer(); buf.append('['); buf.append(array[0]); for (int i = 1; i < array.length; i++) { buf.append(", "); buf.append(array[i]); } buf.append("]"); return buf.toString(); } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicLongArray.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicLon0000644001750700037720000001402410461021106032625 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.atomic; /** * A {@code long} array in which elements may be updated atomically. * See the {@link edu.emory.mathcs.backport.java.util.concurrent.atomic} package specification * for description of the properties of atomic variables. * @since 1.5 * @author Doug Lea */ public class AtomicLongArray implements java.io.Serializable { private static final long serialVersionUID = -2308431214976778248L; private final long[] array; /** * Creates a new AtomicLongArray of given length. * * @param length the length of the array */ public AtomicLongArray(int length) { array = new long[length]; } /** * Creates a new AtomicLongArray with the same length as, and * all elements copied from, the given array. * * @param array the array to copy elements from * @throws NullPointerException if array is null */ public AtomicLongArray(long[] array) { if (array == null) throw new NullPointerException(); int length = array.length; this.array = new long[length]; System.arraycopy(array, 0, this.array, 0, array.length); } /** * Returns the length of the array. * * @return the length of the array */ public final int length() { return array.length; } /** * Gets the current value at position {@code i}. * * @param i the index * @return the current value */ public final synchronized long get(int i) { return array[i]; } /** * Sets the element at position {@code i} to the given value. * * @param i the index * @param newValue the new value */ public final synchronized void set(int i, long newValue) { array[i] = newValue; } /** * Eventually sets the element at position {@code i} to the given value. * * @param i the index * @param newValue the new value * @since 1.6 */ public final synchronized void lazySet(int i, long newValue) { array[i] = newValue; } /** * Atomically sets the element at position {@code i} to the given value * and returns the old value. * * @param i the index * @param newValue the new value * @return the previous value */ public final synchronized long getAndSet(int i, long newValue) { long old = array[i]; array[i] = newValue; return old; } /** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * * @param i the index * @param expect the expected value * @param update the new value * @return true if successful. False return indicates that * the actual value was not equal to the expected value. */ public final synchronized boolean compareAndSet(int i, long expect, long update) { if (array[i] == expect) { array[i] = update; return true; } else { return false; } } /** * if the current value {@code ==} the expected value. * *

May fail spuriously * and does not provide ordering guarantees, so is only rarely an * appropriate alternative to {@code compareAndSet}. * * @param i the index * @param expect the expected value * @param update the new value * @return true if successful. */ public final synchronized boolean weakCompareAndSet(int i, long expect, long update) { if (array[i] == expect) { array[i] = update; return true; } else { return false; } } /** * Atomically increments by one the element at index {@code i}. * * @param i the index * @return the previous value */ public final synchronized long getAndIncrement(int i) { return array[i]++; } /** * Atomically decrements by one the element at index {@code i}. * * @param i the index * @return the previous value */ public final synchronized long getAndDecrement(int i) { return array[i]--; } /** * Atomically adds the given value to the element at index {@code i}. * * @param i the index * @param delta the value to add * @return the previous value */ public final synchronized long getAndAdd(int i, long delta) { long old = array[i]; array[i] += delta; return old; } /** * Atomically increments by one the element at index {@code i}. * * @param i the index * @return the updated value */ public final synchronized long incrementAndGet(int i) { return ++array[i]; } /** * Atomically decrements by one the element at index {@code i}. * * @param i the index * @return the updated value */ public final synchronized long decrementAndGet(int i) { return --array[i]; } /** * Atomically adds the given value to the element at index {@code i}. * * @param i the index * @param delta the value to add * @return the updated value */ public synchronized long addAndGet(int i, long delta) { return array[i] += delta; } /** * Returns the String representation of the current values of array. * @return the String representation of the current values of array. */ public synchronized String toString() { if (array.length == 0) return "[]"; StringBuffer buf = new StringBuffer(); buf.append('['); buf.append(array[0]); for (int i = 1; i < array.length; i++) { buf.append(", "); buf.append(array[i]); } buf.append("]"); return buf.toString(); } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicInteger.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicInt0000644001750700037720000001220310461021106032624 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.atomic; /** * An {@code int} value that may be updated atomically. See the * {@link edu.emory.mathcs.backport.java.util.concurrent.atomic} package specification for * description of the properties of atomic variables. An * {@code AtomicInteger} is used in applications such as atomically * incremented counters, and cannot be used as a replacement for an * {@link java.lang.Integer}. However, this class does extend * {@code Number} to allow uniform access by tools and utilities that * deal with numerically-based classes. * * @since 1.5 * @author Doug Lea */ public class AtomicInteger extends Number implements java.io.Serializable { private static final long serialVersionUID = 6214790243416807050L; private volatile int value; /** * Creates a new AtomicInteger with the given initial value. * * @param initialValue the initial value */ public AtomicInteger(int initialValue) { value = initialValue; } /** * Creates a new AtomicInteger with initial value {@code 0}. */ public AtomicInteger() { } /** * Gets the current value. * * @return the current value */ public final int get() { return value; } /** * Sets to the given value. * * @param newValue the new value */ public final synchronized void set(int newValue) { value = newValue; } /** * Eventually sets to the given value. * * @param newValue the new value * @since 1.6 */ public final synchronized void lazySet(int newValue) { value = newValue; } /** * Atomically sets to the given value and returns the old value. * * @param newValue the new value * @return the previous value */ public final synchronized int getAndSet(int newValue) { int old = value; value = newValue; return old; } /** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * * @param expect the expected value * @param update the new value * @return true if successful. False return indicates that * the actual value was not equal to the expected value. */ public final synchronized boolean compareAndSet(int expect, int update) { if (value == expect) { value = update; return true; } else { return false; } } /** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * *

May fail spuriously * and does not provide ordering guarantees, so is only rarely an * appropriate alternative to {@code compareAndSet}. * * @param expect the expected value * @param update the new value * @return true if successful. */ public final synchronized boolean weakCompareAndSet(int expect, int update) { if (value == expect) { value = update; return true; } else { return false; } } /** * Atomically increments by one the current value. * * @return the previous value */ public final synchronized int getAndIncrement() { return value++; } /** * Atomically decrements by one the current value. * * @return the previous value */ public final synchronized int getAndDecrement() { return value--; } /** * Atomically adds the given value to the current value. * * @param delta the value to add * @return the previous value */ public final synchronized int getAndAdd(int delta) { int old = value; value += delta; return old; } /** * Atomically increments by one the current value. * * @return the updated value */ public final synchronized int incrementAndGet() { return ++value; } /** * Atomically decrements by one the current value. * * @return the updated value */ public final synchronized int decrementAndGet() { return --value; } /** * Atomically adds the given value to the current value. * * @param delta the value to add * @return the updated value */ public final synchronized int addAndGet(int delta) { return value += delta; } /** * Returns the String representation of the current value. * @return the String representation of the current value. */ public String toString() { return Integer.toString(get()); } public int intValue() { return get(); } public long longValue() { return (long)get(); } public float floatValue() { return (float)get(); } public double doubleValue() { return (double)get(); } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicMarkableReference.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicMar0000644001750700037720000001426710461021106032625 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.atomic; /** * An {@code AtomicMarkableReference} maintains an object reference * along with a mark bit, that can be updated atomically. *

*

Implementation note. This implementation maintains markable * references by creating internal objects representing "boxed" * [reference, boolean] pairs. * * @since 1.5 * @author Doug Lea */ public class AtomicMarkableReference { private static class ReferenceBooleanPair { private final Object reference; private final boolean bit; ReferenceBooleanPair(Object r, boolean i) { reference = r; bit = i; } } private final AtomicReference atomicRef; /** * Creates a new {@code AtomicMarkableReference} with the given * initial values. * * @param initialRef the initial reference * @param initialMark the initial mark */ public AtomicMarkableReference(Object initialRef, boolean initialMark) { atomicRef = new AtomicReference(new ReferenceBooleanPair(initialRef, initialMark)); } private ReferenceBooleanPair getPair() { return (ReferenceBooleanPair)atomicRef.get(); } /** * Returns the current value of the reference. * * @return the current value of the reference */ public Object getReference() { return getPair().reference; } /** * Returns the current value of the mark. * * @return the current value of the mark */ public boolean isMarked() { return getPair().bit; } /** * Returns the current values of both the reference and the mark. * Typical usage is {@code boolean[1] holder; ref = v.get(holder); }. * * @param markHolder an array of size of at least one. On return, * {@code markholder[0]} will hold the value of the mark. * @return the current value of the reference */ public Object get(boolean[] markHolder) { ReferenceBooleanPair p = getPair(); markHolder[0] = p.bit; return p.reference; } /** * Atomically sets the value of both the reference and mark * to the given update values if the * current reference is {@code ==} to the expected reference * and the current mark is equal to the expected mark. * *

May fail spuriously * and does not provide ordering guarantees, so is only rarely an * appropriate alternative to {@code compareAndSet}. * * @param expectedReference the expected value of the reference * @param newReference the new value for the reference * @param expectedMark the expected value of the mark * @param newMark the new value for the mark * @return true if successful */ public boolean weakCompareAndSet(Object expectedReference, Object newReference, boolean expectedMark, boolean newMark) { ReferenceBooleanPair current = getPair(); return expectedReference == current.reference && expectedMark == current.bit && ((newReference == current.reference && newMark == current.bit) || atomicRef.weakCompareAndSet(current, new ReferenceBooleanPair(newReference, newMark))); } /** * Atomically sets the value of both the reference and mark * to the given update values if the * current reference is {@code ==} to the expected reference * and the current mark is equal to the expected mark. * * @param expectedReference the expected value of the reference * @param newReference the new value for the reference * @param expectedMark the expected value of the mark * @param newMark the new value for the mark * @return true if successful */ public boolean compareAndSet(Object expectedReference, Object newReference, boolean expectedMark, boolean newMark) { ReferenceBooleanPair current = getPair(); return expectedReference == current.reference && expectedMark == current.bit && ((newReference == current.reference && newMark == current.bit) || atomicRef.compareAndSet(current, new ReferenceBooleanPair(newReference, newMark))); } /** * Unconditionally sets the value of both the reference and mark. * * @param newReference the new value for the reference * @param newMark the new value for the mark */ public void set(Object newReference, boolean newMark) { ReferenceBooleanPair current = getPair(); if (newReference != current.reference || newMark != current.bit) atomicRef.set(new ReferenceBooleanPair(newReference, newMark)); } /** * Atomically sets the value of the mark to the given update value * if the current reference is {@code ==} to the expected * reference. Any given invocation of this operation may fail * (return {@code false}) spuriously, but repeated invocation * when the current value holds the expected value and no other * thread is also attempting to set the value will eventually * succeed. * * @param expectedReference the expected value of the reference * @param newMark the new value for the mark * @return true if successful */ public boolean attemptMark(Object expectedReference, boolean newMark) { ReferenceBooleanPair current = getPair(); return expectedReference == current.reference && (newMark == current.bit || atomicRef.compareAndSet (current, new ReferenceBooleanPair(expectedReference, newMark))); } } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicReferenceArray.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicRef0000644001750700037720000001121410461021106032607 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.atomic; /** * An array of object references in which elements may be updated * atomically. See the {@link edu.emory.mathcs.backport.java.util.concurrent.atomic} package * specification for description of the properties of atomic * variables. * @since 1.5 * @author Doug Lea */ public class AtomicReferenceArray implements java.io.Serializable { private static final long serialVersionUID = -6209656149925076980L; private final Object[] array; /** * Creates a new AtomicReferenceArray of given length. * @param length the length of the array */ public AtomicReferenceArray(int length) { array = new Object[length]; } /** * Creates a new AtomicReferenceArray with the same length as, and * all elements copied from, the given array. * * @param array the array to copy elements from * @throws NullPointerException if array is null */ public AtomicReferenceArray(Object[] array) { if (array == null) throw new NullPointerException(); int length = array.length; this.array = new Object[length]; System.arraycopy(array, 0, this.array, 0, array.length); } /** * Returns the length of the array. * * @return the length of the array */ public final int length() { return array.length; } /** * Gets the current value at position {@code i}. * * @param i the index * @return the current value */ public final synchronized Object get(int i) { return array[i]; } /** * Sets the element at position {@code i} to the given value. * * @param i the index * @param newValue the new value */ public final synchronized void set(int i, Object newValue) { array[i] = newValue; } /** * Eventually sets the element at position {@code i} to the given value. * * @param i the index * @param newValue the new value * @since 1.6 */ public final synchronized void lazySet(int i, Object newValue) { array[i] = newValue; } /** * Atomically sets the element at position {@code i} to the given * value and returns the old value. * * @param i the index * @param newValue the new value * @return the previous value */ public final synchronized Object getAndSet(int i, Object newValue) { Object old = array[i]; array[i] = newValue; return old; } /** * Atomically sets the element at position {@code i} to the given * updated value if the current value {@code ==} the expected value. * @param i the index * @param expect the expected value * @param update the new value * @return true if successful. False return indicates that * the actual value was not equal to the expected value. */ public final synchronized boolean compareAndSet(int i, Object expect, Object update) { if (array[i] == expect) { array[i] = update; return true; } else { return false; } } /** * Atomically sets the element at position {@code i} to the given * updated value if the current value {@code ==} the expected value. * *

May fail spuriously * and does not provide ordering guarantees, so is only rarely an * appropriate alternative to {@code compareAndSet}. * * @param i the index * @param expect the expected value * @param update the new value * @return true if successful. */ public final synchronized boolean weakCompareAndSet(int i, Object expect, Object update) { if (array[i] == expect) { array[i] = update; return true; } else { return false; } } /** * Returns the String representation of the current values of array. * @return the String representation of the current values of array. */ public synchronized String toString() { if (array.length == 0) return "[]"; StringBuffer buf = new StringBuffer(); for (int i = 0; i < array.length; i++) { if (i == 0) buf.append('['); else buf.append(", "); buf.append(String.valueOf(array[i])); } buf.append("]"); return buf.toString(); } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicReference.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicRef0000644001750700037720000000635410461021106032620 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.atomic; /** * An object reference that may be updated atomically. See the {@link * edu.emory.mathcs.backport.java.util.concurrent.atomic} package specification for description * of the properties of atomic variables. * @since 1.5 * @author Doug Lea */ public class AtomicReference implements java.io.Serializable { private static final long serialVersionUID = -1848883965231344442L; private volatile Object value; /** * Creates a new AtomicReference with the given initial value. * * @param initialValue the initial value */ public AtomicReference(Object initialValue) { value = initialValue; } /** * Creates a new AtomicReference with null initial value. */ public AtomicReference() { } /** * Gets the current value. * * @return the current value */ public final Object get() { return value; } /** * Sets to the given value. * * @param newValue the new value */ public final synchronized void set(Object newValue) { value = newValue; } /** * Eventually sets to the given value. * * @param newValue the new value * @since 1.6 */ public final synchronized void lazySet(Object newValue) { value = newValue; } /** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * @param expect the expected value * @param update the new value * @return true if successful. False return indicates that * the actual value was not equal to the expected value. */ public final synchronized boolean compareAndSet(Object expect, Object update) { if (value == expect) { value = update; return true; } return false; } /** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * *

May fail spuriously * and does not provide ordering guarantees, so is only rarely an * appropriate alternative to {@code compareAndSet}. * * @param expect the expected value * @param update the new value * @return true if successful. */ public final synchronized boolean weakCompareAndSet(Object expect, Object update) { if (value == expect) { value = update; return true; } return false; } /** * Atomically sets to the given value and returns the old value. * * @param newValue the new value * @return the previous value */ public final synchronized Object getAndSet(Object newValue) { Object old = value; value = newValue; return old; } /** * Returns the String representation of the current value. * @return the String representation of the current value. */ public String toString() { return String.valueOf(get()); } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicBoolean.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicBoo0000644001750700037720000000710210461021106032613 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.atomic; /** * A {@code boolean} value that may be updated atomically. See the * {@link edu.emory.mathcs.backport.java.util.concurrent.atomic} package specification for * description of the properties of atomic variables. An * {@code AtomicBoolean} is used in applications such as atomically * updated flags, and cannot be used as a replacement for a * {@link java.lang.Boolean}. * * @since 1.5 * @author Doug Lea */ public class AtomicBoolean implements java.io.Serializable { private static final long serialVersionUID = 4654671469794556979L; private volatile int value; /** * Creates a new {@code AtomicBoolean} with the given initial value. * * @param initialValue the initial value */ public AtomicBoolean(boolean initialValue) { value = initialValue ? 1 : 0; } /** * Creates a new {@code AtomicBoolean} with initial value {@code false}. */ public AtomicBoolean() { } /** * Returns the current value. * * @return the current value */ public final boolean get() { return value != 0; } /** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * * @param expect the expected value * @param update the new value * @return true if successful. False return indicates that * the actual value was not equal to the expected value. */ public final synchronized boolean compareAndSet(boolean expect, boolean update) { if (expect == (value != 0)) { value = update ? 1 : 0; return true; } else { return false; } } /** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * *

May fail spuriously * and does not provide ordering guarantees, so is only rarely an * appropriate alternative to {@code compareAndSet}. * * @param expect the expected value * @param update the new value * @return true if successful. */ public synchronized boolean weakCompareAndSet(boolean expect, boolean update) { if (expect == (value != 0)) { value = update ? 1 : 0; return true; } else { return false; } } /** * Unconditionally sets to the given value. * * @param newValue the new value */ public final synchronized void set(boolean newValue) { value = newValue ? 1 : 0; } /** * Eventually sets to the given value. * * @param newValue the new value * @since 1.6 */ public final synchronized void lazySet(boolean newValue) { value = newValue ? 1 : 0; } /** * Atomically sets to the given value and returns the previous value. * * @param newValue the new value * @return the previous value */ public final synchronized boolean getAndSet(boolean newValue) { int old = value; value = newValue ? 1 : 0; return old != 0; } /** * Returns the String representation of the current value. * @return the String representation of the current value. */ public String toString() { return Boolean.toString(get()); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicLong.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicLon0000644001750700037720000001221410461021106032624 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent.atomic; /** * A {@code long} value that may be updated atomically. See the * {@link edu.emory.mathcs.backport.java.util.concurrent.atomic} package specification for * description of the properties of atomic variables. An * {@code AtomicLong} is used in applications such as atomically * incremented sequence numbers, and cannot be used as a replacement * for a {@link java.lang.Long}. However, this class does extend * {@code Number} to allow uniform access by tools and utilities that * deal with numerically-based classes. * * @since 1.5 * @author Doug Lea */ public class AtomicLong extends Number implements java.io.Serializable { private static final long serialVersionUID = 1927816293512124184L; private volatile long value; /** * Creates a new AtomicLong with the given initial value. * * @param initialValue the initial value */ public AtomicLong(long initialValue) { value = initialValue; } /** * Creates a new AtomicLong with initial value {@code 0}. */ public AtomicLong() { } /** * Gets the current value. * * @return the current value */ public final long get() { return value; } /** * Sets to the given value. * * @param newValue the new value */ public final synchronized void set(long newValue) { value = newValue; } /** * Eventually sets to the given value. * * @param newValue the new value * @since 1.6 */ public final synchronized void lazySet(long newValue) { value = newValue; } /** * Atomically sets to the given value and returns the old value. * * @param newValue the new value * @return the previous value */ public final synchronized long getAndSet(long newValue) { long old = value; value = newValue; return old; } /** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * * @param expect the expected value * @param update the new value * @return true if successful. False return indicates that * the actual value was not equal to the expected value. */ public final synchronized boolean compareAndSet(long expect, long update) { if (value == expect) { value = update; return true; } else { return false; } } /** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * *

May fail spuriously * and does not provide ordering guarantees, so is only rarely an * appropriate alternative to {@code compareAndSet}. * * @param expect the expected value * @param update the new value * @return true if successful. */ public final synchronized boolean weakCompareAndSet(long expect, long update) { if (value == expect) { value = update; return true; } else { return false; } } /** * Atomically increments by one the current value. * * @return the previous value */ public final synchronized long getAndIncrement() { return value++; } /** * Atomically decrements by one the current value. * * @return the previous value */ public final synchronized long getAndDecrement() { return value--; } /** * Atomically adds the given value to the current value. * * @param delta the value to add * @return the previous value */ public final synchronized long getAndAdd(long delta) { long old = value; value += delta; return old; } /** * Atomically increments by one the current value. * * @return the updated value */ public final synchronized long incrementAndGet() { return ++value; } /** * Atomically decrements by one the current value. * * @return the updated value */ public final synchronized long decrementAndGet() { return --value; } /** * Atomically adds the given value to the current value. * * @param delta the value to add * @return the updated value */ public final synchronized long addAndGet(long delta) { return value += delta; } /** * Returns the String representation of the current value. * @return the String representation of the current value. */ public String toString() { return Long.toString(get()); } public int intValue() { return (int)get(); } public long longValue() { return (long)get(); } public float floatValue() { return (float)get(); } public double doubleValue() { return (double)get(); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/package.htmlbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/atomic/package.h0000755001750700037720000001760410461021106032573 0ustar dawidkdcl Atomics Atomics A small toolkit of classes that support lock-free thread-safe programming on single variables. In essence, the classes in this package extend the notion of volatile values, fields, and array elements to those that also provide an atomic conditional update operation of the form:

  boolean compareAndSet(expectedValue, updateValue);

This method (which varies in argument types across different classes) atomically sets a variable to the updateValue if it currently holds the expectedValue, reporting true on success. The classes in this package also contain methods to get and unconditionally set values, as well as a weaker conditional atomic update operation weakCompareAndSet described below.

The specifications of these methods enable implementations to employ efficient machine-level atomic instructions that are available on contemporary processors. However on some platforms, support may entail some form of internal locking. Thus the methods are not strictly guaranteed to be non-blocking -- a thread may block transiently before performing the operation.

Instances of classes {@link edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicBoolean}, {@link edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicInteger}, {@link edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicLong}, and {@link edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicReference} each provide access and updates to a single variable of the corresponding type. Each class also provides appropriate utility methods for that type. For example, classes AtomicLong and AtomicInteger provide atomic increment methods. One application is to generate sequence numbers, as in:

class Sequencer {
  private final AtomicLong sequenceNumber
    = new AtomicLong(0);
  public long next() {
    return sequenceNumber.getAndIncrement();
  }
}

The memory effects for accesses and updates of atomics generally follow the rules for volatiles, as stated in The Java Language Specification, Third Edition (17.4 Memory Model):

  • get has the memory effects of reading a volatile variable.
  • set has the memory effects of writing (assigning) a volatile variable.
  • lazySet has the memory effects of writing (assigning) a volatile variable except that it permits reorderings with subsequent (but not previous) memory actions that do not themselves impose reordering constraints with ordinary non-volatile writes. Among other usage contexts, lazySet may apply when nulling out, for the sake of garbage collection, a reference that is never accessed again.
  • weakCompareAndSet atomically reads and conditionally writes a variable but does not create any happens-before orderings, so provides no guarantees with respect to previous or subsequent reads and writes of any variables other than the target of the weakCompareAndSet.
  • compareAndSet and all other read-and-update operations such as getAndIncrement have the memory effects of both reading and writing volatile variables.

In addition to classes representing single values, this package contains Updater classes that can be used to obtain compareAndSet operations on any selected volatile field of any selected class. {@link edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicReferenceFieldUpdater}, {@link edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicIntegerFieldUpdater}, and {@link edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicLongFieldUpdater} are reflection-based utilities that provide access to the associated field types. These are mainly of use in atomic data structures in which several volatile fields of the same node (for example, the links of a tree node) are independently subject to atomic updates. These classes enable greater flexibility in how and when to use atomic updates, at the expense of more awkward reflection-based setup, less convenient usage, and weaker guarantees.

The {@link edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicIntegerArray}, {@link edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicLongArray}, and {@link edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicReferenceArray} classes further extend atomic operation support to arrays of these types. These classes are also notable in providing volatile access semantics for their array elements, which is not supported for ordinary arrays.

The atomic classes also support method weakCompareAndSet, which has limited applicability. On some platforms, the weak version may be more efficient than compareAndSet in the normal case, but differs in that any given invocation of the weakCompareAndSet method may return false spuriously (that is, for no apparent reason). A false return means only that the operation may be retried if desired, relying on the guarantee that repeated invocation when the variable holds expectedValue and no other thread is also attempting to set the variable will eventually succeed. (Such spurious failures may for example be due to memory contention effects that are unrelated to whether the expected and current values are equal.) Additionally weakCompareAndSet does not provide ordering guarantees that are usually needed for synchronization control. However, the method may be useful for updating counters and statistics when such updates are unrelated to the other happens-before orderings of a program. When a thread sees an update to an atomic variable caused by a weakCompareAndSet, it does not necessarily see updates to any other variables that occurred before the weakCompareAndSet. This may be acceptable when, for example, updating performance statistics, but rarely otherwise.

The {@link edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicMarkableReference} class associates a single boolean with a reference. For example, this bit might be used inside a data structure to mean that the object being referenced has logically been deleted. The {@link edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicStampedReference} class associates an integer value with a reference. This may be used for example, to represent version numbers corresponding to series of updates.

Atomic classes are designed primarily as building blocks for implementing non-blocking data structures and related infrastructure classes. The compareAndSet method is not a general replacement for locking. It applies only when critical updates for an object are confined to a single variable.

Atomic classes are not general purpose replacements for java.lang.Integer and related classes. They do not define methods such as hashCode and compareTo. (Because atomic variables are expected to be mutated, they are poor choices for hash table keys.) Additionally, classes are provided only for those types that are commonly useful in intended applications. For example, there is no atomic class for representing byte. In those infrequent cases where you would like to do so, you can use an AtomicInteger to hold byte values, and cast appropriately. You can also hold floats using Float.floatToIntBits and Float.intBitstoFloat conversions, and doubles using Double.doubleToLongBits and Double.longBitsToDouble conversions. @since 1.5 backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/Callable.java0000644001750700037720000000213510153210664032112 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * A task that returns a result and may throw an exception. * Implementors define a single method with no arguments called * call. * *

The Callable interface is similar to {@link * java.lang.Runnable}, in that both are designed for classes whose * instances are potentially executed by another thread. A * Runnable, however, does not return a result and cannot * throw a checked exception. * *

The {@link Executors} class contains utility methods to * convert from other common forms to Callable classes. * * @see Executor * @since 1.5 * @author Doug Lea */ public interface Callable { /** * Computes a result, or throws an exception if unable to do so. * * @return computed result * @throws Exception if unable to compute a result */ Object call() throws Exception; } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentSkipListSet.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentSkipLi0000644001750700037720000003730210431777171032747 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.*; import java.util.Iterator; import java.util.Collection; import java.util.Comparator; import java.util.Map; import java.util.Set; import java.util.SortedSet; /** * A scalable concurrent {@link NavigableSet} implementation based on * a {@link ConcurrentSkipListMap}. The elements of the set are kept * sorted according to their {@linkplain Comparable natural ordering}, * or by a {@link Comparator} provided at set creation time, depending * on which constructor is used. * *

This implementation provides expected average log(n) time * cost for the contains, add, and remove * operations and their variants. Insertion, removal, and access * operations safely execute concurrently by multiple threads. * Iterators are weakly consistent, returning elements * reflecting the state of the set at some point at or since the * creation of the iterator. They do not throw {@link * java.util.ConcurrentModificationException}, and may proceed concurrently with * other operations. Ascending ordered views and their iterators are * faster than descending ones. * *

Beware that, unlike in most collections, the size * method is not a constant-time operation. Because of the * asynchronous nature of these sets, determining the current number * of elements requires a traversal of the elements. Additionally, the * bulk operations addAll, removeAll, * retainAll, and containsAll are not * guaranteed to be performed atomically. For example, an iterator * operating concurrently with an addAll operation might view * only some of the added elements. * *

This class and its iterators implement all of the * optional methods of the {@link Set} and {@link Iterator} * interfaces. Like most other concurrent collection implementations, * this class does not permit the use of null elements, * because null arguments and return values cannot be reliably * distinguished from the absence of elements. * *

This class is a member of the * * Java Collections Framework. * * @author Doug Lea * @since 1.6 */ public class ConcurrentSkipListSet extends AbstractSet implements NavigableSet, Cloneable, java.io.Serializable { private static final long serialVersionUID = -2479143111061671589L; /** * The underlying map. Uses Boolean.TRUE as value for each * element. This field is declared final for the sake of thread * safety, which entails some ugliness in clone() */ private final ConcurrentNavigableMap m; /** * Constructs a new, empty set that orders its elements according to * their {@linkplain Comparable natural ordering}. */ public ConcurrentSkipListSet() { m = new ConcurrentSkipListMap(); } /** * Constructs a new, empty set that orders its elements according to * the specified comparator. * * @param comparator the comparator that will be used to order this set. * If null, the {@linkplain Comparable natural * ordering} of the elements will be used. */ public ConcurrentSkipListSet(Comparator comparator) { m = new ConcurrentSkipListMap(comparator); } /** * Constructs a new set containing the elements in the specified * collection, that orders its elements according to their * {@linkplain Comparable natural ordering}. * * @param c The elements that will comprise the new set * @throws ClassCastException if the elements in c are * not {@link Comparable}, or are not mutually comparable * @throws NullPointerException if the specified collection or any * of its elements are null */ public ConcurrentSkipListSet(Collection c) { m = new ConcurrentSkipListMap(); addAll(c); } /** * Constructs a new set containing the same elements and using the * same ordering as the specified sorted set. * * @param s sorted set whose elements will comprise the new set * @throws NullPointerException if the specified sorted set or any * of its elements are null */ public ConcurrentSkipListSet(SortedSet s) { m = new ConcurrentSkipListMap(s.comparator()); addAll(s); } /** * For use by submaps */ ConcurrentSkipListSet(ConcurrentNavigableMap m) { this.m = m; } /** * Returns a shallow copy of this ConcurrentSkipListSet * instance. (The elements themselves are not cloned.) * * @return a shallow copy of this set */ public Object clone() { if (this.getClass() != ConcurrentSkipListSet.class) { // can't change m, since it is final throw new UnsupportedOperationException("Can't clone subclasses"); } return new ConcurrentSkipListSet(new ConcurrentSkipListMap(this.m)); } /* ---------------- Set operations -------------- */ /** * Returns the number of elements in this set. If this set * contains more than Integer.MAX_VALUE elements, it * returns Integer.MAX_VALUE. * *

Beware that, unlike in most collections, this method is * NOT a constant-time operation. Because of the * asynchronous nature of these sets, determining the current * number of elements requires traversing them all to count them. * Additionally, it is possible for the size to change during * execution of this method, in which case the returned result * will be inaccurate. Thus, this method is typically not very * useful in concurrent applications. * * @return the number of elements in this set */ public int size() { return m.size(); } /** * Returns true if this set contains no elements. * @return true if this set contains no elements */ public boolean isEmpty() { return m.isEmpty(); } /** * Returns true if this set contains the specified element. * More formally, returns true if and only if this set * contains an element e such that o.equals(e). * * @param o object to be checked for containment in this set * @return true if this set contains the specified element * @throws ClassCastException if the specified element cannot be * compared with the elements currently in this set * @throws NullPointerException if the specified element is null */ public boolean contains(Object o) { return m.containsKey(o); } /** * Adds the specified element to this set if it is not already present. * More formally, adds the specified element e to this set if * the set contains no element e2 such that e.equals(e2). * If this set already contains the element, the call leaves the set * unchanged and returns false. * * @param e element to be added to this set * @return true if this set did not already contain the * specified element * @throws ClassCastException if e cannot be compared * with the elements currently in this set * @throws NullPointerException if the specified element is null */ public boolean add(Object e) { return m.putIfAbsent(e, Boolean.TRUE) == null; } /** * Removes the specified element from this set if it is present. * More formally, removes an element e such that * o.equals(e), if this set contains such an element. * Returns true if this set contained the element (or * equivalently, if this set changed as a result of the call). * (This set will not contain the element once the call returns.) * * @param o object to be removed from this set, if present * @return true if this set contained the specified element * @throws ClassCastException if o cannot be compared * with the elements currently in this set * @throws NullPointerException if the specified element is null */ public boolean remove(Object o) { return m.remove(o, Boolean.TRUE); } /** * Removes all of the elements from this set. */ public void clear() { m.clear(); } /** * Returns an iterator over the elements in this set in ascending order. * * @return an iterator over the elements in this set in ascending order */ public Iterator iterator() { return m.navigableKeySet().iterator(); } /** * Returns an iterator over the elements in this set in descending order. * * @return an iterator over the elements in this set in descending order */ public Iterator descendingIterator() { return m.descendingKeySet().iterator(); } /* ---------------- AbstractSet Overrides -------------- */ /** * Compares the specified object with this set for equality. Returns * true if the specified object is also a set, the two sets * have the same size, and every member of the specified set is * contained in this set (or equivalently, every member of this set is * contained in the specified set). This definition ensures that the * equals method works properly across different implementations of the * set interface. * * @param o the object to be compared for equality with this set * @return true if the specified object is equal to this set */ public boolean equals(Object o) { // Override AbstractSet version to avoid calling size() if (o == this) return true; if (!(o instanceof Set)) return false; Collection c = (Collection) o; try { return containsAll(c) && c.containsAll(this); } catch (ClassCastException unused) { return false; } catch (NullPointerException unused) { return false; } } /** * Removes from this set all of its elements that are contained in * the specified collection. If the specified collection is also * a set, this operation effectively modifies this set so that its * value is the asymmetric set difference of the two sets. * * @param c collection containing elements to be removed from this set * @return true if this set changed as a result of the call * @throws ClassCastException if the types of one or more elements in this * set are incompatible with the specified collection * @throws NullPointerException if the specified collection or any * of its elements are null */ public boolean removeAll(Collection c) { // Override AbstractSet version to avoid unnecessary call to size() boolean modified = false; for (Iterator i = c.iterator(); i.hasNext(); ) if (remove(i.next())) modified = true; return modified; } /* ---------------- Relational operations -------------- */ /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified element is null */ public Object lower(Object e) { return m.lowerKey(e); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified element is null */ public Object floor(Object e) { return m.floorKey(e); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified element is null */ public Object ceiling(Object e) { return m.ceilingKey(e); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified element is null */ public Object higher(Object e) { return m.higherKey(e); } public Object pollFirst() { Map.Entry e = m.pollFirstEntry(); return e == null? null : e.getKey(); } public Object pollLast() { Map.Entry e = m.pollLastEntry(); return e == null? null : e.getKey(); } /* ---------------- SortedSet operations -------------- */ public Comparator comparator() { return m.comparator(); } /** * @throws NoSuchElementException {@inheritDoc} */ public Object first() { return m.firstKey(); } /** * @throws NoSuchElementException {@inheritDoc} */ public Object last() { return m.lastKey(); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if {@code fromElement} or * {@code toElement} is null * @throws IllegalArgumentException {@inheritDoc} */ public NavigableSet subSet(Object fromElement, boolean fromInclusive, Object toElement, boolean toInclusive) { return new ConcurrentSkipListSet ((ConcurrentNavigableMap) m.subMap(fromElement, fromInclusive, toElement, toInclusive)); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if {@code toElement} is null * @throws IllegalArgumentException {@inheritDoc} */ public NavigableSet headSet(Object toElement, boolean inclusive) { return new ConcurrentSkipListSet( (ConcurrentNavigableMap)m.headMap(toElement, inclusive)); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if {@code fromElement} is null * @throws IllegalArgumentException {@inheritDoc} */ public NavigableSet tailSet(Object fromElement, boolean inclusive) { return new ConcurrentSkipListSet( (ConcurrentNavigableMap)m.tailMap(fromElement, inclusive)); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if {@code fromElement} or * {@code toElement} is null * @throws IllegalArgumentException {@inheritDoc} */ public SortedSet subSet(Object fromElement, Object toElement) { return subSet(fromElement, true, toElement, false); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if {@code toElement} is null * @throws IllegalArgumentException {@inheritDoc} */ public SortedSet headSet(Object toElement) { return headSet(toElement, false); } /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if {@code fromElement} is null * @throws IllegalArgumentException {@inheritDoc} */ public SortedSet tailSet(Object fromElement) { return tailSet(fromElement, true); } /** * Returns a reverse order view of the elements contained in this set. * The descending set is backed by this set, so changes to the set are * reflected in the descending set, and vice-versa. * *

The returned set has an ordering equivalent to * {@link Collections#reverseOrder(Comparator) Collections.reverseOrder}(comparator()). * The expression {@code s.descendingSet().descendingSet()} returns a * view of {@code s} essentially equivalent to {@code s}. * * @return a reverse order view of this set */ public NavigableSet descendingSet() { return new ConcurrentSkipListSet( (ConcurrentNavigableMap)m.descendingMap()); } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ScheduledExecutorService.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ScheduledExecuto0000644001750700037720000001603410431777052032743 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.*; /** * An {@link ExecutorService} that can schedule commands to run after a given * delay, or to execute periodically. * *

The schedule methods create tasks with various delays * and return a task object that can be used to cancel or check * execution. The scheduleAtFixedRate and * scheduleWithFixedDelay methods create and execute tasks * that run periodically until cancelled. * *

Commands submitted using the {@link Executor#execute} and * {@link ExecutorService} submit methods are scheduled with * a requested delay of zero. Zero and negative delays (but not * periods) are also allowed in schedule methods, and are * treated as requests for immediate execution. * *

All schedule methods accept relative delays and * periods as arguments, not absolute times or dates. It is a simple * matter to transform an absolute time represented as a {@link * java.util.Date} to the required form. For example, to schedule at * a certain future date, you can use: schedule(task, * date.getTime() - System.currentTimeMillis(), * TimeUnit.MILLISECONDS). Beware however that expiration of a * relative delay need not coincide with the current Date at * which the task is enabled due to network time synchronization * protocols, clock drift, or other factors. * * The {@link Executors} class provides convenient factory methods for * the ScheduledExecutorService implementations provided in this package. * *

Usage Example

* * Here is a class with a method that sets up a ScheduledExecutorService * to beep every ten seconds for an hour: * *
 * import static edu.emory.mathcs.backport.java.util.concurrent.TimeUnit.*;
 * class BeeperControl {
 *    private final ScheduledExecutorService scheduler =
 *       Executors.newScheduledThreadPool(1);
 *
 *    public void beepForAnHour() {
 *        final Runnable beeper = new Runnable() {
 *                public void run() { System.out.println("beep"); }
 *            };
 *        final ScheduledFuture<?> beeperHandle =
 *            scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
 *        scheduler.schedule(new Runnable() {
 *                public void run() { beeperHandle.cancel(true); }
 *            }, 60 * 60, SECONDS);
 *    }
 * }
 * 
* * @since 1.5 * @author Doug Lea */ public interface ScheduledExecutorService extends ExecutorService { /** * Creates and executes a one-shot action that becomes enabled * after the given delay. * * @param command the task to execute * @param delay the time from now to delay execution * @param unit the time unit of the delay parameter * @return a ScheduledFuture representing pending completion of * the task and whose get() method will return * null upon completion * @throws RejectedExecutionException if the task cannot be * scheduled for execution * @throws NullPointerException if command is null */ public ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit); /** * Creates and executes a ScheduledFuture that becomes enabled after the * given delay. * * @param callable the function to execute * @param delay the time from now to delay execution * @param unit the time unit of the delay parameter * @return a ScheduledFuture that can be used to extract result or cancel * @throws RejectedExecutionException if the task cannot be * scheduled for execution * @throws NullPointerException if callable is null */ public ScheduledFuture schedule(Callable callable, long delay, TimeUnit unit); /** * Creates and executes a periodic action that becomes enabled first * after the given initial delay, and subsequently with the given * period; that is executions will commence after * initialDelay then initialDelay+period, then * initialDelay + 2 * period, and so on. * If any execution of the task * encounters an exception, subsequent executions are suppressed. * Otherwise, the task will only terminate via cancellation or * termination of the executor. If any execution of this task * takes longer than its period, then subsequent executions * may start late, but will not concurrently execute. * * @param command the task to execute * @param initialDelay the time to delay first execution * @param period the period between successive executions * @param unit the time unit of the initialDelay and period parameters * @return a ScheduledFuture representing pending completion of * the task, and whose get() method will throw an * exception upon cancellation * @throws RejectedExecutionException if the task cannot be * scheduled for execution * @throws NullPointerException if command is null * @throws IllegalArgumentException if period less than or equal to zero */ public ScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit); /** * Creates and executes a periodic action that becomes enabled first * after the given initial delay, and subsequently with the * given delay between the termination of one execution and the * commencement of the next. If any execution of the task * encounters an exception, subsequent executions are suppressed. * Otherwise, the task will only terminate via cancellation or * termination of the executor. * * @param command the task to execute * @param initialDelay the time to delay first execution * @param delay the delay between the termination of one * execution and the commencement of the next * @param unit the time unit of the initialDelay and delay parameters * @return a ScheduledFuture representing pending completion of * the task, and whose get() method will throw an * exception upon cancellation * @throws RejectedExecutionException if the task cannot be * scheduled for execution * @throws NullPointerException if command is null * @throws IllegalArgumentException if delay less than or equal to zero */ public ScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit); } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/LinkedBlockingQueue.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/LinkedBlockingQu0000644001750700037720000006141010461021764032664 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import java.util.Collection; import java.util.Iterator; import java.util.NoSuchElementException; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; /** * An optionally-bounded {@linkplain BlockingQueue blocking queue} based on * linked nodes. * This queue orders elements FIFO (first-in-first-out). * The head of the queue is that element that has been on the * queue the longest time. * The tail of the queue is that element that has been on the * queue the shortest time. New elements * are inserted at the tail of the queue, and the queue retrieval * operations obtain elements at the head of the queue. * Linked queues typically have higher throughput than array-based queues but * less predictable performance in most concurrent applications. * *

The optional capacity bound constructor argument serves as a * way to prevent excessive queue expansion. The capacity, if unspecified, * is equal to {@link Integer#MAX_VALUE}. Linked nodes are * dynamically created upon each insertion unless this would bring the * queue above capacity. * *

This class and its iterator implement all of the * optional methods of the {@link Collection} and {@link * Iterator} interfaces. * *

This class is a member of the * * Java Collections Framework. * * @since 1.5 * @author Doug Lea * */ public class LinkedBlockingQueue extends AbstractQueue implements BlockingQueue, java.io.Serializable { private static final long serialVersionUID = -6903933977591709194L; /* * A variant of the "two lock queue" algorithm. The putLock gates * entry to put (and offer), and has an associated condition for * waiting puts. Similarly for the takeLock. The "count" field * that they both rely on is maintained as an atomic to avoid * needing to get both locks in most cases. Also, to minimize need * for puts to get takeLock and vice-versa, cascading notifies are * used. When a put notices that it has enabled at least one take, * it signals taker. That taker in turn signals others if more * items have been entered since the signal. And symmetrically for * takes signalling puts. Operations such as remove(Object) and * iterators acquire both locks. */ /** * Linked list node class */ static class Node { /** The item, volatile to ensure barrier separating write and read */ volatile Object item; Node next; Node(Object x) { item = x; } } /** The capacity bound, or Integer.MAX_VALUE if none */ private final int capacity; /** Current number of elements */ private volatile int count = 0; /** Head of linked list */ private transient Node head; /** Tail of linked list */ private transient Node last; /** Lock held by take, poll, etc */ private final Object takeLock = new SerializableLock(); /** Lock held by put, offer, etc */ private final Object putLock = new SerializableLock(); /** * Signals a waiting take. Called only from put/offer (which do not * otherwise ordinarily lock takeLock.) */ private void signalNotEmpty() { synchronized (takeLock) { takeLock.notify(); } } /** * Signals a waiting put. Called only from take/poll. */ private void signalNotFull() { synchronized (putLock) { putLock.notify(); } } /** * Creates a node and links it at end of queue. * @param x the item */ private void insert(Object x) { last = last.next = new Node(x); } /** * Removes a node from head of queue, * @return the node */ private Object extract() { Node first = head.next; head = first; Object x = first.item; first.item = null; return x; } /** * Creates a LinkedBlockingQueue with a capacity of * {@link Integer#MAX_VALUE}. */ public LinkedBlockingQueue() { this(Integer.MAX_VALUE); } /** * Creates a LinkedBlockingQueue with the given (fixed) capacity. * * @param capacity the capacity of this queue * @throws IllegalArgumentException if capacity is not greater * than zero */ public LinkedBlockingQueue(int capacity) { if (capacity <= 0) throw new IllegalArgumentException(); this.capacity = capacity; last = head = new Node(null); } /** * Creates a LinkedBlockingQueue with a capacity of * {@link Integer#MAX_VALUE}, initially containing the elements of the * given collection, * added in traversal order of the collection's iterator. * * @param c the collection of elements to initially contain * @throws NullPointerException if the specified collection or any * of its elements are null */ public LinkedBlockingQueue(Collection c) { this(Integer.MAX_VALUE); for (Iterator itr = c.iterator(); itr.hasNext();) { Object e = itr.next(); add(e); } } // this doc comment is overridden to remove the reference to collections // greater in size than Integer.MAX_VALUE /** * Returns the number of elements in this queue. * * @return the number of elements in this queue */ public int size() { return count; } // this doc comment is a modified copy of the inherited doc comment, // without the reference to unlimited queues. /** * Returns the number of additional elements that this queue can ideally * (in the absence of memory or resource constraints) accept without * blocking. This is always equal to the initial capacity of this queue * less the current size of this queue. * *

Note that you cannot always tell if an attempt to insert * an element will succeed by inspecting remainingCapacity * because it may be the case that another thread is about to * insert or remove an element. */ public int remainingCapacity() { return capacity - count; } /** * Inserts the specified element at the tail of this queue, waiting if * necessary for space to become available. * * @throws InterruptedException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public void put(Object e) throws InterruptedException { if (e == null) throw new NullPointerException(); // Note: convention in all put/take/etc is to preset // local var holding count negative to indicate failure unless set. int c = -1; synchronized (putLock) { /* * Note that count is used in wait guard even though it is * not protected by lock. This works because count can * only decrease at this point (all other puts are shut * out by lock), and we (or some other waiting put) are * signalled if it ever changes from * capacity. Similarly for all other uses of count in * other wait guards. */ try { while (count == capacity) putLock.wait(); } catch (InterruptedException ie) { putLock.notify(); // propagate to a non-interrupted thread throw ie; } insert(e); synchronized (this) { c = count++; } if (c + 1 < capacity) putLock.notify(); } if (c == 0) signalNotEmpty(); } /** * Inserts the specified element at the tail of this queue, waiting if * necessary up to the specified wait time for space to become available. * * @return true if successful, or false if * the specified waiting time elapses before space is available. * @throws InterruptedException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public boolean offer(Object e, long timeout, TimeUnit unit) throws InterruptedException { if (e == null) throw new NullPointerException(); long nanos = unit.toNanos(timeout); int c = -1; synchronized (putLock) { long deadline = Utils.nanoTime() + nanos; for (;;) { if (count < capacity) { insert(e); synchronized (this) { c = count++; } if (c + 1 < capacity) putLock.notify(); break; } if (nanos <= 0) return false; try { TimeUnit.NANOSECONDS.timedWait(putLock, nanos); nanos = deadline - Utils.nanoTime(); } catch (InterruptedException ie) { putLock.notify(); // propagate to a non-interrupted thread throw ie; } } } if (c == 0) signalNotEmpty(); return true; } /** * Inserts the specified element at the tail of this queue if it is * possible to do so immediately without exceeding the queue's capacity, * returning true upon success and false if this queue * is full. * When using a capacity-restricted queue, this method is generally * preferable to method {@link BlockingQueue#add add}, which can fail to * insert an element only by throwing an exception. * * @throws NullPointerException if the specified element is null */ public boolean offer(Object e) { if (e == null) throw new NullPointerException(); if (count == capacity) return false; int c = -1; synchronized (putLock) { if (count < capacity) { insert(e); synchronized (this) { c = count++; } if (c + 1 < capacity) putLock.notify(); } } if (c == 0) signalNotEmpty(); return c >= 0; } public Object take() throws InterruptedException { Object x; int c = -1; synchronized (takeLock) { try { while (count == 0) takeLock.wait(); } catch (InterruptedException ie) { takeLock.notify(); // propagate to a non-interrupted thread throw ie; } x = extract(); synchronized (this) { c = count--; } if (c > 1) takeLock.notify(); } if (c == capacity) signalNotFull(); return x; } public Object poll(long timeout, TimeUnit unit) throws InterruptedException { Object x = null; int c = -1; long nanos = unit.toNanos(timeout); synchronized (takeLock) { long deadline = Utils.nanoTime() + nanos; for (;;) { if (count > 0) { x = extract(); synchronized (this) { c = count--; } if (c > 1) takeLock.notify(); break; } if (nanos <= 0) return null; try { TimeUnit.NANOSECONDS.timedWait(takeLock, nanos); nanos = deadline - Utils.nanoTime(); } catch (InterruptedException ie) { takeLock.notify(); // propagate to a non-interrupted thread throw ie; } } } if (c == capacity) signalNotFull(); return x; } public Object poll() { if (count == 0) return null; Object x = null; int c = -1; synchronized (takeLock) { if (count > 0) { x = extract(); synchronized (this) { c = count--; } if (c > 1) takeLock.notify(); } } if (c == capacity) signalNotFull(); return x; } public Object peek() { if (count == 0) return null; synchronized (takeLock) { Node first = head.next; if (first == null) return null; else return first.item; } } /** * Removes a single instance of the specified element from this queue, * if it is present. More formally, removes an element e such * that o.equals(e), if this queue contains one or more such * elements. * Returns true if this queue contained the specified element * (or equivalently, if this queue changed as a result of the call). * * @param o element to be removed from this queue, if present * @return true if this queue changed as a result of the call */ public boolean remove(Object o) { if (o == null) return false; boolean removed = false; synchronized (putLock) { synchronized (takeLock) { Node trail = head; Node p = head.next; while (p != null) { if (o.equals(p.item)) { removed = true; break; } trail = p; p = p.next; } if (removed) { p.item = null; trail.next = p.next; if (last == p) last = trail; synchronized (this) { if (count-- == capacity) putLock.notifyAll(); } } } } return removed; } /** * Returns an array containing all of the elements in this queue, in * proper sequence. * *

The returned array will be "safe" in that no references to it are * maintained by this queue. (In other words, this method must allocate * a new array). The caller is thus free to modify the returned array. * *

This method acts as bridge between array-based and collection-based * APIs. * * @return an array containing all of the elements in this queue */ public Object[] toArray() { synchronized (putLock) { synchronized (takeLock) { int size = count; Object[] a = new Object[size]; int k = 0; for (Node p = head.next; p != null; p = p.next) a[k++] = p.item; return a; } } } /** * Returns an array containing all of the elements in this queue, in * proper sequence; the runtime type of the returned array is that of * the specified array. If the queue fits in the specified array, it * is returned therein. Otherwise, a new array is allocated with the * runtime type of the specified array and the size of this queue. * *

If this queue fits in the specified array with room to spare * (i.e., the array has more elements than this queue), the element in * the array immediately following the end of the queue is set to * null. * *

Like the {@link #toArray()} method, this method acts as bridge between * array-based and collection-based APIs. Further, this method allows * precise control over the runtime type of the output array, and may, * under certain circumstances, be used to save allocation costs. * *

Suppose x is a queue known to contain only strings. * The following code can be used to dump the queue into a newly * allocated array of String: * *

     *     String[] y = x.toArray(new String[0]);
* * Note that toArray(new Object[0]) is identical in function to * toArray(). * * @param a the array into which the elements of the queue are to * be stored, if it is big enough; otherwise, a new array of the * same runtime type is allocated for this purpose * @return an array containing all of the elements in this queue * @throws ArrayStoreException if the runtime type of the specified array * is not a supertype of the runtime type of every element in * this queue * @throws NullPointerException if the specified array is null */ public Object[] toArray(Object[] a) { synchronized (putLock) { synchronized (takeLock) { int size = count; if (a.length < size) a = (Object[])java.lang.reflect.Array.newInstance (a.getClass().getComponentType(), size); int k = 0; for (Node p = head.next; p != null; p = p.next) a[k++] = (Object)p.item; if (a.length > k) a[k] = null; return a; } } } public String toString() { synchronized (putLock) { synchronized (takeLock) { return super.toString(); } } } /** * Atomically removes all of the elements from this queue. * The queue will be empty after this call returns. */ public void clear() { synchronized (putLock) { synchronized (takeLock) { head.next = null; assert head.item == null; last = head; int c; synchronized (this) { c = count; count = 0; } if (c == capacity) putLock.notifyAll(); } } } /** * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public int drainTo(Collection c) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); Node first; synchronized (putLock) { synchronized (takeLock) { first = head.next; head.next = null; assert head.item == null; last = head; int cold; synchronized (this) { cold = count; count = 0; } if (cold == capacity) putLock.notifyAll(); } } // Transfer the elements outside of locks int n = 0; for (Node p = first; p != null; p = p.next) { c.add(p.item); p.item = null; ++n; } return n; } /** * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public int drainTo(Collection c, int maxElements) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); synchronized (putLock) { synchronized (takeLock) { int n = 0; Node p = head.next; while (p != null && n < maxElements) { c.add(p.item); p.item = null; p = p.next; ++n; } if (n != 0) { head.next = p; assert head.item == null; if (p == null) last = head; int cold; synchronized (this) { cold = count; count -= n; } if (cold == capacity) putLock.notifyAll(); } return n; } } } /** * Returns an iterator over the elements in this queue in proper sequence. * The returned Iterator is a "weakly consistent" iterator that * will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. * * @return an iterator over the elements in this queue in proper sequence */ public Iterator iterator() { return new Itr(); } private class Itr implements Iterator { /* * Basic weak-consistent iterator. At all times hold the next * item to hand out so that if hasNext() reports true, we will * still have it to return even if lost race with a take etc. */ private Node current; private Node lastRet; private Object currentElement; Itr() { synchronized (putLock) { synchronized (takeLock) { current = head.next; if (current != null) currentElement = current.item; } } } public boolean hasNext() { return current != null; } public Object next() { synchronized (putLock) { synchronized (takeLock) { if (current == null) throw new NoSuchElementException(); Object x = currentElement; lastRet = current; current = current.next; if (current != null) currentElement = current.item; return x; } } } public void remove() { if (lastRet == null) throw new IllegalStateException(); synchronized (putLock) { synchronized (takeLock) { Node node = lastRet; lastRet = null; Node trail = head; Node p = head.next; while (p != null && p != node) { trail = p; p = p.next; } if (p == node) { p.item = null; trail.next = p.next; if (last == p) last = trail; int c; synchronized (this) { c = count--; } if (c == capacity) putLock.notifyAll(); } } } } } /** * Save the state to a stream (that is, serialize it). * * @serialData The capacity is emitted (int), followed by all of * its elements (each an Object) in the proper order, * followed by a null * @param s the stream */ private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException { synchronized (putLock) { synchronized (takeLock) { // Write out any hidden stuff, plus capacity s.defaultWriteObject(); // Write out all elements in the proper order. for (Node p = head.next; p != null; p = p.next) s.writeObject(p.item); // Use trailing null as sentinel s.writeObject(null); } } } /** * Reconstitute this queue instance from a stream (that is, * deserialize it). * @param s the stream */ private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { // Read in capacity, and any hidden stuff s.defaultReadObject(); synchronized (this) { count = 0; } last = head = new Node(null); // Read in all elements and place in queue for (;;) { Object item = (Object)s.readObject(); if (item == null) break; add(item); } } private static class SerializableLock implements java.io.Serializable { private final static long serialVersionUID = -8856990691138858668L; } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentHashMap.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentHashMa0000644001750700037720000013431010633344527032711 0ustar dawidkdcl /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; import java.io.Serializable; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Collection; import java.util.Set; import java.util.Map; import java.util.Enumeration; import java.util.Iterator; import java.util.NoSuchElementException; /** * A hash table supporting full concurrency of retrievals and * adjustable expected concurrency for updates. This class obeys the * same functional specification as {@link java.util.Hashtable}, and * includes versions of methods corresponding to each method of * Hashtable. However, even though all operations are * thread-safe, retrieval operations do not entail locking, * and there is not any support for locking the entire table * in a way that prevents all access. This class is fully * interoperable with Hashtable in programs that rely on its * thread safety but not on its synchronization details. * *

Retrieval operations (including get) generally do not * block, so may overlap with update operations (including * put and remove). Retrievals reflect the results * of the most recently completed update operations holding * upon their onset. For aggregate operations such as putAll * and clear, concurrent retrievals may reflect insertion or * removal of only some entries. Similarly, Iterators and * Enumerations return elements reflecting the state of the hash table * at some point at or since the creation of the iterator/enumeration. * They do not throw {@link java.util.ConcurrentModificationException}. * However, iterators are designed to be used by only one thread at a time. * *

The allowed concurrency among update operations is guided by * the optional concurrencyLevel constructor argument * (default 16), which is used as a hint for internal sizing. The * table is internally partitioned to try to permit the indicated * number of concurrent updates without contention. Because placement * in hash tables is essentially random, the actual concurrency will * vary. Ideally, you should choose a value to accommodate as many * threads as will ever concurrently modify the table. Using a * significantly higher value than you need can waste space and time, * and a significantly lower value can lead to thread contention. But * overestimates and underestimates within an order of magnitude do * not usually have much noticeable impact. A value of one is * appropriate when it is known that only one thread will modify and * all others will only read. Also, resizing this or any other kind of * hash table is a relatively slow operation, so, when possible, it is * a good idea to provide estimates of expected table sizes in * constructors. * *

This class and its views and iterators implement all of the * optional methods of the {@link Map} and {@link Iterator} * interfaces. * *

Like {@link java.util.Hashtable} but unlike {@link java.util.HashMap}, this class * does not allow null to be used as a key or value. * *

This class is a member of the * * Java Collections Framework. * * @since 1.5 * @author Doug Lea */ public class ConcurrentHashMap extends AbstractMap implements ConcurrentMap, Serializable { private static final long serialVersionUID = 7249069246763182397L; /* * The basic strategy is to subdivide the table among Segments, * each of which itself is a concurrently readable hash table. */ /* ---------------- Constants -------------- */ /** * The default initial capacity for this table, * used when not otherwise specified in a constructor. */ static final int DEFAULT_INITIAL_CAPACITY = 16; /** * The default load factor for this table, used when not * otherwise specified in a constructor. */ static final float DEFAULT_LOAD_FACTOR = 0.75f; /** * The default concurrency level for this table, used when not * otherwise specified in a constructor. */ static final int DEFAULT_CONCURRENCY_LEVEL = 16; /** * The maximum capacity, used if a higher value is implicitly * specified by either of the constructors with arguments. MUST * be a power of two <= 1<<30 to ensure that entries are indexable * using ints. */ static final int MAXIMUM_CAPACITY = 1 << 30; /** * The maximum number of segments to allow; used to bound * constructor arguments. */ static final int MAX_SEGMENTS = 1 << 16; // slightly conservative /** * Number of unsynchronized retries in size and containsValue * methods before resorting to locking. This is used to avoid * unbounded retries if tables undergo continuous modification * which would make it impossible to obtain an accurate result. */ static final int RETRIES_BEFORE_LOCK = 2; /* ---------------- Fields -------------- */ /** * Mask value for indexing into segments. The upper bits of a * key's hash code are used to choose the segment. */ final int segmentMask; /** * Shift value for indexing within segments. */ final int segmentShift; /** * The segments, each of which is a specialized hash table */ final Segment[] segments; transient Set keySet; transient Set entrySet; transient Collection values; /* ---------------- Small Utilities -------------- */ /** * Applies a supplemental hash function to a given hashCode, which * defends against poor quality hash functions. This is critical * because ConcurrentHashMap uses power-of-two length hash tables, * that otherwise encounter collisions for hashCodes that do not * differ in lower or upper bits. */ private static int hash(int h) { // Spread bits to regularize both segment and index locations, // using variant of single-word Wang/Jenkins hash. h += (h << 15) ^ 0xffffcd7d; h ^= (h >>> 10); h += (h << 3); h ^= (h >>> 6); h += (h << 2) + (h << 14); return h ^ (h >>> 16); } /** * Returns the segment that should be used for key with given hash * @param hash the hash code for the key * @return the segment */ final Segment segmentFor(int hash) { return segments[(hash >>> segmentShift) & segmentMask]; } /* ---------------- Inner Classes -------------- */ /** * ConcurrentHashMap list entry. Note that this is never exported * out as a user-visible Map.Entry. * * Because the value field is volatile, not final, it is legal wrt * the Java Memory Model for an unsynchronized reader to see null * instead of initial value when read via a data race. Although a * reordering leading to this is not likely to ever actually * occur, the Segment.readValueUnderLock method is used as a * backup in case a null (pre-initialized) value is ever seen in * an unsynchronized access method. */ static final class HashEntry { final Object key; final int hash; volatile Object value; final HashEntry next; HashEntry(Object key, int hash, HashEntry next, Object value) { this.key = key; this.hash = hash; this.next = next; this.value = value; } static final HashEntry[] newArray(int i) { return new HashEntry[i]; } } /** * Segments are specialized versions of hash tables. This * subclasses from ReentrantLock opportunistically, just to * simplify some locking and avoid separate construction. */ static final class Segment extends ReentrantLock implements Serializable { /* * Segments maintain a table of entry lists that are ALWAYS * kept in a consistent state, so can be read without locking. * Next fields of nodes are immutable (final). All list * additions are performed at the front of each bin. This * makes it easy to check changes, and also fast to traverse. * When nodes would otherwise be changed, new nodes are * created to replace them. This works well for hash tables * since the bin lists tend to be short. (The average length * is less than two for the default load factor threshold.) * * Read operations can thus proceed without locking, but rely * on selected uses of volatiles to ensure that completed * write operations performed by other threads are * noticed. For most purposes, the "count" field, tracking the * number of elements, serves as that volatile variable * ensuring visibility. This is convenient because this field * needs to be read in many read operations anyway: * * - All (unsynchronized) read operations must first read the * "count" field, and should not look at table entries if * it is 0. * * - All (synchronized) write operations should write to * the "count" field after structurally changing any bin. * The operations must not take any action that could even * momentarily cause a concurrent read operation to see * inconsistent data. This is made easier by the nature of * the read operations in Map. For example, no operation * can reveal that the table has grown but the threshold * has not yet been updated, so there are no atomicity * requirements for this with respect to reads. * * As a guide, all critical volatile reads and writes to the * count field are marked in code comments. */ private static final long serialVersionUID = 2249069246763182397L; /** * The number of elements in this segment's region. */ transient volatile int count; /** * Number of updates that alter the size of the table. This is * used during bulk-read methods to make sure they see a * consistent snapshot: If modCounts change during a traversal * of segments computing size or checking containsValue, then * we might have an inconsistent view of state so (usually) * must retry. */ transient int modCount; /** * The table is rehashed when its size exceeds this threshold. * (The value of this field is always (int)(capacity * * loadFactor).) */ transient int threshold; /** * The per-segment table. */ transient volatile HashEntry[] table; /** * The load factor for the hash table. Even though this value * is same for all segments, it is replicated to avoid needing * links to outer object. * @serial */ final float loadFactor; Segment(int initialCapacity, float lf) { loadFactor = lf; setTable(HashEntry.newArray(initialCapacity)); } static final Segment[] newArray(int i) { return new Segment[i]; } /** * Sets table to new HashEntry array. * Call only while holding lock or in constructor. */ void setTable(HashEntry[] newTable) { threshold = (int)(newTable.length * loadFactor); table = newTable; } /** * Returns properly casted first entry of bin for given hash. */ HashEntry getFirst(int hash) { HashEntry[] tab = table; return tab[hash & (tab.length - 1)]; } /** * Reads value field of an entry under lock. Called if value * field ever appears to be null. This is possible only if a * compiler happens to reorder a HashEntry initialization with * its table assignment, which is legal under memory model * but is not known to ever occur. */ Object readValueUnderLock(HashEntry e) { lock(); try { return e.value; } finally { unlock(); } } /* Specialized implementations of map methods */ Object get(Object key, int hash) { if (count != 0) { // read-volatile HashEntry e = getFirst(hash); while (e != null) { if (e.hash == hash && key.equals(e.key)) { Object v = e.value; if (v != null) return v; return readValueUnderLock(e); // recheck } e = e.next; } } return null; } boolean containsKey(Object key, int hash) { if (count != 0) { // read-volatile HashEntry e = getFirst(hash); while (e != null) { if (e.hash == hash && key.equals(e.key)) return true; e = e.next; } } return false; } boolean containsValue(Object value) { if (count != 0) { // read-volatile HashEntry[] tab = table; int len = tab.length; for (int i = 0 ; i < len; i++) { for (HashEntry e = tab[i]; e != null; e = e.next) { Object v = e.value; if (v == null) // recheck v = readValueUnderLock(e); if (value.equals(v)) return true; } } } return false; } boolean replace(Object key, int hash, Object oldValue, Object newValue) { lock(); try { HashEntry e = getFirst(hash); while (e != null && (e.hash != hash || !key.equals(e.key))) e = e.next; boolean replaced = false; if (e != null && oldValue.equals(e.value)) { replaced = true; e.value = newValue; } return replaced; } finally { unlock(); } } Object replace(Object key, int hash, Object newValue) { lock(); try { HashEntry e = getFirst(hash); while (e != null && (e.hash != hash || !key.equals(e.key))) e = e.next; Object oldValue = null; if (e != null) { oldValue = e.value; e.value = newValue; } return oldValue; } finally { unlock(); } } Object put(Object key, int hash, Object value, boolean onlyIfAbsent) { lock(); try { int c = count; if (c++ > threshold) // ensure capacity rehash(); HashEntry[] tab = table; int index = hash & (tab.length - 1); HashEntry first = tab[index]; HashEntry e = first; while (e != null && (e.hash != hash || !key.equals(e.key))) e = e.next; Object oldValue; if (e != null) { oldValue = e.value; if (!onlyIfAbsent) e.value = value; } else { oldValue = null; ++modCount; tab[index] = new HashEntry(key, hash, first, value); count = c; // write-volatile } return oldValue; } finally { unlock(); } } void rehash() { HashEntry[] oldTable = table; int oldCapacity = oldTable.length; if (oldCapacity >= MAXIMUM_CAPACITY) return; /* * Reclassify nodes in each list to new Map. Because we are * using power-of-two expansion, the elements from each bin * must either stay at same index, or move with a power of two * offset. We eliminate unnecessary node creation by catching * cases where old nodes can be reused because their next * fields won't change. Statistically, at the default * threshold, only about one-sixth of them need cloning when * a table doubles. The nodes they replace will be garbage * collectable as soon as they are no longer referenced by any * reader thread that may be in the midst of traversing table * right now. */ HashEntry[] newTable = HashEntry.newArray(oldCapacity<<1); threshold = (int)(newTable.length * loadFactor); int sizeMask = newTable.length - 1; for (int i = 0; i < oldCapacity ; i++) { // We need to guarantee that any existing reads of old Map can // proceed. So we cannot yet null out each bin. HashEntry e = oldTable[i]; if (e != null) { HashEntry next = e.next; int idx = e.hash & sizeMask; // Single node on list if (next == null) newTable[idx] = e; else { // Reuse trailing consecutive sequence at same slot HashEntry lastRun = e; int lastIdx = idx; for (HashEntry last = next; last != null; last = last.next) { int k = last.hash & sizeMask; if (k != lastIdx) { lastIdx = k; lastRun = last; } } newTable[lastIdx] = lastRun; // Clone all remaining nodes for (HashEntry p = e; p != lastRun; p = p.next) { int k = p.hash & sizeMask; HashEntry n = newTable[k]; newTable[k] = new HashEntry(p.key, p.hash, n, p.value); } } } } table = newTable; } /** * Remove; match on key only if value null, else match both. */ Object remove(Object key, int hash, Object value) { lock(); try { int c = count - 1; HashEntry[] tab = table; int index = hash & (tab.length - 1); HashEntry first = tab[index]; HashEntry e = first; while (e != null && (e.hash != hash || !key.equals(e.key))) e = e.next; Object oldValue = null; if (e != null) { Object v = e.value; if (value == null || value.equals(v)) { oldValue = v; // All entries following removed node can stay // in list, but all preceding ones need to be // cloned. ++modCount; HashEntry newFirst = e.next; for (HashEntry p = first; p != e; p = p.next) newFirst = new HashEntry(p.key, p.hash, newFirst, p.value); tab[index] = newFirst; count = c; // write-volatile } } return oldValue; } finally { unlock(); } } void clear() { if (count != 0) { lock(); try { HashEntry[] tab = table; for (int i = 0; i < tab.length ; i++) tab[i] = null; ++modCount; count = 0; // write-volatile } finally { unlock(); } } } } /* ---------------- Public operations -------------- */ /** * Creates a new, empty map with the specified initial * capacity, load factor and concurrency level. * * @param initialCapacity the initial capacity. The implementation * performs internal sizing to accommodate this many elements. * @param loadFactor the load factor threshold, used to control resizing. * Resizing may be performed when the average number of elements per * bin exceeds this threshold. * @param concurrencyLevel the estimated number of concurrently * updating threads. The implementation performs internal sizing * to try to accommodate this many threads. * @throws IllegalArgumentException if the initial capacity is * negative or the load factor or concurrencyLevel are * nonpositive. */ public ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel) { if (!(loadFactor > 0) || initialCapacity < 0 || concurrencyLevel <= 0) throw new IllegalArgumentException(); if (concurrencyLevel > MAX_SEGMENTS) concurrencyLevel = MAX_SEGMENTS; // Find power-of-two sizes best matching arguments int sshift = 0; int ssize = 1; while (ssize < concurrencyLevel) { ++sshift; ssize <<= 1; } segmentShift = 32 - sshift; segmentMask = ssize - 1; this.segments = Segment.newArray(ssize); if (initialCapacity > MAXIMUM_CAPACITY) initialCapacity = MAXIMUM_CAPACITY; int c = initialCapacity / ssize; if (c * ssize < initialCapacity) ++c; int cap = 1; while (cap < c) cap <<= 1; for (int i = 0; i < this.segments.length; ++i) this.segments[i] = new Segment(cap, loadFactor); } /** * Creates a new, empty map with the specified initial capacity * and load factor and with the default concurrencyLevel (16). * * @param initialCapacity The implementation performs internal * sizing to accommodate this many elements. * @param loadFactor the load factor threshold, used to control resizing. * Resizing may be performed when the average number of elements per * bin exceeds this threshold. * @throws IllegalArgumentException if the initial capacity of * elements is negative or the load factor is nonpositive * * @since 1.6 */ public ConcurrentHashMap(int initialCapacity, float loadFactor) { this(initialCapacity, loadFactor, DEFAULT_CONCURRENCY_LEVEL); } /** * Creates a new, empty map with the specified initial capacity, * and with default load factor (0.75) and concurrencyLevel (16). * * @param initialCapacity the initial capacity. The implementation * performs internal sizing to accommodate this many elements. * @throws IllegalArgumentException if the initial capacity of * elements is negative. */ public ConcurrentHashMap(int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL); } /** * Creates a new, empty map with a default initial capacity (16), * load factor (0.75) and concurrencyLevel (16). */ public ConcurrentHashMap() { this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL); } /** * Creates a new map with the same mappings as the given map. * The map is created with a capacity of 1.5 times the number * of mappings in the given map or 16 (whichever is greater), * and a default load factor (0.75) and concurrencyLevel (16). * * @param m the map */ public ConcurrentHashMap(Map m) { this(Math.max((int) (m.size() / DEFAULT_LOAD_FACTOR) + 1, DEFAULT_INITIAL_CAPACITY), DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL); putAll(m); } /** * Returns true if this map contains no key-value mappings. * * @return true if this map contains no key-value mappings */ public boolean isEmpty() { final Segment[] segments = this.segments; /* * We keep track of per-segment modCounts to avoid ABA * problems in which an element in one segment was added and * in another removed during traversal, in which case the * table was never actually empty at any point. Note the * similar use of modCounts in the size() and containsValue() * methods, which are the only other methods also susceptible * to ABA problems. */ int[] mc = new int[segments.length]; int mcsum = 0; for (int i = 0; i < segments.length; ++i) { if (segments[i].count != 0) return false; else mcsum += mc[i] = segments[i].modCount; } // If mcsum happens to be zero, then we know we got a snapshot // before any modifications at all were made. This is // probably common enough to bother tracking. if (mcsum != 0) { for (int i = 0; i < segments.length; ++i) { if (segments[i].count != 0 || mc[i] != segments[i].modCount) return false; } } return true; } /** * Returns the number of key-value mappings in this map. If the * map contains more than Integer.MAX_VALUE elements, returns * Integer.MAX_VALUE. * * @return the number of key-value mappings in this map */ public int size() { final Segment[] segments = this.segments; long sum = 0; long check = 0; int[] mc = new int[segments.length]; // Try a few times to get accurate count. On failure due to // continuous async changes in table, resort to locking. for (int k = 0; k < RETRIES_BEFORE_LOCK; ++k) { check = 0; sum = 0; int mcsum = 0; for (int i = 0; i < segments.length; ++i) { sum += segments[i].count; mcsum += mc[i] = segments[i].modCount; } if (mcsum != 0) { for (int i = 0; i < segments.length; ++i) { check += segments[i].count; if (mc[i] != segments[i].modCount) { check = -1; // force retry break; } } } if (check == sum) break; } if (check != sum) { // Resort to locking all segments sum = 0; for (int i = 0; i < segments.length; ++i) segments[i].lock(); for (int i = 0; i < segments.length; ++i) sum += segments[i].count; for (int i = 0; i < segments.length; ++i) segments[i].unlock(); } if (sum > Integer.MAX_VALUE) return Integer.MAX_VALUE; else return (int)sum; } /** * Returns the value to which the specified key is mapped, * or {@code null} if this map contains no mapping for the key. * *

More formally, if this map contains a mapping from a key * {@code k} to a value {@code v} such that {@code key.equals(k)}, * then this method returns {@code v}; otherwise it returns * {@code null}. (There can be at most one such mapping.) * * @throws NullPointerException if the specified key is null */ public Object get(Object key) { int hash = hash(key.hashCode()); // throws NullPointerException if key null return segmentFor(hash).get(key, hash); } /** * Tests if the specified object is a key in this table. * * @param key possible key * @return true if and only if the specified object * is a key in this table, as determined by the * equals method; false otherwise. * @throws NullPointerException if the specified key is null */ public boolean containsKey(Object key) { int hash = hash(key.hashCode()); // throws NullPointerException if key null return segmentFor(hash).containsKey(key, hash); } /** * Returns true if this map maps one or more keys to the * specified value. Note: This method requires a full internal * traversal of the hash table, and so is much slower than * method containsKey. * * @param value value whose presence in this map is to be tested * @return true if this map maps one or more keys to the * specified value * @throws NullPointerException if the specified value is null */ public boolean containsValue(Object value) { if (value == null) throw new NullPointerException(); // See explanation of modCount use above final Segment[] segments = this.segments; int[] mc = new int[segments.length]; // Try a few times without locking for (int k = 0; k < RETRIES_BEFORE_LOCK; ++k) { int sum = 0; int mcsum = 0; for (int i = 0; i < segments.length; ++i) { int c = segments[i].count; mcsum += mc[i] = segments[i].modCount; if (segments[i].containsValue(value)) return true; } boolean cleanSweep = true; if (mcsum != 0) { for (int i = 0; i < segments.length; ++i) { int c = segments[i].count; if (mc[i] != segments[i].modCount) { cleanSweep = false; break; } } } if (cleanSweep) return false; } // Resort to locking all segments for (int i = 0; i < segments.length; ++i) segments[i].lock(); boolean found = false; try { for (int i = 0; i < segments.length; ++i) { if (segments[i].containsValue(value)) { found = true; break; } } } finally { for (int i = 0; i < segments.length; ++i) segments[i].unlock(); } return found; } /** * Legacy method testing if some key maps into the specified value * in this table. This method is identical in functionality to * {@link #containsValue}, and exists solely to ensure * full compatibility with class {@link java.util.Hashtable}, * which supported this method prior to introduction of the * Java Collections framework. * @param value a value to search for * @return true if and only if some key maps to the * value argument in this table as * determined by the equals method; * false otherwise * @throws NullPointerException if the specified value is null */ public boolean contains(Object value) { return containsValue(value); } /** * Maps the specified key to the specified value in this table. * Neither the key nor the value can be null. * *

The value can be retrieved by calling the get method * with a key that is equal to the original key. * * @param key key with which the specified value is to be associated * @param value value to be associated with the specified key * @return the previous value associated with key, or * null if there was no mapping for key * @throws NullPointerException if the specified key or value is null */ public Object put(Object key, Object value) { if (value == null) throw new NullPointerException(); int hash = hash(key.hashCode()); // throws NullPointerException if key null return segmentFor(hash).put(key, hash, value, false); } /** * {@inheritDoc} * * @return the previous value associated with the specified key, * or null if there was no mapping for the key * @throws NullPointerException if the specified key or value is null */ public Object putIfAbsent(Object key, Object value) { if (value == null) throw new NullPointerException(); int hash = hash(key.hashCode()); // throws NullPointerException if key null return segmentFor(hash).put(key, hash, value, true); } /** * Copies all of the mappings from the specified map to this one. * These mappings replace any mappings that this map had for any of the * keys currently in the specified map. * * @param m mappings to be stored in this map */ public void putAll(Map m) { for (Iterator it = m.entrySet().iterator(); it.hasNext(); ) { Entry e = (Entry)it.next(); put(e.getKey(), e.getValue()); } } /** * Removes the key (and its corresponding value) from this map. * This method does nothing if the key is not in the map. * * @param key the key that needs to be removed * @return the previous value associated with key, or * null if there was no mapping for key * @throws NullPointerException if the specified key is null */ public Object remove(Object key) { int hash = hash(key.hashCode()); // throws NullPointerException if key null return segmentFor(hash).remove(key, hash, null); } /** * {@inheritDoc} * * @throws NullPointerException if the specified key is null */ public boolean remove(Object key, Object value) { if (value == null) return false; int hash = hash(key.hashCode()); // throws NullPointerException if key null return segmentFor(hash).remove(key, hash, value) != null; } /** * {@inheritDoc} * * @throws NullPointerException if any of the arguments are null */ public boolean replace(Object key, Object oldValue, Object newValue) { if (oldValue == null || newValue == null) throw new NullPointerException(); int hash = hash(key.hashCode()); // throws NullPointerException if key null return segmentFor(hash).replace(key, hash, oldValue, newValue); } /** * {@inheritDoc} * * @return the previous value associated with the specified key, * or null if there was no mapping for the key * @throws NullPointerException if the specified key or value is null */ public Object replace(Object key, Object value) { if (value == null) throw new NullPointerException(); int hash = hash(key.hashCode()); // throws NullPointerException if key null return segmentFor(hash).replace(key, hash, value); } /** * Removes all of the mappings from this map. */ public void clear() { for (int i = 0; i < segments.length; ++i) segments[i].clear(); } /** * Returns a {@link Set} view of the keys contained in this map. * The set is backed by the map, so changes to the map are * reflected in the set, and vice-versa. The set supports element * removal, which removes the corresponding mapping from this map, * via the Iterator.remove, Set.remove, * removeAll, retainAll, and clear * operations. It does not support the add or * addAll operations. * *

The view's iterator is a "weakly consistent" iterator * that will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. */ public Set keySet() { Set ks = keySet; return (ks != null) ? ks : (keySet = new KeySet()); } /** * Returns a {@link Collection} view of the values contained in this map. * The collection is backed by the map, so changes to the map are * reflected in the collection, and vice-versa. The collection * supports element removal, which removes the corresponding * mapping from this map, via the Iterator.remove, * Collection.remove, removeAll, * retainAll, and clear operations. It does not * support the add or addAll operations. * *

The view's iterator is a "weakly consistent" iterator * that will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. */ public Collection values() { Collection vs = values; return (vs != null) ? vs : (values = new Values()); } /** * Returns a {@link Set} view of the mappings contained in this map. * The set is backed by the map, so changes to the map are * reflected in the set, and vice-versa. The set supports element * removal, which removes the corresponding mapping from the map, * via the Iterator.remove, Set.remove, * removeAll, retainAll, and clear * operations. It does not support the add or * addAll operations. * *

The view's iterator is a "weakly consistent" iterator * that will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. */ public Set entrySet() { Set es = entrySet; return (es != null) ? es : (entrySet = new EntrySet()); } /** * Returns an enumeration of the keys in this table. * * @return an enumeration of the keys in this table * @see #keySet() */ public Enumeration keys() { return new KeyIterator(); } /** * Returns an enumeration of the values in this table. * * @return an enumeration of the values in this table * @see #values() */ public Enumeration elements() { return new ValueIterator(); } /* ---------------- Iterator Support -------------- */ abstract class HashIterator { int nextSegmentIndex; int nextTableIndex; HashEntry[] currentTable; HashEntry nextEntry; HashEntry lastReturned; HashIterator() { nextSegmentIndex = segments.length - 1; nextTableIndex = -1; advance(); } public boolean hasMoreElements() { return hasNext(); } final void advance() { if (nextEntry != null && (nextEntry = nextEntry.next) != null) return; while (nextTableIndex >= 0) { if ( (nextEntry = currentTable[nextTableIndex--]) != null) return; } while (nextSegmentIndex >= 0) { Segment seg = segments[nextSegmentIndex--]; if (seg.count != 0) { currentTable = seg.table; for (int j = currentTable.length - 1; j >= 0; --j) { if ( (nextEntry = currentTable[j]) != null) { nextTableIndex = j - 1; return; } } } } } public boolean hasNext() { return nextEntry != null; } HashEntry nextEntry() { if (nextEntry == null) throw new NoSuchElementException(); lastReturned = nextEntry; advance(); return lastReturned; } public void remove() { if (lastReturned == null) throw new IllegalStateException(); ConcurrentHashMap.this.remove(lastReturned.key); lastReturned = null; } } final class KeyIterator extends HashIterator implements Iterator, Enumeration { public Object next() { return super.nextEntry().key; } public Object nextElement() { return super.nextEntry().key; } } final class ValueIterator extends HashIterator implements Iterator, Enumeration { public Object next() { return super.nextEntry().value; } public Object nextElement() { return super.nextEntry().value; } } /** * Custom Entry class used by EntryIterator.next(), that relays * setValue changes to the underlying map. */ final class WriteThroughEntry extends AbstractMap.SimpleEntry { WriteThroughEntry(Object k, Object v) { super(k,v); } /** * Set our entry's value and write through to the map. The * value to return is somewhat arbitrary here. Since a * WriteThroughEntry does not necessarily track asynchronous * changes, the most recent "previous" value could be * different from what we return (or could even have been * removed in which case the put will re-establish). We do not * and cannot guarantee more. */ public Object setValue(Object value) { if (value == null) throw new NullPointerException(); Object v = super.setValue(value); ConcurrentHashMap.this.put(getKey(), value); return v; } } final class EntryIterator extends HashIterator implements Iterator { public Object next() { HashEntry e = super.nextEntry(); return new WriteThroughEntry(e.key, e.value); } } final class KeySet extends AbstractSet { public Iterator iterator() { return new KeyIterator(); } public int size() { return ConcurrentHashMap.this.size(); } public boolean contains(Object o) { return ConcurrentHashMap.this.containsKey(o); } public boolean remove(Object o) { return ConcurrentHashMap.this.remove(o) != null; } public void clear() { ConcurrentHashMap.this.clear(); } } final class Values extends AbstractCollection { public Iterator iterator() { return new ValueIterator(); } public int size() { return ConcurrentHashMap.this.size(); } public boolean contains(Object o) { return ConcurrentHashMap.this.containsValue(o); } public void clear() { ConcurrentHashMap.this.clear(); } } final class EntrySet extends AbstractSet { public Iterator iterator() { return new EntryIterator(); } public boolean contains(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry e = (Map.Entry)o; Object v = ConcurrentHashMap.this.get(e.getKey()); return v != null && v.equals(e.getValue()); } public boolean remove(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry e = (Map.Entry)o; return ConcurrentHashMap.this.remove(e.getKey(), e.getValue()); } public int size() { return ConcurrentHashMap.this.size(); } public void clear() { ConcurrentHashMap.this.clear(); } } /* ---------------- Serialization Support -------------- */ /** * Save the state of the ConcurrentHashMap instance to a * stream (i.e., serialize it). * @param s the stream * @serialData * the key (Object) and value (Object) * for each key-value mapping, followed by a null pair. * The key-value mappings are emitted in no particular order. */ private void writeObject(java.io.ObjectOutputStream s) throws IOException { s.defaultWriteObject(); for (int k = 0; k < segments.length; ++k) { Segment seg = segments[k]; seg.lock(); try { HashEntry[] tab = seg.table; for (int i = 0; i < tab.length; ++i) { for (HashEntry e = tab[i]; e != null; e = e.next) { s.writeObject(e.key); s.writeObject(e.value); } } } finally { seg.unlock(); } } s.writeObject(null); s.writeObject(null); } /** * Reconstitute the ConcurrentHashMap instance from a * stream (i.e., deserialize it). * @param s the stream */ private void readObject(java.io.ObjectInputStream s) throws IOException, ClassNotFoundException { s.defaultReadObject(); // Initialize each segment to be minimally sized, and let grow. for (int i = 0; i < segments.length; ++i) { segments[i].setTable(new HashEntry[1]); } // Read the keys and values, and put the mappings in the table for (;;) { Object key = s.readObject(); Object value = s.readObject(); if (key == null) break; put(key, value); } } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ScheduledFuture.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ScheduledFuture.0000644001750700037720000000101410153210664032637 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * A delayed result-bearing action that can be cancelled. * Usually a scheduled future is the result of scheduling * a task with a {@link ScheduledExecutorService}. * * @since 1.5 * @author Doug Lea */ public interface ScheduledFuture extends Delayed, Future { } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/CountDownLatch.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/CountDownLatch.j0000644001750700037720000002415310431774517032636 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; /** * A synchronization aid that allows one or more threads to wait until * a set of operations being performed in other threads completes. * *

A {@code CountDownLatch} is initialized with a given count. * The {@link #await await} methods block until the current count reaches * zero due to invocations of the {@link #countDown} method, after which * all waiting threads are released and any subsequent invocations of * {@link #await await} return immediately. This is a one-shot phenomenon * -- the count cannot be reset. If you need a version that resets the * count, consider using a {@link CyclicBarrier}. * *

A {@code CountDownLatch} is a versatile synchronization tool * and can be used for a number of purposes. A * {@code CountDownLatch} initialized with a count of one serves as a * simple on/off latch, or gate: all threads invoking {@link #await await} * wait at the gate until it is opened by a thread invoking {@link * #countDown}. A {@code CountDownLatch} initialized to N * can be used to make one thread wait until N threads have * completed some action, or some action has been completed N times. * *

A useful property of a {@code CountDownLatch} is that it * doesn't require that threads calling {@code countDown} wait for * the count to reach zero before proceeding, it simply prevents any * thread from proceeding past an {@link #await await} until all * threads could pass. * *

Sample usage: Here is a pair of classes in which a group * of worker threads use two countdown latches: *

    *
  • The first is a start signal that prevents any worker from proceeding * until the driver is ready for them to proceed; *
  • The second is a completion signal that allows the driver to wait * until all workers have completed. *
* *
 * class Driver { // ...
 *   void main() throws InterruptedException {
 *     CountDownLatch startSignal = new CountDownLatch(1);
 *     CountDownLatch doneSignal = new CountDownLatch(N);
 *
 *     for (int i = 0; i < N; ++i) // create and start threads
 *       new Thread(new Worker(startSignal, doneSignal)).start();
 *
 *     doSomethingElse();            // don't let run yet
 *     startSignal.countDown();      // let all threads proceed
 *     doSomethingElse();
 *     doneSignal.await();           // wait for all to finish
 *   }
 * }
 *
 * class Worker implements Runnable {
 *   private final CountDownLatch startSignal;
 *   private final CountDownLatch doneSignal;
 *   Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
 *      this.startSignal = startSignal;
 *      this.doneSignal = doneSignal;
 *   }
 *   public void run() {
 *      try {
 *        startSignal.await();
 *        doWork();
 *        doneSignal.countDown();
 *      } catch (InterruptedException ex) {} // return;
 *   }
 *
 *   void doWork() { ... }
 * }
 *
 * 
* *

Another typical usage would be to divide a problem into N parts, * describe each part with a Runnable that executes that portion and * counts down on the latch, and queue all the Runnables to an * Executor. When all sub-parts are complete, the coordinating thread * will be able to pass through await. (When threads must repeatedly * count down in this way, instead use a {@link CyclicBarrier}.) * *

 * class Driver2 { // ...
 *   void main() throws InterruptedException {
 *     CountDownLatch doneSignal = new CountDownLatch(N);
 *     Executor e = ...
 *
 *     for (int i = 0; i < N; ++i) // create and start threads
 *       e.execute(new WorkerRunnable(doneSignal, i));
 *
 *     doneSignal.await();           // wait for all to finish
 *   }
 * }
 *
 * class WorkerRunnable implements Runnable {
 *   private final CountDownLatch doneSignal;
 *   private final int i;
 *   WorkerRunnable(CountDownLatch doneSignal, int i) {
 *      this.doneSignal = doneSignal;
 *      this.i = i;
 *   }
 *   public void run() {
 *      try {
 *        doWork(i);
 *        doneSignal.countDown();
 *      } catch (InterruptedException ex) {} // return;
 *   }
 *
 *   void doWork() { ... }
 * }
 *
 * 
* *

Memory consistency effects: Actions in a thread prior to calling * {@code countDown()} * happen-before * actions following a successful return from a corresponding * {@code await()} in another thread. * * @since 1.5 * @author Doug Lea */ public class CountDownLatch { private int count_; /** * Constructs a {@code CountDownLatch} initialized with the given count. * * @param count the number of times {@link #countDown} must be invoked * before threads can pass through {@link #await} * @throws IllegalArgumentException if {@code count} is negative */ public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.count_ = count; } /** * Causes the current thread to wait until the latch has counted down to * zero, unless the thread is {@linkplain Thread#interrupt interrupted}. * *

If the current count is zero then this method returns immediately. * *

If the current count is greater than zero then the current * thread becomes disabled for thread scheduling purposes and lies * dormant until one of two things happen: *

    *
  • The count reaches zero due to invocations of the * {@link #countDown} method; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} * the current thread. *
* *

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@linkplain Thread#interrupt interrupted} while waiting, *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * * @throws InterruptedException if the current thread is interrupted * while waiting */ public void await() throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); synchronized(this) { while (count_ > 0) wait(); } } /** * Causes the current thread to wait until the latch has counted down to * zero, unless the thread is {@linkplain Thread#interrupt interrupted}, * or the specified waiting time elapses. * *

If the current count is zero then this method returns immediately * with the value {@code true}. * *

If the current count is greater than zero then the current * thread becomes disabled for thread scheduling purposes and lies * dormant until one of three things happen: *

    *
  • The count reaches zero due to invocations of the * {@link #countDown} method; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} * the current thread; or *
  • The specified waiting time elapses. *
* *

If the count reaches zero then the method returns with the * value {@code true}. * *

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@linkplain Thread#interrupt interrupted} while waiting, *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * *

If the specified waiting time elapses then the value {@code false} * is returned. If the time is less than or equal to zero, the method * will not wait at all. * * @param timeout the maximum time to wait * @param unit the time unit of the {@code timeout} argument * @return {@code true} if the count reached zero and {@code false} * if the waiting time elapsed before the count reached zero * @throws InterruptedException if the current thread is interrupted * while waiting */ public boolean await(long timeout, TimeUnit unit) throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); long nanos = unit.toNanos(timeout); synchronized (this) { if (count_ <= 0) return true; else if (nanos <= 0) return false; else { long deadline = Utils.nanoTime() + nanos; for (; ; ) { TimeUnit.NANOSECONDS.timedWait(this, nanos); if (count_ <= 0) return true; else { nanos = deadline - Utils.nanoTime(); if (nanos <= 0) return false; } } } } } /** * Decrements the count of the latch, releasing all waiting threads if * the count reaches zero. * *

If the current count is greater than zero then it is decremented. * If the new count is zero then all waiting threads are re-enabled for * thread scheduling purposes. * *

If the current count equals zero then nothing happens. */ public synchronized void countDown() { if (count_ == 0) return; if (--count_ == 0) notifyAll(); } /** * Returns the current count. * *

This method is typically used for debugging and testing purposes. * * @return the current count */ public long getCount() { return count_; } /** * Returns a string identifying this latch, as well as its state. * The state, in brackets, includes the String {@code "Count ="} * followed by the current count. * * @return a string identifying this latch, as well as its state */ public String toString() { return super.toString() + "[Count = " + getCount() + "]"; } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/LinkedBlockingDeque.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/LinkedBlockingDe0000644001750700037720000007374410461021764032644 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import java.util.Collection; import java.util.Iterator; import java.util.NoSuchElementException; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; /** * An optionally-bounded {@linkplain BlockingDeque blocking deque} based on * linked nodes. * *

The optional capacity bound constructor argument serves as a * way to prevent excessive expansion. The capacity, if unspecified, * is equal to {@link Integer#MAX_VALUE}. Linked nodes are * dynamically created upon each insertion unless this would bring the * deque above capacity. * *

Most operations run in constant time (ignoring time spent * blocking). Exceptions include {@link #remove(Object) remove}, * {@link #removeFirstOccurrence removeFirstOccurrence}, {@link * #removeLastOccurrence removeLastOccurrence}, {@link #contains * contains}, {@link #iterator iterator.remove()}, and the bulk * operations, all of which run in linear time. * *

This class and its iterator implement all of the * optional methods of the {@link Collection} and {@link * Iterator} interfaces. * *

This class is a member of the * * Java Collections Framework. * * @since 1.6 * @author Doug Lea */ public class LinkedBlockingDeque extends AbstractQueue implements BlockingDeque, java.io.Serializable { /* * Implemented as a simple doubly-linked list protected by a * single lock and using conditions to manage blocking. */ /* * We have "diamond" multiple interface/abstract class inheritance * here, and that introduces ambiguities. Often we want the * BlockingDeque javadoc combined with the AbstractQueue * implementation, so a lot of method specs are duplicated here. */ private static final long serialVersionUID = -387911632671998426L; /** Doubly-linked list node class */ static final class Node { Object item; Node prev; Node next; Node(Object x, Node p, Node n) { item = x; prev = p; next = n; } } /** Pointer to first node */ private transient Node first; /** Pointer to last node */ private transient Node last; /** Number of items in the deque */ private transient int count; /** Maximum number of items in the deque */ private final int capacity; /** Main lock guarding all access */ private final ReentrantLock lock = new ReentrantLock(); /** Condition for waiting takes */ private final Condition notEmpty = lock.newCondition(); /** Condition for waiting puts */ private final Condition notFull = lock.newCondition(); /** * Creates a LinkedBlockingDeque with a capacity of * {@link Integer#MAX_VALUE}. */ public LinkedBlockingDeque() { this(Integer.MAX_VALUE); } /** * Creates a LinkedBlockingDeque with the given (fixed) capacity. * * @param capacity the capacity of this deque * @throws IllegalArgumentException if capacity is less than 1 */ public LinkedBlockingDeque(int capacity) { if (capacity <= 0) throw new IllegalArgumentException(); this.capacity = capacity; } /** * Creates a LinkedBlockingDeque with a capacity of * {@link Integer#MAX_VALUE}, initially containing the elements of * the given collection, added in traversal order of the * collection's iterator. * * @param c the collection of elements to initially contain * @throws NullPointerException if the specified collection or any * of its elements are null */ public LinkedBlockingDeque(Collection c) { this(Integer.MAX_VALUE); for (Iterator itr = c.iterator(); itr.hasNext(); ) { Object e = itr.next(); add(e); } } // Basic linking and unlinking operations, called only while holding lock /** * Links e as first element, or returns false if full. */ private boolean linkFirst(Object e) { if (count >= capacity) return false; ++count; Node f = first; Node x = new Node(e, null, f); first = x; if (last == null) last = x; else f.prev = x; notEmpty.signal(); return true; } /** * Links e as last element, or returns false if full. */ private boolean linkLast(Object e) { if (count >= capacity) return false; ++count; Node l = last; Node x = new Node(e, l, null); last = x; if (first == null) first = x; else l.next = x; notEmpty.signal(); return true; } /** * Removes and returns first element, or null if empty. */ private Object unlinkFirst() { Node f = first; if (f == null) return null; Node n = f.next; first = n; if (n == null) last = null; else n.prev = null; --count; notFull.signal(); return f.item; } /** * Removes and returns last element, or null if empty. */ private Object unlinkLast() { Node l = last; if (l == null) return null; Node p = l.prev; last = p; if (p == null) first = null; else p.next = null; --count; notFull.signal(); return l.item; } /** * Unlink e */ private void unlink(Node x) { Node p = x.prev; Node n = x.next; if (p == null) { if (n == null) first = last = null; else { n.prev = null; first = n; } } else if (n == null) { p.next = null; last = p; } else { p.next = n; n.prev = p; } --count; notFull.signalAll(); } // BlockingDeque methods /** * @throws IllegalStateException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public void addFirst(Object e) { if (!offerFirst(e)) throw new IllegalStateException("Deque full"); } /** * @throws IllegalStateException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public void addLast(Object e) { if (!offerLast(e)) throw new IllegalStateException("Deque full"); } /** * @throws NullPointerException {@inheritDoc} */ public boolean offerFirst(Object e) { if (e == null) throw new NullPointerException(); lock.lock(); try { return linkFirst(e); } finally { lock.unlock(); } } /** * @throws NullPointerException {@inheritDoc} */ public boolean offerLast(Object e) { if (e == null) throw new NullPointerException(); lock.lock(); try { return linkLast(e); } finally { lock.unlock(); } } /** * @throws NullPointerException {@inheritDoc} * @throws InterruptedException {@inheritDoc} */ public void putFirst(Object e) throws InterruptedException { if (e == null) throw new NullPointerException(); lock.lock(); try { while (!linkFirst(e)) notFull.await(); } finally { lock.unlock(); } } /** * @throws NullPointerException {@inheritDoc} * @throws InterruptedException {@inheritDoc} */ public void putLast(Object e) throws InterruptedException { if (e == null) throw new NullPointerException(); lock.lock(); try { while (!linkLast(e)) notFull.await(); } finally { lock.unlock(); } } /** * @throws NullPointerException {@inheritDoc} * @throws InterruptedException {@inheritDoc} */ public boolean offerFirst(Object e, long timeout, TimeUnit unit) throws InterruptedException { if (e == null) throw new NullPointerException(); long nanos = unit.toNanos(timeout); long deadline = Utils.nanoTime() + nanos; lock.lockInterruptibly(); try { for (;;) { if (linkFirst(e)) return true; if (nanos <= 0) return false; notFull.await(nanos, TimeUnit.NANOSECONDS); nanos = deadline - Utils.nanoTime(); } } finally { lock.unlock(); } } /** * @throws NullPointerException {@inheritDoc} * @throws InterruptedException {@inheritDoc} */ public boolean offerLast(Object e, long timeout, TimeUnit unit) throws InterruptedException { if (e == null) throw new NullPointerException(); long nanos = unit.toNanos(timeout); long deadline = Utils.nanoTime() + nanos; lock.lockInterruptibly(); try { for (;;) { if (linkLast(e)) return true; if (nanos <= 0) return false; notFull.await(nanos, TimeUnit.NANOSECONDS); nanos = deadline - Utils.nanoTime(); } } finally { lock.unlock(); } } /** * @throws NoSuchElementException {@inheritDoc} */ public Object removeFirst() { Object x = pollFirst(); if (x == null) throw new NoSuchElementException(); return x; } /** * @throws NoSuchElementException {@inheritDoc} */ public Object removeLast() { Object x = pollLast(); if (x == null) throw new NoSuchElementException(); return x; } public Object pollFirst() { lock.lock(); try { return unlinkFirst(); } finally { lock.unlock(); } } public Object pollLast() { lock.lock(); try { return unlinkLast(); } finally { lock.unlock(); } } public Object takeFirst() throws InterruptedException { lock.lock(); try { Object x; while ( (x = unlinkFirst()) == null) notEmpty.await(); return x; } finally { lock.unlock(); } } public Object takeLast() throws InterruptedException { lock.lock(); try { Object x; while ( (x = unlinkLast()) == null) notEmpty.await(); return x; } finally { lock.unlock(); } } public Object pollFirst(long timeout, TimeUnit unit) throws InterruptedException { long nanos = unit.toNanos(timeout); long deadline = Utils.nanoTime() + nanos; lock.lockInterruptibly(); try { for (;;) { Object x = unlinkFirst(); if (x != null) return x; if (nanos <= 0) return null; notEmpty.await(nanos, TimeUnit.NANOSECONDS); nanos = deadline - Utils.nanoTime(); } } finally { lock.unlock(); } } public Object pollLast(long timeout, TimeUnit unit) throws InterruptedException { long nanos = unit.toNanos(timeout); long deadline = Utils.nanoTime() + nanos; lock.lockInterruptibly(); try { for (;;) { Object x = unlinkLast(); if (x != null) return x; if (nanos <= 0) return null; notEmpty.await(nanos, TimeUnit.NANOSECONDS); nanos = deadline - Utils.nanoTime(); } } finally { lock.unlock(); } } /** * @throws NoSuchElementException {@inheritDoc} */ public Object getFirst() { Object x = peekFirst(); if (x == null) throw new NoSuchElementException(); return x; } /** * @throws NoSuchElementException {@inheritDoc} */ public Object getLast() { Object x = peekLast(); if (x == null) throw new NoSuchElementException(); return x; } public Object peekFirst() { lock.lock(); try { return (first == null) ? null : first.item; } finally { lock.unlock(); } } public Object peekLast() { lock.lock(); try { return (last == null) ? null : last.item; } finally { lock.unlock(); } } public boolean removeFirstOccurrence(Object o) { if (o == null) return false; lock.lock(); try { for (Node p = first; p != null; p = p.next) { if (o.equals(p.item)) { unlink(p); return true; } } return false; } finally { lock.unlock(); } } public boolean removeLastOccurrence(Object o) { if (o == null) return false; lock.lock(); try { for (Node p = last; p != null; p = p.prev) { if (o.equals(p.item)) { unlink(p); return true; } } return false; } finally { lock.unlock(); } } // BlockingQueue methods /** * Inserts the specified element at the end of this deque unless it would * violate capacity restrictions. When using a capacity-restricted deque, * it is generally preferable to use method {@link #offer(Object) offer}. * *

This method is equivalent to {@link #addLast}. * * @throws IllegalStateException if the element cannot be added at this * time due to capacity restrictions * @throws NullPointerException if the specified element is null */ public boolean add(Object e) { addLast(e); return true; } /** * @throws NullPointerException if the specified element is null */ public boolean offer(Object e) { return offerLast(e); } /** * @throws NullPointerException {@inheritDoc} * @throws InterruptedException {@inheritDoc} */ public void put(Object e) throws InterruptedException { putLast(e); } /** * @throws NullPointerException {@inheritDoc} * @throws InterruptedException {@inheritDoc} */ public boolean offer(Object e, long timeout, TimeUnit unit) throws InterruptedException { return offerLast(e, timeout, unit); } /** * Retrieves and removes the head of the queue represented by this deque. * This method differs from {@link #poll poll} only in that it throws an * exception if this deque is empty. * *

This method is equivalent to {@link #removeFirst() removeFirst}. * * @return the head of the queue represented by this deque * @throws NoSuchElementException if this deque is empty */ public Object remove() { return removeFirst(); } public Object poll() { return pollFirst(); } public Object take() throws InterruptedException { return takeFirst(); } public Object poll(long timeout, TimeUnit unit) throws InterruptedException { return pollFirst(timeout, unit); } /** * Retrieves, but does not remove, the head of the queue represented by * this deque. This method differs from {@link #peek peek} only in that * it throws an exception if this deque is empty. * *

This method is equivalent to {@link #getFirst() getFirst}. * * @return the head of the queue represented by this deque * @throws NoSuchElementException if this deque is empty */ public Object element() { return getFirst(); } public Object peek() { return peekFirst(); } /** * Returns the number of additional elements that this deque can ideally * (in the absence of memory or resource constraints) accept without * blocking. This is always equal to the initial capacity of this deque * less the current size of this deque. * *

Note that you cannot always tell if an attempt to insert * an element will succeed by inspecting remainingCapacity * because it may be the case that another thread is about to * insert or remove an element. */ public int remainingCapacity() { lock.lock(); try { return capacity - count; } finally { lock.unlock(); } } /** * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public int drainTo(Collection c) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); lock.lock(); try { for (Node p = first; p != null; p = p.next) c.add(p.item); int n = count; count = 0; first = last = null; notFull.signalAll(); return n; } finally { lock.unlock(); } } /** * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public int drainTo(Collection c, int maxElements) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); lock.lock(); try { int n = 0; while (n < maxElements && first != null) { c.add(first.item); first.prev = null; first = first.next; --count; ++n; } if (first == null) last = null; notFull.signalAll(); return n; } finally { lock.unlock(); } } // Stack methods /** * @throws IllegalStateException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public void push(Object e) { addFirst(e); } /** * @throws NoSuchElementException {@inheritDoc} */ public Object pop() { return removeFirst(); } // Collection methods /** * Removes the first occurrence of the specified element from this deque. * If the deque does not contain the element, it is unchanged. * More formally, removes the first element e such that * o.equals(e) (if such an element exists). * Returns true if this deque contained the specified element * (or equivalently, if this deque changed as a result of the call). * *

This method is equivalent to * {@link #removeFirstOccurrence(Object) removeFirstOccurrence}. * * @param o element to be removed from this deque, if present * @return true if this deque changed as a result of the call */ public boolean remove(Object o) { return removeFirstOccurrence(o); } /** * Returns the number of elements in this deque. * * @return the number of elements in this deque */ public int size() { lock.lock(); try { return count; } finally { lock.unlock(); } } /** * Returns true if this deque contains the specified element. * More formally, returns true if and only if this deque contains * at least one element e such that o.equals(e). * * @param o object to be checked for containment in this deque * @return true if this deque contains the specified element */ public boolean contains(Object o) { if (o == null) return false; lock.lock(); try { for (Node p = first; p != null; p = p.next) if (o.equals(p.item)) return true; return false; } finally { lock.unlock(); } } /** * Variant of removeFirstOccurrence needed by iterator.remove. * Searches for the node, not its contents. */ boolean removeNode(Node e) { lock.lock(); try { for (Node p = first; p != null; p = p.next) { if (p == e) { unlink(p); return true; } } return false; } finally { lock.unlock(); } } /** * Returns an array containing all of the elements in this deque, in * proper sequence (from first to last element). * *

The returned array will be "safe" in that no references to it are * maintained by this deque. (In other words, this method must allocate * a new array). The caller is thus free to modify the returned array. * *

This method acts as bridge between array-based and collection-based * APIs. * * @return an array containing all of the elements in this deque */ public Object[] toArray() { lock.lock(); try { Object[] a = new Object[count]; int k = 0; for (Node p = first; p != null; p = p.next) a[k++] = p.item; return a; } finally { lock.unlock(); } } /** * Returns an array containing all of the elements in this deque, in * proper sequence; the runtime type of the returned array is that of * the specified array. If the deque fits in the specified array, it * is returned therein. Otherwise, a new array is allocated with the * runtime type of the specified array and the size of this deque. * *

If this deque fits in the specified array with room to spare * (i.e., the array has more elements than this deque), the element in * the array immediately following the end of the deque is set to * null. * *

Like the {@link #toArray()} method, this method acts as bridge between * array-based and collection-based APIs. Further, this method allows * precise control over the runtime type of the output array, and may, * under certain circumstances, be used to save allocation costs. * *

Suppose x is a deque known to contain only strings. * The following code can be used to dump the deque into a newly * allocated array of String: * *

     *     String[] y = x.toArray(new String[0]);
* * Note that toArray(new Object[0]) is identical in function to * toArray(). * * @param a the array into which the elements of the deque are to * be stored, if it is big enough; otherwise, a new array of the * same runtime type is allocated for this purpose * @return an array containing all of the elements in this deque * @throws ArrayStoreException if the runtime type of the specified array * is not a supertype of the runtime type of every element in * this deque * @throws NullPointerException if the specified array is null */ public Object[] toArray(Object[] a) { lock.lock(); try { if (a.length < count) a = (Object[])java.lang.reflect.Array.newInstance( a.getClass().getComponentType(), count ); int k = 0; for (Node p = first; p != null; p = p.next) a[k++] = (Object)p.item; if (a.length > k) a[k] = null; return a; } finally { lock.unlock(); } } public String toString() { lock.lock(); try { return super.toString(); } finally { lock.unlock(); } } /** * Atomically removes all of the elements from this deque. * The deque will be empty after this call returns. */ public void clear() { lock.lock(); try { first = last = null; count = 0; notFull.signalAll(); } finally { lock.unlock(); } } /** * Returns an iterator over the elements in this deque in proper sequence. * The elements will be returned in order from first (head) to last (tail). * The returned Iterator is a "weakly consistent" iterator that * will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. * * @return an iterator over the elements in this deque in proper sequence */ public Iterator iterator() { return new Itr(); } /** * Returns an iterator over the elements in this deque in reverse * sequential order. The elements will be returned in order from * last (tail) to first (head). * The returned Iterator is a "weakly consistent" iterator that * will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. */ public Iterator descendingIterator() { return new DescendingItr(); } /** * Base class for Iterators for LinkedBlockingDeque */ private abstract class AbstractItr implements Iterator { /** * The next node to return in next */ Node next; /** * nextItem holds on to item fields because once we claim that * an element exists in hasNext(), we must return item read * under lock (in advance()) even if it was in the process of * being removed when hasNext() was called. */ Object nextItem; /** * Node returned by most recent call to next. Needed by remove. * Reset to null if this element is deleted by a call to remove. */ private Node lastRet; AbstractItr() { advance(); // set to initial position } /** * Advances next, or if not yet initialized, sets to first node. * Implemented to move forward vs backward in the two subclasses. */ abstract void advance(); public boolean hasNext() { return next != null; } public Object next() { if (next == null) throw new NoSuchElementException(); lastRet = next; Object x = nextItem; advance(); return x; } public void remove() { Node n = lastRet; if (n == null) throw new IllegalStateException(); lastRet = null; // Note: removeNode rescans looking for this node to make // sure it was not already removed. Otherwise, trying to // re-remove could corrupt list. removeNode(n); } } /** Forward iterator */ private class Itr extends AbstractItr { void advance() { final ReentrantLock lock = LinkedBlockingDeque.this.lock; lock.lock(); try { next = (next == null)? first : next.next; nextItem = (next == null)? null : next.item; } finally { lock.unlock(); } } } /** * Descending iterator for LinkedBlockingDeque */ private class DescendingItr extends AbstractItr { void advance() { final ReentrantLock lock = LinkedBlockingDeque.this.lock; lock.lock(); try { next = (next == null)? last : next.prev; nextItem = (next == null)? null : next.item; } finally { lock.unlock(); } } } /** * Save the state of this deque to a stream (that is, serialize it). * * @serialData The capacity (int), followed by elements (each an * Object) in the proper order, followed by a null * @param s the stream */ private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException { lock.lock(); try { // Write out capacity and any hidden stuff s.defaultWriteObject(); // Write out all elements in the proper order. for (Node p = first; p != null; p = p.next) s.writeObject(p.item); // Use trailing null as sentinel s.writeObject(null); } finally { lock.unlock(); } } /** * Reconstitute this deque from a stream (that is, * deserialize it). * @param s the stream */ private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { s.defaultReadObject(); count = 0; first = null; last = null; // Read in all elements and place in queue for (;;) { Object item = (Object)s.readObject(); if (item == null) break; add(item); } } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/BlockingQueue.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/BlockingQueue.ja0000644001750700037720000003576110461021764032637 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import java.util.Collection; import edu.emory.mathcs.backport.java.util.Queue; /** * A {@link edu.emory.mathcs.backport.java.util.Queue} that additionally supports operations * that wait for the queue to become non-empty when retrieving an * element, and wait for space to become available in the queue when * storing an element. * *

BlockingQueue methods come in four forms, with different ways * of handling operations that cannot be satisfied immediately, but may be * satisfied at some point in the future: * one throws an exception, the second returns a special value (either * null or false, depending on the operation), the third * blocks the current thread indefinitely until the operation can succeed, * and the fourth blocks for only a given maximum time limit before giving * up. These methods are summarized in the following table: * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Throws exceptionSpecial valueBlocksTimes out
Insert{@link #add add(e)}{@link #offer offer(e)}{@link #put put(e)}{@link #offer(Object, long, TimeUnit) offer(e, time, unit)}
Remove{@link #remove remove()}{@link #poll poll()}{@link #take take()}{@link #poll(long, TimeUnit) poll(time, unit)}
Examine{@link #element element()}{@link #peek peek()}not applicablenot applicable
* *

A BlockingQueue does not accept null elements. * Implementations throw NullPointerException on attempts * to add, put or offer a null. A * null is used as a sentinel value to indicate failure of * poll operations. * *

A BlockingQueue may be capacity bounded. At any given * time it may have a remainingCapacity beyond which no * additional elements can be put without blocking. * A BlockingQueue without any intrinsic capacity constraints always * reports a remaining capacity of Integer.MAX_VALUE. * *

BlockingQueue implementations are designed to be used * primarily for producer-consumer queues, but additionally support * the {@link java.util.Collection} interface. So, for example, it is * possible to remove an arbitrary element from a queue using * remove(x). However, such operations are in general * not performed very efficiently, and are intended for only * occasional use, such as when a queued message is cancelled. * *

BlockingQueue implementations are thread-safe. All * queuing methods achieve their effects atomically using internal * locks or other forms of concurrency control. However, the * bulk Collection operations addAll, * containsAll, retainAll and removeAll are * not necessarily performed atomically unless specified * otherwise in an implementation. So it is possible, for example, for * addAll(c) to fail (throwing an exception) after adding * only some of the elements in c. * *

A BlockingQueue does not intrinsically support * any kind of "close" or "shutdown" operation to * indicate that no more items will be added. The needs and usage of * such features tend to be implementation-dependent. For example, a * common tactic is for producers to insert special * end-of-stream or poison objects, that are * interpreted accordingly when taken by consumers. * *

* Usage example, based on a typical producer-consumer scenario. * Note that a BlockingQueue can safely be used with multiple * producers and multiple consumers. *

 * class Producer implements Runnable {
 *   private final BlockingQueue queue;
 *   Producer(BlockingQueue q) { queue = q; }
 *   public void run() {
 *     try {
 *       while (true) { queue.put(produce()); }
 *     } catch (InterruptedException ex) { ... handle ...}
 *   }
 *   Object produce() { ... }
 * }
 *
 * class Consumer implements Runnable {
 *   private final BlockingQueue queue;
 *   Consumer(BlockingQueue q) { queue = q; }
 *   public void run() {
 *     try {
 *       while (true) { consume(queue.take()); }
 *     } catch (InterruptedException ex) { ... handle ...}
 *   }
 *   void consume(Object x) { ... }
 * }
 *
 * class Setup {
 *   void main() {
 *     BlockingQueue q = new SomeQueueImplementation();
 *     Producer p = new Producer(q);
 *     Consumer c1 = new Consumer(q);
 *     Consumer c2 = new Consumer(q);
 *     new Thread(p).start();
 *     new Thread(c1).start();
 *     new Thread(c2).start();
 *   }
 * }
 * 
* *

Memory consistency effects: As with other concurrent * collections, actions in a thread prior to placing an object into a * {@code BlockingQueue} * happen-before * actions subsequent to the access or removal of that element from * the {@code BlockingQueue} in another thread. * *

This interface is a member of the * * Java Collections Framework. * * @since 1.5 * @author Doug Lea */ public interface BlockingQueue extends Queue { /** * Inserts the specified element into this queue if it is possible to do * so immediately without violating capacity restrictions, returning * true upon success and throwing an * IllegalStateException if no space is currently available. * When using a capacity-restricted queue, it is generally preferable to * use {@link #offer(Object) offer}. * * @param e the element to add * @return true (as specified by {@link java.util.Collection#add}) * @throws IllegalStateException if the element cannot be added at this * time due to capacity restrictions * @throws ClassCastException if the class of the specified element * prevents it from being added to this queue * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this queue */ boolean add(Object e); /** * Inserts the specified element into this queue if it is possible to do * so immediately without violating capacity restrictions, returning * true upon success and false if no space is currently * available. When using a capacity-restricted queue, this method is * generally preferable to {@link #add}, which can fail to insert an * element only by throwing an exception. * * @param e the element to add * @return true if the element was added to this queue, else * false * @throws ClassCastException if the class of the specified element * prevents it from being added to this queue * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this queue */ boolean offer(Object e); /** * Inserts the specified element into this queue, waiting if necessary * for space to become available. * * @param e the element to add * @throws InterruptedException if interrupted while waiting * @throws ClassCastException if the class of the specified element * prevents it from being added to this queue * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this queue */ void put(Object e) throws InterruptedException; /** * Inserts the specified element into this queue, waiting up to the * specified wait time if necessary for space to become available. * * @param e the element to add * @param timeout how long to wait before giving up, in units of * unit * @param unit a TimeUnit determining how to interpret the * timeout parameter * @return true if successful, or false if * the specified waiting time elapses before space is available * @throws InterruptedException if interrupted while waiting * @throws ClassCastException if the class of the specified element * prevents it from being added to this queue * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this queue */ boolean offer(Object e, long timeout, TimeUnit unit) throws InterruptedException; /** * Retrieves and removes the head of this queue, waiting if necessary * until an element becomes available. * * @return the head of this queue * @throws InterruptedException if interrupted while waiting */ Object take() throws InterruptedException; /** * Retrieves and removes the head of this queue, waiting up to the * specified wait time if necessary for an element to become available. * * @param timeout how long to wait before giving up, in units of * unit * @param unit a TimeUnit determining how to interpret the * timeout parameter * @return the head of this queue, or null if the * specified waiting time elapses before an element is available * @throws InterruptedException if interrupted while waiting */ Object poll(long timeout, TimeUnit unit) throws InterruptedException; /** * Returns the number of additional elements that this queue can ideally * (in the absence of memory or resource constraints) accept without * blocking, or Integer.MAX_VALUE if there is no intrinsic * limit. * *

Note that you cannot always tell if an attempt to insert * an element will succeed by inspecting remainingCapacity * because it may be the case that another thread is about to * insert or remove an element. * * @return the remaining capacity */ int remainingCapacity(); /** * Removes a single instance of the specified element from this queue, * if it is present. More formally, removes an element e such * that o.equals(e), if this queue contains one or more such * elements. * Returns true if this queue contained the specified element * (or equivalently, if this queue changed as a result of the call). * * @param o element to be removed from this queue, if present * @return true if this queue changed as a result of the call * @throws ClassCastException if the class of the specified element * is incompatible with this queue (optional) * @throws NullPointerException if the specified element is null (optional) */ boolean remove(Object o); /** * Returns true if this queue contains the specified element. * More formally, returns true if and only if this queue contains * at least one element e such that o.equals(e). * * @param o object to be checked for containment in this queue * @return true if this queue contains the specified element * @throws ClassCastException if the class of the specified element * is incompatible with this queue (optional) * @throws NullPointerException if the specified element is null (optional) */ public boolean contains(Object o); /** * Removes all available elements from this queue and adds them * to the given collection. This operation may be more * efficient than repeatedly polling this queue. A failure * encountered while attempting to add elements to * collection c may result in elements being in neither, * either or both collections when the associated exception is * thrown. Attempts to drain a queue to itself result in * IllegalArgumentException. Further, the behavior of * this operation is undefined if the specified collection is * modified while the operation is in progress. * * @param c the collection to transfer elements into * @return the number of elements transferred * @throws UnsupportedOperationException if addition of elements * is not supported by the specified collection * @throws ClassCastException if the class of an element of this queue * prevents it from being added to the specified collection * @throws NullPointerException if the specified collection is null * @throws IllegalArgumentException if the specified collection is this * queue, or some property of an element of this queue prevents * it from being added to the specified collection */ int drainTo(Collection c); /** * Removes at most the given number of available elements from * this queue and adds them to the given collection. A failure * encountered while attempting to add elements to * collection c may result in elements being in neither, * either or both collections when the associated exception is * thrown. Attempts to drain a queue to itself result in * IllegalArgumentException. Further, the behavior of * this operation is undefined if the specified collection is * modified while the operation is in progress. * * @param c the collection to transfer elements into * @param maxElements the maximum number of elements to transfer * @return the number of elements transferred * @throws UnsupportedOperationException if addition of elements * is not supported by the specified collection * @throws ClassCastException if the class of an element of this queue * prevents it from being added to the specified collection * @throws NullPointerException if the specified collection is null * @throws IllegalArgumentException if the specified collection is this * queue, or some property of an element of this queue prevents * it from being added to the specified collection */ int drainTo(Collection c, int maxElements); } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ScheduledThreadPoolExecutor.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ScheduledThreadP0000644001750700037720000012502110634061002032635 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; import edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantLock; import edu.emory.mathcs.backport.java.util.concurrent.locks.Condition; import edu.emory.mathcs.backport.java.util.AbstractQueue; import edu.emory.mathcs.backport.java.util.Arrays; import java.util.List; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Collection; /** * A {@link ThreadPoolExecutor} that can additionally schedule * commands to run after a given delay, or to execute * periodically. This class is preferable to {@link java.util.Timer} * when multiple worker threads are needed, or when the additional * flexibility or capabilities of {@link ThreadPoolExecutor} (which * this class extends) are required. * *

Delayed tasks execute no sooner than they are enabled, but * without any real-time guarantees about when, after they are * enabled, they will commence. Tasks scheduled for exactly the same * execution time are enabled in first-in-first-out (FIFO) order of * submission. If {@link #setRemoveOnCancelPolicy} is set {@code true} * cancelled tasks are automatically removed from the work queue. * *

While this class inherits from {@link ThreadPoolExecutor}, a few * of the inherited tuning methods are not useful for it. In * particular, because it acts as a fixed-sized pool using * {@code corePoolSize} threads and an unbounded queue, adjustments * to {@code maximumPoolSize} have no useful effect. Additionally, it * is almost never a good idea to set {@code corePoolSize} to zero or * use {@code allowCoreThreadTimeOut} because this may leave the pool * without threads to handle tasks once they become eligible to run. * *

Extension notes: This class overrides the * {@link ThreadPoolExecutor#execute execute} and * {@link AbstractExecutorService#submit(Runnable) submit} * methods to generate internal {@link ScheduledFuture} objects to * control per-task delays and scheduling. To preserve * functionality, any further overrides of these methods in * subclasses must invoke superclass versions, which effectively * disables additional task customization. However, this class * provides alternative protected extension method * {@code decorateTask} (one version each for {@code Runnable} and * {@code Callable}) that can be used to customize the concrete task * types used to execute commands entered via {@code execute}, * {@code submit}, {@code schedule}, {@code scheduleAtFixedRate}, * and {@code scheduleWithFixedDelay}. By default, a * {@code ScheduledThreadPoolExecutor} uses a task type extending * {@link FutureTask}. However, this may be modified or replaced using * subclasses of the form: * *

 {@code
 * public class CustomScheduledExecutor extends ScheduledThreadPoolExecutor {
 *
 *   static class CustomTask implements RunnableScheduledFuture { ... }
 *
 *   protected  RunnableScheduledFuture decorateTask(
 *                Runnable r, RunnableScheduledFuture task) {
 *       return new CustomTask(r, task);
 *   }
 *
 *   protected  RunnableScheduledFuture decorateTask(
 *                Callable c, RunnableScheduledFuture task) {
 *       return new CustomTask(c, task);
 *   }
 *   // ... add constructors, etc.
 * }}
* * @since 1.5 * @author Doug Lea */ public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ScheduledExecutorService { /* * This class specializes ThreadPoolExecutor implementation by * * 1. Using a custom task type, ScheduledFutureTask for * tasks, even those that don't require scheduling (i.e., * those submitted using ExecutorService execute, not * ScheduledExecutorService methods) which are treated as * delayed tasks with a delay of zero. * * 2. Using a custom queue (DelayedWorkQueue) based on an * unbounded DelayQueue. The lack of capacity constraint and * the fact that corePoolSize and maximumPoolSize are * effectively identical simplifies some execution mechanics * (see delayedExecute) compared to ThreadPoolExecutor * version. * * The DelayedWorkQueue class is defined below for the sake of * ensuring that all elements are instances of * RunnableScheduledFuture. Since DelayQueue otherwise * requires type be Delayed, but not necessarily Runnable, and * the workQueue requires the opposite, we need to explicitly * define a class that requires both to ensure that users don't * add objects that aren't RunnableScheduledFutures via * getQueue().add() etc. * * 3. Supporting optional run-after-shutdown parameters, which * leads to overrides of shutdown methods to remove and cancel * tasks that should NOT be run after shutdown, as well as * different recheck logic when task (re)submission overlaps * with a shutdown. * * 4. Task decoration methods to allow interception and * instrumentation, which are needed because subclasses cannot * otherwise override submit methods to get this effect. These * don't have any impact on pool control logic though. */ /** * False if should cancel/suppress periodic tasks on shutdown. */ private volatile boolean continueExistingPeriodicTasksAfterShutdown; /** * False if should cancel non-periodic tasks on shutdown. */ private volatile boolean executeExistingDelayedTasksAfterShutdown = true; /** * True if ScheduledFutureTask.cancel should remove from queue */ private volatile boolean removeOnCancel = false; /** * Sequence number to break scheduling ties, and in turn to * guarantee FIFO order among tied entries. */ private static final AtomicLong sequencer = new AtomicLong(0); /** * Returns current nanosecond time. */ final long now() { return Utils.nanoTime(); } private class ScheduledFutureTask extends FutureTask implements RunnableScheduledFuture { /** Sequence number to break ties FIFO */ private final long sequenceNumber; /** The time the task is enabled to execute in nanoTime units */ private long time; /** * Period in nanoseconds for repeating tasks. A positive * value indicates fixed-rate execution. A negative value * indicates fixed-delay execution. A value of 0 indicates a * non-repeating task. */ private final long period; /** * Index into delay queue, to support faster cancellation. */ int heapIndex; /** * Creates a one-shot action with given nanoTime-based trigger time. */ ScheduledFutureTask(Runnable r, Object result, long ns) { super(r, result); this.time = ns; this.period = 0; this.sequenceNumber = sequencer.getAndIncrement(); } /** * Creates a periodic action with given nano time and period. */ ScheduledFutureTask(Runnable r, Object result, long ns, long period) { super(r, result); this.time = ns; this.period = period; this.sequenceNumber = sequencer.getAndIncrement(); } /** * Creates a one-shot action with given nanoTime-based trigger. */ ScheduledFutureTask(Callable callable, long ns) { super(callable); this.time = ns; this.period = 0; this.sequenceNumber = sequencer.getAndIncrement(); } public long getDelay(TimeUnit unit) { long d = unit.convert(time - now(), TimeUnit.NANOSECONDS); return d; } public int compareTo(Object other) { Delayed otherd = (Delayed)other; if (otherd == this) // compare zero ONLY if same object return 0; if (otherd instanceof ScheduledFutureTask) { ScheduledFutureTask x = (ScheduledFutureTask)other; long diff = time - x.time; if (diff < 0) return -1; else if (diff > 0) return 1; else if (sequenceNumber < x.sequenceNumber) return -1; else return 1; } long d = (getDelay(TimeUnit.NANOSECONDS) - otherd.getDelay(TimeUnit.NANOSECONDS)); return (d == 0) ? 0 : ((d < 0) ? -1 : 1); } /** * Returns true if this is a periodic (not a one-shot) action. * * @return true if periodic */ public boolean isPeriodic() { return period != 0; } /** * Sets the next time to run for a periodic task. */ private void setNextRunTime() { long p = period; if (p > 0) time += p; else time = now() - p; } public boolean cancel(boolean mayInterruptIfRunning) { boolean cancelled = super.cancel(mayInterruptIfRunning); if (cancelled && removeOnCancel && heapIndex >= 0) remove(this); return cancelled; } /** * Overrides FutureTask version so as to reset/requeue if periodic. */ public void run() { boolean periodic = isPeriodic(); if (!canRunInCurrentRunState(periodic)) cancel(false); else if (!periodic) ScheduledFutureTask.super.run(); else if (ScheduledFutureTask.super.runAndReset()) { setNextRunTime(); reExecutePeriodic(this); } } } /** * Returns true if can run a task given current run state * and run-after-shutdown parameters. * * @param periodic true if this task periodic, false if delayed */ boolean canRunInCurrentRunState(boolean periodic) { return isRunningOrShutdown(periodic ? continueExistingPeriodicTasksAfterShutdown : executeExistingDelayedTasksAfterShutdown); } /** * Main execution method for delayed or periodic tasks. If pool * is shut down, rejects the task. Otherwise adds task to queue * and starts a thread, if necessary, to run it. (We cannot * prestart the thread to run the task because the task (probably) * shouldn't be run yet,) If the pool is shut down while the task * is being added, cancel and remove it if required by state and * run-after-shutdown parameters. * * @param task the task */ private void delayedExecute(RunnableScheduledFuture task) { if (isShutdown()) reject(task); else { super.getQueue().add(task); if (isShutdown() && !canRunInCurrentRunState(task.isPeriodic()) && remove(task)) task.cancel(false); else prestartCoreThread(); } } /** * Requeues a periodic task unless current run state precludes it. * Same idea as delayedExecute except drops task rather than rejecting. * * @param task the task */ void reExecutePeriodic(RunnableScheduledFuture task) { if (canRunInCurrentRunState(true)) { super.getQueue().add(task); if (!canRunInCurrentRunState(true) && remove(task)) task.cancel(false); else prestartCoreThread(); } } /** * Cancels and clears the queue of all tasks that should not be run * due to shutdown policy. Invoked within super.shutdown. */ void onShutdown() { BlockingQueue q = super.getQueue(); boolean keepDelayed = getExecuteExistingDelayedTasksAfterShutdownPolicy(); boolean keepPeriodic = getContinueExistingPeriodicTasksAfterShutdownPolicy(); if (!keepDelayed && !keepPeriodic) q.clear(); else { // Traverse snapshot to avoid iterator exceptions Object[] entries = q.toArray(); for (int i = 0; i < entries.length; ++i) { Object e = entries[i]; if (e instanceof RunnableScheduledFuture) { RunnableScheduledFuture t = (RunnableScheduledFuture)e; if ((t.isPeriodic() ? !keepPeriodic : !keepDelayed) || t.isCancelled()) { // also remove if already cancelled if (q.remove(t)) t.cancel(false); } } } } tryTerminate(); } /** * Modifies or replaces the task used to execute a runnable. * This method can be used to override the concrete * class used for managing internal tasks. * The default implementation simply returns the given task. * * @param runnable the submitted Runnable * @param task the task created to execute the runnable * @return a task that can execute the runnable * @since 1.6 */ protected RunnableScheduledFuture decorateTask( Runnable runnable, RunnableScheduledFuture task) { return task; } /** * Modifies or replaces the task used to execute a callable. * This method can be used to override the concrete * class used for managing internal tasks. * The default implementation simply returns the given task. * * @param callable the submitted Callable * @param task the task created to execute the callable * @return a task that can execute the callable * @since 1.6 */ protected RunnableScheduledFuture decorateTask( Callable callable, RunnableScheduledFuture task) { return task; } /** * Creates a new {@code ScheduledThreadPoolExecutor} with the * given core pool size. * * @param corePoolSize the number of threads to keep in the pool, even * if they are idle, unless {@code allowCoreThreadTimeOut} is set * @throws IllegalArgumentException if {@code corePoolSize < 0} */ public ScheduledThreadPoolExecutor(int corePoolSize) { super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS, new DelayedWorkQueue()); } /** * Creates a new {@code ScheduledThreadPoolExecutor} with the * given initial parameters. * * @param corePoolSize the number of threads to keep in the pool, even * if they are idle, unless {@code allowCoreThreadTimeOut} is set * @param threadFactory the factory to use when the executor * creates a new thread * @throws IllegalArgumentException if {@code corePoolSize < 0} * @throws NullPointerException if {@code threadFactory} is null */ public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory) { super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS, new DelayedWorkQueue(), threadFactory); } /** * Creates a new ScheduledThreadPoolExecutor with the given * initial parameters. * * @param corePoolSize the number of threads to keep in the pool, even * if they are idle, unless {@code allowCoreThreadTimeOut} is set * @param handler the handler to use when execution is blocked * because the thread bounds and queue capacities are reached * @throws IllegalArgumentException if {@code corePoolSize < 0} * @throws NullPointerException if {@code handler} is null */ public ScheduledThreadPoolExecutor(int corePoolSize, RejectedExecutionHandler handler) { super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS, new DelayedWorkQueue(), handler); } /** * Creates a new ScheduledThreadPoolExecutor with the given * initial parameters. * * @param corePoolSize the number of threads to keep in the pool, even * if they are idle, unless {@code allowCoreThreadTimeOut} is set * @param threadFactory the factory to use when the executor * creates a new thread * @param handler the handler to use when execution is blocked * because the thread bounds and queue capacities are reached * @throws IllegalArgumentException if {@code corePoolSize < 0} * @throws NullPointerException if {@code threadFactory} or * {@code handler} is null */ public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory, RejectedExecutionHandler handler) { super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS, new DelayedWorkQueue(), threadFactory, handler); } /** * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) { if (command == null || unit == null) throw new NullPointerException(); if (delay < 0) delay = 0; long triggerTime = now() + unit.toNanos(delay); RunnableScheduledFuture t = decorateTask(command, new ScheduledFutureTask(command, null, triggerTime)); delayedExecute(t); return t; } /** * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public ScheduledFuture schedule(Callable callable, long delay, TimeUnit unit) { if (callable == null || unit == null) throw new NullPointerException(); if (delay < 0) delay = 0; long triggerTime = now() + unit.toNanos(delay); RunnableScheduledFuture t = decorateTask(callable, new ScheduledFutureTask(callable, triggerTime)); delayedExecute(t); return t; } /** * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public ScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) { if (command == null || unit == null) throw new NullPointerException(); if (period <= 0) throw new IllegalArgumentException(); if (initialDelay < 0) initialDelay = 0; long triggerTime = now() + unit.toNanos(initialDelay); RunnableScheduledFuture t = decorateTask(command, new ScheduledFutureTask(command, null, triggerTime, unit.toNanos(period))); delayedExecute(t); return t; } /** * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public ScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) { if (command == null || unit == null) throw new NullPointerException(); if (delay <= 0) throw new IllegalArgumentException(); if (initialDelay < 0) initialDelay = 0; long triggerTime = now() + unit.toNanos(initialDelay); RunnableScheduledFuture t = decorateTask(command, new ScheduledFutureTask(command, null, triggerTime, unit.toNanos(-delay))); delayedExecute(t); return t; } /** * Executes {@code command} with zero required delay. * This has effect equivalent to * {@link #schedule(Runnable,long,TimeUnit) schedule(command, 0, anyUnit)}. * Note that inspections of the queue and of the list returned by * {@code shutdownNow} will access the zero-delayed * {@link ScheduledFuture}, not the {@code command} itself. * *

A consequence of the use of {@code ScheduledFuture} objects is * that {@link ThreadPoolExecutor#afterExecute afterExecute} is always * called with a null second {@code Throwable} argument, even if the * {@code command} terminated abruptly. Instead, the {@code Throwable} * thrown by such a task can be obtained via {@link Future#get}. * * @throws RejectedExecutionException at discretion of * {@code RejectedExecutionHandler}, if the task * cannot be accepted for execution because the * executor has been shut down * @throws NullPointerException {@inheritDoc} */ public void execute(Runnable command) { schedule(command, 0, TimeUnit.NANOSECONDS); } // Override AbstractExecutorService methods /** * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public Future submit(Runnable task) { return schedule(task, 0, TimeUnit.NANOSECONDS); } /** * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public Future submit(Runnable task, Object result) { return schedule(Executors.callable(task, result), 0, TimeUnit.NANOSECONDS); } /** * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public Future submit(Callable task) { return schedule(task, 0, TimeUnit.NANOSECONDS); } /** * Sets the policy on whether to continue executing existing * periodic tasks even when this executor has been {@code shutdown}. * In this case, these tasks will only terminate upon * {@code shutdownNow} or after setting the policy to * {@code false} when already shutdown. * This value is by default {@code false}. * * @param value if {@code true}, continue after shutdown, else don't. * @see #getContinueExistingPeriodicTasksAfterShutdownPolicy */ public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value) { continueExistingPeriodicTasksAfterShutdown = value; if (!value && isShutdown()) onShutdown(); } /** * Gets the policy on whether to continue executing existing * periodic tasks even when this executor has been {@code shutdown}. * In this case, these tasks will only terminate upon * {@code shutdownNow} or after setting the policy to * {@code false} when already shutdown. * This value is by default {@code false}. * * @return {@code true} if will continue after shutdown * @see #setContinueExistingPeriodicTasksAfterShutdownPolicy */ public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy() { return continueExistingPeriodicTasksAfterShutdown; } /** * Sets the policy on whether to execute existing delayed * tasks even when this executor has been {@code shutdown}. * In this case, these tasks will only terminate upon * {@code shutdownNow}, or after setting the policy to * {@code false} when already shutdown. * This value is by default {@code true}. * * @param value if {@code true}, execute after shutdown, else don't. * @see #getExecuteExistingDelayedTasksAfterShutdownPolicy */ public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value) { executeExistingDelayedTasksAfterShutdown = value; if (!value && isShutdown()) onShutdown(); } /** * Gets the policy on whether to execute existing delayed * tasks even when this executor has been {@code shutdown}. * In this case, these tasks will only terminate upon * {@code shutdownNow}, or after setting the policy to * {@code false} when already shutdown. * This value is by default {@code true}. * * @return {@code true} if will execute after shutdown * @see #setExecuteExistingDelayedTasksAfterShutdownPolicy */ public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy() { return executeExistingDelayedTasksAfterShutdown; } /** * Sets the policy on whether to cancellation of a a task should * remove it from the work queue. This value is * by default {@code false}. * * @param value if {@code true}, remove on cancellation, else don't. * @see #getRemoveOnCancelPolicy * @since 1.7 */ public void setRemoveOnCancelPolicy(boolean value) { removeOnCancel = value; } /** * Gets the policy on whether to cancellation of a a task should * remove it from the work queue. * This value is by default {@code false}. * * @return {@code true} if cancelled tasks are removed from the queue. * @see #setRemoveOnCancelPolicy * @since 1.7 */ public boolean getRemoveOnCancelPolicy() { return removeOnCancel; } /** * Initiates an orderly shutdown in which previously submitted * tasks are executed, but no new tasks will be accepted. If the * {@code ExecuteExistingDelayedTasksAfterShutdownPolicy} has * been set {@code false}, existing delayed tasks whose delays * have not yet elapsed are cancelled. And unless the * {@code ContinueExistingPeriodicTasksAfterShutdownPolicy} has * been set {@code true}, future executions of existing periodic * tasks will be cancelled. * * @throws SecurityException {@inheritDoc} */ public void shutdown() { super.shutdown(); } /** * Attempts to stop all actively executing tasks, halts the * processing of waiting tasks, and returns a list of the tasks * that were awaiting execution. * *

There are no guarantees beyond best-effort attempts to stop * processing actively executing tasks. This implementation * cancels tasks via {@link Thread#interrupt}, so any task that * fails to respond to interrupts may never terminate. * * @return list of tasks that never commenced execution. * Each element of this list is a {@link ScheduledFuture}, * including those tasks submitted using {@code execute}, * which are for scheduling purposes used as the basis of a * zero-delay {@code ScheduledFuture}. * @throws SecurityException {@inheritDoc} */ public List shutdownNow() { return super.shutdownNow(); } /** * Returns the task queue used by this executor. Each element of * this queue is a {@link ScheduledFuture}, including those * tasks submitted using {@code execute} which are for scheduling * purposes used as the basis of a zero-delay * {@code ScheduledFuture}. Iteration over this queue is * not guaranteed to traverse tasks in the order in * which they will execute. * * @return the task queue */ public BlockingQueue getQueue() { return super.getQueue(); } /** * Specialized delay queue. To mesh with TPE declarations, this * class must be declared as a BlockingQueue even though * it can only hold RunnableScheduledFutures */ static class DelayedWorkQueue extends AbstractQueue implements BlockingQueue { /* * A DelayedWorkQueue is based on a heap-based data structure * like those in DelayQueue and PriorityQueue, except that * every ScheduledFutureTask also records its index into the * heap array. This eliminates the need to find a task upon * cancellation, greatly speeding up removal (down from O(n) * to O(log n)), and reducing garbage retention that would * otherwise occur by waiting for the element to rise to top * before clearing. But because the queue may also hold * RunnableScheduledFutures that are not ScheduledFutureTasks, * we are not guaranteed to have such indices available, in * which case we fall back to linear search. (We expect that * most tasks will not be decorated, and that the faster cases * will be much more common.) * * All heap operations must record index changes -- mainly * within siftUp and siftDown. Upon removal, a task's * heapIndex is set to -1. Note that ScheduledFutureTasks can * appear at most once in the queue (this need not be true for * other kinds of tasks or work queues), so are uniquely * identified by heapIndex. */ private static final int INITIAL_CAPACITY = 64; private transient RunnableScheduledFuture[] queue = new RunnableScheduledFuture[INITIAL_CAPACITY]; private transient final ReentrantLock lock = new ReentrantLock(); private transient final Condition available = lock.newCondition(); private int size = 0; /** * Set f's heapIndex if it is a ScheduledFutureTask */ private void setIndex(Object f, int idx) { if (f instanceof ScheduledFutureTask) ((ScheduledFutureTask)f).heapIndex = idx; } /** * Sift element added at bottom up to its heap-ordered spot * Call only when holding lock. */ private void siftUp(int k, RunnableScheduledFuture key) { while (k > 0) { int parent = (k - 1) >>> 1; RunnableScheduledFuture e = queue[parent]; if (key.compareTo(e) >= 0) break; queue[k] = e; setIndex(e, k); k = parent; } queue[k] = key; setIndex(key, k); } /** * Sift element added at top down to its heap-ordered spot * Call only when holding lock. */ private void siftDown(int k, RunnableScheduledFuture key) { int half = size >>> 1; while (k < half) { int child = (k << 1) + 1; RunnableScheduledFuture c = queue[child]; int right = child + 1; if (right < size && c.compareTo(queue[right]) > 0) c = queue[child = right]; if (key.compareTo(c) <= 0) break; queue[k] = c; setIndex(c, k); k = child; } queue[k] = key; setIndex(key, k); } /** * Performs common bookkeeping for poll and take: Replaces * first element with last; sifts it down, and signals any * waiting consumers. Call only when holding lock. * @param f the task to remove and return */ private RunnableScheduledFuture finishPoll(RunnableScheduledFuture f) { int s = --size; RunnableScheduledFuture x = queue[s]; queue[s] = null; if (s != 0) { siftDown(0, x); available.signalAll(); } setIndex(f, -1); return f; } /** * Resize the heap array. Call only when holding lock. */ private void grow() { int oldCapacity = queue.length; int newCapacity = oldCapacity + (oldCapacity >> 1); // grow 50% if (newCapacity < 0) // overflow newCapacity = Integer.MAX_VALUE; RunnableScheduledFuture[] newqueue = new RunnableScheduledFuture[newCapacity]; System.arraycopy(queue, 0, newqueue, 0, queue.length); queue = newqueue; } /** * Find index of given object, or -1 if absent */ private int indexOf(Object x) { if (x != null) { for (int i = 0; i < size; i++) if (x.equals(queue[i])) return i; } return -1; } public boolean remove(Object x) { boolean removed; final ReentrantLock lock = this.lock; lock.lock(); try { int i; if (x instanceof ScheduledFutureTask) i = ((ScheduledFutureTask)x).heapIndex; else i = indexOf(x); if (removed = (i >= 0 && i < size && queue[i] == x)) { setIndex(x, -1); int s = --size; RunnableScheduledFuture replacement = queue[s]; queue[s] = null; if (s != i) { siftDown(i, replacement); if (queue[i] == replacement) siftUp(i, replacement); } } } finally { lock.unlock(); } return removed; } public int size() { int s; final ReentrantLock lock = this.lock; lock.lock(); try { s = size; } finally { lock.unlock(); } return s; } public boolean isEmpty() { return size() == 0; } public int remainingCapacity() { return Integer.MAX_VALUE; } public Object peek() { final ReentrantLock lock = this.lock; lock.lock(); try { return queue[0]; } finally { lock.unlock(); } } public boolean offer(Object x) { if (x == null) throw new NullPointerException(); RunnableScheduledFuture e = (RunnableScheduledFuture)x; final ReentrantLock lock = this.lock; lock.lock(); try { int i = size; if (i >= queue.length) grow(); size = i + 1; boolean notify; if (i == 0) { notify = true; queue[0] = e; setIndex(e, 0); } else { notify = e.compareTo(queue[0]) < 0; siftUp(i, e); } if (notify) available.signalAll(); } finally { lock.unlock(); } return true; } public void put(Object e) { offer(e); } public boolean add(Runnable e) { return offer(e); } public boolean offer(Object e, long timeout, TimeUnit unit) { return offer(e); } public Object poll() { final ReentrantLock lock = this.lock; lock.lock(); try { RunnableScheduledFuture first = queue[0]; if (first == null || first.getDelay(TimeUnit.NANOSECONDS) > 0) return null; else return finishPoll(first); } finally { lock.unlock(); } } public Object take() throws InterruptedException { final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { for (;;) { RunnableScheduledFuture first = queue[0]; if (first == null) available.await(); else { long delay = first.getDelay(TimeUnit.NANOSECONDS); if (delay > 0) available.await(delay, TimeUnit.NANOSECONDS); else return finishPoll(first); } } } finally { lock.unlock(); } } public Object poll(long timeout, TimeUnit unit) throws InterruptedException { long nanos = unit.toNanos(timeout); long deadline = Utils.nanoTime() + nanos; final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { for (;;) { RunnableScheduledFuture first = queue[0]; if (first == null) { if (nanos <= 0) { return null; } else { available.await(nanos, TimeUnit.NANOSECONDS); nanos = deadline - Utils.nanoTime(); } } else { long delay = first.getDelay(TimeUnit.NANOSECONDS); if (delay > 0) { if (nanos <= 0) return null; if (delay > nanos) delay = nanos; available.await(delay, TimeUnit.NANOSECONDS); nanos = deadline - Utils.nanoTime(); } else return finishPoll(first); } } } finally { lock.unlock(); } } public void clear() { final ReentrantLock lock = this.lock; lock.lock(); try { for (int i = 0; i < size; i++) { RunnableScheduledFuture t = queue[i]; if (t != null) { queue[i] = null; setIndex(t, -1); } } size = 0; } finally { lock.unlock(); } } /** * Return and remove first element only if it is expired. * Used only by drainTo. Call only when holding lock. */ private RunnableScheduledFuture pollExpired() { RunnableScheduledFuture first = queue[0]; if (first == null || first.getDelay(TimeUnit.NANOSECONDS) > 0) return null; setIndex(first, -1); int s = --size; RunnableScheduledFuture x = queue[s]; queue[s] = null; if (s != 0) siftDown(0, x); return first; } public int drainTo(Collection c) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); final ReentrantLock lock = this.lock; lock.lock(); try { int n = 0; for (;;) { RunnableScheduledFuture first = pollExpired(); if (first != null) { c.add(first); ++n; } else break; } if (n > 0) available.signalAll(); return n; } finally { lock.unlock(); } } public int drainTo(Collection c, int maxElements) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); if (maxElements <= 0) return 0; final ReentrantLock lock = this.lock; lock.lock(); try { int n = 0; while (n < maxElements) { RunnableScheduledFuture first = pollExpired(); if (first != null) { c.add(first); ++n; } else break; } if (n > 0) available.signalAll(); return n; } finally { lock.unlock(); } } public Object[] toArray() { final ReentrantLock lock = this.lock; lock.lock(); try { return Arrays.copyOf(queue, size); } finally { lock.unlock(); } } public Object[] toArray(Object[] a) { final ReentrantLock lock = this.lock; lock.lock(); try { if (a.length < size) return (Object[]) Arrays.copyOf(queue, size, a.getClass()); System.arraycopy(queue, 0, a, 0, size); if (a.length > size) a[size] = null; return a; } finally { lock.unlock(); } } public Iterator iterator() { return new Itr(toArray()); } /** * Snapshot iterator that works off copy of underlying q array. */ private class Itr implements Iterator { final Object[] array; // Array of all elements int cursor; // index of next element to return; int lastRet; // index of last element, or -1 if no such Itr(Object[] array) { lastRet = -1; this.array = array; } public boolean hasNext() { return cursor < array.length; } public Object next() { if (cursor >= array.length) throw new NoSuchElementException(); lastRet = cursor; return (Runnable)array[cursor++]; } public void remove() { if (lastRet < 0) throw new IllegalStateException(); DelayedWorkQueue.this.remove(array[lastRet]); lastRet = -1; } } } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/PriorityBlockingQueue.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/PriorityBlocking0000644001750700037720000004665110461021764033003 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; import java.util.Comparator; import java.util.Collection; import java.util.Iterator; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; import java.util.NoSuchElementException; /** * An unbounded {@linkplain BlockingQueue blocking queue} that uses * the same ordering rules as class {@link PriorityQueue} and supplies * blocking retrieval operations. While this queue is logically * unbounded, attempted additions may fail due to resource exhaustion * (causing OutOfMemoryError). This class does not permit * null elements. A priority queue relying on {@linkplain * Comparable natural ordering} also does not permit insertion of * non-comparable objects (doing so results in * ClassCastException). * *

This class and its iterator implement all of the * optional methods of the {@link Collection} and {@link * Iterator} interfaces. The Iterator provided in method {@link * #iterator()} is not guaranteed to traverse the elements of * the PriorityBlockingQueue in any particular order. If you need * ordered traversal, consider using * Arrays.sort(pq.toArray()). Also, method drainTo * can be used to remove some or all elements in priority * order and place them in another collection. * *

Operations on this class make no guarantees about the ordering * of elements with equal priority. If you need to enforce an * ordering, you can define custom classes or comparators that use a * secondary key to break ties in primary priority values. For * example, here is a class that applies first-in-first-out * tie-breaking to comparable elements. To use it, you would insert a * new FIFOEntry(anEntry) instead of a plain entry object. * *

 * class FIFOEntry implements Comparable {
 *   final static AtomicLong seq = new AtomicLong();
 *   final long seqNum;
 *   final Object entry;
 *   public FIFOEntry(Object entry) {
 *     seqNum = seq.getAndIncrement();
 *     this.entry = entry;
 *   }
 *   public Object getEntry() { return entry; }
 *   public int compareTo(FIFOEntr other) {
 *     int res = entry.compareTo(other.entry);
 *     if (res == 0 && other.entry != this.entry)
 *       res = (seqNum < other.seqNum ? -1 : 1);
 *     return res;
 *   }
 * }
* *

This class is a member of the * * Java Collections Framework. * * @since 1.5 * @author Doug Lea */ public class PriorityBlockingQueue extends AbstractQueue implements BlockingQueue, java.io.Serializable { private static final long serialVersionUID = 5595510919245408276L; private final PriorityQueue q; private final ReentrantLock lock = new ReentrantLock(true); private final Condition notEmpty = lock.newCondition(); /** * Creates a PriorityBlockingQueue with the default * initial capacity (11) that orders its elements according to * their {@linkplain Comparable natural ordering}. */ public PriorityBlockingQueue() { q = new PriorityQueue(); } /** * Creates a PriorityBlockingQueue with the specified * initial capacity that orders its elements according to their * {@linkplain Comparable natural ordering}. * * @param initialCapacity the initial capacity for this priority queue * @throws IllegalArgumentException if initialCapacity is less * than 1 */ public PriorityBlockingQueue(int initialCapacity) { q = new PriorityQueue(initialCapacity, null); } /** * Creates a PriorityBlockingQueue with the specified initial * capacity that orders its elements according to the specified * comparator. * * @param initialCapacity the initial capacity for this priority queue * @param comparator the comparator that will be used to order this * priority queue. If {@code null}, the {@linkplain Comparable * natural ordering} of the elements will be used. * @throws IllegalArgumentException if initialCapacity is less * than 1 */ public PriorityBlockingQueue(int initialCapacity, Comparator comparator) { q = new PriorityQueue(initialCapacity, comparator); } /** * Creates a PriorityBlockingQueue containing the elements * in the specified collection. If the specified collection is a * {@link java.util.SortedSet} or a {@link PriorityQueue}, this * priority queue will be ordered according to the same ordering. * Otherwise, this priority queue will be ordered according to the * {@linkplain Comparable natural ordering} of its elements. * * @param c the collection whose elements are to be placed * into this priority queue * @throws ClassCastException if elements of the specified collection * cannot be compared to one another according to the priority * queue's ordering * @throws NullPointerException if the specified collection or any * of its elements are null */ public PriorityBlockingQueue(Collection c) { q = new PriorityQueue(c); } /** * Inserts the specified element into this priority queue. * * @param e the element to add * @return true (as specified by {@link Collection#add}) * @throws ClassCastException if the specified element cannot be compared * with elements currently in the priority queue according to the * priority queue's ordering * @throws NullPointerException if the specified element is null */ public boolean add(Object e) { return offer(e); } /** * Inserts the specified element into this priority queue. * * @param e the element to add * @return true (as specified by {@link Queue#offer}) * @throws ClassCastException if the specified element cannot be compared * with elements currently in the priority queue according to the * priority queue's ordering * @throws NullPointerException if the specified element is null */ public boolean offer(Object e) { final ReentrantLock lock = this.lock; lock.lock(); try { boolean ok = q.offer(e); assert ok; notEmpty.signal(); return true; } finally { lock.unlock(); } } /** * Inserts the specified element into this priority queue. As the queue is * unbounded this method will never block. * * @param e the element to add * @throws ClassCastException if the specified element cannot be compared * with elements currently in the priority queue according to the * priority queue's ordering * @throws NullPointerException if the specified element is null */ public void put(Object e) { offer(e); // never need to block } /** * Inserts the specified element into this priority queue. As the queue is * unbounded this method will never block. * * @param e the element to add * @param timeout This parameter is ignored as the method never blocks * @param unit This parameter is ignored as the method never blocks * @return true * @throws ClassCastException if the specified element cannot be compared * with elements currently in the priority queue according to the * priority queue's ordering * @throws NullPointerException if the specified element is null */ public boolean offer(Object e, long timeout, TimeUnit unit) { return offer(e); // never need to block } public Object poll() { final ReentrantLock lock = this.lock; lock.lock(); try { return q.poll(); } finally { lock.unlock(); } } public Object take() throws InterruptedException { final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { try { while (q.size() == 0) notEmpty.await(); } catch (InterruptedException ie) { notEmpty.signal(); // propagate to non-interrupted thread throw ie; } Object x = q.poll(); assert x != null; return x; } finally { lock.unlock(); } } public Object poll(long timeout, TimeUnit unit) throws InterruptedException { long nanos = unit.toNanos(timeout); final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { long deadline = Utils.nanoTime() + nanos; for (;;) { Object x = q.poll(); if (x != null) return x; if (nanos <= 0) return null; try { notEmpty.await(nanos, TimeUnit.NANOSECONDS); nanos = deadline - Utils.nanoTime(); } catch (InterruptedException ie) { notEmpty.signal(); // propagate to non-interrupted thread throw ie; } } } finally { lock.unlock(); } } public Object peek() { final ReentrantLock lock = this.lock; lock.lock(); try { return q.peek(); } finally { lock.unlock(); } } /** * Returns the comparator used to order the elements in this queue, * or null if this queue uses the {@linkplain Comparable * natural ordering} of its elements. * * @return the comparator used to order the elements in this queue, * or null if this queue uses the natural * ordering of its elements */ public Comparator comparator() { return q.comparator(); } public int size() { final ReentrantLock lock = this.lock; lock.lock(); try { return q.size(); } finally { lock.unlock(); } } /** * Always returns Integer.MAX_VALUE because * a PriorityBlockingQueue is not capacity constrained. * @return Integer.MAX_VALUE */ public int remainingCapacity() { return Integer.MAX_VALUE; } /** * Removes a single instance of the specified element from this queue, * if it is present. More formally, removes an element {@code e} such * that {@code o.equals(e)}, if this queue contains one or more such * elements. Returns {@code true} if and only if this queue contained * the specified element (or equivalently, if this queue changed as a * result of the call). * * @param o element to be removed from this queue, if present * @return true if this queue changed as a result of the call */ public boolean remove(Object o) { final ReentrantLock lock = this.lock; lock.lock(); try { return q.remove(o); } finally { lock.unlock(); } } /** * Returns {@code true} if this queue contains the specified element. * More formally, returns {@code true} if and only if this queue contains * at least one element {@code e} such that {@code o.equals(e)}. * * @param o object to be checked for containment in this queue * @return true if this queue contains the specified element */ public boolean contains(Object o) { final ReentrantLock lock = this.lock; lock.lock(); try { return q.contains(o); } finally { lock.unlock(); } } /** * Returns an array containing all of the elements in this queue. * The returned array elements are in no particular order. * *

The returned array will be "safe" in that no references to it are * maintained by this queue. (In other words, this method must allocate * a new array). The caller is thus free to modify the returned array. * *

This method acts as bridge between array-based and collection-based * APIs. * * @return an array containing all of the elements in this queue */ public Object[] toArray() { final ReentrantLock lock = this.lock; lock.lock(); try { return q.toArray(); } finally { lock.unlock(); } } public String toString() { final ReentrantLock lock = this.lock; lock.lock(); try { return q.toString(); } finally { lock.unlock(); } } /** * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public int drainTo(Collection c) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); final ReentrantLock lock = this.lock; lock.lock(); try { int n = 0; Object e; while ( (e = q.poll()) != null) { c.add(e); ++n; } return n; } finally { lock.unlock(); } } /** * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public int drainTo(Collection c, int maxElements) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); if (maxElements <= 0) return 0; final ReentrantLock lock = this.lock; lock.lock(); try { int n = 0; Object e; while (n < maxElements && (e = q.poll()) != null) { c.add(e); ++n; } return n; } finally { lock.unlock(); } } /** * Atomically removes all of the elements from this queue. * The queue will be empty after this call returns. */ public void clear() { final ReentrantLock lock = this.lock; lock.lock(); try { q.clear(); } finally { lock.unlock(); } } /** * Returns an array containing all of the elements in this queue; the * runtime type of the returned array is that of the specified array. * The returned array elements are in no particular order. * If the queue fits in the specified array, it is returned therein. * Otherwise, a new array is allocated with the runtime type of the * specified array and the size of this queue. * *

If this queue fits in the specified array with room to spare * (i.e., the array has more elements than this queue), the element in * the array immediately following the end of the queue is set to * null. * *

Like the {@link #toArray()} method, this method acts as bridge between * array-based and collection-based APIs. Further, this method allows * precise control over the runtime type of the output array, and may, * under certain circumstances, be used to save allocation costs. * *

Suppose x is a queue known to contain only strings. * The following code can be used to dump the queue into a newly * allocated array of String: * *

     *     String[] y = x.toArray(new String[0]);
* * Note that toArray(new Object[0]) is identical in function to * toArray(). * * @param a the array into which the elements of the queue are to * be stored, if it is big enough; otherwise, a new array of the * same runtime type is allocated for this purpose * @return an array containing all of the elements in this queue * @throws ArrayStoreException if the runtime type of the specified array * is not a supertype of the runtime type of every element in * this queue * @throws NullPointerException if the specified array is null */ public Object[] toArray(Object[] a) { final ReentrantLock lock = this.lock; lock.lock(); try { return q.toArray(a); } finally { lock.unlock(); } } /** * Returns an iterator over the elements in this queue. The * iterator does not return the elements in any particular order. * The returned Iterator is a "weakly consistent" * iterator that will never throw {@link * java.util.ConcurrentModificationException}, and guarantees to traverse * elements as they existed upon construction of the iterator, and * may (but is not guaranteed to) reflect any modifications * subsequent to construction. * * @return an iterator over the elements in this queue */ public Iterator iterator() { return new Itr(toArray()); } /** * Snapshot iterator that works off copy of underlying q array. */ private class Itr implements Iterator { final Object[] array; // Array of all elements int cursor; // index of next element to return; int lastRet; // index of last element, or -1 if no such Itr(Object[] array) { lastRet = -1; this.array = array; } public boolean hasNext() { return cursor < array.length; } public Object next() { if (cursor >= array.length) throw new NoSuchElementException(); lastRet = cursor; return array[cursor++]; } public void remove() { if (lastRet < 0) throw new IllegalStateException(); Object x = array[lastRet]; lastRet = -1; // Traverse underlying queue to find == element, // not just a .equals element. lock.lock(); try { for (Iterator it = q.iterator(); it.hasNext(); ) { if (it.next() == x) { it.remove(); return; } } } finally { lock.unlock(); } } } /** * Saves the state to a stream (that is, serializes it). This * merely wraps default serialization within lock. The * serialization strategy for items is left to underlying * Queue. Note that locking is not needed on deserialization, so * readObject is not defined, just relying on default. */ private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException { lock.lock(); try { s.defaultWriteObject(); } finally { lock.unlock(); } } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/RunnableFuture.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/RunnableFuture.j0000644001750700037720000000126310255705321032667 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * A {@link Future} that is {@link Runnable}. Successful execution of * the run method causes completion of the Future * and allows access to its results. * @see FutureTask * @see Executor * @since 1.6 * @author Doug Lea */ public interface RunnableFuture extends Runnable, Future { /** * Sets this Future to the result of its computation * unless it has been cancelled. */ void run(); } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ThreadPoolExecutor.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ThreadPoolExecut0000644001750700037720000022410110634060467032721 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; import java.util.HashSet; import java.util.List; import java.util.Iterator; import java.util.ArrayList; import java.util.ConcurrentModificationException; /** * An {@link ExecutorService} that executes each submitted task using * one of possibly several pooled threads, normally configured * using {@link Executors} factory methods. * *

Thread pools address two different problems: they usually * provide improved performance when executing large numbers of * asynchronous tasks, due to reduced per-task invocation overhead, * and they provide a means of bounding and managing the resources, * including threads, consumed when executing a collection of tasks. * Each {@code ThreadPoolExecutor} also maintains some basic * statistics, such as the number of completed tasks. * *

To be useful across a wide range of contexts, this class * provides many adjustable parameters and extensibility * hooks. However, programmers are urged to use the more convenient * {@link Executors} factory methods {@link * Executors#newCachedThreadPool} (unbounded thread pool, with * automatic thread reclamation), {@link Executors#newFixedThreadPool} * (fixed size thread pool) and {@link * Executors#newSingleThreadExecutor} (single background thread), that * preconfigure settings for the most common usage * scenarios. Otherwise, use the following guide when manually * configuring and tuning this class: * *

* *
Core and maximum pool sizes
* *
A {@code ThreadPoolExecutor} will automatically adjust the * pool size (see {@link #getPoolSize}) * according to the bounds set by * corePoolSize (see {@link #getCorePoolSize}) and * maximumPoolSize (see {@link #getMaximumPoolSize}). * * When a new task is submitted in method {@link #execute}, and fewer * than corePoolSize threads are running, a new thread is created to * handle the request, even if other worker threads are idle. If * there are more than corePoolSize but less than maximumPoolSize * threads running, a new thread will be created only if the queue is * full. By setting corePoolSize and maximumPoolSize the same, you * create a fixed-size thread pool. By setting maximumPoolSize to an * essentially unbounded value such as {@code Integer.MAX_VALUE}, you * allow the pool to accommodate an arbitrary number of concurrent * tasks. Most typically, core and maximum pool sizes are set only * upon construction, but they may also be changed dynamically using * {@link #setCorePoolSize} and {@link #setMaximumPoolSize}.
* *
On-demand construction
* *
By default, even core threads are initially created and * started only when new tasks arrive, but this can be overridden * dynamically using method {@link #prestartCoreThread} or {@link * #prestartAllCoreThreads}. You probably want to prestart threads if * you construct the pool with a non-empty queue.
* *
Creating new threads
* *
New threads are created using a {@link ThreadFactory}. If not * otherwise specified, a {@link Executors#defaultThreadFactory} is * used, that creates threads to all be in the same {@link * ThreadGroup} and with the same {@code NORM_PRIORITY} priority and * non-daemon status. By supplying a different ThreadFactory, you can * alter the thread's name, thread group, priority, daemon status, * etc. If a {@code ThreadFactory} fails to create a thread when asked * by returning null from {@code newThread}, the executor will * continue, but might not be able to execute any tasks. Threads * should possess the "modifyThread" {@code RuntimePermission}. If * worker threads or other threads using the pool do not possess this * permission, service may be degraded: configuration changes may not * take effect in a timely manner, and a shutdown pool may remain in a * state in which termination is possible but not completed.
* *
Keep-alive times
* *
If the pool currently has more than corePoolSize threads, * excess threads will be terminated if they have been idle for more * than the keepAliveTime (see {@link #getKeepAliveTime}). This * provides a means of reducing resource consumption when the pool is * not being actively used. If the pool becomes more active later, new * threads will be constructed. This parameter can also be changed * dynamically using method {@link #setKeepAliveTime}. Using a value * of {@code Long.MAX_VALUE} {@link TimeUnit#NANOSECONDS} effectively * disables idle threads from ever terminating prior to shut down. By * default, the keep-alive policy applies only when there are more * than corePoolSizeThreads. But method {@link * #allowCoreThreadTimeOut(boolean)} can be used to apply this * time-out policy to core threads as well, so long as the * keepAliveTime value is non-zero.
* *
Queuing
* *
Any {@link BlockingQueue} may be used to transfer and hold * submitted tasks. The use of this queue interacts with pool sizing: * *
    * *
  • If fewer than corePoolSize threads are running, the Executor * always prefers adding a new thread * rather than queuing.
  • * *
  • If corePoolSize or more threads are running, the Executor * always prefers queuing a request rather than adding a new * thread.
  • * *
  • If a request cannot be queued, a new thread is created unless * this would exceed maximumPoolSize, in which case, the task will be * rejected.
  • * *
* * There are three general strategies for queuing: *
    * *
  1. Direct handoffs. A good default choice for a work * queue is a {@link SynchronousQueue} that hands off tasks to threads * without otherwise holding them. Here, an attempt to queue a task * will fail if no threads are immediately available to run it, so a * new thread will be constructed. This policy avoids lockups when * handling sets of requests that might have internal dependencies. * Direct handoffs generally require unbounded maximumPoolSizes to * avoid rejection of new submitted tasks. This in turn admits the * possibility of unbounded thread growth when commands continue to * arrive on average faster than they can be processed.
  2. * *
  3. Unbounded queues. Using an unbounded queue (for * example a {@link LinkedBlockingQueue} without a predefined * capacity) will cause new tasks to wait in the queue when all * corePoolSize threads are busy. Thus, no more than corePoolSize * threads will ever be created. (And the value of the maximumPoolSize * therefore doesn't have any effect.) This may be appropriate when * each task is completely independent of others, so tasks cannot * affect each others execution; for example, in a web page server. * While this style of queuing can be useful in smoothing out * transient bursts of requests, it admits the possibility of * unbounded work queue growth when commands continue to arrive on * average faster than they can be processed.
  4. * *
  5. Bounded queues. A bounded queue (for example, an * {@link ArrayBlockingQueue}) helps prevent resource exhaustion when * used with finite maximumPoolSizes, but can be more difficult to * tune and control. Queue sizes and maximum pool sizes may be traded * off for each other: Using large queues and small pools minimizes * CPU usage, OS resources, and context-switching overhead, but can * lead to artificially low throughput. If tasks frequently block (for * example if they are I/O bound), a system may be able to schedule * time for more threads than you otherwise allow. Use of small queues * generally requires larger pool sizes, which keeps CPUs busier but * may encounter unacceptable scheduling overhead, which also * decreases throughput.
  6. * *
* *
* *
Rejected tasks
* *
New tasks submitted in method {@link #execute} will be * rejected when the Executor has been shut down, and also * when the Executor uses finite bounds for both maximum threads and * work queue capacity, and is saturated. In either case, the {@code * execute} method invokes the {@link * RejectedExecutionHandler#rejectedExecution} method of its {@link * RejectedExecutionHandler}. Four predefined handler policies are * provided: * *
    * *
  1. In the default {@link ThreadPoolExecutor.AbortPolicy}, the * handler throws a runtime {@link RejectedExecutionException} upon * rejection.
  2. * *
  3. In {@link ThreadPoolExecutor.CallerRunsPolicy}, the thread * that invokes {@code execute} itself runs the task. This provides a * simple feedback control mechanism that will slow down the rate that * new tasks are submitted.
  4. * *
  5. In {@link ThreadPoolExecutor.DiscardPolicy}, a task that * cannot be executed is simply dropped.
  6. * *
  7. In {@link ThreadPoolExecutor.DiscardOldestPolicy}, if the * executor is not shut down, the task at the head of the work queue * is dropped, and then execution is retried (which can fail again, * causing this to be repeated.)
  8. * *
* * It is possible to define and use other kinds of {@link * RejectedExecutionHandler} classes. Doing so requires some care * especially when policies are designed to work only under particular * capacity or queuing policies.
* *
Hook methods
* *
This class provides {@code protected} overridable {@link * #beforeExecute} and {@link #afterExecute} methods that are called * before and after execution of each task. These can be used to * manipulate the execution environment; for example, reinitializing * ThreadLocals, gathering statistics, or adding log * entries. Additionally, method {@link #terminated} can be overridden * to perform any special processing that needs to be done once the * Executor has fully terminated. * *

If hook or callback methods throw exceptions, internal worker * threads may in turn fail and abruptly terminate.

* *
Queue maintenance
* *
Method {@link #getQueue} allows access to the work queue for * purposes of monitoring and debugging. Use of this method for any * other purpose is strongly discouraged. Two supplied methods, * {@link #remove} and {@link #purge} are available to assist in * storage reclamation when large numbers of queued tasks become * cancelled.
* *
Finalization
* *
A pool that is no longer referenced in a program AND * has no remaining threads will be {@code shutdown} automatically. If * you would like to ensure that unreferenced pools are reclaimed even * if users forget to call {@link #shutdown}, then you must arrange * that unused threads eventually die, by setting appropriate * keep-alive times, using a lower bound of zero core threads and/or * setting {@link #allowCoreThreadTimeOut(boolean)}.
* *
* *

Extension example. Most extensions of this class * override one or more of the protected hook methods. For example, * here is a subclass that adds a simple pause/resume feature: * *

 {@code
 * class PausableThreadPoolExecutor extends ThreadPoolExecutor {
 *   private boolean isPaused;
 *   private ReentrantLock pauseLock = new ReentrantLock();
 *   private Condition unpaused = pauseLock.newCondition();
 *
 *   public PausableThreadPoolExecutor(...) { super(...); }
 *
 *   protected void beforeExecute(Thread t, Runnable r) {
 *     super.beforeExecute(t, r);
 *     pauseLock.lock();
 *     try {
 *       while (isPaused) unpaused.await();
 *     } catch (InterruptedException ie) {
 *       t.interrupt();
 *     } finally {
 *       pauseLock.unlock();
 *     }
 *   }
 *
 *   public void pause() {
 *     pauseLock.lock();
 *     try {
 *       isPaused = true;
 *     } finally {
 *       pauseLock.unlock();
 *     }
 *   }
 *
 *   public void resume() {
 *     pauseLock.lock();
 *     try {
 *       isPaused = false;
 *       unpaused.signalAll();
 *     } finally {
 *       pauseLock.unlock();
 *     }
 *   }
 * }}
* * @since 1.5 * @author Doug Lea */ public class ThreadPoolExecutor extends AbstractExecutorService { /** * The main pool control state, ctl, is an atomic integer packing * two conceptual fields * workerCount, indicating the effective number of threads * runState, indicating whether running, shutting down etc * * In order to pack them into one int, we limit workerCount to * (2^29)-1 (about 500 million) threads rather than (2^31)-1 (2 * billion) otherwise representable. If this is ever an issue in * the future, the variable can be changed to be an AtomicLong, * and the shift/mask constants below adjusted. But until the need * arises, this code is a bit faster and simpler using an int. * * The workerCount is the number of workers that have been * permitted to start and not permitted to stop. The value may be * transiently different from the actual number of live threads, * for example when a ThreadFactory fails to create a thread when * asked, and when exiting threads are still performing * bookkeeping before terminating. The user-visible pool size is * reported as the current size of the workers set. * * The runState provides the main lifecyle control, taking on values: * * RUNNING: Accept new tasks and process queued tasks * SHUTDOWN: Don't accept new tasks, but process queued tasks * STOP: Don't accept new tasks, don't process queued tasks, * and interrupt in-progress tasks * TIDYING: All tasks have terminated, workerCount is zero, * the thread transitioning to state TIDYING * will run the terminated() hook method * TERMINATED: terminated() has completed * * The numerical order among these values matters, to allow * ordered comparisons. The runState monotonically increases over * time, but need not hit each state. The transitions are: * * RUNNING -> SHUTDOWN * On invocation of shutdown(), perhaps implicitly in finalize() * (RUNNING or SHUTDOWN) -> STOP * On invocation of shutdownNow() * SHUTDOWN -> TIDYING * When both queue and pool are empty * STOP -> TIDYING * When pool is empty * TIDYING -> TERMINATED * When the terminated() hook method has completed * * Threads waiting in awaitTermination() will return when the * state reaches TERMINATED. * * Detecting the transition from SHUTDOWN to TIDYING is less * straightforward than you'd like because the queue may become * empty after non-empty and vice versa during SHUTDOWN state, but * we can only terminate if, after seeing that it is empty, we see * that workerCount is 0 (which sometimes entails a recheck -- see * below). */ private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); private static final int COUNT_BITS = 29; // Integer.SIZE - 3; private static final int CAPACITY = (1 << COUNT_BITS) - 1; // runState is stored in the high-order bits private static final int RUNNING = -1 << COUNT_BITS; private static final int SHUTDOWN = 0 << COUNT_BITS; private static final int STOP = 1 << COUNT_BITS; private static final int TIDYING = 2 << COUNT_BITS; private static final int TERMINATED = 3 << COUNT_BITS; // Packing and unpacking ctl private static int runStateOf(int c) { return c & ~CAPACITY; } private static int workerCountOf(int c) { return c & CAPACITY; } private static int ctlOf(int rs, int wc) { return rs | wc; } /* * Bit field accessors that don't require unpacking ctl. * These depend on the bit layout and on workerCount being never negative. */ private static boolean runStateLessThan(int c, int s) { return c < s; } private static boolean runStateAtLeast(int c, int s) { return c >= s; } private static boolean isRunning(int c) { return c < SHUTDOWN; } /** * Attempt to CAS-increment the workerCount field of ctl. */ private boolean compareAndIncrementWorkerCount(int expect) { return ctl.compareAndSet(expect, expect + 1); } /** * Attempt to CAS-decrement the workerCount field of ctl. */ private boolean compareAndDecrementWorkerCount(int expect) { return ctl.compareAndSet(expect, expect - 1); } /** * Decrements the workerCount field of ctl. This is called only on * abrupt termination of a thread (see processWorkerExit). Other * decrements are performed within getTask. */ private void decrementWorkerCount() { do {} while (! compareAndDecrementWorkerCount(ctl.get())); } /** * The queue used for holding tasks and handing off to worker * threads. We do not require that workQueue.poll() returning * null necessarily means that workQueue.isEmpty(), so rely * solely on isEmpty to see if the queue is empty (which we must * do for example when deciding whether to transition from * SHUTDOWN to TIDYING). This accommodates special-purpose * queues such as DelayQueues for which poll() is allowed to * return null even if it may later return non-null when delays * expire. */ private final BlockingQueue workQueue; // TODO: DK: mainLock is used in lock(); try { ... } finally { unlock(); } // Consider replacing with synchronized {} if performance reasons exist /** * Lock held on access to workers set and related bookkeeping. * While we could use a concurrent set of some sort, it turns out * to be generally preferable to use a lock. Among the reasons is * that this serializes interruptIdleWorkers, which avoids * unnecessary interrupt storms, especially during shutdown. * Otherwise exiting threads would concurrently interrupt those * that have not yet interrupted. It also simplifies some of the * associated statistics bookkeeping of largestPoolSize etc. We * also hold mainLock on shutdown and shutdownNow, for the sake of * ensuring workers set is stable while separately checking * permission to interrupt and actually interrupting. */ private final ReentrantLock mainLock = new ReentrantLock(); /** * Set containing all worker threads in pool. Accessed only when * holding mainLock. */ private final HashSet workers = new HashSet(); /** * Wait condition to support awaitTermination */ private final Condition termination = mainLock.newCondition(); /** * Tracks largest attained pool size. Accessed only under * mainLock. */ private int largestPoolSize; /** * Counter for completed tasks. Updated only on termination of * worker threads. Accessed only under mainLock. */ private long completedTaskCount; /* * All user control parameters are declared as volatiles so that * ongoing actions are based on freshest values, but without need * for locking, since no internal invariants depend on them * changing synchronously with respect to other actions. */ /** * Factory for new threads. All threads are created using this * factory (via method addWorker). All callers must be prepared * for addWorker to fail, which may reflect a system or user's * policy limiting the number of threads. Even though it is not * treated as an error, failure to create threads may result in * new tasks being rejected or existing ones remaining stuck in * the queue. On the other hand, no special precautions exist to * handle OutOfMemoryErrors that might be thrown while trying to * create threads, since there is generally no recourse from * within this class. */ private volatile ThreadFactory threadFactory; /** * Handler called when saturated or shutdown in execute. */ private volatile RejectedExecutionHandler handler; /** * Timeout in nanoseconds for idle threads waiting for work. * Threads use this timeout when there are more than corePoolSize * present or if allowCoreThreadTimeOut. Otherwise they wait * forever for new work. */ private volatile long keepAliveTime; /** * If false (default), core threads stay alive even when idle. * If true, core threads use keepAliveTime to time out waiting * for work. */ private volatile boolean allowCoreThreadTimeOut; /** * Core pool size is the minimum number of workers to keep alive * (and not allow to time out etc) unless allowCoreThreadTimeOut * is set, in which case the minimum is zero. */ private volatile int corePoolSize; /** * Maximum pool size. Note that the actual maximum is internally * bounded by CAPACITY. */ private volatile int maximumPoolSize; /** * The default rejected execution handler */ private static final RejectedExecutionHandler defaultHandler = new AbortPolicy(); /** * Permission required for callers of shutdown and shutdownNow. * We additionally require (see checkShutdownAccess) that callers * have permission to actually interrupt threads in the worker set * (as governed by Thread.interrupt, which relies on * ThreadGroup.checkAccess, which in turn relies on * SecurityManager.checkAccess). Shutdowns are attempted only if * these checks pass. * * All actual invocations of Thread.interrupt (see * interruptIdleWorkers and interruptWorkers) ignore * SecurityExceptions, meaning that the attempted interrupts * silently fail. In the case of shutdown, they should not fail * unless the SecurityManager has inconsistent policies, sometimes * allowing access to a thread and sometimes not. In such cases, * failure to actually interrupt threads may disable or delay full * termination. Other uses of interruptIdleWorkers are advisory, * and failure to actually interrupt will merely delay response to * configuration changes so is not handled exceptionally. */ private static final RuntimePermission shutdownPerm = new RuntimePermission("modifyThread"); /** * Class Worker mainly maintains interrupt control state for * threads running tasks, along with other minor bookkeeping. This * class opportunistically extends ReentrantLock to simplify * acquiring and releasing a lock surrounding each task execution. * This protects against interrupts that are intended to wake up a * worker thread waiting for a task from instead interrupting a * task being run. */ private final class Worker extends ReentrantLock implements Runnable { /** * This class will never be serialized, but we provide a * serialVersionUID to suppress a javac warning. */ private static final long serialVersionUID = 6138294804551838833L; /** Thread this worker is running in. Null if factory fails. */ final Thread thread; /** Initial task to run. Possibly null. */ Runnable firstTask; /** Per-thread task counter */ volatile long completedTasks; /** * Creates with given first task and thread from ThreadFactory. * @param firstTask the first task (null if none) */ Worker(Runnable firstTask) { this.firstTask = firstTask; this.thread = getThreadFactory().newThread(this); } /** Delegates main run loop to outer runWorker */ public void run() { runWorker(this); } } /* * Methods for setting control state */ /** * Transitions runState to given target, or leaves it alone if * already at least the given target. * * @param targetState the desired state, either SHUTDOWN or STOP * (but not TIDYING or TERMINATED -- use tryTerminate for that) */ private void advanceRunState(int targetState) { for (;;) { int c = ctl.get(); if (runStateAtLeast(c, targetState) || ctl.compareAndSet(c, ctlOf(targetState, workerCountOf(c)))) break; } } /** * Transitions to TERMINATED state if either (SHUTDOWN and pool * and queue empty) or (STOP and pool empty). If otherwise * eligible to terminate but workerCount is nonzero, interrupts an * idle worker to ensure that shutdown signals propagate. This * method must be called following any action that might make * termination possible -- reducing worker count or removing tasks * from the queue during shutdown. The method is non-private to * allow access from ScheduledThreadPoolExecutor. */ final void tryTerminate() { for (;;) { int c = ctl.get(); if (isRunning(c) || runStateAtLeast(c, TIDYING) || (runStateOf(c) == SHUTDOWN && ! workQueue.isEmpty())) return; if (workerCountOf(c) != 0) { // Eligible to terminate interruptIdleWorkers(ONLY_ONE); return; } final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { if (ctl.compareAndSet(c, ctlOf(TIDYING, 0))) { try { terminated(); } finally { ctl.set(ctlOf(TERMINATED, 0)); termination.signalAll(); } return; } } finally { mainLock.unlock(); } // else retry on failed CAS } } /* * Methods for controlling interrupts to worker threads. */ /** * If there is a security manager, makes sure caller has * permission to shut down threads in general (see shutdownPerm). * If this passes, additionally makes sure the caller is allowed * to interrupt each worker thread. This might not be true even if * first check passed, if the SecurityManager treats some threads * specially. */ private void checkShutdownAccess() { SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkPermission(shutdownPerm); final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { for (Iterator itr = workers.iterator(); itr.hasNext();) { Worker w = (Worker)itr.next(); security.checkAccess(w.thread); } } finally { mainLock.unlock(); } } } /** * Interrupts all threads, even if active. Ignores SecurityExceptions * (in which case some threads may remain uninterrupted). */ private void interruptWorkers() { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { for (Iterator itr = workers.iterator(); itr.hasNext();) { Worker w = (Worker)itr.next(); try { w.thread.interrupt(); } catch (SecurityException ignore) { } } } finally { mainLock.unlock(); } } /** * Interrupts threads that might be waiting for tasks (as * indicated by not being locked) so they can check for * termination or configuration changes. Ignores * SecurityExceptions (in which case some threads may remain * uninterrupted). * * @param onlyOne If true, interrupt at most one worker. This is * called only from tryTerminate when termination is otherwise * enabled but there are still other workers. In this case, at * most one waiting worker is interrupted to propagate shutdown * signals in case all threads are currently waiting. * Interrupting any arbitrary thread ensures that newly arriving * workers since shutdown began will also eventually exit. * To guarantee eventual termination, it suffices to always * interrupt only one idle worker, but shutdown() interrupts all * idle workers so that redundant workers exit promptly, not * waiting for a straggler task to finish. */ private void interruptIdleWorkers(boolean onlyOne) { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { Iterator it = workers.iterator(); while (it.hasNext()) { Worker w = (Worker)it.next(); Thread t = w.thread; if (!t.isInterrupted() && w.tryLock()) { try { t.interrupt(); } catch (SecurityException ignore) { } finally { w.unlock(); } } if (onlyOne) break; } } finally { mainLock.unlock(); } } /** * Common form of interruptIdleWorkers, to avoid having to * remember what the boolean argument means. */ private void interruptIdleWorkers() { interruptIdleWorkers(false); } private static final boolean ONLY_ONE = true; /** * Ensures that unless the pool is stopping, the current thread * does not have its interrupt set. This requires a double-check * of state in case the interrupt was cleared concurrently with a * shutdownNow -- if so, the interrupt is re-enabled. */ private void clearInterruptsForTaskRun() { if (runStateLessThan(ctl.get(), STOP) && Thread.interrupted() && runStateAtLeast(ctl.get(), STOP)) Thread.currentThread().interrupt(); } /* * Misc utilities, most of which are also exported to * ScheduledThreadPoolExecutor */ /** * Invokes the rejected execution handler for the given command. * Package-protected for use by ScheduledThreadPoolExecutor. */ final void reject(Runnable command) { handler.rejectedExecution(command, this); } /** * Performs any further cleanup following run state transition on * invocation of shutdown. A no-op here, but used by * ScheduledThreadPoolExecutor to cancel delayed tasks. */ void onShutdown() { } /** * State check needed by ScheduledThreadPoolExecutor to * enable running tasks during shutdown. * * @param shutdownOK true if should return true if SHUTDOWN */ final boolean isRunningOrShutdown(boolean shutdownOK) { int rs = runStateOf(ctl.get()); return rs == RUNNING || (rs == SHUTDOWN && shutdownOK); } /** * Drains the task queue into a new list, normally using * drainTo. But if the queue is a DelayQueue or any other kind of * queue for which poll or drainTo may fail to remove some * elements, it deletes them one by one. */ private List drainQueue() { BlockingQueue q = workQueue; List taskList = new ArrayList(); q.drainTo(taskList); if (!q.isEmpty()) { Runnable[] arr = (Runnable[])q.toArray(new Runnable[0]); for (int i=0; i= SHUTDOWN && ! (rs == SHUTDOWN && firstTask == null && ! workQueue.isEmpty())) return false; for (;;) { int wc = workerCountOf(c); if (wc >= CAPACITY || wc >= (core ? corePoolSize : maximumPoolSize)) return false; if (compareAndIncrementWorkerCount(c)) break retry; c = ctl.get(); // Re-read ctl if (runStateOf(c) != rs) continue retry; // else CAS failed due to workerCount change; retry inner loop } } Worker w = new Worker(firstTask); Thread t = w.thread; final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { // Recheck while holding lock. // Back out on ThreadFactory failure or if // shut down before lock acquired. int c = ctl.get(); int rs = runStateOf(c); if (t == null || (rs >= SHUTDOWN && ! (rs == SHUTDOWN && firstTask == null))) { decrementWorkerCount(); tryTerminate(); return false; } workers.add(w); int s = workers.size(); if (s > largestPoolSize) largestPoolSize = s; } finally { mainLock.unlock(); } t.start(); // It is possible (but unlikely) for a thread to have been // added to workers, but not yet started, during transition to // STOP, which could result in a rare missed interrupt, // because Thread.interrupt is not guaranteed to have any effect // on a non-yet-started Thread (see Thread#interrupt). if (runStateOf(ctl.get()) == STOP && ! t.isInterrupted()) t.interrupt(); return true; } /** * Performs cleanup and bookkeeping for a dying worker. Called * only from worker threads. Unless completedAbruptly is set, * assumes that workerCount has already been adjusted to account * for exit. This method removes thread from worker set, and * possibly terminates the pool or replaces the worker if either * it exited due to user task exception or if fewer than * corePoolSize workers are running or queue is non-empty but * there are no workers. * * @param w the worker * @param completedAbruptly if the worker died due to user exception */ private void processWorkerExit(Worker w, boolean completedAbruptly) { if (completedAbruptly) // If abrupt, then workerCount wasn't adjusted decrementWorkerCount(); final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { completedTaskCount += w.completedTasks; workers.remove(w); } finally { mainLock.unlock(); } tryTerminate(); int c = ctl.get(); if (runStateLessThan(c, STOP)) { if (!completedAbruptly) { int min = allowCoreThreadTimeOut ? 0 : corePoolSize; if (min == 0 && ! workQueue.isEmpty()) min = 1; if (workerCountOf(c) >= min) return; // replacement not needed } addWorker(null, false); } } /** * Performs blocking or timed wait for a task, depending on * current configuration settings, or returns null if this worker * must exit because of any of: * 1. There are more than maximumPoolSize workers (due to * a call to setMaximumPoolSize). * 2. The pool is stopped. * 3. The pool is shutdown and the queue is empty. * 4. This worker timed out waiting for a task, and timed-out * workers are subject to termination (that is, * {@code allowCoreThreadTimeOut || workerCount > corePoolSize}) * both before and after the timed wait. * * @return task, or null if the worker must exit, in which case * workerCount is decremented */ private Runnable getTask() { boolean timedOut = false; // Did the last poll() time out? retry: for (;;) { int c = ctl.get(); int rs = runStateOf(c); // Check if queue empty only if necessary. if (rs >= SHUTDOWN && (rs >= STOP || workQueue.isEmpty())) { decrementWorkerCount(); return null; } boolean timed; // Are workers subject to culling? for (;;) { int wc = workerCountOf(c); timed = allowCoreThreadTimeOut || wc > corePoolSize; if (wc <= maximumPoolSize && ! (timedOut && timed)) break; if (compareAndDecrementWorkerCount(c)) return null; c = ctl.get(); // Re-read ctl if (runStateOf(c) != rs) continue retry; // else CAS failed due to workerCount change; retry inner loop } try { Runnable r = timed ? (Runnable)workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS) : (Runnable)workQueue.take(); if (r != null) return r; timedOut = true; } catch (InterruptedException retry) { timedOut = false; } } } /** * Main worker run loop. Repeatedly gets tasks from queue and * executes them, while coping with a number of issues: * * 1. We may start out with an initial task, in which case we * don't need to get the first one. Otherwise, as long as pool is * running, we get tasks from getTask. If it returns null then the * worker exits due to changed pool state or configuration * parameters. Other exits result from exception throws in * external code, in which case completedAbruptly holds, which * usually leads processWorkerExit to replace this thread. * * 2. Before running any task, the lock is acquired to prevent * other pool interrupts while the task is executing, and * clearInterruptsForTaskRun called to ensure that unless pool is * stopping, this thread does not have its interrupt set. * * 3. Each task run is preceded by a call to beforeExecute, which * might throw an exception, in which case we cause thread to die * (breaking loop with completedAbruptly true) without processing * the task. * * 4. Assuming beforeExecute completes normally, we run the task, * gathering any of its thrown exceptions to send to * afterExecute. We separately handle RuntimeException, Error * (both of which the specs guarantee that we trap) and arbitrary * Throwables. Because we cannot rethrow Throwables within * Runnable.run, we wrap them within Errors on the way out (to the * thread's UncaughtExceptionHandler). Any thrown exception also * conservatively causes thread to die. * * 5. After task.run completes, we call afterExecute, which may * also throw an exception, which will also cause thread to * die. According to JLS Sec 14.20, this exception is the one that * will be in effect even if task.run throws. * * The net effect of the exception mechanics is that afterExecute * and the thread's UncaughtExceptionHandler have as accurate * information as we can provide about any problems encountered by * user code. * * @param w the worker */ final void runWorker(Worker w) { Runnable task = w.firstTask; w.firstTask = null; boolean completedAbruptly = true; try { while (task != null || (task = getTask()) != null) { w.lock(); clearInterruptsForTaskRun(); try { beforeExecute(w.thread, task); Throwable thrown = null; try { task.run(); } catch (RuntimeException x) { thrown = x; throw x; } catch (Error x) { thrown = x; throw x; } catch (Throwable x) { thrown = x; throw new Error(x); } finally { afterExecute(task, thrown); } } finally { task = null; w.completedTasks++; w.unlock(); } } completedAbruptly = false; } finally { processWorkerExit(w, completedAbruptly); } } // Public constructors and methods /** * Creates a new {@code ThreadPoolExecutor} with the given initial * parameters and default thread factory and rejected execution handler. * It may be more convenient to use one of the {@link Executors} factory * methods instead of this general purpose constructor. * * @param corePoolSize the number of threads to keep in the pool, even * if they are idle, unless {@code allowCoreThreadTimeOut} is set * @param maximumPoolSize the maximum number of threads to allow in the * pool * @param keepAliveTime when the number of threads is greater than * the core, this is the maximum time that excess idle threads * will wait for new tasks before terminating. * @param unit the time unit for the {@code keepAliveTime} argument * @param workQueue the queue to use for holding tasks before they are * executed. This queue will hold only the {@code Runnable} * tasks submitted by the {@code execute} method. * @throws IllegalArgumentException if one of the following holds:
* {@code corePoolSize < 0}
* {@code keepAliveTime < 0}
* {@code maximumPoolSize <= 0}
* {@code maximumPoolSize < corePoolSize} * @throws NullPointerException if {@code workQueue} is null */ public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), defaultHandler); } /** * Creates a new {@code ThreadPoolExecutor} with the given initial * parameters and default rejected execution handler. * * @param corePoolSize the number of threads to keep in the pool, even * if they are idle, unless {@code allowCoreThreadTimeOut} is set * @param maximumPoolSize the maximum number of threads to allow in the * pool * @param keepAliveTime when the number of threads is greater than * the core, this is the maximum time that excess idle threads * will wait for new tasks before terminating. * @param unit the time unit for the {@code keepAliveTime} argument * @param workQueue the queue to use for holding tasks before they are * executed. This queue will hold only the {@code Runnable} * tasks submitted by the {@code execute} method. * @param threadFactory the factory to use when the executor * creates a new thread * @throws IllegalArgumentException if one of the following holds:
* {@code corePoolSize < 0}
* {@code keepAliveTime < 0}
* {@code maximumPoolSize <= 0}
* {@code maximumPoolSize < corePoolSize} * @throws NullPointerException if {@code workQueue} * or {@code threadFactory} is null */ public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, defaultHandler); } /** * Creates a new {@code ThreadPoolExecutor} with the given initial * parameters and default thread factory. * * @param corePoolSize the number of threads to keep in the pool, even * if they are idle, unless {@code allowCoreThreadTimeOut} is set * @param maximumPoolSize the maximum number of threads to allow in the * pool * @param keepAliveTime when the number of threads is greater than * the core, this is the maximum time that excess idle threads * will wait for new tasks before terminating. * @param unit the time unit for the {@code keepAliveTime} argument * @param workQueue the queue to use for holding tasks before they are * executed. This queue will hold only the {@code Runnable} * tasks submitted by the {@code execute} method. * @param handler the handler to use when execution is blocked * because the thread bounds and queue capacities are reached * @throws IllegalArgumentException if one of the following holds:
* {@code corePoolSize < 0}
* {@code keepAliveTime < 0}
* {@code maximumPoolSize <= 0}
* {@code maximumPoolSize < corePoolSize} * @throws NullPointerException if {@code workQueue} * or {@code handler} is null */ public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, RejectedExecutionHandler handler) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), handler); } /** * Creates a new {@code ThreadPoolExecutor} with the given initial * parameters. * * @param corePoolSize the number of threads to keep in the pool, even * if they are idle, unless {@code allowCoreThreadTimeOut} is set * @param maximumPoolSize the maximum number of threads to allow in the * pool * @param keepAliveTime when the number of threads is greater than * the core, this is the maximum time that excess idle threads * will wait for new tasks before terminating. * @param unit the time unit for the {@code keepAliveTime} argument * @param workQueue the queue to use for holding tasks before they are * executed. This queue will hold only the {@code Runnable} * tasks submitted by the {@code execute} method. * @param threadFactory the factory to use when the executor * creates a new thread * @param handler the handler to use when execution is blocked * because the thread bounds and queue capacities are reached * @throws IllegalArgumentException if one of the following holds:
* {@code corePoolSize < 0}
* {@code keepAliveTime < 0}
* {@code maximumPoolSize <= 0}
* {@code maximumPoolSize < corePoolSize} * @throws NullPointerException if {@code workQueue} * or {@code threadFactory} or {@code handler} is null */ public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { if (corePoolSize < 0 || maximumPoolSize <= 0 || maximumPoolSize < corePoolSize || keepAliveTime < 0) throw new IllegalArgumentException(); if (workQueue == null || threadFactory == null || handler == null) throw new NullPointerException(); this.corePoolSize = corePoolSize; this.maximumPoolSize = maximumPoolSize; this.workQueue = workQueue; this.keepAliveTime = unit.toNanos(keepAliveTime); this.threadFactory = threadFactory; this.handler = handler; } /** * Executes the given task sometime in the future. The task * may execute in a new thread or in an existing pooled thread. * * If the task cannot be submitted for execution, either because this * executor has been shutdown or because its capacity has been reached, * the task is handled by the current {@code RejectedExecutionHandler}. * * @param command the task to execute * @throws RejectedExecutionException at discretion of * {@code RejectedExecutionHandler}, if the task * cannot be accepted for execution * @throws NullPointerException if {@code command} is null */ public void execute(Runnable command) { if (command == null) throw new NullPointerException(); /* * Proceed in 3 steps: * * 1. If fewer than corePoolSize threads are running, try to * start a new thread with the given command as its first * task. The call to addWorker atomically checks runState and * workerCount, and so prevents false alarms that would add * threads when it shouldn't, by returning false. * * 2. If a task can be successfully queued, then we still need * to double-check whether we should have added a thread * (because existing ones died since last checking) or that * the pool shut down since entry into this method. So we * recheck state and if necessary roll back the enqueuing if * stopped, or start a new thread if there are none. * * 3. If we cannot queue task, then we try to add a new * thread. If it fails, we know we are shut down or saturated * and so reject the task. */ int c = ctl.get(); if (workerCountOf(c) < corePoolSize) { if (addWorker(command, true)) return; c = ctl.get(); } if (isRunning(c) && workQueue.offer(command)) { int recheck = ctl.get(); if (! isRunning(recheck) && remove(command)) reject(command); else if (workerCountOf(recheck) == 0) addWorker(null, false); } else if (!addWorker(command, false)) reject(command); } /** * Initiates an orderly shutdown in which previously submitted * tasks are executed, but no new tasks will be accepted. * Invocation has no additional effect if already shut down. * * @throws SecurityException {@inheritDoc} */ public void shutdown() { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { checkShutdownAccess(); advanceRunState(SHUTDOWN); interruptIdleWorkers(); onShutdown(); // hook for ScheduledThreadPoolExecutor } finally { mainLock.unlock(); } tryTerminate(); } /** * Attempts to stop all actively executing tasks, halts the * processing of waiting tasks, and returns a list of the tasks * that were awaiting execution. These tasks are drained (removed) * from the task queue upon return from this method. * *

There are no guarantees beyond best-effort attempts to stop * processing actively executing tasks. This implementation * cancels tasks via {@link Thread#interrupt}, so any task that * fails to respond to interrupts may never terminate. * * @throws SecurityException {@inheritDoc} */ public List shutdownNow() { List tasks; final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { checkShutdownAccess(); advanceRunState(STOP); interruptWorkers(); tasks = drainQueue(); } finally { mainLock.unlock(); } tryTerminate(); return tasks; } public boolean isShutdown() { return ! isRunning(ctl.get()); } /** * Returns true if this executor is in the process of terminating * after {@link #shutdown} or {@link #shutdownNow} but has not * completely terminated. This method may be useful for * debugging. A return of {@code true} reported a sufficient * period after shutdown may indicate that submitted tasks have * ignored or suppressed interruption, causing this executor not * to properly terminate. * * @return true if terminating but not yet terminated */ public boolean isTerminating() { int c = ctl.get(); return ! isRunning(c) && runStateLessThan(c, TERMINATED); } public boolean isTerminated() { return runStateAtLeast(ctl.get(), TERMINATED); } public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { long nanos = unit.toNanos(timeout); long deadline = Utils.nanoTime() + nanos; final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { if (runStateAtLeast(ctl.get(), TERMINATED)) return true; while (nanos > 0) { termination.await(nanos, TimeUnit.NANOSECONDS); if (runStateAtLeast(ctl.get(), TERMINATED)) return true; nanos = deadline - Utils.nanoTime(); } return false; } finally { mainLock.unlock(); } } /** * Invokes {@code shutdown} when this executor is no longer * referenced and it has no threads. */ protected void finalize() { shutdown(); } /** * Sets the thread factory used to create new threads. * * @param threadFactory the new thread factory * @throws NullPointerException if threadFactory is null * @see #getThreadFactory */ public void setThreadFactory(ThreadFactory threadFactory) { if (threadFactory == null) throw new NullPointerException(); this.threadFactory = threadFactory; } /** * Returns the thread factory used to create new threads. * * @return the current thread factory * @see #setThreadFactory */ public ThreadFactory getThreadFactory() { return threadFactory; } /** * Sets a new handler for unexecutable tasks. * * @param handler the new handler * @throws NullPointerException if handler is null * @see #getRejectedExecutionHandler */ public void setRejectedExecutionHandler(RejectedExecutionHandler handler) { if (handler == null) throw new NullPointerException(); this.handler = handler; } /** * Returns the current handler for unexecutable tasks. * * @return the current handler * @see #setRejectedExecutionHandler */ public RejectedExecutionHandler getRejectedExecutionHandler() { return handler; } /** * Sets the core number of threads. This overrides any value set * in the constructor. If the new value is smaller than the * current value, excess existing threads will be terminated when * they next become idle. If larger, new threads will, if needed, * be started to execute any queued tasks. * * @param corePoolSize the new core size * @throws IllegalArgumentException if {@code corePoolSize < 0} * @see #getCorePoolSize */ public void setCorePoolSize(int corePoolSize) { if (corePoolSize < 0) throw new IllegalArgumentException(); int delta = corePoolSize - this.corePoolSize; this.corePoolSize = corePoolSize; if (workerCountOf(ctl.get()) > corePoolSize) interruptIdleWorkers(); else if (delta > 0) { // We don't really know how many new threads are "needed". // As a heuristic, prestart enough new workers (up to new // core size) to handle the current number of tasks in // queue, but stop if queue becomes empty while doing so. int k = Math.min(delta, workQueue.size()); while (k-- > 0 && addWorker(null, true)) { if (workQueue.isEmpty()) break; } } } /** * Returns the core number of threads. * * @return the core number of threads * @see #setCorePoolSize */ public int getCorePoolSize() { return corePoolSize; } /** * Starts a core thread, causing it to idly wait for work. This * overrides the default policy of starting core threads only when * new tasks are executed. This method will return {@code false} * if all core threads have already been started. * * @return {@code true} if a thread was started */ public boolean prestartCoreThread() { return workerCountOf(ctl.get()) < corePoolSize && addWorker(null, true); } /** * Starts all core threads, causing them to idly wait for work. This * overrides the default policy of starting core threads only when * new tasks are executed. * * @return the number of threads started */ public int prestartAllCoreThreads() { int n = 0; while (addWorker(null, true)) ++n; return n; } /** * Returns true if this pool allows core threads to time out and * terminate if no tasks arrive within the keepAlive time, being * replaced if needed when new tasks arrive. When true, the same * keep-alive policy applying to non-core threads applies also to * core threads. When false (the default), core threads are never * terminated due to lack of incoming tasks. * * @return {@code true} if core threads are allowed to time out, * else {@code false} * * @since 1.6 */ public boolean allowsCoreThreadTimeOut() { return allowCoreThreadTimeOut; } /** * Sets the policy governing whether core threads may time out and * terminate if no tasks arrive within the keep-alive time, being * replaced if needed when new tasks arrive. When false, core * threads are never terminated due to lack of incoming * tasks. When true, the same keep-alive policy applying to * non-core threads applies also to core threads. To avoid * continual thread replacement, the keep-alive time must be * greater than zero when setting {@code true}. This method * should in general be called before the pool is actively used. * * @param value {@code true} if should time out, else {@code false} * @throws IllegalArgumentException if value is {@code true} * and the current keep-alive time is not greater than zero * * @since 1.6 */ public void allowCoreThreadTimeOut(boolean value) { if (value && keepAliveTime <= 0) throw new IllegalArgumentException("Core threads must have nonzero keep alive times"); if (value != allowCoreThreadTimeOut) { allowCoreThreadTimeOut = value; if (value) interruptIdleWorkers(); } } /** * Sets the maximum allowed number of threads. This overrides any * value set in the constructor. If the new value is smaller than * the current value, excess existing threads will be * terminated when they next become idle. * * @param maximumPoolSize the new maximum * @throws IllegalArgumentException if the new maximum is * less than or equal to zero, or * less than the {@linkplain #getCorePoolSize core pool size} * @see #getMaximumPoolSize */ public void setMaximumPoolSize(int maximumPoolSize) { if (maximumPoolSize <= 0 || maximumPoolSize < corePoolSize) throw new IllegalArgumentException(); this.maximumPoolSize = maximumPoolSize; if (workerCountOf(ctl.get()) > maximumPoolSize) interruptIdleWorkers(); } /** * Returns the maximum allowed number of threads. * * @return the maximum allowed number of threads * @see #setMaximumPoolSize */ public int getMaximumPoolSize() { return maximumPoolSize; } /** * Sets the time limit for which threads may remain idle before * being terminated. If there are more than the core number of * threads currently in the pool, after waiting this amount of * time without processing a task, excess threads will be * terminated. This overrides any value set in the constructor. * * @param time the time to wait. A time value of zero will cause * excess threads to terminate immediately after executing tasks. * @param unit the time unit of the {@code time} argument * @throws IllegalArgumentException if {@code time} less than zero or * if {@code time} is zero and {@code allowsCoreThreadTimeOut} * @see #getKeepAliveTime */ public void setKeepAliveTime(long time, TimeUnit unit) { if (time < 0) throw new IllegalArgumentException(); if (time == 0 && allowsCoreThreadTimeOut()) throw new IllegalArgumentException("Core threads must have nonzero keep alive times"); long keepAliveTime = unit.toNanos(time); long delta = keepAliveTime - this.keepAliveTime; this.keepAliveTime = keepAliveTime; if (delta < 0) interruptIdleWorkers(); } /** * Returns the thread keep-alive time, which is the amount of time * that threads in excess of the core pool size may remain * idle before being terminated. * * @param unit the desired time unit of the result * @return the time limit * @see #setKeepAliveTime */ public long getKeepAliveTime(TimeUnit unit) { return unit.convert(keepAliveTime, TimeUnit.NANOSECONDS); } /* User-level queue utilities */ /** * Returns the task queue used by this executor. Access to the * task queue is intended primarily for debugging and monitoring. * This queue may be in active use. Retrieving the task queue * does not prevent queued tasks from executing. * * @return the task queue */ public BlockingQueue getQueue() { return workQueue; } /** * Removes this task from the executor's internal queue if it is * present, thus causing it not to be run if it has not already * started. * *

This method may be useful as one part of a cancellation * scheme. It may fail to remove tasks that have been converted * into other forms before being placed on the internal queue. For * example, a task entered using {@code submit} might be * converted into a form that maintains {@code Future} status. * However, in such cases, method {@link #purge} may be used to * remove those Futures that have been cancelled. * * @param task the task to remove * @return true if the task was removed */ public boolean remove(Runnable task) { boolean removed = workQueue.remove(task); tryTerminate(); // In case SHUTDOWN and now empty return removed; } /** * Tries to remove from the work queue all {@link Future} * tasks that have been cancelled. This method can be useful as a * storage reclamation operation, that has no other impact on * functionality. Cancelled tasks are never executed, but may * accumulate in work queues until worker threads can actively * remove them. Invoking this method instead tries to remove them now. * However, this method may fail to remove tasks in * the presence of interference by other threads. */ public void purge() { final BlockingQueue q = workQueue; try { Iterator it = q.iterator(); while (it.hasNext()) { Runnable r = (Runnable)it.next(); if (r instanceof Future && ((Future)r).isCancelled()) it.remove(); } } catch (ConcurrentModificationException fallThrough) { // Take slow path if we encounter interference during traversal. // Make copy for traversal and call remove for cancelled entries. // The slow path is more likely to be O(N*N). Object[] arr = q.toArray(); for (int i=0; i 0 return runStateAtLeast(ctl.get(), TIDYING) ? 0 : workers.size(); } finally { mainLock.unlock(); } } /** * Returns the approximate number of threads that are actively * executing tasks. * * @return the number of threads */ public int getActiveCount() { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { int n = 0; for (Iterator itr = workers.iterator(); itr.hasNext();) { Worker w = (Worker)itr.next(); if (w.isLocked()) ++n; } return n; } finally { mainLock.unlock(); } } /** * Returns the largest number of threads that have ever * simultaneously been in the pool. * * @return the number of threads */ public int getLargestPoolSize() { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { return largestPoolSize; } finally { mainLock.unlock(); } } /** * Returns the approximate total number of tasks that have ever been * scheduled for execution. Because the states of tasks and * threads may change dynamically during computation, the returned * value is only an approximation. * * @return the number of tasks */ public long getTaskCount() { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { long n = completedTaskCount; for (Iterator itr = workers.iterator(); itr.hasNext();) { Worker w = (Worker)itr.next(); n += w.completedTasks; if (w.isLocked()) ++n; } return n + workQueue.size(); } finally { mainLock.unlock(); } } /** * Returns the approximate total number of tasks that have * completed execution. Because the states of tasks and threads * may change dynamically during computation, the returned value * is only an approximation, but one that does not ever decrease * across successive calls. * * @return the number of tasks */ public long getCompletedTaskCount() { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { long n = completedTaskCount; for (Iterator itr = workers.iterator(); itr.hasNext();) { Worker w = (Worker)itr.next(); n += w.completedTasks; } return n; } finally { mainLock.unlock(); } } /* Extension hooks */ /** * Method invoked prior to executing the given Runnable in the * given thread. This method is invoked by thread {@code t} that * will execute task {@code r}, and may be used to re-initialize * ThreadLocals, or to perform logging. * *

This implementation does nothing, but may be customized in * subclasses. Note: To properly nest multiple overridings, subclasses * should generally invoke {@code super.beforeExecute} at the end of * this method. * * @param t the thread that will run task {@code r} * @param r the task that will be executed */ protected void beforeExecute(Thread t, Runnable r) { } /** * Method invoked upon completion of execution of the given Runnable. * This method is invoked by the thread that executed the task. If * non-null, the Throwable is the uncaught {@code RuntimeException} * or {@code Error} that caused execution to terminate abruptly. * *

This implementation does nothing, but may be customized in * subclasses. Note: To properly nest multiple overridings, subclasses * should generally invoke {@code super.afterExecute} at the * beginning of this method. * *

Note: When actions are enclosed in tasks (such as * {@link FutureTask}) either explicitly or via methods such as * {@code submit}, these task objects catch and maintain * computational exceptions, and so they do not cause abrupt * termination, and the internal exceptions are not * passed to this method. If you would like to trap both kinds of * failures in this method, you can further probe for such cases, * as in this sample subclass that prints either the direct cause * or the underlying exception if a task has been aborted: * *

 {@code
     * class ExtendedExecutor extends ThreadPoolExecutor {
     *   // ...
     *   protected void afterExecute(Runnable r, Throwable t) {
     *     super.afterExecute(r, t);
     *     if (t == null && r instanceof Future) {
     *       try {
     *         Object result = ((Future) r).get();
     *       } catch (CancellationException ce) {
     *           t = ce;
     *       } catch (ExecutionException ee) {
     *           t = ee.getCause();
     *       } catch (InterruptedException ie) {
     *           Thread.currentThread().interrupt(); // ignore/reset
     *       }
     *     }
     *     if (t != null)
     *       System.out.println(t);
     *   }
     * }}
* * @param r the runnable that has completed * @param t the exception that caused termination, or null if * execution completed normally */ protected void afterExecute(Runnable r, Throwable t) { } /** * Method invoked when the Executor has terminated. Default * implementation does nothing. Note: To properly nest multiple * overridings, subclasses should generally invoke * {@code super.terminated} within this method. */ protected void terminated() { } /* Predefined RejectedExecutionHandlers */ /** * A handler for rejected tasks that runs the rejected task * directly in the calling thread of the {@code execute} method, * unless the executor has been shut down, in which case the task * is discarded. */ public static class CallerRunsPolicy implements RejectedExecutionHandler { /** * Creates a {@code CallerRunsPolicy}. */ public CallerRunsPolicy() { } /** * Executes task r in the caller's thread, unless the executor * has been shut down, in which case the task is discarded. * * @param r the runnable task requested to be executed * @param e the executor attempting to execute this task */ public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { if (!e.isShutdown()) { r.run(); } } } /** * A handler for rejected tasks that throws a * {@code RejectedExecutionException}. */ public static class AbortPolicy implements RejectedExecutionHandler { /** * Creates an {@code AbortPolicy}. */ public AbortPolicy() { } /** * Always throws RejectedExecutionException. * * @param r the runnable task requested to be executed * @param e the executor attempting to execute this task * @throws RejectedExecutionException always. */ public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { throw new RejectedExecutionException(); } } /** * A handler for rejected tasks that silently discards the * rejected task. */ public static class DiscardPolicy implements RejectedExecutionHandler { /** * Creates a {@code DiscardPolicy}. */ public DiscardPolicy() { } /** * Does nothing, which has the effect of discarding task r. * * @param r the runnable task requested to be executed * @param e the executor attempting to execute this task */ public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { } } /** * A handler for rejected tasks that discards the oldest unhandled * request and then retries {@code execute}, unless the executor * is shut down, in which case the task is discarded. */ public static class DiscardOldestPolicy implements RejectedExecutionHandler { /** * Creates a {@code DiscardOldestPolicy} for the given executor. */ public DiscardOldestPolicy() { } /** * Obtains and ignores the next task that the executor * would otherwise execute, if one is immediately available, * and then retries execution of task r, unless the executor * is shut down, in which case task r is instead discarded. * * @param r the runnable task requested to be executed * @param e the executor attempting to execute this task */ public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { if (!e.isShutdown()) { e.getQueue().poll(); e.execute(r); } } } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/BlockingDeque.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/BlockingDeque.ja0000644001750700037720000006161110461021764032607 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import java.util.Iterator; import edu.emory.mathcs.backport.java.util.*; /** * A {@link Deque} that additionally supports blocking operations that wait * for the deque to become non-empty when retrieving an element, and wait for * space to become available in the deque when storing an element. * *

BlockingDeque methods come in four forms, with different ways * of handling operations that cannot be satisfied immediately, but may be * satisfied at some point in the future: * one throws an exception, the second returns a special value (either * null or false, depending on the operation), the third * blocks the current thread indefinitely until the operation can succeed, * and the fourth blocks for only a given maximum time limit before giving * up. These methods are summarized in the following table: * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
First Element (Head)
Throws exceptionSpecial valueBlocksTimes out
Insert{@link #addFirst addFirst(e)}{@link #offerFirst(Object) offerFirst(e)}{@link #putFirst putFirst(e)}{@link #offerFirst(Object, long, TimeUnit) offerFirst(e, time, unit)}
Remove{@link #removeFirst removeFirst()}{@link #pollFirst pollFirst()}{@link #takeFirst takeFirst()}{@link #pollFirst(long, TimeUnit) pollFirst(time, unit)}
Examine{@link #getFirst getFirst()}{@link #peekFirst peekFirst()}not applicablenot applicable
Last Element (Tail)
Throws exceptionSpecial valueBlocksTimes out
Insert{@link #addLast addLast(e)}{@link #offerLast(Object) offerLast(e)}{@link #putLast putLast(e)}{@link #offerLast(Object, long, TimeUnit) offerLast(e, time, unit)}
Remove{@link #removeLast() removeLast()}{@link #pollLast() pollLast()}{@link #takeLast takeLast()}{@link #pollLast(long, TimeUnit) pollLast(time, unit)}
Examine{@link #getLast getLast()}{@link #peekLast peekLast()}not applicablenot applicable
* *

Like any {@link BlockingQueue}, a BlockingDeque is thread safe, * does not permit null elements, and may (or may not) be * capacity-constrained. * *

A BlockingDeque implementation may be used directly as a FIFO * BlockingQueue. The methods inherited from the * BlockingQueue interface are precisely equivalent to * BlockingDeque methods as indicated in the following table: * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
BlockingQueue Method Equivalent BlockingDeque Method
Insert
{@link #add(Object) add(e)}{@link #addLast(Object) addLast(e)}
{@link #offer(Object) offer(e)}{@link #offerLast(Object) offerLast(e)}
{@link #put(Object) put(e)}{@link #putLast(Object) putLast(e)}
{@link #offer(Object, long, TimeUnit) offer(e, time, unit)}{@link #offerLast(Object, long, TimeUnit) offerLast(e, time, unit)}
Remove
{@link #remove() remove()}{@link #removeFirst() removeFirst()}
{@link #poll() poll()}{@link #pollFirst() pollFirst()}
{@link #take() take()}{@link #takeFirst() takeFirst()}
{@link #poll(long, TimeUnit) poll(time, unit)}{@link #pollFirst(long, TimeUnit) pollFirst(time, unit)}
Examine
{@link #element() element()}{@link #getFirst() getFirst()}
{@link #peek() peek()}{@link #peekFirst() peekFirst()}
* *

Memory consistency effects: As with other concurrent * collections, actions in a thread prior to placing an object into a * {@code BlockingDeque} * happen-before * actions subsequent to the access or removal of that element from * the {@code BlockingDeque} in another thread. * *

This interface is a member of the * * Java Collections Framework. * * @since 1.6 * @author Doug Lea */ public interface BlockingDeque extends BlockingQueue, Deque { /* * We have "diamond" multiple interface inheritance here, and that * introduces ambiguities. Methods might end up with different * specs depending on the branch chosen by javadoc. Thus a lot of * methods specs here are copied from superinterfaces. */ /** * Inserts the specified element at the front of this deque if it is * possible to do so immediately without violating capacity restrictions, * throwing an IllegalStateException if no space is currently * available. When using a capacity-restricted deque, it is generally * preferable to use {@link #offerFirst(Object) offerFirst}. * * @param e the element to add * @throws IllegalStateException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException {@inheritDoc} */ void addFirst(Object e); /** * Inserts the specified element at the end of this deque if it is * possible to do so immediately without violating capacity restrictions, * throwing an IllegalStateException if no space is currently * available. When using a capacity-restricted deque, it is generally * preferable to use {@link #offerLast(Object) offerLast}. * * @param e the element to add * @throws IllegalStateException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException {@inheritDoc} */ void addLast(Object e); /** * Inserts the specified element at the front of this deque if it is * possible to do so immediately without violating capacity restrictions, * returning true upon success and false if no space is * currently available. * When using a capacity-restricted deque, this method is generally * preferable to the {@link #addFirst(Object) addFirst} method, which can * fail to insert an element only by throwing an exception. * * @param e the element to add * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException {@inheritDoc} */ boolean offerFirst(Object e); /** * Inserts the specified element at the end of this deque if it is * possible to do so immediately without violating capacity restrictions, * returning true upon success and false if no space is * currently available. * When using a capacity-restricted deque, this method is generally * preferable to the {@link #addLast(Object) addLast} method, which can * fail to insert an element only by throwing an exception. * * @param e the element to add * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException {@inheritDoc} */ boolean offerLast(Object e); /** * Inserts the specified element at the front of this deque, * waiting if necessary for space to become available. * * @param e the element to add * @throws InterruptedException if interrupted while waiting * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ void putFirst(Object e) throws InterruptedException; /** * Inserts the specified element at the end of this deque, * waiting if necessary for space to become available. * * @param e the element to add * @throws InterruptedException if interrupted while waiting * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ void putLast(Object e) throws InterruptedException; /** * Inserts the specified element at the front of this deque, * waiting up to the specified wait time if necessary for space to * become available. * * @param e the element to add * @param timeout how long to wait before giving up, in units of * unit * @param unit a TimeUnit determining how to interpret the * timeout parameter * @return true if successful, or false if * the specified waiting time elapses before space is available * @throws InterruptedException if interrupted while waiting * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ boolean offerFirst(Object e, long timeout, TimeUnit unit) throws InterruptedException; /** * Inserts the specified element at the end of this deque, * waiting up to the specified wait time if necessary for space to * become available. * * @param e the element to add * @param timeout how long to wait before giving up, in units of * unit * @param unit a TimeUnit determining how to interpret the * timeout parameter * @return true if successful, or false if * the specified waiting time elapses before space is available * @throws InterruptedException if interrupted while waiting * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ boolean offerLast(Object e, long timeout, TimeUnit unit) throws InterruptedException; /** * Retrieves and removes the first element of this deque, waiting * if necessary until an element becomes available. * * @return the head of this deque * @throws InterruptedException if interrupted while waiting */ Object takeFirst() throws InterruptedException; /** * Retrieves and removes the last element of this deque, waiting * if necessary until an element becomes available. * * @return the tail of this deque * @throws InterruptedException if interrupted while waiting */ Object takeLast() throws InterruptedException; /** * Retrieves and removes the first element of this deque, waiting * up to the specified wait time if necessary for an element to * become available. * * @param timeout how long to wait before giving up, in units of * unit * @param unit a TimeUnit determining how to interpret the * timeout parameter * @return the head of this deque, or null if the specified * waiting time elapses before an element is available * @throws InterruptedException if interrupted while waiting */ Object pollFirst(long timeout, TimeUnit unit) throws InterruptedException; /** * Retrieves and removes the last element of this deque, waiting * up to the specified wait time if necessary for an element to * become available. * * @param timeout how long to wait before giving up, in units of * unit * @param unit a TimeUnit determining how to interpret the * timeout parameter * @return the tail of this deque, or null if the specified * waiting time elapses before an element is available * @throws InterruptedException if interrupted while waiting */ Object pollLast(long timeout, TimeUnit unit) throws InterruptedException; /** * Removes the first occurrence of the specified element from this deque. * If the deque does not contain the element, it is unchanged. * More formally, removes the first element e such that * o.equals(e) (if such an element exists). * Returns true if this deque contained the specified element * (or equivalently, if this deque changed as a result of the call). * * @param o element to be removed from this deque, if present * @return true if an element was removed as a result of this call * @throws ClassCastException if the class of the specified element * is incompatible with this deque (optional) * @throws NullPointerException if the specified element is null (optional) */ boolean removeFirstOccurrence(Object o); /** * Removes the last occurrence of the specified element from this deque. * If the deque does not contain the element, it is unchanged. * More formally, removes the last element e such that * o.equals(e) (if such an element exists). * Returns true if this deque contained the specified element * (or equivalently, if this deque changed as a result of the call). * * @param o element to be removed from this deque, if present * @return true if an element was removed as a result of this call * @throws ClassCastException if the class of the specified element * is incompatible with this deque (optional) * @throws NullPointerException if the specified element is null (optional) */ boolean removeLastOccurrence(Object o); // *** BlockingQueue methods *** /** * Inserts the specified element into the queue represented by this deque * (in other words, at the tail of this deque) if it is possible to do so * immediately without violating capacity restrictions, returning * true upon success and throwing an * IllegalStateException if no space is currently available. * When using a capacity-restricted deque, it is generally preferable to * use {@link #offer(Object) offer}. * *

This method is equivalent to {@link #addLast(Object) addLast}. * * @param e the element to add * @throws IllegalStateException {@inheritDoc} * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ boolean add(Object e); /** * Inserts the specified element into the queue represented by this deque * (in other words, at the tail of this deque) if it is possible to do so * immediately without violating capacity restrictions, returning * true upon success and false if no space is currently * available. When using a capacity-restricted deque, this method is * generally preferable to the {@link #add} method, which can fail to * insert an element only by throwing an exception. * *

This method is equivalent to {@link #offerLast(Object) offerLast}. * * @param e the element to add * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ boolean offer(Object e); /** * Inserts the specified element into the queue represented by this deque * (in other words, at the tail of this deque), waiting if necessary for * space to become available. * *

This method is equivalent to {@link #putLast(Object) putLast}. * * @param e the element to add * @throws InterruptedException {@inheritDoc} * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ void put(Object e) throws InterruptedException; /** * Inserts the specified element into the queue represented by this deque * (in other words, at the tail of this deque), waiting up to the * specified wait time if necessary for space to become available. * *

This method is equivalent to * {@link #offerLast(Object,long,TimeUnit) offerLast}. * * @param e the element to add * @return true if the element was added to this deque, else * false * @throws InterruptedException {@inheritDoc} * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ boolean offer(Object e, long timeout, TimeUnit unit) throws InterruptedException; /** * Retrieves and removes the head of the queue represented by this deque * (in other words, the first element of this deque). * This method differs from {@link #poll poll} only in that it * throws an exception if this deque is empty. * *

This method is equivalent to {@link #removeFirst() removeFirst}. * * @return the head of the queue represented by this deque * @throws NoSuchElementException if this deque is empty */ Object remove(); /** * Retrieves and removes the head of the queue represented by this deque * (in other words, the first element of this deque), or returns * null if this deque is empty. * *

This method is equivalent to {@link #pollFirst()}. * * @return the head of this deque, or null if this deque is empty */ Object poll(); /** * Retrieves and removes the head of the queue represented by this deque * (in other words, the first element of this deque), waiting if * necessary until an element becomes available. * *

This method is equivalent to {@link #takeFirst() takeFirst}. * * @return the head of this deque * @throws InterruptedException if interrupted while waiting */ Object take() throws InterruptedException; /** * Retrieves and removes the head of the queue represented by this deque * (in other words, the first element of this deque), waiting up to the * specified wait time if necessary for an element to become available. * *

This method is equivalent to * {@link #pollFirst(long,TimeUnit) pollFirst}. * * @return the head of this deque, or null if the * specified waiting time elapses before an element is available * @throws InterruptedException if interrupted while waiting */ Object poll(long timeout, TimeUnit unit) throws InterruptedException; /** * Retrieves, but does not remove, the head of the queue represented by * this deque (in other words, the first element of this deque). * This method differs from {@link #peek peek} only in that it throws an * exception if this deque is empty. * *

This method is equivalent to {@link #getFirst() getFirst}. * * @return the head of this deque * @throws NoSuchElementException if this deque is empty */ Object element(); /** * Retrieves, but does not remove, the head of the queue represented by * this deque (in other words, the first element of this deque), or * returns null if this deque is empty. * *

This method is equivalent to {@link #peekFirst() peekFirst}. * * @return the head of this deque, or null if this deque is empty */ Object peek(); /** * Removes the first occurrence of the specified element from this deque. * If the deque does not contain the element, it is unchanged. * More formally, removes the first element e such that * o.equals(e) (if such an element exists). * Returns true if this deque contained the specified element * (or equivalently, if this deque changed as a result of the call). * *

This method is equivalent to * {@link #removeFirstOccurrence(Object) removeFirstOccurrence}. * * @param o element to be removed from this deque, if present * @return true if this deque changed as a result of the call * @throws ClassCastException if the class of the specified element * is incompatible with this deque (optional) * @throws NullPointerException if the specified element is null (optional) */ boolean remove(Object o); /** * Returns true if this deque contains the specified element. * More formally, returns true if and only if this deque contains * at least one element e such that o.equals(e). * * @param o object to be checked for containment in this deque * @return true if this deque contains the specified element * @throws ClassCastException if the class of the specified element * is incompatible with this deque (optional) * @throws NullPointerException if the specified element is null (optional) */ public boolean contains(Object o); /** * Returns the number of elements in this deque. * * @return the number of elements in this deque */ public int size(); /** * Returns an iterator over the elements in this deque in proper sequence. * The elements will be returned in order from first (head) to last (tail). * * @return an iterator over the elements in this deque in proper sequence */ Iterator iterator(); // *** Stack methods *** /** * Pushes an element onto the stack represented by this deque. In other * words, inserts the element at the front of this deque unless it would * violate capacity restrictions. * *

This method is equivalent to {@link #addFirst(Object) addFirst}. * * @throws IllegalStateException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException if the specified element is null * @throws IllegalArgumentException {@inheritDoc} */ void push(Object e); } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/DelayQueue.java0000644001750700037720000003560610461021764032472 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.*; import java.util.Collection; import java.util.Iterator; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; import java.util.NoSuchElementException; /** * An unbounded {@linkplain BlockingQueue blocking queue} of * Delayed elements, in which an element can only be taken * when its delay has expired. The head of the queue is that * Delayed element whose delay expired furthest in the * past. If no delay has expired there is no head and poll * will return null. Expiration occurs when an element's * getDelay(TimeUnit.NANOSECONDS) method returns a value less * than or equal to zero. Even though unexpired elements cannot be * removed using take or poll, they are otherwise * treated as normal elements. For example, the size method * returns the count of both expired and unexpired elements. * This queue does not permit null elements. * *

This class and its iterator implement all of the * optional methods of the {@link Collection} and {@link * Iterator} interfaces. * *

This class is a member of the * * Java Collections Framework. * * @since 1.5 * @author Doug Lea */ public class DelayQueue extends AbstractQueue implements BlockingQueue { private transient final Object lock = new Object(); private final PriorityQueue q = new PriorityQueue(); /** * Creates a new DelayQueue that is initially empty. */ public DelayQueue() {} /** * Creates a DelayQueue initially containing the elements of the * given collection of {@link Delayed} instances. * * @param c the collection of elements to initially contain * @throws NullPointerException if the specified collection or any * of its elements are null */ public DelayQueue(Collection c) { this.addAll(c); } /** * Inserts the specified element into this delay queue. * * @param e the element to add * @return true (as specified by {@link Collection#add}) * @throws NullPointerException if the specified element is null */ public boolean add(Object e) { return offer(e); } /** * Inserts the specified element into this delay queue. * * @param e the element to add * @return true * @throws NullPointerException if the specified element is null */ public boolean offer(Object e) { synchronized (lock) { Object first = q.peek(); q.offer(e); if (first == null || ((Delayed)e).compareTo(first) < 0) lock.notifyAll(); return true; } } /** * Inserts the specified element into this delay queue. As the queue is * unbounded this method will never block. * * @param e the element to add * @throws NullPointerException {@inheritDoc} */ public void put(Object e) { offer(e); } /** * Inserts the specified element into this delay queue. As the queue is * unbounded this method will never block. * * @param e the element to add * @param timeout This parameter is ignored as the method never blocks * @param unit This parameter is ignored as the method never blocks * @return true * @throws NullPointerException {@inheritDoc} */ public boolean offer(Object e, long timeout, TimeUnit unit) { return offer(e); } /** * Retrieves and removes the head of this queue, or returns null * if this queue has no elements with an expired delay. * * @return the head of this queue, or null if this * queue has no elements with an expired delay */ public Object poll() { synchronized (lock) { Object first = q.peek(); if (first == null || ((Delayed)first).getDelay(TimeUnit.NANOSECONDS) > 0) return null; else { Object x = q.poll(); assert x != null; if (q.size() != 0) lock.notifyAll(); return x; } } } /** * Retrieves and removes the head of this queue, waiting if necessary * until an element with an expired delay is available on this queue. * * @return the head of this queue * @throws InterruptedException {@inheritDoc} */ public Object take() throws InterruptedException { synchronized (lock) { for (;;) { Object first = q.peek(); if (first == null) { lock.wait(); } else { long delay = ((Delayed)first).getDelay(TimeUnit.NANOSECONDS); if (delay > 0) { TimeUnit.NANOSECONDS.timedWait(lock, delay); } else { Object x = q.poll(); assert x != null; if (q.size() != 0) lock.notifyAll(); // wake up other takers return x; } } } } } /** * Retrieves and removes the head of this queue, waiting if necessary * until an element with an expired delay is available on this queue, * or the specified wait time expires. * * @return the head of this queue, or null if the * specified waiting time elapses before an element with * an expired delay becomes available * @throws InterruptedException {@inheritDoc} */ public Object poll(long timeout, TimeUnit unit) throws InterruptedException { long nanos = unit.toNanos(timeout); long deadline = Utils.nanoTime() + nanos; synchronized (lock) { for (;;) { Object first = q.peek(); if (first == null) { if (nanos <= 0) return null; else { TimeUnit.NANOSECONDS.timedWait(lock, nanos); nanos = deadline - Utils.nanoTime(); } } else { long delay = ((Delayed)first).getDelay(TimeUnit.NANOSECONDS); if (delay > 0) { if (nanos <= 0) return null; if (delay > nanos) delay = nanos; TimeUnit.NANOSECONDS.timedWait(lock, delay); nanos = deadline - Utils.nanoTime(); } else { Object x = q.poll(); assert x != null; if (q.size() != 0) lock.notifyAll(); return x; } } } } } /** * Retrieves, but does not remove, the head of this queue, or * returns null if this queue is empty. Unlike * poll, if no expired elements are available in the queue, * this method returns the element that will expire next, * if one exists. * * @return the head of this queue, or null if this * queue is empty. */ public Object peek() { synchronized (lock) { return q.peek(); } } public int size() { synchronized (lock) { return q.size(); } } /** * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public int drainTo(Collection c) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); synchronized (lock) { int n = 0; for (;;) { Object first = q.peek(); if (first == null || ((Delayed)first).getDelay(TimeUnit.NANOSECONDS) > 0) break; c.add(q.poll()); ++n; } if (n > 0) lock.notifyAll(); return n; } } /** * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public int drainTo(Collection c, int maxElements) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); if (maxElements <= 0) return 0; synchronized (lock) { int n = 0; while (n < maxElements) { Object first = q.peek(); if (first == null || ((Delayed)first).getDelay(TimeUnit.NANOSECONDS) > 0) break; c.add(q.poll()); ++n; } if (n > 0) lock.notifyAll(); return n; } } /** * Atomically removes all of the elements from this delay queue. * The queue will be empty after this call returns. * Elements with an unexpired delay are not waited for; they are * simply discarded from the queue. */ public void clear() { synchronized (lock) { q.clear(); } } /** * Always returns Integer.MAX_VALUE because * a DelayQueue is not capacity constrained. * * @return Integer.MAX_VALUE */ public int remainingCapacity() { return Integer.MAX_VALUE; } /** * Returns an array containing all of the elements in this queue. * The returned array elements are in no particular order. * *

The returned array will be "safe" in that no references to it are * maintained by this queue. (In other words, this method must allocate * a new array). The caller is thus free to modify the returned array. * *

This method acts as bridge between array-based and collection-based * APIs. * * @return an array containing all of the elements in this queue */ public Object[] toArray() { synchronized (lock) { return q.toArray(); } } /** * Returns an array containing all of the elements in this queue; the * runtime type of the returned array is that of the specified array. * The returned array elements are in no particular order. * If the queue fits in the specified array, it is returned therein. * Otherwise, a new array is allocated with the runtime type of the * specified array and the size of this queue. * *

If this queue fits in the specified array with room to spare * (i.e., the array has more elements than this queue), the element in * the array immediately following the end of the queue is set to * null. * *

Like the {@link #toArray()} method, this method acts as bridge between * array-based and collection-based APIs. Further, this method allows * precise control over the runtime type of the output array, and may, * under certain circumstances, be used to save allocation costs. * *

The following code can be used to dump a delay queue into a newly * allocated array of Delayed: * *

     *     Delayed[] a = q.toArray(new Delayed[0]);
* * Note that toArray(new Object[0]) is identical in function to * toArray(). * * @param a the array into which the elements of the queue are to * be stored, if it is big enough; otherwise, a new array of the * same runtime type is allocated for this purpose * @return an array containing all of the elements in this queue * @throws ArrayStoreException if the runtime type of the specified array * is not a supertype of the runtime type of every element in * this queue * @throws NullPointerException if the specified array is null */ public Object[] toArray(Object[] a) { synchronized (lock) { return q.toArray(a); } } /** * Removes a single instance of the specified element from this * queue, if it is present, whether or not it has expired. */ public boolean remove(Object o) { synchronized (lock) { return q.remove(o); } } /** * Returns an iterator over all the elements (both expired and * unexpired) in this queue. The iterator does not return the * elements in any particular order. The returned * Iterator is a "weakly consistent" iterator that will * never throw {@link java.util.ConcurrentModificationException}, and * guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed * to) reflect any modifications subsequent to construction. * * @return an iterator over the elements in this queue */ public Iterator iterator() { return new Itr(toArray()); } /** * Snapshot iterator that works off copy of underlying q array. */ private class Itr implements Iterator { final Object[] array; // Array of all elements int cursor; // index of next element to return; int lastRet; // index of last element, or -1 if no such Itr(Object[] array) { lastRet = -1; this.array = array; } public boolean hasNext() { return cursor < array.length; } public Object next() { if (cursor >= array.length) throw new NoSuchElementException(); lastRet = cursor; return array[cursor++]; } public void remove() { if (lastRet < 0) throw new IllegalStateException(); Object x = array[lastRet]; lastRet = -1; // Traverse underlying queue to find == element, // not just a .equals element. synchronized (lock) { for (Iterator it = q.iterator(); it.hasNext(); ) { if (it.next() == x) { it.remove(); return; } } } } } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/Exchanger.java0000644001750700037720000002235210346115771032331 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.*; // for javadoc (till 6280605 is fixed) import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; /** * A synchronization point at which threads can pair and swap elements * within pairs. Each thread presents some object on entry to the * {@link #exchange exchange} method, matches with a partner thread, * and receives its partner's object on return. * *

Sample Usage: * Here are the highlights of a class that uses an {@code Exchanger} * to swap buffers between threads so that the thread filling the * buffer gets a freshly emptied one when it needs it, handing off the * filled one to the thread emptying the buffer. *

{@code
 * class FillAndEmpty {
 *   Exchanger exchanger = new Exchanger();
 *   DataBuffer initialEmptyBuffer = ... a made-up type
 *   DataBuffer initialFullBuffer = ...
 *
 *   class FillingLoop implements Runnable {
 *     public void run() {
 *       DataBuffer currentBuffer = initialEmptyBuffer;
 *       try {
 *         while (currentBuffer != null) {
 *           addToBuffer(currentBuffer);
 *           if (currentBuffer.isFull())
 *             currentBuffer = exchanger.exchange(currentBuffer);
 *         }
 *       } catch (InterruptedException ex) { ... handle ... }
 *     }
 *   }
 *
 *   class EmptyingLoop implements Runnable {
 *     public void run() {
 *       DataBuffer currentBuffer = initialFullBuffer;
 *       try {
 *         while (currentBuffer != null) {
 *           takeFromBuffer(currentBuffer);
 *           if (currentBuffer.isEmpty())
 *             currentBuffer = exchanger.exchange(currentBuffer);
 *         }
 *       } catch (InterruptedException ex) { ... handle ...}
 *     }
 *   }
 *
 *   void start() {
 *     new Thread(new FillingLoop()).start();
 *     new Thread(new EmptyingLoop()).start();
 *   }
 * }
 * }
* *

Memory consistency effects: For each pair of threads that * successfully exchange objects via an {@code Exchanger}, actions * prior to the {@code exchange()} in each thread * happen-before * those subsequent to a return from the corresponding {@code exchange()} * in the other thread. * * @since 1.5 * @author Doug Lea and Bill Scherer and Michael Scott */ public class Exchanger { private final Object lock = new Object(); /** Holder for the item being exchanged */ private Object item; /** * Arrival count transitions from 0 to 1 to 2 then back to 0 * during an exchange. */ private int arrivalCount; /** * Main exchange function, handling the different policy variants. */ private Object doExchange(Object x, boolean timed, long nanos) throws InterruptedException, TimeoutException { synchronized (lock) { Object other; long deadline = timed ? Utils.nanoTime() + nanos : 0; // If arrival count already at two, we must wait for // a previous pair to finish and reset the count; while (arrivalCount == 2) { if (!timed) lock.wait(); else if (nanos > 0) { TimeUnit.NANOSECONDS.timedWait(lock, nanos); nanos = deadline - Utils.nanoTime(); } else throw new TimeoutException(); } int count = ++arrivalCount; // If item is already waiting, replace it and signal other thread if (count == 2) { other = item; item = x; lock.notifyAll(); return other; } // Otherwise, set item and wait for another thread to // replace it and signal us. item = x; InterruptedException interrupted = null; try { while (arrivalCount != 2) { if (!timed) lock.wait(); else if (nanos > 0) { TimeUnit.NANOSECONDS.timedWait(lock, nanos); nanos = deadline - Utils.nanoTime(); } else break; // timed out } } catch (InterruptedException ie) { interrupted = ie; } // Get and reset item and count after the wait. // (We need to do this even if wait was aborted.) other = item; item = null; count = arrivalCount; arrivalCount = 0; lock.notifyAll(); // If the other thread replaced item, then we must // continue even if cancelled. if (count == 2) { if (interrupted != null) Thread.currentThread().interrupt(); return other; } // If no one is waiting for us, we can back out if (interrupted != null) throw interrupted; else // must be timeout throw new TimeoutException(); } } /** * Creates a new Exchanger. **/ public Exchanger() { } /** * Waits for another thread to arrive at this exchange point (unless * it is {@link Thread#interrupt interrupted}), * and then transfers the given object to it, receiving its object * in return. * *

If another thread is already waiting at the exchange point then * it is resumed for thread scheduling purposes and receives the object * passed in by the current thread. The current thread returns immediately, * receiving the object passed to the exchange by that other thread. * *

If no other thread is already waiting at the exchange then the * current thread is disabled for thread scheduling purposes and lies * dormant until one of two things happens: *

    *
  • Some other thread enters the exchange; or *
  • Some other thread {@link Thread#interrupt interrupts} the current * thread. *
*

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@link Thread#interrupt interrupted} while waiting * for the exchange, *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * * @param x the object to exchange * @return the object provided by the other thread * @throws InterruptedException if the current thread was * interrupted while waiting */ public Object exchange(Object x) throws InterruptedException { try { return doExchange(x, false, 0); } catch (TimeoutException cannotHappen) { throw new Error(cannotHappen); } } /** * Waits for another thread to arrive at this exchange point (unless * the current thread is {@link Thread#interrupt interrupted} or * the specified waiting time elapses), and then transfers the given * object to it, receiving its object in return. * *

If another thread is already waiting at the exchange point then * it is resumed for thread scheduling purposes and receives the object * passed in by the current thread. The current thread returns immediately, * receiving the object passed to the exchange by that other thread. * *

If no other thread is already waiting at the exchange then the * current thread is disabled for thread scheduling purposes and lies * dormant until one of three things happens: *

    *
  • Some other thread enters the exchange; or *
  • Some other thread {@link Thread#interrupt interrupts} the current * thread; or *
  • The specified waiting time elapses. *
*

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@link Thread#interrupt interrupted} while waiting * for the exchange, *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * *

If the specified waiting time elapses then {@link TimeoutException} * is thrown. * If the time is * less than or equal to zero, the method will not wait at all. * * @param x the object to exchange * @param timeout the maximum time to wait * @param unit the time unit of the timeout argument * @return the object provided by the other thread * @throws InterruptedException if the current thread was * interrupted while waiting * @throws TimeoutException if the specified waiting time elapses * before another thread enters the exchange */ public Object exchange(Object x, long timeout, TimeUnit unit) throws InterruptedException, TimeoutException { return doExchange(x, true, unit.toNanos(timeout)); } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/Delayed.java0000644001750700037720000000160610431260156031764 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * A mix-in style interface for marking objects that should be * acted upon after a given delay. * *

An implementation of this interface must define a * compareTo method that provides an ordering consistent with * its getDelay method. * * @since 1.5 * @author Doug Lea */ public interface Delayed extends Comparable { /** * Returns the remaining delay associated with this object, in the * given time unit. * * @param unit the time unit * @return the remaining delay; zero or negative values indicate * that the delay has already elapsed */ long getDelay(TimeUnit unit); } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/AbstractExecutorService.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/AbstractExecutor0000644001750700037720000002434710522556530032773 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; import java.util.Collection; import java.util.ArrayList; import java.util.List; import java.util.Iterator; /** * Provides default implementations of {@link ExecutorService} * execution methods. This class implements the submit, * invokeAny and invokeAll methods using a * {@link RunnableFuture} returned by newTaskFor, which defaults * to the {@link FutureTask} class provided in this package. For example, * the implementation of submit(Runnable) creates an * associated RunnableFuture that is executed and * returned. Subclasses may override the newTaskFor methods * to return RunnableFuture implementations other than * FutureTask. * *

Extension example. Here is a sketch of a class * that customizes {@link ThreadPoolExecutor} to use * a CustomTask class instead of the default FutureTask: *

 * public class CustomThreadPoolExecutor extends ThreadPoolExecutor {
 *
 *   static class CustomTask<V> implements RunnableFuture<V> {...}
 *
 *   protected <V> RunnableFuture<V> newTaskFor(Callable<V> c) {
 *       return new CustomTask<V>(c);
 *   }
 *   protected <V> RunnableFuture<V> newTaskFor(Runnable r, V v) {
 *       return new CustomTask<V>(r, v);
 *   }
 *   // ... add constructors, etc.
 * }
 * 
* @since 1.5 * @author Doug Lea */ public abstract class AbstractExecutorService implements ExecutorService { /** * Returns a RunnableFuture for the given runnable and default * value. * * @param runnable the runnable task being wrapped * @param value the default value for the returned future * @return a RunnableFuture which when run will run the * underlying runnable and which, as a Future, will yield * the given value as its result and provide for cancellation of * the underlying task. * @since 1.6 */ protected RunnableFuture newTaskFor(Runnable runnable, Object value) { return new FutureTask(runnable, value); } /** * Returns a RunnableFuture for the given callable task. * * @param callable the callable task being wrapped * @return a RunnableFuture which when run will call the * underlying callable and which, as a Future, will yield * the callable's result as its result and provide for * cancellation of the underlying task. * @since 1.6 */ protected RunnableFuture newTaskFor(Callable callable) { return new FutureTask(callable); } /** * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public Future submit(Runnable task) { if (task == null) throw new NullPointerException(); RunnableFuture ftask = newTaskFor(task, null); execute(ftask); return ftask; } /** * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public Future submit(Runnable task, Object result) { if (task == null) throw new NullPointerException(); RunnableFuture ftask = newTaskFor(task, result); execute(ftask); return ftask; } /** * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public Future submit(Callable task) { if (task == null) throw new NullPointerException(); RunnableFuture ftask = newTaskFor(task); execute(ftask); return ftask; } /** * the main mechanics of invokeAny. */ private Object doInvokeAny(Collection tasks, boolean timed, long nanos) throws InterruptedException, ExecutionException, TimeoutException { if (tasks == null) throw new NullPointerException(); int ntasks = tasks.size(); if (ntasks == 0) throw new IllegalArgumentException(); List futures= new ArrayList(ntasks); ExecutorCompletionService ecs = new ExecutorCompletionService(this); // For efficiency, especially in executors with limited // parallelism, check to see if previously submitted tasks are // done before submitting more of them. This interleaving // plus the exception mechanics account for messiness of main // loop. try { // Record exceptions so that if we fail to obtain any // result, we can throw the last exception we got. ExecutionException ee = null; long lastTime = (timed)? Utils.nanoTime() : 0; Iterator it = tasks.iterator(); // Start one task for sure; the rest incrementally futures.add(ecs.submit((Callable)it.next())); --ntasks; int active = 1; for (;;) { Future f = ecs.poll(); if (f == null) { if (ntasks > 0) { --ntasks; futures.add(ecs.submit((Callable)it.next())); ++active; } else if (active == 0) break; else if (timed) { f = ecs.poll(nanos, TimeUnit.NANOSECONDS); if (f == null) throw new TimeoutException(); long now = Utils.nanoTime(); nanos -= now - lastTime; lastTime = now; } else f = ecs.take(); } if (f != null) { --active; try { return f.get(); } catch (InterruptedException ie) { throw ie; } catch (ExecutionException eex) { ee = eex; } catch (RuntimeException rex) { ee = new ExecutionException(rex); } } } if (ee == null) ee = new ExecutionException(); throw ee; } finally { for (Iterator f = futures.iterator(); f.hasNext();) ((Future)f.next()).cancel(true); } } public Object invokeAny(Collection tasks) throws InterruptedException, ExecutionException { try { return doInvokeAny(tasks, false, 0); } catch (TimeoutException cannotHappen) { assert false; return null; } } public Object invokeAny(Collection tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { return doInvokeAny(tasks, true, unit.toNanos(timeout)); } public List invokeAll(Collection tasks) throws InterruptedException { if (tasks == null) throw new NullPointerException(); List futures = new ArrayList(tasks.size()); boolean done = false; try { for (Iterator t = tasks.iterator(); t.hasNext();) { RunnableFuture f = newTaskFor((Callable)t.next()); futures.add(f); execute(f); } for (Iterator i = futures.iterator(); i.hasNext();) { Future f = (Future) i.next(); if (!f.isDone()) { try { f.get(); } catch (CancellationException ignore) { } catch (ExecutionException ignore) { } } } done = true; return futures; } finally { if (!done) for (Iterator i = futures.iterator(); i.hasNext();) { Future f = (Future) i.next(); f.cancel(true); } } } public List invokeAll(Collection tasks, long timeout, TimeUnit unit) throws InterruptedException { if (tasks == null || unit == null) throw new NullPointerException(); long nanos = unit.toNanos(timeout); List futures = new ArrayList(tasks.size()); boolean done = false; try { for (Iterator t = tasks.iterator(); t.hasNext();) futures.add(newTaskFor((Callable)t.next())); long lastTime = Utils.nanoTime(); // Interleave time checks and calls to execute in case // executor doesn't have any/much parallelism. Iterator it = futures.iterator(); while (it.hasNext()) { execute((Runnable)(it.next())); long now = Utils.nanoTime(); nanos -= (now - lastTime); lastTime = now; if (nanos <= 0) return futures; } for (Iterator i = futures.iterator(); i.hasNext();) { Future f = (Future)i.next(); if (!f.isDone()) { if (nanos <= 0) return futures; try { f.get(nanos, TimeUnit.NANOSECONDS); } catch (CancellationException ignore) { } catch (ExecutionException ignore) { } catch (TimeoutException toe) { return futures; } long now = Utils.nanoTime(); nanos -= now - lastTime; lastTime = now; } } done = true; return futures; } finally { if (!done) for (Iterator i = futures.iterator(); i.hasNext();) { Future f = (Future) i.next(); f.cancel(true); } } } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/BrokenBarrierException.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/BrokenBarrierExc0000644001750700037720000000175110153210664032665 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * Exception thrown when a thread tries to wait upon a barrier that is * in a broken state, or which enters the broken state while the thread * is waiting. * * @see CyclicBarrier * * @since 1.5 * @author Doug Lea * */ public class BrokenBarrierException extends Exception { private static final long serialVersionUID = 7117394618823254244L; /** * Constructs a BrokenBarrierException with no specified detail * message. */ public BrokenBarrierException() {} /** * Constructs a BrokenBarrierException with the specified * detail message. * * @param message the detail message */ public BrokenBarrierException(String message) { super(message); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/TimeoutException.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/TimeoutException0000644001750700037720000000217610153210664033005 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * Exception thrown when a blocking operation times out. Blocking * operations for which a timeout is specified need a means to * indicate that the timeout has occurred. For many such operations it * is possible to return a value that indicates timeout; when that is * not possible or desirable then TimeoutException should be * declared and thrown. * * @since 1.5 * @author Doug Lea */ public class TimeoutException extends Exception { private static final long serialVersionUID = 1900926677490660714L; /** * Constructs a TimeoutException with no specified detail * message. */ public TimeoutException() {} /** * Constructs a TimeoutException with the specified detail * message. * * @param message the detail message */ public TimeoutException(String message) { super(message); } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/Future.java0000644001750700037720000001303510431774517031701 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.*; // for javadoc (till 6280605 is fixed) /** * A Future represents the result of an asynchronous * computation. Methods are provided to check if the computation is * complete, to wait for its completion, and to retrieve the result of * the computation. The result can only be retrieved using method * get when the computation has completed, blocking if * necessary until it is ready. Cancellation is performed by the * cancel method. Additional methods are provided to * determine if the task completed normally or was cancelled. Once a * computation has completed, the computation cannot be cancelled. * If you would like to use a Future for the sake * of cancellability but not provide a usable result, you can * declare types of the form Future<?> and * return null as a result of the underlying task. * *

* Sample Usage (Note that the following classes are all * made-up.)

*

 * interface ArchiveSearcher { String search(String target); }
 * class App {
 *   ExecutorService executor = ...
 *   ArchiveSearcher searcher = ...
 *   void showSearch(final String target)
 *       throws InterruptedException {
 *     Future<String> future
 *       = executor.submit(new Callable<String>() {
 *         public String call() {
 *             return searcher.search(target);
 *         }});
 *     displayOtherThings(); // do other things while searching
 *     try {
 *       displayText(future.get()); // use future
 *     } catch (ExecutionException ex) { cleanup(); return; }
 *   }
 * }
 * 
* * The {@link FutureTask} class is an implementation of Future that * implements Runnable, and so may be executed by an Executor. * For example, the above construction with submit could be replaced by: *
 *     FutureTask<String> future =
 *       new FutureTask<String>(new Callable<String>() {
 *         public String call() {
 *           return searcher.search(target);
 *       }});
 *     executor.execute(future);
 * 
* *

Memory consistency effects: Actions taken by the asynchronous computation * happen-before * actions following the corresponding {@code Future.get()} in another thread. * * @see FutureTask * @see Executor * @since 1.5 * @author Doug Lea */ public interface Future { /** * Attempts to cancel execution of this task. This attempt will * fail if the task has already completed, has already been cancelled, * or could not be cancelled for some other reason. If successful, * and this task has not started when cancel is called, * this task should never run. If the task has already started, * then the mayInterruptIfRunning parameter determines * whether the thread executing this task should be interrupted in * an attempt to stop the task. * *

After this method returns, subsequent calls to {@link #isDone} will * always return true. Subsequent calls to {@link #isCancelled} * will always return true if this method returned true. * * @param mayInterruptIfRunning true if the thread executing this * task should be interrupted; otherwise, in-progress tasks are allowed * to complete * @return false if the task could not be cancelled, * typically because it has already completed normally; * true otherwise */ boolean cancel(boolean mayInterruptIfRunning); /** * Returns true if this task was cancelled before it completed * normally. * * @return true if this task was cancelled before it completed */ boolean isCancelled(); /** * Returns true if this task completed. * * Completion may be due to normal termination, an exception, or * cancellation -- in all of these cases, this method will return * true. * * @return true if this task completed */ boolean isDone(); /** * Waits if necessary for the computation to complete, and then * retrieves its result. * * @return the computed result * @throws CancellationException if the computation was cancelled * @throws ExecutionException if the computation threw an * exception * @throws InterruptedException if the current thread was interrupted * while waiting */ Object get() throws InterruptedException, ExecutionException; /** * Waits if necessary for at most the given time for the computation * to complete, and then retrieves its result, if available. * * @param timeout the maximum time to wait * @param unit the time unit of the timeout argument * @return the computed result * @throws CancellationException if the computation was cancelled * @throws ExecutionException if the computation threw an * exception * @throws InterruptedException if the current thread was interrupted * while waiting * @throws TimeoutException if the wait timed out */ Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException; } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/package.html0000755001750700037720000002621410342377271032050 0ustar dawidkdcl Concurrency Utilities

Utility classes commonly useful in concurrent programming. This package includes a few small standardized extensible frameworks, as well as some classes that provide useful functionality and are otherwise tedious or difficult to implement. Here are brief descriptions of the main components. See also the locks and atomic packages.

Executors

Interfaces. {@link edu.emory.mathcs.backport.java.util.concurrent.Executor} is a simple standardized interface for defining custom thread-like subsystems, including thread pools, asynchronous IO, and lightweight task frameworks. Depending on which concrete Executor class is being used, tasks may execute in a newly created thread, an existing task-execution thread, or the thread calling execute(), and may execute sequentially or concurrently. {@link edu.emory.mathcs.backport.java.util.concurrent.ExecutorService} provides a more complete asynchronous task execution framework. An ExecutorService manages queuing and scheduling of tasks, and allows controlled shutdown. The {@link edu.emory.mathcs.backport.java.util.concurrent.ScheduledExecutorService} subinterface and associated interfaces add support for delayed and periodic task execution. ExecutorServices provide methods arranging asynchronous execution of any function expressed as {@link edu.emory.mathcs.backport.java.util.concurrent.Callable}, the result-bearing analog of {@link java.lang.Runnable}. A {@link edu.emory.mathcs.backport.java.util.concurrent.Future} returns the results of a function, allows determination of whether execution has completed, and provides a means to cancel execution. A {@link edu.emory.mathcs.backport.java.util.concurrent.RunnableFuture} is a Future that possesses a run method that upon execution, sets its results.

Implementations. Classes {@link edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor} and {@link edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecutor} provide tunable, flexible thread pools. The {@link edu.emory.mathcs.backport.java.util.concurrent.Executors} class provides factory methods for the most common kinds and configurations of Executors, as well as a few utility methods for using them. Other utilities based on Executors include the concrete class {@link edu.emory.mathcs.backport.java.util.concurrent.FutureTask} providing a common extensible implementation of Futures, and {@link edu.emory.mathcs.backport.java.util.concurrent.ExecutorCompletionService}, that assists in coordinating the processing of groups of asynchronous tasks.

Queues

The edu.emory.mathcs.backport.java.util.concurrent {@link edu.emory.mathcs.backport.java.util.concurrent.ConcurrentLinkedQueue} class supplies an efficient scalable thread-safe non-blocking FIFO queue. Five implementations in edu.emory.mathcs.backport.java.util.concurrent support the extended {@link edu.emory.mathcs.backport.java.util.concurrent.BlockingQueue} interface, that defines blocking versions of put and take: {@link edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue}, {@link edu.emory.mathcs.backport.java.util.concurrent.ArrayBlockingQueue}, {@link edu.emory.mathcs.backport.java.util.concurrent.SynchronousQueue}, {@link edu.emory.mathcs.backport.java.util.concurrent.PriorityBlockingQueue}, and {@link edu.emory.mathcs.backport.java.util.concurrent.DelayQueue}. The different classes cover the most common usage contexts for producer-consumer, messaging, parallel tasking, and related concurrent designs. The {@link edu.emory.mathcs.backport.java.util.concurrent.BlockingDeque} interface extends BlockingQueue to support both FIFO and LIFO (stack-based) operations. Class {@link edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingDeque} provides an implementation.

Timing

The {@link edu.emory.mathcs.backport.java.util.concurrent.TimeUnit} class provides multiple granularities (including nanoseconds) for specifying and controlling time-out based operations. Most classes in the package contain operations based on time-outs in addition to indefinite waits. In all cases that time-outs are used, the time-out specifies the minimum time that the method should wait before indicating that it timed-out. Implementations make a "best effort" to detect time-outs as soon as possible after they occur. However, an indefinite amount of time may elapse between a time-out being detected and a thread actually executing again after that time-out. All methods that accept timeout parameters treat values less than or equal to zero to mean not to wait at all. To wait "forever", you can use a value of Long.MAX_VALUE.

Synchronizers

Four classes aid common special-purpose synchronization idioms. {@link edu.emory.mathcs.backport.java.util.concurrent.Semaphore} is a classic concurrency tool. {@link edu.emory.mathcs.backport.java.util.concurrent.CountDownLatch} is a very simple yet very common utility for blocking until a given number of signals, events, or conditions hold. A {@link edu.emory.mathcs.backport.java.util.concurrent.CyclicBarrier} is a resettable multiway synchronization point useful in some styles of parallel programming. An {@link edu.emory.mathcs.backport.java.util.concurrent.Exchanger} allows two threads to exchange objects at a rendezvous point, and is useful in several pipeline designs.

Concurrent Collections

Besides Queues, this package supplies Collection implementations designed for use in multithreaded contexts: {@link edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap}, {@link edu.emory.mathcs.backport.java.util.concurrent.ConcurrentSkipListMap}, {@link edu.emory.mathcs.backport.java.util.concurrent.ConcurrentSkipListSet}, {@link edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArrayList}, and {@link edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArraySet}. When many threads are expected to access a given collection, a ConcurrentHashMap is normally preferable to a synchronized HashMap, and a ConcurrentSkipListMap is normally preferable to a synchronized TreeMap. A CopyOnWriteArrayList is preferable to a synchronized ArrayList when the expected number of reads and traversals greatly outnumber the number of updates to a list.

The "Concurrent" prefix used with some classes in this package is a shorthand indicating several differences from similar "synchronized" classes. For example java.util.Hashtable and Collections.synchronizedMap(new HashMap()) are synchronized. But {@link edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap} is "concurrent". A concurrent collection is thread-safe, but not governed by a single exclusion lock. In the particular case of ConcurrentHashMap, it safely permits any number of concurrent reads as well as a tunable number of concurrent writes. "Synchronized" classes can be useful when you need to prevent all access to a collection via a single lock, at the expense of poorer scalability. In other cases in which multiple threads are expected to access a common collection, "concurrent" versions are normally preferable. And unsynchronized collections are preferable when either collections are unshared, or are accessible only when holding other locks.

Most concurrent Collection implementations (including most Queues) also differ from the usual java.util conventions in that their Iterators provide weakly consistent rather than fast-fail traversal. A weakly consistent iterator is thread-safe, but does not necessarily freeze the collection while iterating, so it may (or may not) reflect any updates since the iterator was created.

Memory Consistency Properties

Chapter 17 of the Java Language Specification defines the happens-before relation on memory operations such as reads and writes of shared variables. The results of a write by one thread are guaranteed to be visible to a read by another thread only if the write operation happens-before the read operation. The {@code synchronized} and {@code volatile} constructs, as well as the {@code Thread.start()} and {@code Thread.join()} methods, can form happens-before relationships. In particular:
  • Each action in a thread happens-before every action in that thread that comes later in the program's order.
  • An unlock ({@code synchronized} block or method exit) of a monitor happens-before every subsequent lock ({@code synchronized} block or method entry) of that same monitor. And because the happens-before relation is transitive, all actions of a thread prior to unlocking happen-before all actions subsequent to any thread locking that monitor.
  • A write to a {@code volatile} field happens-before every subsequent read of that same field. Writes and reads of {@code volatile} fields have similar memory consistency effects as entering and exiting monitors, but do not entail mutual exclusion locking.
  • A call to {@code start} on a thread happens-before any action in the started thread.
  • All actions in a thread happen-before any other thread successfully returns from a {@code join} on that thread.
The methods of all classes in {@code edu.emory.mathcs.backport.java.util.concurrent} and its subpackages extend these guarantees to higher-level synchronization. In particular:
  • Actions in a thread prior to placing an object into any concurrent collection happen-before actions subsequent to the access or removal of that element from the collection in another thread.
  • Actions in a thread prior to the submission of a {@code Runnable} to an {@code Executor} happen-before its execution begins. Similarly for {@code Callables} submitted to an {@code ExecutorService}.
  • Actions taken by the asynchronous computation represented by a {@code Future} happen-before actions subsequent to the retrieval of the result via {@code Future.get()} in another thread.
  • Actions prior to "releasing" synchronizer methods such as {@code Lock.unlock}, {@code Semaphore.release}, and {@code CountDownLatch.countDown} happen-before actions subsequent to a successful "acquiring" method such as {@code Lock.lock}, {@code Semaphore.acquire}, {@code Condition.await}, and {@code CountDownLatch.await} on the same synchronizer object in another thread.
  • For each pair of threads that successfully exchange objects via an {@code Exchanger}, actions prior to the {@code exchange()} in each thread happen-before those subsequent to the corresponding {@code exchange()} in another thread.
  • Actions prior to calling {@code CyclicBarrier.await} happen-before actions performed by the barrier action, and actions performed by the barrier action happen-before actions subsequent to a successful return from the corresponding {@code await} in other threads.
@since 1.5 ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/RejectedExecutionHandler.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/RejectedExecutio0000644001750700037720000000227110461021764032732 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * A handler for tasks that cannot be executed by a {@link ThreadPoolExecutor}. * * @since 1.5 * @author Doug Lea */ public interface RejectedExecutionHandler { /** * Method that may be invoked by a {@link ThreadPoolExecutor} when * {@link ThreadPoolExecutor#execute execute} cannot accept a * task. This may occur when no more threads or queue slots are * available because their bounds would be exceeded, or upon * shutdown of the Executor. * *

In the absence of other alternatives, the method may throw * an unchecked {@link RejectedExecutionException}, which will be * propagated to the caller of {@code execute}. * * @param r the runnable task requested to be executed * @param executor the executor attempting to execute this task * @throws RejectedExecutionException if there is no remedy */ void rejectedExecution(Runnable r, ThreadPoolExecutor executor); } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/CompletionService.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/CompletionServic0000644001750700037720000000770210342377271032775 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * A service that decouples the production of new asynchronous tasks * from the consumption of the results of completed tasks. Producers * submit tasks for execution. Consumers take * completed tasks and process their results in the order they * complete. A CompletionService can for example be used to * manage asynchronous IO, in which tasks that perform reads are * submitted in one part of a program or system, and then acted upon * in a different part of the program when the reads complete, * possibly in a different order than they were requested. * *

Typically, a CompletionService relies on a separate * {@link Executor} to actually execute the tasks, in which case the * CompletionService only manages an internal completion * queue. The {@link ExecutorCompletionService} class provides an * implementation of this approach. * *

Memory consistency effects: Actions in a thread prior to * submitting a task to a {@code CompletionService} * happen-before * actions taken by that task, which in turn happen-before * actions following a successful return from the corresponding {@code take()}. * */ public interface CompletionService { /** * Submits a value-returning task for execution and returns a Future * representing the pending results of the task. Upon completion, * this task may be taken or polled. * * @param task the task to submit * @return a Future representing pending completion of the task * @throws RejectedExecutionException if the task cannot be * scheduled for execution * @throws NullPointerException if the task is null */ Future submit(Callable task); /** * Submits a Runnable task for execution and returns a Future * representing that task. Upon completion, this task may be * taken or polled. * * @param task the task to submit * @param result the result to return upon successful completion * @return a Future representing pending completion of the task, * and whose get() method will return the given * result value upon completion * @throws RejectedExecutionException if the task cannot be * scheduled for execution * @throws NullPointerException if the task is null */ Future submit(Runnable task, Object result); /** * Retrieves and removes the Future representing the next * completed task, waiting if none are yet present. * * @return the Future representing the next completed task * @throws InterruptedException if interrupted while waiting */ Future take() throws InterruptedException; /** * Retrieves and removes the Future representing the next * completed task or null if none are present. * * @return the Future representing the next completed task, or * null if none are present */ Future poll(); /** * Retrieves and removes the Future representing the next * completed task, waiting if necessary up to the specified wait * time if none are yet present. * * @param timeout how long to wait before giving up, in units of * unit * @param unit a TimeUnit determining how to interpret the * timeout parameter * @return the Future representing the next completed task or * null if the specified waiting time elapses * before one is present * @throws InterruptedException if interrupted while waiting */ Future poll(long timeout, TimeUnit unit) throws InterruptedException; } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/CyclicBarrier.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/CyclicBarrier.ja0000644001750700037720000004144710431774517032625 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; /** * A synchronization aid that allows a set of threads to all wait for * each other to reach a common barrier point. CyclicBarriers are * useful in programs involving a fixed sized party of threads that * must occasionally wait for each other. The barrier is called * cyclic because it can be re-used after the waiting threads * are released. * *

A CyclicBarrier supports an optional {@link Runnable} command * that is run once per barrier point, after the last thread in the party * arrives, but before any threads are released. * This barrier action is useful * for updating shared-state before any of the parties continue. * *

Sample usage: Here is an example of * using a barrier in a parallel decomposition design: *

 * class Solver {
 *   final int N;
 *   final float[][] data;
 *   final CyclicBarrier barrier;
 *
 *   class Worker implements Runnable {
 *     int myRow;
 *     Worker(int row) { myRow = row; }
 *     public void run() {
 *       while (!done()) {
 *         processRow(myRow);
 *
 *         try {
 *           barrier.await();
 *         } catch (InterruptedException ex) {
 *           return;
 *         } catch (BrokenBarrierException ex) {
 *           return;
 *         }
 *       }
 *     }
 *   }
 *
 *   public Solver(float[][] matrix) {
 *     data = matrix;
 *     N = matrix.length;
 *     barrier = new CyclicBarrier(N,
 *                                 new Runnable() {
 *                                   public void run() {
 *                                     mergeRows(...);
 *                                   }
 *                                 });
 *     for (int i = 0; i < N; ++i)
 *       new Thread(new Worker(i)).start();
 *
 *     waitUntilDone();
 *   }
 * }
 * 
* Here, each worker thread processes a row of the matrix then waits at the * barrier until all rows have been processed. When all rows are processed * the supplied {@link Runnable} barrier action is executed and merges the * rows. If the merger * determines that a solution has been found then done() will return * true and each worker will terminate. * *

If the barrier action does not rely on the parties being suspended when * it is executed, then any of the threads in the party could execute that * action when it is released. To facilitate this, each invocation of * {@link #await} returns the arrival index of that thread at the barrier. * You can then choose which thread should execute the barrier action, for * example: *

  if (barrier.await() == 0) {
 *     // log the completion of this iteration
 *   }
* *

The CyclicBarrier uses an all-or-none breakage model * for failed synchronization attempts: If a thread leaves a barrier * point prematurely because of interruption, failure, or timeout, all * other threads waiting at that barrier point will also leave * abnormally via {@link BrokenBarrierException} (or * {@link InterruptedException} if they too were interrupted at about * the same time). * *

Memory consistency effects: Actions in a thread prior to calling * {@code await()} * happen-before * actions that are part of the barrier action, which in turn * happen-before actions following a successful return from the * corresponding {@code await()} in other threads. * * @since 1.5 * @see CountDownLatch * * @author Doug Lea */ public class CyclicBarrier { /** * Each use of the barrier is represented as a generation instance. * The generation changes whenever the barrier is tripped, or * is reset. There can be many generations associated with threads * using the barrier - due to the non-deterministic way the lock * may be allocated to waiting threads - but only one of these * can be active at a time (the one to which count applies) * and all the rest are either broken or tripped. * There need not be an active generation if there has been a break * but no subsequent reset. */ private static class Generation { boolean broken = false; } /** The lock for guarding barrier entry */ private final Object lock = new Object(); /** The number of parties */ private final int parties; /* The command to run when tripped */ private final Runnable barrierCommand; /** The current generation */ private Generation generation = new Generation(); /** * Number of parties still waiting. Counts down from parties to 0 * on each generation. It is reset to parties on each new * generation or when broken. */ private int count; /** * Updates state on barrier trip and wakes up everyone. * Called only while holding lock. */ private void nextGeneration() { // signal completion of last generation lock.notifyAll(); // set up next generation count = parties; generation = new Generation(); } /** * Sets current barrier generation as broken and wakes up everyone. * Called only while holding lock. */ private void breakBarrier() { generation.broken = true; count = parties; lock.notifyAll(); } /** * Main barrier code, covering the various policies. */ private int dowait(boolean timed, long nanos) throws InterruptedException, BrokenBarrierException, TimeoutException { synchronized (lock) { final Generation g = generation; if (g.broken) throw new BrokenBarrierException(); if (Thread.interrupted()) { breakBarrier(); throw new InterruptedException(); } int index = --count; if (index == 0) { // tripped boolean ranAction = false; try { final Runnable command = barrierCommand; if (command != null) command.run(); ranAction = true; nextGeneration(); return 0; } finally { if (!ranAction) breakBarrier(); } } // loop until tripped, broken, interrupted, or timed out long deadline = timed ? Utils.nanoTime() + nanos : 0; for (;;) { try { if (!timed) lock.wait(); else if (nanos > 0L) TimeUnit.NANOSECONDS.timedWait(lock, nanos); } catch (InterruptedException ie) { if (g == generation && ! g.broken) { breakBarrier(); throw ie; } else { // We're about to finish waiting even if we had not // been interrupted, so this interrupt is deemed to // "belong" to subsequent execution. Thread.currentThread().interrupt(); } } if (g.broken) throw new BrokenBarrierException(); if (g != generation) return index; if (timed && nanos <= 0L) { breakBarrier(); throw new TimeoutException(); } nanos = deadline - Utils.nanoTime(); } } } /** * Creates a new CyclicBarrier that will trip when the * given number of parties (threads) are waiting upon it, and which * will execute the given barrier action when the barrier is tripped, * performed by the last thread entering the barrier. * * @param parties the number of threads that must invoke {@link #await} * before the barrier is tripped * @param barrierAction the command to execute when the barrier is * tripped, or {@code null} if there is no action * @throws IllegalArgumentException if {@code parties} is less than 1 */ public CyclicBarrier(int parties, Runnable barrierAction) { if (parties <= 0) throw new IllegalArgumentException(); this.parties = parties; this.count = parties; this.barrierCommand = barrierAction; } /** * Creates a new CyclicBarrier that will trip when the * given number of parties (threads) are waiting upon it, and * does not perform a predefined action when the barrier is tripped. * * @param parties the number of threads that must invoke {@link #await} * before the barrier is tripped * @throws IllegalArgumentException if {@code parties} is less than 1 */ public CyclicBarrier(int parties) { this(parties, null); } /** * Returns the number of parties required to trip this barrier. * * @return the number of parties required to trip this barrier */ public int getParties() { return parties; } /** * Waits until all {@linkplain #getParties parties} have invoked * await on this barrier. * *

If the current thread is not the last to arrive then it is * disabled for thread scheduling purposes and lies dormant until * one of the following things happens: *

    *
  • The last thread arrives; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} * the current thread; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} * one of the other waiting threads; or *
  • Some other thread times out while waiting for barrier; or *
  • Some other thread invokes {@link #reset} on this barrier. *
* *

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@linkplain Thread#interrupt interrupted} while waiting *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * *

If the barrier is {@link #reset} while any thread is waiting, * or if the barrier {@linkplain #isBroken is broken} when * await is invoked, or while any thread is waiting, then * {@link BrokenBarrierException} is thrown. * *

If any thread is {@linkplain Thread#interrupt interrupted} while waiting, * then all other waiting threads will throw * {@link BrokenBarrierException} and the barrier is placed in the broken * state. * *

If the current thread is the last thread to arrive, and a * non-null barrier action was supplied in the constructor, then the * current thread runs the action before allowing the other threads to * continue. * If an exception occurs during the barrier action then that exception * will be propagated in the current thread and the barrier is placed in * the broken state. * * @return the arrival index of the current thread, where index * {@link #getParties()} - 1 indicates the first * to arrive and zero indicates the last to arrive * @throws InterruptedException if the current thread was interrupted * while waiting * @throws BrokenBarrierException if another thread was * interrupted or timed out while the current thread was * waiting, or the barrier was reset, or the barrier was * broken when {@code await} was called, or the barrier * action (if present) failed due an exception. */ public int await() throws InterruptedException, BrokenBarrierException { try { return dowait(false, 0L); } catch (TimeoutException toe) { throw new Error(toe); // cannot happen; } } /** * Waits until all {@linkplain #getParties parties} have invoked * await on this barrier, or the specified waiting time elapses. * *

If the current thread is not the last to arrive then it is * disabled for thread scheduling purposes and lies dormant until * one of the following things happens: *

    *
  • The last thread arrives; or *
  • The specified timeout elapses; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} * the current thread; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} * one of the other waiting threads; or *
  • Some other thread times out while waiting for barrier; or *
  • Some other thread invokes {@link #reset} on this barrier. *
* *

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@linkplain Thread#interrupt interrupted} while waiting *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * *

If the specified waiting time elapses then {@link TimeoutException} * is thrown. If the time is less than or equal to zero, the * method will not wait at all. * *

If the barrier is {@link #reset} while any thread is waiting, * or if the barrier {@linkplain #isBroken is broken} when * await is invoked, or while any thread is waiting, then * {@link BrokenBarrierException} is thrown. * *

If any thread is {@linkplain Thread#interrupt interrupted} while * waiting, then all other waiting threads will throw {@link * BrokenBarrierException} and the barrier is placed in the broken * state. * *

If the current thread is the last thread to arrive, and a * non-null barrier action was supplied in the constructor, then the * current thread runs the action before allowing the other threads to * continue. * If an exception occurs during the barrier action then that exception * will be propagated in the current thread and the barrier is placed in * the broken state. * * @param timeout the time to wait for the barrier * @param unit the time unit of the timeout parameter * @return the arrival index of the current thread, where index * {@link #getParties()} - 1 indicates the first * to arrive and zero indicates the last to arrive * @throws InterruptedException if the current thread was interrupted * while waiting * @throws TimeoutException if the specified timeout elapses * @throws BrokenBarrierException if another thread was * interrupted or timed out while the current thread was * waiting, or the barrier was reset, or the barrier was broken * when {@code await} was called, or the barrier action (if * present) failed due an exception */ public int await(long timeout, TimeUnit unit) throws InterruptedException, BrokenBarrierException, TimeoutException { return dowait(true, unit.toNanos(timeout)); } /** * Queries if this barrier is in a broken state. * * @return {@code true} if one or more parties broke out of this * barrier due to interruption or timeout since * construction or the last reset, or a barrier action * failed due to an exception; {@code false} otherwise. */ public boolean isBroken() { synchronized (lock) { return generation.broken; } } /** * Resets the barrier to its initial state. If any parties are * currently waiting at the barrier, they will return with a * {@link BrokenBarrierException}. Note that resets after * a breakage has occurred for other reasons can be complicated to * carry out; threads need to re-synchronize in some other way, * and choose one to perform the reset. It may be preferable to * instead create a new barrier for subsequent use. */ public void reset() { synchronized (lock) { breakBarrier(); // break the current generation nextGeneration(); // start a new generation } } /** * Returns the number of parties currently waiting at the barrier. * This method is primarily useful for debugging and assertions. * * @return the number of parties currently blocked in {@link #await} */ public int getNumberWaiting() { synchronized (lock) { return parties - count; } } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentMap.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentMap.ja0000644001750700037720000001362010461021764032650 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import java.util.Map; /** * A {@link java.util.Map} providing additional atomic * putIfAbsent, remove, and replace methods. * *

Memory consistency effects: As with other concurrent * collections, actions in a thread prior to placing an object into a * {@code ConcurrentMap} as a key or value * happen-before * actions subsequent to the access or removal of that object from * the {@code ConcurrentMap} in another thread. * *

This interface is a member of the * * Java Collections Framework. * * @since 1.5 * @author Doug Lea */ public interface ConcurrentMap extends Map { /** * If the specified key is not already associated * with a value, associate it with the given value. * This is equivalent to *

     *   if (!map.containsKey(key))
     *       return map.put(key, value);
     *   else
     *       return map.get(key);
* except that the action is performed atomically. * * @param key key with which the specified value is to be associated * @param value value to be associated with the specified key * @return the previous value associated with the specified key, or * null if there was no mapping for the key. * (A null return can also indicate that the map * previously associated null with the key, * if the implementation supports null values.) * @throws UnsupportedOperationException if the put operation * is not supported by this map * @throws ClassCastException if the class of the specified key or value * prevents it from being stored in this map * @throws NullPointerException if the specified key or value is null, * and this map does not permit null keys or values * @throws IllegalArgumentException if some property of the specified key * or value prevents it from being stored in this map * */ Object putIfAbsent(Object key, Object value); /** * Removes the entry for a key only if currently mapped to a given value. * This is equivalent to *
     *   if (map.containsKey(key) && map.get(key).equals(value)) {
     *       map.remove(key);
     *       return true;
     *   } else return false;
* except that the action is performed atomically. * * @param key key with which the specified value is associated * @param value value expected to be associated with the specified key * @return true if the value was removed * @throws UnsupportedOperationException if the remove operation * is not supported by this map * @throws ClassCastException if the key or value is of an inappropriate * type for this map (optional) * @throws NullPointerException if the specified key or value is null, * and this map does not permit null keys or values (optional) */ boolean remove(Object key, Object value); /** * Replaces the entry for a key only if currently mapped to a given value. * This is equivalent to *
     *   if (map.containsKey(key) && map.get(key).equals(oldValue)) {
     *       map.put(key, newValue);
     *       return true;
     *   } else return false;
* except that the action is performed atomically. * * @param key key with which the specified value is associated * @param oldValue value expected to be associated with the specified key * @param newValue value to be associated with the specified key * @return true if the value was replaced * @throws UnsupportedOperationException if the put operation * is not supported by this map * @throws ClassCastException if the class of a specified key or value * prevents it from being stored in this map * @throws NullPointerException if a specified key or value is null, * and this map does not permit null keys or values * @throws IllegalArgumentException if some property of a specified key * or value prevents it from being stored in this map */ boolean replace(Object key, Object oldValue, Object newValue); /** * Replaces the entry for a key only if currently mapped to some value. * This is equivalent to *
     *   if (map.containsKey(key)) {
     *       return map.put(key, value);
     *   } else return null;
* except that the action is performed atomically. * * @param key key with which the specified value is associated * @param value value to be associated with the specified key * @return the previous value associated with the specified key, or * null if there was no mapping for the key. * (A null return can also indicate that the map * previously associated null with the key, * if the implementation supports null values.) * @throws UnsupportedOperationException if the put operation * is not supported by this map * @throws ClassCastException if the class of the specified key or value * prevents it from being stored in this map * @throws NullPointerException if the specified key or value is null, * and this map does not permit null keys or values * @throws IllegalArgumentException if some property of the specified key * or value prevents it from being stored in this map */ Object replace(Object key, Object value); } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/Executors.java0000644001750700037720000006746610431774311032421 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.*; import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicInteger; import java.security.AccessControlContext; import java.security.AccessController; import java.security.PrivilegedAction; import java.security.PrivilegedExceptionAction; import java.security.AccessControlException; import java.util.List; import java.util.Collection; /** * Factory and utility methods for {@link Executor}, {@link * ExecutorService}, {@link ScheduledExecutorService}, {@link * ThreadFactory}, and {@link Callable} classes defined in this * package. This class supports the following kinds of methods: * *
    *
  • Methods that create and return an {@link ExecutorService} * set up with commonly useful configuration settings. *
  • Methods that create and return a {@link ScheduledExecutorService} * set up with commonly useful configuration settings. *
  • Methods that create and return a "wrapped" ExecutorService, that * disables reconfiguration by making implementation-specific methods * inaccessible. *
  • Methods that create and return a {@link ThreadFactory} * that sets newly created threads to a known state. *
  • Methods that create and return a {@link Callable} * out of other closure-like forms, so they can be used * in execution methods requiring Callable. *
* * @since 1.5 * @author Doug Lea */ public class Executors { /** * Creates a thread pool that reuses a fixed number of threads * operating off a shared unbounded queue. At any point, at most * nThreads threads will be active processing tasks. * If additional tasks are submitted when all threads are active, * they will wait in the queue until a thread is available. * If any thread terminates due to a failure during execution * prior to shutdown, a new one will take its place if needed to * execute subsequent tasks. The threads in the pool will exist * until it is explicitly {@link ExecutorService#shutdown shutdown}. * * @param nThreads the number of threads in the pool * @return the newly created thread pool * @throws IllegalArgumentException if nThreads <= 0 */ public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue()); } /** * Creates a thread pool that reuses a fixed number of threads * operating off a shared unbounded queue, using the provided * ThreadFactory to create new threads when needed. At any point, * at most nThreads threads will be active processing * tasks. If additional tasks are submitted when all threads are * active, they will wait in the queue until a thread is * available. If any thread terminates due to a failure during * execution prior to shutdown, a new one will take its place if * needed to execute subsequent tasks. The threads in the pool will * exist until it is explicitly {@link ExecutorService#shutdown * shutdown}. * * @param nThreads the number of threads in the pool * @param threadFactory the factory to use when creating new threads * @return the newly created thread pool * @throws NullPointerException if threadFactory is null * @throws IllegalArgumentException if nThreads <= 0 */ public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), threadFactory); } /** * Creates an Executor that uses a single worker thread operating * off an unbounded queue. (Note however that if this single * thread terminates due to a failure during execution prior to * shutdown, a new one will take its place if needed to execute * subsequent tasks.) Tasks are guaranteed to execute * sequentially, and no more than one task will be active at any * given time. Unlike the otherwise equivalent * newFixedThreadPool(1) the returned executor is * guaranteed not to be reconfigurable to use additional threads. * * @return the newly created single-threaded Executor */ public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue())); } /** * Creates an Executor that uses a single worker thread operating * off an unbounded queue, and uses the provided ThreadFactory to * create a new thread when needed. Unlike the otherwise * equivalent newFixedThreadPool(1, threadFactory) the * returned executor is guaranteed not to be reconfigurable to use * additional threads. * * @param threadFactory the factory to use when creating new * threads * * @return the newly created single-threaded Executor * @throws NullPointerException if threadFactory is null */ public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), threadFactory)); } /** * Creates a thread pool that creates new threads as needed, but * will reuse previously constructed threads when they are * available. These pools will typically improve the performance * of programs that execute many short-lived asynchronous tasks. * Calls to execute will reuse previously constructed * threads if available. If no existing thread is available, a new * thread will be created and added to the pool. Threads that have * not been used for sixty seconds are terminated and removed from * the cache. Thus, a pool that remains idle for long enough will * not consume any resources. Note that pools with similar * properties but different details (for example, timeout parameters) * may be created using {@link ThreadPoolExecutor} constructors. * * @return the newly created thread pool */ public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue()); } /** * Creates a thread pool that creates new threads as needed, but * will reuse previously constructed threads when they are * available, and uses the provided * ThreadFactory to create new threads when needed. * @param threadFactory the factory to use when creating new threads * @return the newly created thread pool * @throws NullPointerException if threadFactory is null */ public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue(), threadFactory); } /** * Creates a single-threaded executor that can schedule commands * to run after a given delay, or to execute periodically. * (Note however that if this single * thread terminates due to a failure during execution prior to * shutdown, a new one will take its place if needed to execute * subsequent tasks.) Tasks are guaranteed to execute * sequentially, and no more than one task will be active at any * given time. Unlike the otherwise equivalent * newScheduledThreadPool(1) the returned executor is * guaranteed not to be reconfigurable to use additional threads. * @return the newly created scheduled executor */ public static ScheduledExecutorService newSingleThreadScheduledExecutor() { return new DelegatedScheduledExecutorService (new ScheduledThreadPoolExecutor(1)); } /** * Creates a single-threaded executor that can schedule commands * to run after a given delay, or to execute periodically. (Note * however that if this single thread terminates due to a failure * during execution prior to shutdown, a new one will take its * place if needed to execute subsequent tasks.) Tasks are * guaranteed to execute sequentially, and no more than one task * will be active at any given time. Unlike the otherwise * equivalent newScheduledThreadPool(1, threadFactory) * the returned executor is guaranteed not to be reconfigurable to * use additional threads. * @param threadFactory the factory to use when creating new * threads * @return a newly created scheduled executor * @throws NullPointerException if threadFactory is null */ public static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory) { return new DelegatedScheduledExecutorService (new ScheduledThreadPoolExecutor(1, threadFactory)); } /** * Creates a thread pool that can schedule commands to run after a * given delay, or to execute periodically. * @param corePoolSize the number of threads to keep in the pool, * even if they are idle. * @return a newly created scheduled thread pool * @throws IllegalArgumentException if corePoolSize < 0 */ public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) { return new ScheduledThreadPoolExecutor(corePoolSize); } /** * Creates a thread pool that can schedule commands to run after a * given delay, or to execute periodically. * @param corePoolSize the number of threads to keep in the pool, * even if they are idle. * @param threadFactory the factory to use when the executor * creates a new thread. * @return a newly created scheduled thread pool * @throws IllegalArgumentException if corePoolSize < 0 * @throws NullPointerException if threadFactory is null */ public static ScheduledExecutorService newScheduledThreadPool( int corePoolSize, ThreadFactory threadFactory) { return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory); } /** * Returns an object that delegates all defined {@link * ExecutorService} methods to the given executor, but not any * other methods that might otherwise be accessible using * casts. This provides a way to safely "freeze" configuration and * disallow tuning of a given concrete implementation. * @param executor the underlying implementation * @return an ExecutorService instance * @throws NullPointerException if executor null */ public static ExecutorService unconfigurableExecutorService(ExecutorService executor) { if (executor == null) throw new NullPointerException(); return new DelegatedExecutorService(executor); } /** * Returns an object that delegates all defined {@link * ScheduledExecutorService} methods to the given executor, but * not any other methods that might otherwise be accessible using * casts. This provides a way to safely "freeze" configuration and * disallow tuning of a given concrete implementation. * @param executor the underlying implementation * @return a ScheduledExecutorService instance * @throws NullPointerException if executor null */ public static ScheduledExecutorService unconfigurableScheduledExecutorService(ScheduledExecutorService executor) { if (executor == null) throw new NullPointerException(); return new DelegatedScheduledExecutorService(executor); } /** * Returns a default thread factory used to create new threads. * This factory creates all new threads used by an Executor in the * same {@link ThreadGroup}. If there is a {@link * java.lang.SecurityManager}, it uses the group of {@link * System#getSecurityManager}, else the group of the thread * invoking this defaultThreadFactory method. Each new * thread is created as a non-daemon thread with priority set to * the smaller of Thread.NORM_PRIORITY and the maximum * priority permitted in the thread group. New threads have names * accessible via {@link Thread#getName} of * pool-N-thread-M, where N is the sequence * number of this factory, and M is the sequence number * of the thread created by this factory. * @return a thread factory */ public static ThreadFactory defaultThreadFactory() { return new DefaultThreadFactory(); } /** * Returns a thread factory used to create new threads that * have the same permissions as the current thread. * This factory creates threads with the same settings as {@link * Executors#defaultThreadFactory}, additionally setting the * AccessControlContext and contextClassLoader of new threads to * be the same as the thread invoking this * privilegedThreadFactory method. A new * privilegedThreadFactory can be created within an * {@link AccessController#doPrivileged} action setting the * current thread's access control context to create threads with * the selected permission settings holding within that action. * *

Note that while tasks running within such threads will have * the same access control and class loader settings as the * current thread, they need not have the same {@link * java.lang.ThreadLocal} or {@link * java.lang.InheritableThreadLocal} values. If necessary, * particular values of thread locals can be set or reset before * any task runs in {@link ThreadPoolExecutor} subclasses using * {@link ThreadPoolExecutor#beforeExecute}. Also, if it is * necessary to initialize worker threads to have the same * InheritableThreadLocal settings as some other designated * thread, you can create a custom ThreadFactory in which that * thread waits for and services requests to create others that * will inherit its values. * * @return a thread factory * @throws AccessControlException if the current access control * context does not have permission to both get and set context * class loader. */ public static ThreadFactory privilegedThreadFactory() { return new PrivilegedThreadFactory(); } /** * Returns a {@link Callable} object that, when * called, runs the given task and returns the given result. This * can be useful when applying methods requiring a * Callable to an otherwise resultless action. * @param task the task to run * @param result the result to return * @return a callable object * @throws NullPointerException if task null */ public static Callable callable(Runnable task, Object result) { if (task == null) throw new NullPointerException(); return new RunnableAdapter(task, result); } /** * Returns a {@link Callable} object that, when * called, runs the given task and returns null. * @param task the task to run * @return a callable object * @throws NullPointerException if task null */ public static Callable callable(Runnable task) { if (task == null) throw new NullPointerException(); return new RunnableAdapter(task, null); } /** * Returns a {@link Callable} object that, when * called, runs the given privileged action and returns its result. * @param action the privileged action to run * @return a callable object * @throws NullPointerException if action null */ public static Callable callable(final PrivilegedAction action) { if (action == null) throw new NullPointerException(); return new Callable() { public Object call() { return action.run(); }}; } /** * Returns a {@link Callable} object that, when * called, runs the given privileged exception action and returns * its result. * @param action the privileged exception action to run * @return a callable object * @throws NullPointerException if action null */ public static Callable callable(final PrivilegedExceptionAction action) { if (action == null) throw new NullPointerException(); return new Callable() { public Object call() throws Exception { return action.run(); }}; } /** * Returns a {@link Callable} object that will, when * called, execute the given callable under the current * access control context. This method should normally be * invoked within an {@link AccessController#doPrivileged} action * to create callables that will, if possible, execute under the * selected permission settings holding within that action; or if * not possible, throw an associated {@link * AccessControlException}. * @param callable the underlying task * @return a callable object * @throws NullPointerException if callable null * */ public static Callable privilegedCallable(Callable callable) { if (callable == null) throw new NullPointerException(); return new PrivilegedCallable(callable); } /** * Returns a {@link Callable} object that will, when * called, execute the given callable under the current * access control context, with the current context class loader * as the context class loader. This method should normally be * invoked within an {@link AccessController#doPrivileged} action * to create callables that will, if possible, execute under the * selected permission settings holding within that action; or if * not possible, throw an associated {@link * AccessControlException}. * @param callable the underlying task * * @return a callable object * @throws NullPointerException if callable null * @throws AccessControlException if the current access control * context does not have permission to both set and get context * class loader. */ public static Callable privilegedCallableUsingCurrentClassLoader(Callable callable) { if (callable == null) throw new NullPointerException(); return new PrivilegedCallableUsingCurrentClassLoader(callable); } // Non-public classes supporting the public methods /** * A callable that runs given task and returns given result */ static final class RunnableAdapter implements Callable { final Runnable task; final Object result; RunnableAdapter(Runnable task, Object result) { this.task = task; this.result = result; } public Object call() { task.run(); return result; } } /** * A callable that runs under established access control settings */ static final class PrivilegedCallable implements Callable { private final AccessControlContext acc; private final Callable task; private Object result; private Exception exception; PrivilegedCallable(Callable task) { this.task = task; this.acc = AccessController.getContext(); } public Object call() throws Exception { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { try { result = task.call(); } catch (Exception ex) { exception = ex; } return null; } }, acc); if (exception != null) throw exception; else return result; } } /** * A callable that runs under established access control settings and * current ClassLoader */ static final class PrivilegedCallableUsingCurrentClassLoader implements Callable { private final ClassLoader ccl; private final AccessControlContext acc; private final Callable task; private Object result; private Exception exception; PrivilegedCallableUsingCurrentClassLoader(Callable task) { this.task = task; this.ccl = Thread.currentThread().getContextClassLoader(); this.acc = AccessController.getContext(); acc.checkPermission(new RuntimePermission("getContextClassLoader")); acc.checkPermission(new RuntimePermission("setContextClassLoader")); } public Object call() throws Exception { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { ClassLoader savedcl = null; Thread t = Thread.currentThread(); try { ClassLoader cl = t.getContextClassLoader(); if (ccl != cl) { t.setContextClassLoader(ccl); savedcl = cl; } result = task.call(); } catch (Exception ex) { exception = ex; } finally { if (savedcl != null) t.setContextClassLoader(savedcl); } return null; } }, acc); if (exception != null) throw exception; else return result; } } /** * The default thread factory */ static class DefaultThreadFactory implements ThreadFactory { static final AtomicInteger poolNumber = new AtomicInteger(1); final ThreadGroup group; final AtomicInteger threadNumber = new AtomicInteger(1); final String namePrefix; DefaultThreadFactory() { SecurityManager s = System.getSecurityManager(); group = (s != null)? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); namePrefix = "pool-" + poolNumber.getAndIncrement() + "-thread-"; } public Thread newThread(Runnable r) { Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0); if (t.isDaemon()) t.setDaemon(false); if (t.getPriority() != Thread.NORM_PRIORITY) t.setPriority(Thread.NORM_PRIORITY); return t; } } /** * Thread factory capturing access control and class loader */ static class PrivilegedThreadFactory extends DefaultThreadFactory { private final ClassLoader ccl; private final AccessControlContext acc; PrivilegedThreadFactory() { super(); this.ccl = Thread.currentThread().getContextClassLoader(); this.acc = AccessController.getContext(); acc.checkPermission(new RuntimePermission("setContextClassLoader")); } public Thread newThread(final Runnable r) { return super.newThread(new Runnable() { public void run() { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { Thread.currentThread().setContextClassLoader(ccl); r.run(); return null; } }, acc); } }); } } /** * A wrapper class that exposes only the ExecutorService methods * of an ExecutorService implementation. */ static class DelegatedExecutorService extends AbstractExecutorService { private final ExecutorService e; DelegatedExecutorService(ExecutorService executor) { e = executor; } public void execute(Runnable command) { e.execute(command); } public void shutdown() { e.shutdown(); } public List shutdownNow() { return e.shutdownNow(); } public boolean isShutdown() { return e.isShutdown(); } public boolean isTerminated() { return e.isTerminated(); } public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { return e.awaitTermination(timeout, unit); } public Future submit(Runnable task) { return e.submit(task); } public Future submit(Callable task) { return e.submit(task); } public Future submit(Runnable task, Object result) { return e.submit(task, result); } public List invokeAll(Collection tasks) throws InterruptedException { return e.invokeAll(tasks); } public List invokeAll(Collection tasks, long timeout, TimeUnit unit) throws InterruptedException { return e.invokeAll(tasks, timeout, unit); } public Object invokeAny(Collection tasks) throws InterruptedException, ExecutionException { return e.invokeAny(tasks); } public Object invokeAny(Collection tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { return e.invokeAny(tasks, timeout, unit); } } static class FinalizableDelegatedExecutorService extends DelegatedExecutorService { FinalizableDelegatedExecutorService(ExecutorService executor) { super(executor); } protected void finalize() { super.shutdown(); } } /** * A wrapper class that exposes only the ScheduledExecutorService * methods of a ScheduledExecutorService implementation. */ static class DelegatedScheduledExecutorService extends DelegatedExecutorService implements ScheduledExecutorService { private final ScheduledExecutorService e; DelegatedScheduledExecutorService(ScheduledExecutorService executor) { super(executor); e = executor; } public ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) { return e.schedule(command, delay, unit); } public ScheduledFuture schedule(Callable callable, long delay, TimeUnit unit) { return e.schedule(callable, delay, unit); } public ScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) { return e.scheduleAtFixedRate(command, initialDelay, period, unit); } public ScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) { return e.scheduleWithFixedDelay(command, initialDelay, delay, unit); } } /** Cannot instantiate. */ private Executors() {} } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/CopyOnWriteArrayList.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/CopyOnWriteArray0000644001750700037720000007561210633346771032742 0ustar dawidkdcl/* * Written by Dawid Kurzyniec, on the basis of public specifications and * public domain sources from JSR 166, and released to the public domain, * as explained at http://creativecommons.org/licenses/publicdomain. */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.Arrays; import java.util.List; import java.util.Iterator; import java.util.Collection; import java.util.ListIterator; import java.util.RandomAccess; import java.io.Serializable; import java.lang.reflect.Array; import java.util.ConcurrentModificationException; import java.util.NoSuchElementException; import java.io.ObjectOutputStream; import java.io.IOException; import java.io.ObjectInputStream; public class CopyOnWriteArrayList implements List, RandomAccess, Cloneable, Serializable { private static final long serialVersionUID = 8673264195747942595L; private volatile transient Object[] array; public CopyOnWriteArrayList() { setArray(new Object[0]); } public CopyOnWriteArrayList(Collection c) { // must deal with concurrent collections Object[] array = c.toArray(); // make sure the array is Object[] type if (array.getClass() != Object[].class) { array = Arrays.copyOf(array, array.length, Object[].class); } // assume that c.toArray() has returned a new array instance, as // required by the spec setArray(array); } public CopyOnWriteArrayList(Object[] array) { setArray(Arrays.copyOf(array, array.length, Object[].class)); } final Object[] getArray() { return array; } final void setArray(Object[] array) { this.array = array; } public int size() { return getArray().length; } public boolean isEmpty() { return getArray().length == 0; } private static int search(Object[] array, Object subject, int pos, int end) { if (subject == null) { for (;pos < end; pos++) { if (array[pos] == null) return pos; } } else { for (;pos < end; pos++) { if (subject.equals(array[pos])) return pos; } } return -1; } private static int reverseSearch(Object[] array, Object subject, int start, int pos) { if (subject == null) { for (pos--; pos >= start; pos--) { if (array[pos] == null) return pos; } } else { for (pos--; pos >= start; pos--) { if (subject.equals(array[pos])) return pos; } } return -1; } public boolean contains(Object o) { Object[] array = getArray(); return search(array, o, 0, array.length) >= 0; } public Iterator iterator() { return new COWIterator(getArray(), 0); } public Object[] toArray() { Object[] array = getArray(); return Arrays.copyOf(array, array.length, Object[].class); } public Object[] toArray(Object[] a) { Object[] array = getArray(); int length = array.length; if (a.length < length) { return Arrays.copyOf(array, length, a.getClass()); } else { System.arraycopy(array, 0, a, 0, length); if (a.length > length) a[length] = null; return a; } } public boolean add(Object o) { synchronized (this) { Object[] oldarr = getArray(); int length = oldarr.length; Object[] newarr = new Object[length+1]; System.arraycopy(oldarr, 0, newarr, 0, length); newarr[length] = o; setArray(newarr); return true; } } public boolean addIfAbsent(Object o) { synchronized (this) { Object[] oldarr = getArray(); int length = oldarr.length; if (search(array, o, 0, length) >= 0) return false; Object[] newarr = new Object[length+1]; System.arraycopy(oldarr, 0, newarr, 0, length); newarr[length] = o; setArray(newarr); return true; } } public int addAllAbsent(Collection c) { Object[] arr = c.toArray(); if (arr.length == 0) return 0; synchronized (this) { Object[] oldarr = getArray(); int oldlength = oldarr.length; Object[] tmp = new Object[arr.length]; int added = 0; for (int i=0; i 0) System.arraycopy(array, 0, newarr, 0, pos); if (moved > 0) System.arraycopy(array, pos+1, newarr, pos, moved); setArray(newarr); return true; } } public boolean containsAll(Collection c) { Object[] array = getArray(); for (Iterator itr = c.iterator(); itr.hasNext();) { if (search(array, itr.next(), 0, array.length) < 0) return false; } return true; } public boolean addAll(Collection c) { // must deal with concurrent collections Object[] ca = c.toArray(); if (ca.length == 0) return false; synchronized (this) { Object[] oldarr = getArray(); int length = oldarr.length; Object[] newarr = new Object[length + ca.length]; System.arraycopy(oldarr, 0, newarr, 0, length); int pos = length; System.arraycopy(ca, 0, newarr, pos, ca.length); setArray(newarr); return true; } } public boolean addAll(int index, Collection c) { // must deal with concurrent collections Object[] ca = c.toArray(); synchronized (this) { Object[] oldarr = getArray(); int length = oldarr.length; if (index < 0 || index > length) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + length); } if (ca.length == 0) return false; Object[] newarr = new Object[length+ca.length]; int moved = length-index; System.arraycopy(oldarr, 0, newarr, 0, index); int pos = length; System.arraycopy(ca, 0, newarr, index, ca.length); if (moved > 0) { System.arraycopy(oldarr, index, newarr, index+ca.length, moved); } setArray(newarr); return true; } } public boolean removeAll(Collection c) { if (c.isEmpty()) return false; synchronized (this) { Object[] array = getArray(); int length = array.length; Object[] tmp = new Object[length]; int newlen=0; for (int i=0; i length) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + length); } Object[] newarr = new Object[length+1]; int moved = length-index; System.arraycopy(oldarr, 0, newarr, 0, index); newarr[index] = element; if (moved > 0) { System.arraycopy(oldarr, index, newarr, index+1, moved); } setArray(newarr); } } public Object remove(int index) { synchronized (this) { Object[] array = getArray(); int length = array.length; if (index < 0 || index >= length) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + length); } Object result = array[index]; Object[] newarr = new Object[length-1]; int moved = length-index-1; if (index > 0) System.arraycopy(array, 0, newarr, 0, index); if (moved > 0) System.arraycopy(array, index+1, newarr, index, moved); setArray(newarr); return result; } } public int indexOf(Object o) { Object[] array = getArray(); return search(array, o, 0, array.length); } public int indexOf(Object o, int index) { Object[] array = getArray(); return search(array, o, index, array.length); } public int lastIndexOf(Object o) { Object[] array = getArray(); return reverseSearch(array, o, 0, array.length); } public int lastIndexOf(Object o, int index) { Object[] array = getArray(); return reverseSearch(array, o, 0, index); } public ListIterator listIterator() { return new COWIterator(getArray(), 0); } public ListIterator listIterator(int index) { Object[] array = getArray(); if (index < 0 || index > array.length) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + array.length); } return new COWIterator(array, index); } public List subList(int fromIndex, int toIndex) { Object[] array = getArray(); if (fromIndex < 0 || toIndex > array.length || fromIndex > toIndex) { throw new IndexOutOfBoundsException(); } return new COWSubList(fromIndex, toIndex-fromIndex); } private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); Object[] array = getArray(); int length = array.length; out.writeInt(length); for (int i = 0; i < length; i++) out.writeObject(array[i]); } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); int length = in.readInt(); Object[] array = new Object[length]; for (int i = 0; i < length; i++) { array[i] = in.readObject(); } setArray(array); } public String toString() { Object[] array = getArray(); int length = array.length; StringBuffer buf = new StringBuffer(); buf.append('['); for (int i=0; i0) buf.append(", "); buf.append(array[i]); } buf.append(']'); return buf.toString(); } static class COWIterator implements ListIterator { final Object[] array; int cursor; COWIterator(Object[] array, int cursor) { this.array = array; this.cursor = cursor; } public boolean hasNext() { return cursor < array.length; } public boolean hasPrevious() { return cursor > 0; } public int nextIndex() { return cursor; } public Object next() { try { return array[cursor++]; } catch (IndexOutOfBoundsException e) { --cursor; throw new NoSuchElementException(); } } public int previousIndex() { return cursor-1; } public Object previous() { try { return array[--cursor]; } catch (IndexOutOfBoundsException e) { cursor++; throw new NoSuchElementException(); } } public void add(Object val) { throw new UnsupportedOperationException(); } public void set(Object val) { throw new UnsupportedOperationException(); } public void remove() { throw new UnsupportedOperationException(); } } /** Note: the original j.u.c. class is NOT serializable */ class COWSubList implements Serializable, List { private static final long serialVersionUID = -8660955369431018984L; final int offset; int length; transient Object[] expectedArray; COWSubList(int offset, int length) { this.offset = offset; this.length = length; this.expectedArray = getArray(); } public int size() { return length; } public boolean isEmpty() { return length == 0; } public boolean contains(Object o) { return search(getArray(), o, offset, offset+length) >= 0; } public Iterator iterator() { return listIterator(); } public Object[] toArray() { Object[] array = getArray(); Object[] newarr = new Object[length]; System.arraycopy(array, offset, newarr, 0, length); return newarr; } public Object[] toArray(Object[] a) { Object[] array = getArray(); if (a.length < length) { a = (Object[])Array.newInstance(a.getClass().getComponentType(), length); System.arraycopy(array, offset, a, 0, length); } else { System.arraycopy(array, offset, a, 0, length); if (a.length > length) a[length] = null; } return a; } public boolean add(Object o) { add(length, o); return true; } public boolean remove(Object o) { synchronized (CopyOnWriteArrayList.this) { Object[] array = getArray(); if (array != expectedArray) throw new ConcurrentModificationException(); int fullLength = array.length; int pos = search(array, o, offset, length); if (pos < 0) return false; Object[] newarr = new Object[fullLength-1]; int moved = length-pos-1; if (pos > 0) System.arraycopy(array, 0, newarr, 0, pos); if (moved > 0) System.arraycopy(array, pos+1, newarr, pos, moved); setArray(newarr); expectedArray = newarr; length--; return true; } } public boolean containsAll(Collection c) { Object[] array = getArray(); for (Iterator itr = c.iterator(); itr.hasNext();) { if (search(array, itr.next(), offset, length) < 0) return false; } return true; } public boolean addAll(Collection c) { return addAll(length, c); } public boolean addAll(int index, Collection c) { int added = c.size(); synchronized (CopyOnWriteArrayList.this) { if (index < 0 || index >= length) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + length); } Object[] oldarr = getArray(); if (oldarr != expectedArray) throw new ConcurrentModificationException(); if (added == 0) return false; int fullLength = oldarr.length; Object[] newarr = new Object[fullLength + added]; int pos = offset+index; int newpos = pos; System.arraycopy(oldarr, 0, newarr, 0, pos); int rem = fullLength-pos; for (Iterator itr = c.iterator(); itr.hasNext(); ) { newarr[newpos++] = itr.next(); } if (rem > 0) System.arraycopy(oldarr, pos, newarr, newpos, rem); setArray(newarr); expectedArray = newarr; length += added; return true; } } public boolean removeAll(Collection c) { if (c.isEmpty()) return false; synchronized (CopyOnWriteArrayList.this) { Object[] array = getArray(); if (array != expectedArray) throw new ConcurrentModificationException(); int fullLength = array.length; Object[] tmp = new Object[length]; int retained=0; for (int i=offset; i 0) System.arraycopy(array, 0, newarr, 0, offset); if (retained > 0) System.arraycopy(tmp, 0, newarr, offset, retained); if (moved > 0) System.arraycopy(array, offset+length, newarr, offset+retained, moved); setArray(newarr); expectedArray = newarr; length = retained; return true; } } public boolean retainAll(Collection c) { synchronized (CopyOnWriteArrayList.this) { Object[] array = getArray(); if (array != expectedArray) throw new ConcurrentModificationException(); int fullLength = array.length; Object[] tmp = new Object[length]; int retained=0; for (int i=offset; i 0) System.arraycopy(array, 0, newarr, 0, offset); if (retained > 0) System.arraycopy(tmp, 0, newarr, offset, retained); if (moved > 0) System.arraycopy(array, offset+length, newarr, offset+retained, moved); setArray(newarr); expectedArray = newarr; length = retained; return true; } } public void clear() { synchronized (CopyOnWriteArrayList.this) { Object[] array = getArray(); if (array != expectedArray) throw new ConcurrentModificationException(); int fullLength = array.length; Object[] newarr = new Object[fullLength-length]; int moved = fullLength - offset - length; if (offset > 0) System.arraycopy(array, 0, newarr, 0, offset); if (moved > 0) System.arraycopy(array, offset+length, newarr, offset, moved); setArray(newarr); expectedArray = newarr; length = 0; } } public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof List)) return false; Object[] array; int last; synchronized (CopyOnWriteArrayList.this) { array = getArray(); if (array != expectedArray) throw new ConcurrentModificationException(); last = offset+length; } ListIterator itr = ((List)o).listIterator(); int idx=offset; while(idx < last && itr.hasNext()) { Object o1 = array[idx]; Object o2 = itr.next(); if (!eq(o1, o2)) return false; } return (idx == last && !itr.hasNext()); } public int hashCode() { int hashCode = 1; Object[] array; int last; synchronized (CopyOnWriteArrayList.this) { array = getArray(); if (array != expectedArray) throw new ConcurrentModificationException(); last = offset+length; } for (int i=offset; i= length) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + length); } Object[] oldarr = getArray(); if (oldarr != expectedArray) throw new ConcurrentModificationException(); int fullLength = oldarr.length; // piggyback the array bounds check Object oldVal = oldarr[offset+index]; if (oldVal == element) { setArray(oldarr); } else { Object[] newarr = new Object[fullLength]; System.arraycopy(oldarr, 0, newarr, 0, fullLength); newarr[offset+index] = element; setArray(newarr); expectedArray = newarr; } return oldVal; } } public void add(int index, Object element) { synchronized (CopyOnWriteArrayList.this) { if (index < 0 || index > length) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + length); } Object[] oldarr = getArray(); if (oldarr != expectedArray) throw new ConcurrentModificationException(); int fullLength = oldarr.length; Object[] newarr = new Object[fullLength+1]; int pos = offset+index; int moved = fullLength-pos; System.arraycopy(oldarr, 0, newarr, 0, pos); newarr[pos] = element; if (moved > 0) { System.arraycopy(oldarr, pos, newarr, pos+1, moved); } setArray(newarr); expectedArray = newarr; length++; } } public Object remove(int index) { synchronized (CopyOnWriteArrayList.this) { if (index < 0 || index >= length) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + length); } Object[] array = getArray(); if (array != expectedArray) throw new ConcurrentModificationException(); int fullLength = array.length; int pos = offset+index; Object result = array[pos]; Object[] newarr = new Object[fullLength-1]; int moved = fullLength-pos-1; if (index > 0) System.arraycopy(array, 0, newarr, 0, pos); if (moved > 0) System.arraycopy(array, pos+1, newarr, pos, moved); setArray(newarr); expectedArray = newarr; length--; return result; } } public int indexOf(Object o) { int pos = search(getArray(), o, offset, offset+length); return pos >= 0 ? pos-offset : -1; } public int indexOf(Object o, int index) { int pos = search(getArray(), o, offset+index, offset+length)-offset; return pos >= 0 ? pos-offset : -1; } public int lastIndexOf(Object o) { int pos = reverseSearch(getArray(), o, offset, offset+length)-offset; return pos >= 0 ? pos-offset : -1; } public int lastIndexOf(Object o, int index) { int pos = reverseSearch(getArray(), o, offset, offset+index)-offset; return pos >= 0 ? pos-offset : -1; } public ListIterator listIterator() { // must synchronize to atomically obtain the array and length synchronized (CopyOnWriteArrayList.this) { Object[] array = getArray(); if (array != expectedArray) throw new ConcurrentModificationException(); return new COWSubIterator(array, offset, offset+length, offset); } } public ListIterator listIterator(int index) { // must synchronize to atomically obtain the array and length synchronized (CopyOnWriteArrayList.this) { if (index < 0 || index >= length) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + length); } Object[] array = getArray(); if (array != expectedArray) throw new ConcurrentModificationException(); return new COWSubIterator(array, offset, offset+length, offset+index); } } public List subList(int fromIndex, int toIndex) { if (fromIndex < 0 || toIndex > length || fromIndex > toIndex) { throw new IndexOutOfBoundsException(); } return new COWSubList(offset+fromIndex, toIndex-fromIndex); } public String toString() { Object[] array; int last; synchronized (CopyOnWriteArrayList.this) { array = getArray(); if (array != expectedArray) throw new ConcurrentModificationException(); last = offset+length; } StringBuffer buf = new StringBuffer(); buf.append('['); for (int i=offset; ioffset) buf.append(", "); buf.append(array[i]); } buf.append(']'); return buf.toString(); } private void writeObject(ObjectOutputStream out) throws IOException { synchronized (CopyOnWriteArrayList.this) { if (getArray() != expectedArray) throw new ConcurrentModificationException(); } out.defaultWriteObject(); synchronized (CopyOnWriteArrayList.this) { if (getArray() != expectedArray) throw new ConcurrentModificationException(); } } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); synchronized (CopyOnWriteArrayList.this) { expectedArray = getArray(); } } } static class COWSubIterator implements ListIterator { final Object[] array; int cursor; int first, last; COWSubIterator(Object[] array, int first, int last, int cursor) { this.array = array; this.first = first; this.last = last; this.cursor = cursor; } public boolean hasNext() { return cursor < last; } public boolean hasPrevious() { return cursor > first; } public int nextIndex() { return cursor-first; } public Object next() { if (cursor == last) throw new NoSuchElementException(); return array[cursor++]; } public int previousIndex() { return cursor-first-1; } public Object previous() { if (cursor == first) throw new NoSuchElementException(); return array[--cursor]; } public void add(Object val) { throw new UnsupportedOperationException(); } public void set(Object val) { throw new UnsupportedOperationException(); } public void remove() { throw new UnsupportedOperationException(); } } private static boolean eq(Object o1, Object o2) { return (o1 == null ? o2 == null : o1.equals(o2)); } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/Semaphore.java0000644001750700037720000010216010431777052032345 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import java.util.Collection; import edu.emory.mathcs.backport.java.util.concurrent.helpers.WaitQueue.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; /** * A counting semaphore. Conceptually, a semaphore maintains a set of * permits. Each {@link #acquire} blocks if necessary until a permit is * available, and then takes it. Each {@link #release} adds a permit, * potentially releasing a blocking acquirer. * However, no actual permit objects are used; the {@code Semaphore} just * keeps a count of the number available and acts accordingly. * *

Semaphores are often used to restrict the number of threads than can * access some (physical or logical) resource. For example, here is * a class that uses a semaphore to control access to a pool of items: *

 * class Pool {
 *   private static final int MAX_AVAILABLE = 100;
 *   private final Semaphore available = new Semaphore(MAX_AVAILABLE, true);
 *
 *   public Object getItem() throws InterruptedException {
 *     available.acquire();
 *     return getNextAvailableItem();
 *   }
 *
 *   public void putItem(Object x) {
 *     if (markAsUnused(x))
 *       available.release();
 *   }
 *
 *   // Not a particularly efficient data structure; just for demo
 *
 *   protected Object[] items = ... whatever kinds of items being managed
 *   protected boolean[] used = new boolean[MAX_AVAILABLE];
 *
 *   protected synchronized Object getNextAvailableItem() {
 *     for (int i = 0; i < MAX_AVAILABLE; ++i) {
 *       if (!used[i]) {
 *          used[i] = true;
 *          return items[i];
 *       }
 *     }
 *     return null; // not reached
 *   }
 *
 *   protected synchronized boolean markAsUnused(Object item) {
 *     for (int i = 0; i < MAX_AVAILABLE; ++i) {
 *       if (item == items[i]) {
 *          if (used[i]) {
 *            used[i] = false;
 *            return true;
 *          } else
 *            return false;
 *       }
 *     }
 *     return false;
 *   }
 *
 * }
 * 
* *

Before obtaining an item each thread must acquire a permit from * the semaphore, guaranteeing that an item is available for use. When * the thread has finished with the item it is returned back to the * pool and a permit is returned to the semaphore, allowing another * thread to acquire that item. Note that no synchronization lock is * held when {@link #acquire} is called as that would prevent an item * from being returned to the pool. The semaphore encapsulates the * synchronization needed to restrict access to the pool, separately * from any synchronization needed to maintain the consistency of the * pool itself. * *

A semaphore initialized to one, and which is used such that it * only has at most one permit available, can serve as a mutual * exclusion lock. This is more commonly known as a binary * semaphore, because it only has two states: one permit * available, or zero permits available. When used in this way, the * binary semaphore has the property (unlike many * {@link edu.emory.mathcs.backport.java.util.concurrent.locks.Lock} * implementations), that the "lock" can be released by a * thread other than the owner (as semaphores have no notion of * ownership). This can be useful in some specialized contexts, such * as deadlock recovery. * *

The constructor for this class optionally accepts a * fairness parameter. When set false, this class makes no * guarantees about the order in which threads acquire permits. In * particular, barging is permitted, that is, a thread * invoking {@link #acquire} can be allocated a permit ahead of a * thread that has been waiting - logically the new thread places itself at * the head of the queue of waiting threads. When fairness is set true, the * semaphore guarantees that threads invoking any of the {@link * #acquire() acquire} methods are selected to obtain permits in the order in * which their invocation of those methods was processed * (first-in-first-out; FIFO). Note that FIFO ordering necessarily * applies to specific internal points of execution within these * methods. So, it is possible for one thread to invoke * {@code acquire} before another, but reach the ordering point after * the other, and similarly upon return from the method. * Also note that the untimed {@link #tryAcquire() tryAcquire} methods do not * honor the fairness setting, but will take any permits that are * available. * *

Generally, semaphores used to control resource access should be * initialized as fair, to ensure that no thread is starved out from * accessing a resource. When using semaphores for other kinds of * synchronization control, the throughput advantages of non-fair * ordering often outweigh fairness considerations. * *

This class also provides convenience methods to {@link * #acquire(int) acquire} and {@link #release(int) release} multiple * permits at a time. BACKPORT NOTE: currently, these methods are only * supported for FAIR semaphores. * *

Memory consistency effects: Actions in a thread prior to calling * a "release" method such as {@code release()} * happen-before * actions following a successful "acquire" method such as {@code acquire()} * in another thread. * * @since 1.5 * @author Doug Lea * */ public class Semaphore implements java.io.Serializable { private static final long serialVersionUID = -3222578661600680210L; private final Sync sync; /** * Synchronization implementation for semaphore. * Subclassed into fair and nonfair versions. */ static abstract class Sync implements java.io.Serializable { private static final long serialVersionUID = 1192457210091910933L; /** current number of available permits **/ int permits_; protected Sync(int permits) { this.permits_ = permits; } abstract void acquireUninterruptibly(int n); abstract void acquire(int n) throws InterruptedException; public boolean attempt(int n) { synchronized (this) { if (permits_ >= n) { permits_ -= n; return true; } else { return false; } } } abstract boolean attempt(int n, long nanos) throws InterruptedException; abstract void release(int n); public synchronized int getPermits() { return permits_; } public synchronized int drain() { int acquired = permits_; permits_ = 0; return acquired; } public synchronized void reduce(int reduction) { permits_ -= reduction; } abstract boolean hasQueuedThreads(); abstract int getQueueLength(); abstract Collection getQueuedThreads(); } /** * Nonfair version */ final static class NonfairSync extends Sync { private static final long serialVersionUID = -2694183684443567898L; protected NonfairSync(int initialPermits) { super(initialPermits); } private static void checkAgainstMultiacquire(int n) { if (n != 1) { throw new UnsupportedOperationException( "Atomic multi-acquire supported only in FAIR semaphores"); } } public void acquireUninterruptibly(int n) { if (n == 0) return; checkAgainstMultiacquire(n); synchronized (this) { if (permits_ > 0) { --permits_; return; } // else must wait boolean wasInterrupted = Thread.interrupted(); try { while (true) { try { wait(); } catch (InterruptedException e) { wasInterrupted = true; // no need to notify; if we were signalled, we will // act as signalled (interruption is ignored anyway) } if (permits_ > 0) { --permits_; return; } } } finally { if (wasInterrupted) Thread.currentThread().interrupt(); } } } public void acquire(int n) throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); if (n == 0) return; checkAgainstMultiacquire(n); synchronized (this) { while (permits_ <= 0) { try { wait(); } catch (InterruptedException ex) { notify(); throw ex; } } --permits_; } } public boolean attempt(int n, long nanos) throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); if (n == 0) return true; checkAgainstMultiacquire(n); synchronized (this) { if (permits_ > 0) { --permits_; return true; } else if (nanos <= 0) return false; else { try { long deadline = Utils.nanoTime() + nanos; for (; ; ) { TimeUnit.NANOSECONDS.timedWait(this, nanos); if (permits_ > 0) { --permits_; return true; } else { nanos = deadline - Utils.nanoTime(); if (nanos <= 0) return false; } } } catch (InterruptedException ex) { notify(); throw ex; } } } } public synchronized void release(int n) { if (n < 0) throw new IllegalArgumentException("Negative argument"); permits_ += n; for (int i = 0; i < n; ++i) notify(); } public boolean hasQueuedThreads() { throw new UnsupportedOperationException("Use FAIR version"); } public int getQueueLength() { throw new UnsupportedOperationException("Use FAIR version"); } public Collection getQueuedThreads() { throw new UnsupportedOperationException("Use FAIR version"); } } /** * Fair version */ final static class FairSync extends Sync implements QueuedSync { private static final long serialVersionUID = 2014338818796000944L; private transient WaitQueue wq_ = new FIFOWaitQueue(); FairSync(int initialPermits) { super(initialPermits); } public void acquireUninterruptibly(int n) { if (precheck(n)) return; WaitQueue.WaitNode w = new Node(n); w.doWaitUninterruptibly(this); } public void acquire(int n) throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); if (precheck(n)) return; WaitQueue.WaitNode w = new Node(n); w.doWait(this); } public boolean attempt(int n, long nanos) throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); if (precheck(n)) return true; if (nanos <= 0) return false; WaitQueue.WaitNode w = new Node(n); return w.doTimedWait(this, nanos); } protected synchronized boolean precheck(int n) { boolean pass = (permits_ >= n); if (pass) permits_ -= n; return pass; } public synchronized boolean recheck(WaitQueue.WaitNode w) { Node node = (Node)w; boolean pass = (permits_ >= node.requests); if (pass) permits_ -= node.requests; else wq_.insert(w); return pass; } public void takeOver(WaitQueue.WaitNode n) {} protected synchronized Node getSignallee(int n) { Node w = (Node)wq_.extract(); permits_ += n; if (w == null) { return null; } else if (w.requests > permits_) { // not enough permits released for the "next in line" wq_.putBack(w); return null; } else { permits_ -= w.requests; return w; } } public void release(int n) { if (n < 0) throw new IllegalArgumentException("Negative argument"); for (;;) { Node w = getSignallee(n); if (w == null) return; // no one to signal, or not enough permits if (w.signal(this)) return; // notify if still waiting, else skip n = w.requests; } } public synchronized boolean hasQueuedThreads() { return wq_.hasNodes(); } public synchronized int getQueueLength() { return wq_.getLength(); } public synchronized Collection getQueuedThreads() { return wq_.getWaitingThreads(); } private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException { in.defaultReadObject(); synchronized (this) { wq_ = new FIFOWaitQueue(); } } final static class Node extends WaitQueue.WaitNode { final int requests; Node(int requests) { this.requests = requests; } } } /** * Creates a {@code Semaphore} with the given number of * permits and nonfair fairness setting. * * @param permits the initial number of permits available. * This value may be negative, in which case releases * must occur before any acquires will be granted. */ public Semaphore(int permits) { sync = new NonfairSync(permits); } /** * Creates a {@code Semaphore} with the given number of * permits and the given fairness setting. * * @param permits the initial number of permits available. * This value may be negative, in which case releases * must occur before any acquires will be granted. * @param fair {@code true} if this semaphore will guarantee * first-in first-out granting of permits under contention, * else {@code false} */ public Semaphore(int permits, boolean fair) { sync = (fair)? (Sync)new FairSync(permits) : new NonfairSync(permits); } /** * Acquires a permit from this semaphore, blocking until one is * available, or the thread is {@linkplain Thread#interrupt interrupted}. * *

Acquires a permit, if one is available and returns immediately, * reducing the number of available permits by one. * *

If no permit is available then the current thread becomes * disabled for thread scheduling purposes and lies dormant until * one of two things happens: *

    *
  • Some other thread invokes the {@link #release} method for this * semaphore and the current thread is next to be assigned a permit; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} * the current thread. *
* *

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@linkplain Thread#interrupt interrupted} while waiting * for a permit, *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * * @throws InterruptedException if the current thread is interrupted */ public void acquire() throws InterruptedException { sync.acquire(1); } /** * Acquires a permit from this semaphore, blocking until one is * available. * *

Acquires a permit, if one is available and returns immediately, * reducing the number of available permits by one. * *

If no permit is available then the current thread becomes * disabled for thread scheduling purposes and lies dormant until * some other thread invokes the {@link #release} method for this * semaphore and the current thread is next to be assigned a permit. * *

If the current thread is {@linkplain Thread#interrupt interrupted} * while waiting for a permit then it will continue to wait, but the * time at which the thread is assigned a permit may change compared to * the time it would have received the permit had no interruption * occurred. When the thread does return from this method its interrupt * status will be set. */ public void acquireUninterruptibly() { sync.acquireUninterruptibly(1); } /** * Acquires a permit from this semaphore, only if one is available at the * time of invocation. * *

Acquires a permit, if one is available and returns immediately, * with the value {@code true}, * reducing the number of available permits by one. * *

If no permit is available then this method will return * immediately with the value {@code false}. * *

Even when this semaphore has been set to use a * fair ordering policy, a call to {@code tryAcquire()} will * immediately acquire a permit if one is available, whether or not * other threads are currently waiting. * This "barging" behavior can be useful in certain * circumstances, even though it breaks fairness. If you want to honor * the fairness setting, then use * {@link #tryAcquire(long, TimeUnit) tryAcquire(0, TimeUnit.SECONDS) } * which is almost equivalent (it also detects interruption). * * @return {@code true} if a permit was acquired and {@code false} * otherwise */ public boolean tryAcquire() { return sync.attempt(1); } /** * Acquires a permit from this semaphore, if one becomes available * within the given waiting time and the current thread has not * been {@linkplain Thread#interrupt interrupted}. * *

Acquires a permit, if one is available and returns immediately, * with the value {@code true}, * reducing the number of available permits by one. * *

If no permit is available then the current thread becomes * disabled for thread scheduling purposes and lies dormant until * one of three things happens: *

    *
  • Some other thread invokes the {@link #release} method for this * semaphore and the current thread is next to be assigned a permit; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} * the current thread; or *
  • The specified waiting time elapses. *
* *

If a permit is acquired then the value {@code true} is returned. * *

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@linkplain Thread#interrupt interrupted} while waiting * to acquire a permit, *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * *

If the specified waiting time elapses then the value {@code false} * is returned. If the time is less than or equal to zero, the method * will not wait at all. * * @param timeout the maximum time to wait for a permit * @param unit the time unit of the {@code timeout} argument * @return {@code true} if a permit was acquired and {@code false} * if the waiting time elapsed before a permit was acquired * @throws InterruptedException if the current thread is interrupted */ public boolean tryAcquire(long timeout, TimeUnit unit) throws InterruptedException { return sync.attempt(1, unit.toNanos(timeout)); } /** * Releases a permit, returning it to the semaphore. * *

Releases a permit, increasing the number of available permits by * one. If any threads are trying to acquire a permit, then one is * selected and given the permit that was just released. That thread * is (re)enabled for thread scheduling purposes. * *

There is no requirement that a thread that releases a permit must * have acquired that permit by calling {@link #acquire}. * Correct usage of a semaphore is established by programming convention * in the application. */ public void release() { sync.release(1); } /** * Acquires the given number of permits from this semaphore, * blocking until all are available, * or the thread is {@linkplain Thread#interrupt interrupted}. * *

Acquires the given number of permits, if they are available, * and returns immediately, reducing the number of available permits * by the given amount. * *

If insufficient permits are available then the current thread becomes * disabled for thread scheduling purposes and lies dormant until * one of two things happens: *

    *
  • Some other thread invokes one of the {@link #release() release} * methods for this semaphore, the current thread is next to be assigned * permits and the number of available permits satisfies this request; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} * the current thread. *
* *

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@linkplain Thread#interrupt interrupted} while waiting * for a permit, *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * Any permits that were to be assigned to this thread are instead * assigned to other threads trying to acquire permits, as if * permits had been made available by a call to {@link #release()}. * * @param permits the number of permits to acquire * @throws InterruptedException if the current thread is interrupted * @throws IllegalArgumentException if {@code permits} is negative */ public void acquire(int permits) throws InterruptedException { if (permits < 0) throw new IllegalArgumentException(); sync.acquire(permits); } /** * Acquires the given number of permits from this semaphore, * blocking until all are available. * *

Acquires the given number of permits, if they are available, * and returns immediately, reducing the number of available permits * by the given amount. * *

If insufficient permits are available then the current thread becomes * disabled for thread scheduling purposes and lies dormant until * some other thread invokes one of the {@link #release() release} * methods for this semaphore, the current thread is next to be assigned * permits and the number of available permits satisfies this request. * *

If the current thread is {@linkplain Thread#interrupt interrupted} * while waiting for permits then it will continue to wait and its * position in the queue is not affected. When the thread does return * from this method its interrupt status will be set. * * @param permits the number of permits to acquire * @throws IllegalArgumentException if {@code permits} is negative * */ public void acquireUninterruptibly(int permits) { sync.acquireUninterruptibly(permits); } /** * Acquires the given number of permits from this semaphore, only * if all are available at the time of invocation. * *

Acquires the given number of permits, if they are available, and * returns immediately, with the value {@code true}, * reducing the number of available permits by the given amount. * *

If insufficient permits are available then this method will return * immediately with the value {@code false} and the number of available * permits is unchanged. * *

Even when this semaphore has been set to use a fair ordering * policy, a call to {@code tryAcquire} will * immediately acquire a permit if one is available, whether or * not other threads are currently waiting. This * "barging" behavior can be useful in certain * circumstances, even though it breaks fairness. If you want to * honor the fairness setting, then use {@link #tryAcquire(int, * long, TimeUnit) tryAcquire(permits, 0, TimeUnit.SECONDS) } * which is almost equivalent (it also detects interruption). * * @param permits the number of permits to acquire * @return {@code true} if the permits were acquired and * {@code false} otherwise * @throws IllegalArgumentException if {@code permits} is negative */ public boolean tryAcquire(int permits) { if (permits < 0) throw new IllegalArgumentException(); return sync.attempt(permits); } /** * Acquires the given number of permits from this semaphore, if all * become available within the given waiting time and the current * thread has not been {@linkplain Thread#interrupt interrupted}. * *

Acquires the given number of permits, if they are available and * returns immediately, with the value {@code true}, * reducing the number of available permits by the given amount. * *

If insufficient permits are available then * the current thread becomes disabled for thread scheduling * purposes and lies dormant until one of three things happens: *

    *
  • Some other thread invokes one of the {@link #release() release} * methods for this semaphore, the current thread is next to be assigned * permits and the number of available permits satisfies this request; or *
  • Some other thread {@linkplain Thread#interrupt interrupts} * the current thread; or *
  • The specified waiting time elapses. *
* *

If the permits are acquired then the value {@code true} is returned. * *

If the current thread: *

    *
  • has its interrupted status set on entry to this method; or *
  • is {@linkplain Thread#interrupt interrupted} while waiting * to acquire the permits, *
* then {@link InterruptedException} is thrown and the current thread's * interrupted status is cleared. * Any permits that were to be assigned to this thread, are instead * assigned to other threads trying to acquire permits, as if * the permits had been made available by a call to {@link #release()}. * *

If the specified waiting time elapses then the value {@code false} * is returned. If the time is less than or equal to zero, the method * will not wait at all. Any permits that were to be assigned to this * thread, are instead assigned to other threads trying to acquire * permits, as if the permits had been made available by a call to * {@link #release()}. * * @param permits the number of permits to acquire * @param timeout the maximum time to wait for the permits * @param unit the time unit of the {@code timeout} argument * @return {@code true} if all permits were acquired and {@code false} * if the waiting time elapsed before all permits were acquired * @throws InterruptedException if the current thread is interrupted * @throws IllegalArgumentException if {@code permits} is negative */ public boolean tryAcquire(int permits, long timeout, TimeUnit unit) throws InterruptedException { if (permits < 0) throw new IllegalArgumentException(); return sync.attempt(permits, unit.toNanos(timeout)); } /** * Releases the given number of permits, returning them to the semaphore. * *

Releases the given number of permits, increasing the number of * available permits by that amount. * If any threads are trying to acquire permits, then one * is selected and given the permits that were just released. * If the number of available permits satisfies that thread's request * then that thread is (re)enabled for thread scheduling purposes; * otherwise the thread will wait until sufficient permits are available. * If there are still permits available * after this thread's request has been satisfied, then those permits * are assigned in turn to other threads trying to acquire permits. * *

There is no requirement that a thread that releases a permit must * have acquired that permit by calling {@link Semaphore#acquire acquire}. * Correct usage of a semaphore is established by programming convention * in the application. * * @param permits the number of permits to release * @throws IllegalArgumentException if {@code permits} is negative */ public void release(int permits) { if (permits < 0) throw new IllegalArgumentException(); sync.release(permits); } /** * Returns the current number of permits available in this semaphore. * *

This method is typically used for debugging and testing purposes. * * @return the number of permits available in this semaphore */ public int availablePermits() { return sync.getPermits(); } /** * Acquires and returns all permits that are immediately available. * * @return the number of permits acquired */ public int drainPermits() { return sync.drain(); } /** * Shrinks the number of available permits by the indicated * reduction. This method can be useful in subclasses that use * semaphores to track resources that become unavailable. This * method differs from {@code acquire} in that it does not block * waiting for permits to become available. * * @param reduction the number of permits to remove * @throws IllegalArgumentException if {@code reduction} is negative */ protected void reducePermits(int reduction) { if (reduction < 0) throw new IllegalArgumentException(); sync.reduce(reduction); } /** * Returns {@code true} if this semaphore has fairness set true. * * @return {@code true} if this semaphore has fairness set true */ public boolean isFair() { return sync instanceof FairSync; } /** * Queries whether any threads are waiting to acquire. Note that * because cancellations may occur at any time, a {@code true} * return does not guarantee that any other thread will ever * acquire. This method is designed primarily for use in * monitoring of the system state. * * @return {@code true} if there may be other threads waiting to * acquire the lock */ public final boolean hasQueuedThreads() { return sync.hasQueuedThreads(); } /** * Returns an estimate of the number of threads waiting to acquire. * The value is only an estimate because the number of threads may * change dynamically while this method traverses internal data * structures. This method is designed for use in monitoring of the * system state, not for synchronization control. * * @return the estimated number of threads waiting for this lock */ public final int getQueueLength() { return sync.getQueueLength(); } /** * Returns a collection containing threads that may be waiting to acquire. * Because the actual set of threads may change dynamically while * constructing this result, the returned collection is only a best-effort * estimate. The elements of the returned collection are in no particular * order. This method is designed to facilitate construction of * subclasses that provide more extensive monitoring facilities. * * @return the collection of threads */ protected Collection getQueuedThreads() { return sync.getQueuedThreads(); } /** * Returns a string identifying this semaphore, as well as its state. * The state, in brackets, includes the String {@code "Permits ="} * followed by the number of permits. * * @return a string identifying this semaphore, as well as its state */ public String toString() { return super.toString() + "[Permits = " + sync.getPermits() + "]"; } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/CopyOnWriteArraySet.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/CopyOnWriteArray0000644001750700037720000003352210633347241032725 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import java.util.AbstractSet; import java.util.Collection; import java.util.Iterator; import java.util.Set; /** * A {@link java.util.Set} that uses an internal {@link CopyOnWriteArrayList} * for all of its operations. Thus, it shares the same basic properties: *

    *
  • It is best suited for applications in which set sizes generally * stay small, read-only operations * vastly outnumber mutative operations, and you need * to prevent interference among threads during traversal. *
  • It is thread-safe. *
  • Mutative operations (add, set, remove, etc.) * are expensive since they usually entail copying the entire underlying * array. *
  • Iterators do not support the mutative remove operation. *
  • Traversal via iterators is fast and cannot encounter * interference from other threads. Iterators rely on * unchanging snapshots of the array at the time the iterators were * constructed. *
* *

Sample Usage. The following code sketch uses a * copy-on-write set to maintain a set of Handler objects that * perform some action upon state updates. * *

 * class Handler { void handle(); ... }
 *
 * class X {
 *    private final CopyOnWriteArraySet<Handler> handlers
 *       = new CopyOnWriteArraySet<Handler>();
 *    public void addHandler(Handler h) { handlers.add(h); }
 *
 *    private long internalState;
 *    private synchronized void changeState() { internalState = ...; }
 *
 *    public void update() {
 *       changeState();
 *       for (Handler handler : handlers)
 *          handler.handle();
 *    }
 * }
 * 
* *

This class is a member of the * * Java Collections Framework. * * @see CopyOnWriteArrayList * @since 1.5 * @author Doug Lea */ public class CopyOnWriteArraySet extends AbstractSet implements java.io.Serializable { private static final long serialVersionUID = 5457747651344034263L; private final CopyOnWriteArrayList al; /** * Creates an empty set. */ public CopyOnWriteArraySet() { al = new CopyOnWriteArrayList(); } /** * Creates a set containing all of the elements of the specified * collection. * * @param c the collection of elements to initially contain * @throws NullPointerException if the specified collection is null */ public CopyOnWriteArraySet(Collection c) { al = new CopyOnWriteArrayList(); al.addAllAbsent(c); } /** * Returns the number of elements in this set. * * @return the number of elements in this set */ public int size() { return al.size(); } /** * Returns true if this set contains no elements. * * @return true if this set contains no elements */ public boolean isEmpty() { return al.isEmpty(); } /** * Returns true if this set contains the specified element. * More formally, returns true if and only if this set * contains an element e such that * (o==null ? e==null : o.equals(e)). * * @param o element whose presence in this set is to be tested * @return true if this set contains the specified element */ public boolean contains(Object o) { return al.contains(o); } /** * Returns an array containing all of the elements in this set. * If this set makes any guarantees as to what order its elements * are returned by its iterator, this method must return the * elements in the same order. * *

The returned array will be "safe" in that no references to it * are maintained by this set. (In other words, this method must * allocate a new array even if this set is backed by an array). * The caller is thus free to modify the returned array. * *

This method acts as bridge between array-based and collection-based * APIs. * * @return an array containing all the elements in this set */ public Object[] toArray() { return al.toArray(); } /** * Returns an array containing all of the elements in this set; the * runtime type of the returned array is that of the specified array. * If the set fits in the specified array, it is returned therein. * Otherwise, a new array is allocated with the runtime type of the * specified array and the size of this set. * *

If this set fits in the specified array with room to spare * (i.e., the array has more elements than this set), the element in * the array immediately following the end of the set is set to * null. (This is useful in determining the length of this * set only if the caller knows that this set does not contain * any null elements.) * *

If this set makes any guarantees as to what order its elements * are returned by its iterator, this method must return the elements * in the same order. * *

Like the {@link #toArray()} method, this method acts as bridge between * array-based and collection-based APIs. Further, this method allows * precise control over the runtime type of the output array, and may, * under certain circumstances, be used to save allocation costs. * *

Suppose x is a set known to contain only strings. * The following code can be used to dump the set into a newly allocated * array of String: * *

     *     String[] y = x.toArray(new String[0]);
* * Note that toArray(new Object[0]) is identical in function to * toArray(). * * @param a the array into which the elements of this set are to be * stored, if it is big enough; otherwise, a new array of the same * runtime type is allocated for this purpose. * @return an array containing all the elements in this set * @throws ArrayStoreException if the runtime type of the specified array * is not a supertype of the runtime type of every element in this * set * @throws NullPointerException if the specified array is null */ public Object[] toArray(Object[] a) { return al.toArray(a); } /** * Removes all of the elements from this set. * The set will be empty after this call returns. */ public void clear() { al.clear(); } /** * Removes the specified element from this set if it is present. * More formally, removes an element e such that * (o==null ? e==null : o.equals(e)), * if this set contains such an element. Returns true if * this set contained the element (or equivalently, if this set * changed as a result of the call). (This set will not contain the * element once the call returns.) * * @param o object to be removed from this set, if present * @return true if this set contained the specified element */ public boolean remove(Object o) { return al.remove(o); } /** * Adds the specified element to this set if it is not already present. * More formally, adds the specified element e to this set if * the set contains no element e2 such that * (e==null ? e2==null : e.equals(e2)). * If this set already contains the element, the call leaves the set * unchanged and returns false. * * @param e element to be added to this set * @return true if this set did not already contain the specified * element */ public boolean add(Object e) { return al.addIfAbsent(e); } /** * Returns true if this set contains all of the elements of the * specified collection. If the specified collection is also a set, this * method returns true if it is a subset of this set. * * @param c collection to be checked for containment in this set * @return true if this set contains all of the elements of the * specified collection * @throws NullPointerException if the specified collection is null * @see #contains(Object) */ public boolean containsAll(Collection c) { return al.containsAll(c); } /** * Adds all of the elements in the specified collection to this set if * they're not already present. If the specified collection is also a * set, the addAll operation effectively modifies this set so * that its value is the union of the two sets. The behavior of * this operation is undefined if the specified collection is modified * while the operation is in progress. * * @param c collection containing elements to be added to this set * @return true if this set changed as a result of the call * @throws NullPointerException if the specified collection is null * @see #add(Object) */ public boolean addAll(Collection c) { return al.addAllAbsent(c) > 0; } /** * Removes from this set all of its elements that are contained in the * specified collection. If the specified collection is also a set, * this operation effectively modifies this set so that its value is the * asymmetric set difference of the two sets. * * @param c collection containing elements to be removed from this set * @return true if this set changed as a result of the call * @throws ClassCastException if the class of an element of this set * is incompatible with the specified collection (optional) * @throws NullPointerException if this set contains a null element and the * specified collection does not permit null elements (optional), * or if the specified collection is null * @see #remove(Object) */ public boolean removeAll(Collection c) { return al.removeAll(c); } /** * Retains only the elements in this set that are contained in the * specified collection. In other words, removes from this set all of * its elements that are not contained in the specified collection. If * the specified collection is also a set, this operation effectively * modifies this set so that its value is the intersection of the * two sets. * * @param c collection containing elements to be retained in this set * @return true if this set changed as a result of the call * @throws ClassCastException if the class of an element of this set * is incompatible with the specified collection (optional) * @throws NullPointerException if this set contains a null element and the * specified collection does not permit null elements (optional), * or if the specified collection is null * @see #remove(Object) */ public boolean retainAll(Collection c) { return al.retainAll(c); } /** * Returns an iterator over the elements contained in this set * in the order in which these elements were added. * *

The returned iterator provides a snapshot of the state of the set * when the iterator was constructed. No synchronization is needed while * traversing the iterator. The iterator does NOT support the * remove method. * * @return an iterator over the elements in this set */ public Iterator iterator() { return al.iterator(); } /** * Compares the specified object with this set for equality. * Returns {@code true} if the specified object is the same object * as this object, or if it is also a {@link Set} and the elements * returned by an {@linkplain java.util.List#iterator() iterator} over the * specified set are the same as the elements returned by an * iterator over this set. More formally, the two iterators are * considered to return the same elements if they return the same * number of elements and for every element {@code e1} returned by * the iterator over the specified set, there is an element * {@code e2} returned by the iterator over this set such that * {@code (e1==null ? e2==null : e1.equals(e2))}. * * @param o object to be compared for equality with this set * @return {@code true} if the specified object is equal to this set */ public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof Set)) return false; Set set = (Set)(o); Iterator it = set.iterator(); // Uses O(n^2) algorithm that is only appropriate // for small sets, which CopyOnWriteArraySets should be. // Use a single snapshot of underlying array Object[] elements = al.getArray(); int len = elements.length; // Mark matched elements to avoid re-checking boolean[] matched = new boolean[len]; int k = 0; outer: while (it.hasNext()) { if (++k > len) return false; Object x = it.next(); for (int i = 0; i < len; ++i) { if (!matched[i] && eq(x, elements[i])) { matched[i] = true; continue outer; } } return false; } return k == len; } /** * Test for equality, coping with nulls. */ private static boolean eq(Object o1, Object o2) { return (o1 == null ? o2 == null : o1.equals(o2)); } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/FutureTask.java0000644001750700037720000002327010633351741032520 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain. Use, modify, and * redistribute this code in any way without acknowledgement. */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.concurrent.*; // for javadoc import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; /** * A cancellable asynchronous computation. This class provides a base * implementation of {@link Future}, with methods to start and cancel * a computation, query to see if the computation is complete, and * retrieve the result of the computation. The result can only be * retrieved when the computation has completed; the get * method will block if the computation has not yet completed. Once * the computation has completed, the computation cannot be restarted * or cancelled. * *

A FutureTask can be used to wrap a {@link Callable} or * {@link java.lang.Runnable} object. Because FutureTask * implements Runnable, a FutureTask can be * submitted to an {@link Executor} for execution. * *

In addition to serving as a standalone class, this class provides * protected functionality that may be useful when creating * customized task classes. * * @since 1.5 * @author Doug Lea */ public class FutureTask implements RunnableFuture { /** State value representing that task is ready to run */ private static final int READY = 0; /** State value representing that task is running */ private static final int RUNNING = 1; /** State value representing that task ran */ private static final int RAN = 2; /** State value representing that task was cancelled */ private static final int CANCELLED = 4; /** The underlying callable */ private final Callable callable; /** The result to return from get() */ private Object result; /** The exception to throw from get() */ private Throwable exception; private int state; /** * The thread running task. When nulled after set/cancel, this * indicates that the results are accessible. Must be * volatile, to ensure visibility upon completion. */ private volatile Thread runner; /** * Creates a FutureTask that will, upon running, execute the * given Callable. * * @param callable the callable task * @throws NullPointerException if callable is null */ public FutureTask(Callable callable) { if (callable == null) throw new NullPointerException(); this.callable = callable; } /** * Creates a FutureTask that will, upon running, execute the * given Runnable, and arrange that get will return the * given result on successful completion. * * @param runnable the runnable task * @param result the result to return on successful completion. If * you don't need a particular result, consider using * constructions of the form: * Future<?> f = new FutureTask<Object>(runnable, null) * @throws NullPointerException if runnable is null */ public FutureTask(Runnable runnable, Object result) { this(Executors.callable(runnable, result)); } public synchronized boolean isCancelled() { return state == CANCELLED; } public synchronized boolean isDone() { return ranOrCancelled() && runner == null; } public boolean cancel(boolean mayInterruptIfRunning) { synchronized (this) { if (ranOrCancelled()) return false; state = CANCELLED; if (mayInterruptIfRunning) { Thread r = runner; if (r != null) r.interrupt(); } runner = null; notifyAll(); } done(); return true; } /** * @throws CancellationException {@inheritDoc} */ public synchronized Object get() throws InterruptedException, ExecutionException { waitFor(); return getResult(); } /** * @throws CancellationException {@inheritDoc} */ public synchronized Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { waitFor(unit.toNanos(timeout)); return getResult(); } /** * Protected method invoked when this task transitions to state * isDone (whether normally or via cancellation). The * default implementation does nothing. Subclasses may override * this method to invoke completion callbacks or perform * bookkeeping. Note that you can query status inside the * implementation of this method to determine whether this task * has been cancelled. */ protected void done() { } /** * Sets the result of this Future to the given value unless * this future has already been set or has been cancelled. * This method is invoked internally by the run method * upon successful completion of the computation. * @param v the value */ protected void set(Object v) { setCompleted(v); } /** * Causes this future to report an ExecutionException * with the given throwable as its cause, unless this Future has * already been set or has been cancelled. * This method is invoked internally by the run method * upon failure of the computation. * @param t the cause of failure */ protected void setException(Throwable t) { setFailed(t); } /** * Sets this Future to the result of its computation * unless it has been cancelled. */ public void run() { synchronized (this) { if (state != READY) return; state = RUNNING; runner = Thread.currentThread(); } try { set(callable.call()); } catch (Throwable ex) { setException(ex); } } /** * Executes the computation without setting its result, and then * resets this Future to initial state, failing to do so if the * computation encounters an exception or is cancelled. This is * designed for use with tasks that intrinsically execute more * than once. * @return true if successfully run and reset */ protected boolean runAndReset() { synchronized (this) { if (state != READY) return false; state = RUNNING; runner = Thread.currentThread(); } try { callable.call(); // don't set result synchronized (this) { runner = null; if (state == RUNNING) { state = READY; return true; } else { return false; } } } catch (Throwable ex) { setException(ex); return false; } } // PRE: lock owned private boolean ranOrCancelled() { return (state & (RAN | CANCELLED)) != 0; } /** * Marks the task as completed. * @param result the result of a task. */ private void setCompleted(Object result) { synchronized (this) { if (ranOrCancelled()) return; this.state = RAN; this.result = result; this.runner = null; notifyAll(); } // invoking callbacks *after* setting future as completed and // outside the synchronization block makes it safe to call // interrupt() from within callback code (in which case it will be // ignored rather than cause deadlock / illegal state exception) done(); } /** * Marks the task as failed. * @param exception the cause of abrupt completion. */ private void setFailed(Throwable exception) { synchronized (this) { if (ranOrCancelled()) return; this.state = RAN; this.exception = exception; this.runner = null; notifyAll(); } // invoking callbacks *after* setting future as completed and // outside the synchronization block makes it safe to call // interrupt() from within callback code (in which case it will be // ignored rather than cause deadlock / illegal state exception) done(); } /** * Waits for the task to complete. * PRE: lock owned */ private void waitFor() throws InterruptedException { while (!isDone()) { wait(); } } /** * Waits for the task to complete for timeout nanoseconds or throw * TimeoutException if still not completed after that * PRE: lock owned */ private void waitFor(long nanos) throws InterruptedException, TimeoutException { if (nanos < 0) throw new IllegalArgumentException(); if (isDone()) return; long deadline = Utils.nanoTime() + nanos; while (nanos > 0) { TimeUnit.NANOSECONDS.timedWait(this, nanos); if (isDone()) return; nanos = deadline - Utils.nanoTime(); } throw new TimeoutException(); } /** * Gets the result of the task. * * PRE: task completed * PRE: lock owned */ private Object getResult() throws ExecutionException { if (state == CANCELLED) { throw new CancellationException(); } if (exception != null) { throw new ExecutionException(exception); } return result; } // todo: consider //public String toString() { // return callable.toString(); //} } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/RunnableScheduledFuture.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/RunnableSchedule0000644001750700037720000000152410255705321032721 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * A {@link ScheduledFuture} that is {@link Runnable}. Successful * execution of the run method causes completion of the * Future and allows access to its results. * @see FutureTask * @see Executor * @since 1.6 * @author Doug Lea */ public interface RunnableScheduledFuture extends RunnableFuture, ScheduledFuture { /** * Returns true if this is a periodic task. A periodic task may * re-run according to some schedule. A non-periodic task can be * run only once. * * @return true if this task is periodic */ boolean isPeriodic(); } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/RejectedExecutionException.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/RejectedExecutio0000644001750700037720000000403410153210664032726 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * Exception thrown by an {@link Executor} when a task cannot be * accepted for execution. * * @since 1.5 * @author Doug Lea */ public class RejectedExecutionException extends RuntimeException { private static final long serialVersionUID = -375805702767069545L; /** * Constructs a RejectedExecutionException with no detail message. * The cause is not initialized, and may subsequently be * initialized by a call to {@link #initCause(Throwable) initCause}. */ public RejectedExecutionException() { } /** * Constructs a RejectedExecutionException with the * specified detail message. The cause is not initialized, and may * subsequently be initialized by a call to {@link * #initCause(Throwable) initCause}. * * @param message the detail message */ public RejectedExecutionException(String message) { super(message); } /** * Constructs a RejectedExecutionException with the * specified detail message and cause. * * @param message the detail message * @param cause the cause (which is saved for later retrieval by the * {@link #getCause()} method) */ public RejectedExecutionException(String message, Throwable cause) { super(message, cause); } /** * Constructs a RejectedExecutionException with the * specified cause. The detail message is set to:

 (cause ==
     * null ? null : cause.toString())
(which typically contains * the class and detail message of cause). * * @param cause the cause (which is saved for later retrieval by the * {@link #getCause()} method) */ public RejectedExecutionException(Throwable cause) { super(cause); } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentNavigableMap.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentNaviga0000644001750700037720000001361210431777171032757 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import edu.emory.mathcs.backport.java.util.*; import java.util.Set; import java.util.SortedMap; /** * A {@link ConcurrentMap} supporting {@link NavigableMap} operations, * and recursively so for its navigable sub-maps. * *

This interface is a member of the * * Java Collections Framework. * * @author Doug Lea * @since 1.6 */ public interface ConcurrentNavigableMap extends ConcurrentMap, NavigableMap { /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive); /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ NavigableMap headMap(Object toKey, boolean inclusive); /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ NavigableMap tailMap(Object fromKey, boolean inclusive); /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ SortedMap subMap(Object fromKey, Object toKey); /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ SortedMap headMap(Object toKey); /** * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ SortedMap tailMap(Object fromKey); /** * Returns a reverse order view of the mappings contained in this map. * The descending map is backed by this map, so changes to the map are * reflected in the descending map, and vice-versa. * *

The returned map has an ordering equivalent to * {@link Collections#reverseOrder(Comparator) Collections.reverseOrder}(comparator()). * The expression {@code m.descendingMap().descendingMap()} returns a * view of {@code m} essentially equivalent to {@code m}. * * @return a reverse order view of this map */ NavigableMap descendingMap(); /** * Returns a {@link NavigableSet} view of the keys contained in this map. * The set's iterator returns the keys in ascending order. * The set is backed by the map, so changes to the map are * reflected in the set, and vice-versa. The set supports element * removal, which removes the corresponding mapping from the map, * via the {@code Iterator.remove}, {@code Set.remove}, * {@code removeAll}, {@code retainAll}, and {@code clear} * operations. It does not support the {@code add} or {@code addAll} * operations. * *

The view's {@code iterator} is a "weakly consistent" iterator * that will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. * * @return a navigable set view of the keys in this map */ public NavigableSet navigableKeySet(); /** * Returns a {@link NavigableSet} view of the keys contained in this map. * The set's iterator returns the keys in ascending order. * The set is backed by the map, so changes to the map are * reflected in the set, and vice-versa. The set supports element * removal, which removes the corresponding mapping from the map, * via the {@code Iterator.remove}, {@code Set.remove}, * {@code removeAll}, {@code retainAll}, and {@code clear} * operations. It does not support the {@code add} or {@code addAll} * operations. * *

The view's {@code iterator} is a "weakly consistent" iterator * that will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. * *

This method is equivalent to method {@code navigableKeySet}. * * @return a navigable set view of the keys in this map */ public Set keySet(); /** * Returns a reverse order {@link NavigableSet} view of the keys contained in this map. * The set's iterator returns the keys in descending order. * The set is backed by the map, so changes to the map are * reflected in the set, and vice-versa. The set supports element * removal, which removes the corresponding mapping from the map, * via the {@code Iterator.remove}, {@code Set.remove}, * {@code removeAll}, {@code retainAll}, and {@code clear} * operations. It does not support the {@code add} or {@code addAll} * operations. * *

The view's {@code iterator} is a "weakly consistent" iterator * that will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. * * @return a reverse order navigable set view of the keys in this map */ public NavigableSet descendingKeySet(); } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootbackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ArrayBlockingQueue.javabackport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/ArrayBlockingQue0000644001750700037720000006256610461021764032716 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import java.util.Collection; import java.util.Iterator; import java.util.NoSuchElementException; import edu.emory.mathcs.backport.java.util.AbstractQueue; import edu.emory.mathcs.backport.java.util.concurrent.locks.*; import edu.emory.mathcs.backport.java.util.concurrent.helpers.*; /** * A bounded {@linkplain BlockingQueue blocking queue} backed by an * array. This queue orders elements FIFO (first-in-first-out). The * head of the queue is that element that has been on the * queue the longest time. The tail of the queue is that * element that has been on the queue the shortest time. New elements * are inserted at the tail of the queue, and the queue retrieval * operations obtain elements at the head of the queue. * *

This is a classic "bounded buffer", in which a * fixed-sized array holds elements inserted by producers and * extracted by consumers. Once created, the capacity cannot be * increased. Attempts to put an element into a full queue * will result in the operation blocking; attempts to take an * element from an empty queue will similarly block. * *

This class supports an optional fairness policy for ordering * waiting producer and consumer threads. By default, this ordering * is not guaranteed. However, a queue constructed with fairness set * to true grants threads access in FIFO order. Fairness * generally decreases throughput but reduces variability and avoids * starvation. * *

This class and its iterator implement all of the * optional methods of the {@link Collection} and {@link * Iterator} interfaces. * *

This class is a member of the * * Java Collections Framework. * * @since 1.5 * @author Doug Lea */ public class ArrayBlockingQueue extends AbstractQueue implements BlockingQueue, java.io.Serializable { /** * Serialization ID. This class relies on default serialization * even for the items array, which is default-serialized, even if * it is empty. Otherwise it could not be declared final, which is * necessary here. */ private static final long serialVersionUID = -817911632652898426L; /** The queued items */ private final Object[] items; /** items index for next take, poll or remove */ private int takeIndex; /** items index for next put, offer, or add. */ private int putIndex; /** Number of items in the queue */ private int count; /* * Concurrency control uses the classic two-condition algorithm * found in any textbook. */ /** Main lock guarding all access */ private final ReentrantLock lock; /** Condition for waiting takes */ private final Condition notEmpty; /** Condition for waiting puts */ private final Condition notFull; // Internal helper methods /** * Circularly increment i. */ final int inc(int i) { return (++i == items.length)? 0 : i; } /** * Inserts element at current put position, advances, and signals. * Call only when holding lock. */ private void insert(Object x) { items[putIndex] = x; putIndex = inc(putIndex); ++count; notEmpty.signal(); } /** * Extracts element at current take position, advances, and signals. * Call only when holding lock. */ private Object extract() { final Object[] items = this.items; Object x = items[takeIndex]; items[takeIndex] = null; takeIndex = inc(takeIndex); --count; notFull.signal(); return x; } /** * Utility for remove and iterator.remove: Delete item at position i. * Call only when holding lock. */ void removeAt(int i) { final Object[] items = this.items; // if removing front item, just advance if (i == takeIndex) { items[takeIndex] = null; takeIndex = inc(takeIndex); } else { // slide over all others up through putIndex. for (;;) { int nexti = inc(i); if (nexti != putIndex) { items[i] = items[nexti]; i = nexti; } else { items[i] = null; putIndex = i; break; } } } --count; notFull.signal(); } /** * Creates an ArrayBlockingQueue with the given (fixed) * capacity and default access policy. * @param capacity the capacity of this queue * @throws IllegalArgumentException if capacity is less than 1 */ public ArrayBlockingQueue(int capacity) { this(capacity, false); } /** * Creates an ArrayBlockingQueue with the given (fixed) * capacity and the specified access policy. * @param capacity the capacity of this queue * @param fair if true then queue accesses for threads blocked * on insertion or removal, are processed in FIFO order; * if false the access order is unspecified. * @throws IllegalArgumentException if capacity is less than 1 */ public ArrayBlockingQueue(int capacity, boolean fair) { if (capacity <= 0) throw new IllegalArgumentException(); this.items = new Object[capacity]; lock = new ReentrantLock(fair); notEmpty = lock.newCondition(); notFull = lock.newCondition(); } /** * Creates an ArrayBlockingQueue with the given (fixed) * capacity, the specified access policy and initially containing the * elements of the given collection, * added in traversal order of the collection's iterator. * @param capacity the capacity of this queue * @param fair if true then queue accesses for threads blocked * on insertion or removal, are processed in FIFO order; * if false the access order is unspecified. * @param c the collection of elements to initially contain * @throws IllegalArgumentException if capacity is less than * c.size(), or less than 1. * @throws NullPointerException if the specified collection or any * of its elements are null */ public ArrayBlockingQueue(int capacity, boolean fair, Collection c) { this(capacity, fair); if (capacity < c.size()) throw new IllegalArgumentException(); for (Iterator it = c.iterator(); it.hasNext();) add(it.next()); } /** * Inserts the specified element at the tail of this queue if it is * possible to do so immediately without exceeding the queue's capacity, * returning true upon success and throwing an * IllegalStateException if this queue is full. * * @param e the element to add * @return true (as specified by {@link Collection#add}) * @throws IllegalStateException if this queue is full * @throws NullPointerException if the specified element is null */ public boolean add(Object e) { return super.add(e); } /** * Inserts the specified element at the tail of this queue if it is * possible to do so immediately without exceeding the queue's capacity, * returning true upon success and false if this queue * is full. This method is generally preferable to method {@link #add}, * which can fail to insert an element only by throwing an exception. * * @throws NullPointerException if the specified element is null */ public boolean offer(Object e) { if (e == null) throw new NullPointerException(); final ReentrantLock lock = this.lock; lock.lock(); try { if (count == items.length) return false; else { insert(e); return true; } } finally { lock.unlock(); } } /** * Inserts the specified element at the tail of this queue, waiting * for space to become available if the queue is full. * * @throws InterruptedException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public void put(Object e) throws InterruptedException { if (e == null) throw new NullPointerException(); final Object[] items = this.items; final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { try { while (count == items.length) notFull.await(); } catch (InterruptedException ie) { notFull.signal(); // propagate to non-interrupted thread throw ie; } insert(e); } finally { lock.unlock(); } } /** * Inserts the specified element at the tail of this queue, waiting * up to the specified wait time for space to become available if * the queue is full. * * @throws InterruptedException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public boolean offer(Object e, long timeout, TimeUnit unit) throws InterruptedException { if (e == null) throw new NullPointerException(); long nanos = unit.toNanos(timeout); final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { long deadline = Utils.nanoTime() + nanos; for (;;) { if (count != items.length) { insert(e); return true; } if (nanos <= 0) return false; try { notFull.await(nanos, TimeUnit.NANOSECONDS); nanos = deadline - Utils.nanoTime(); } catch (InterruptedException ie) { notFull.signal(); // propagate to non-interrupted thread throw ie; } } } finally { lock.unlock(); } } public Object poll() { final ReentrantLock lock = this.lock; lock.lock(); try { if (count == 0) return null; Object x = extract(); return x; } finally { lock.unlock(); } } public Object take() throws InterruptedException { final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { try { while (count == 0) notEmpty.await(); } catch (InterruptedException ie) { notEmpty.signal(); // propagate to non-interrupted thread throw ie; } Object x = extract(); return x; } finally { lock.unlock(); } } public Object poll(long timeout, TimeUnit unit) throws InterruptedException { long nanos = unit.toNanos(timeout); final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { long deadline = Utils.nanoTime() + nanos; for (;;) { if (count != 0) { Object x = extract(); return x; } if (nanos <= 0) return null; try { notEmpty.await(nanos, TimeUnit.NANOSECONDS); nanos = deadline - Utils.nanoTime(); } catch (InterruptedException ie) { notEmpty.signal(); // propagate to non-interrupted thread throw ie; } } } finally { lock.unlock(); } } public Object peek() { final ReentrantLock lock = this.lock; lock.lock(); try { return (count == 0) ? null : items[takeIndex]; } finally { lock.unlock(); } } // this doc comment is overridden to remove the reference to collections // greater in size than Integer.MAX_VALUE /** * Returns the number of elements in this queue. * * @return the number of elements in this queue */ public int size() { final ReentrantLock lock = this.lock; lock.lock(); try { return count; } finally { lock.unlock(); } } // this doc comment is a modified copy of the inherited doc comment, // without the reference to unlimited queues. /** * Returns the number of additional elements that this queue can ideally * (in the absence of memory or resource constraints) accept without * blocking. This is always equal to the initial capacity of this queue * less the current size of this queue. * *

Note that you cannot always tell if an attempt to insert * an element will succeed by inspecting remainingCapacity * because it may be the case that another thread is about to * insert or remove an element. */ public int remainingCapacity() { final ReentrantLock lock = this.lock; lock.lock(); try { return items.length - count; } finally { lock.unlock(); } } /** * Removes a single instance of the specified element from this queue, * if it is present. More formally, removes an element e such * that o.equals(e), if this queue contains one or more such * elements. * Returns true if this queue contained the specified element * (or equivalently, if this queue changed as a result of the call). * * @param o element to be removed from this queue, if present * @return true if this queue changed as a result of the call */ public boolean remove(Object o) { if (o == null) return false; final Object[] items = this.items; final ReentrantLock lock = this.lock; lock.lock(); try { int i = takeIndex; int k = 0; for (;;) { if (k++ >= count) return false; if (o.equals(items[i])) { removeAt(i); return true; } i = inc(i); } } finally { lock.unlock(); } } /** * Returns true if this queue contains the specified element. * More formally, returns true if and only if this queue contains * at least one element e such that o.equals(e). * * @param o object to be checked for containment in this queue * @return true if this queue contains the specified element */ public boolean contains(Object o) { if (o == null) return false; final Object[] items = this.items; final ReentrantLock lock = this.lock; lock.lock(); try { int i = takeIndex; int k = 0; while (k++ < count) { if (o.equals(items[i])) return true; i = inc(i); } return false; } finally { lock.unlock(); } } /** * Returns an array containing all of the elements in this queue, in * proper sequence. * *

The returned array will be "safe" in that no references to it are * maintained by this queue. (In other words, this method must allocate * a new array). The caller is thus free to modify the returned array. * *

This method acts as bridge between array-based and collection-based * APIs. * * @return an array containing all of the elements in this queue */ public Object[] toArray() { final Object[] items = this.items; final ReentrantLock lock = this.lock; lock.lock(); try { Object[] a = new Object[count]; int k = 0; int i = takeIndex; while (k < count) { a[k++] = items[i]; i = inc(i); } return a; } finally { lock.unlock(); } } /** * Returns an array containing all of the elements in this queue, in * proper sequence; the runtime type of the returned array is that of * the specified array. If the queue fits in the specified array, it * is returned therein. Otherwise, a new array is allocated with the * runtime type of the specified array and the size of this queue. * *

If this queue fits in the specified array with room to spare * (i.e., the array has more elements than this queue), the element in * the array immediately following the end of the queue is set to * null. * *

Like the {@link #toArray()} method, this method acts as bridge between * array-based and collection-based APIs. Further, this method allows * precise control over the runtime type of the output array, and may, * under certain circumstances, be used to save allocation costs. * *

Suppose x is a queue known to contain only strings. * The following code can be used to dump the queue into a newly * allocated array of String: * *

     *     String[] y = x.toArray(new String[0]);
* * Note that toArray(new Object[0]) is identical in function to * toArray(). * * @param a the array into which the elements of the queue are to * be stored, if it is big enough; otherwise, a new array of the * same runtime type is allocated for this purpose * @return an array containing all of the elements in this queue * @throws ArrayStoreException if the runtime type of the specified array * is not a supertype of the runtime type of every element in * this queue * @throws NullPointerException if the specified array is null */ public Object[] toArray(Object[] a) { final Object[] items = this.items; final ReentrantLock lock = this.lock; lock.lock(); try { if (a.length < count) a = (Object[])java.lang.reflect.Array.newInstance( a.getClass().getComponentType(), count ); int k = 0; int i = takeIndex; while (k < count) { a[k++] = (Object)items[i]; i = inc(i); } if (a.length > count) a[count] = null; return a; } finally { lock.unlock(); } } public String toString() { final ReentrantLock lock = this.lock; lock.lock(); try { return super.toString(); } finally { lock.unlock(); } } /** * Atomically removes all of the elements from this queue. * The queue will be empty after this call returns. */ public void clear() { final Object[] items = this.items; final ReentrantLock lock = this.lock; lock.lock(); try { int i = takeIndex; int k = count; while (k-- > 0) { items[i] = null; i = inc(i); } count = 0; putIndex = 0; takeIndex = 0; notFull.signalAll(); } finally { lock.unlock(); } } /** * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public int drainTo(Collection c) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); final Object[] items = this.items; final ReentrantLock lock = this.lock; lock.lock(); try { int i = takeIndex; int n = 0; int max = count; while (n < max) { c.add(items[i]); items[i] = null; i = inc(i); ++n; } if (n > 0) { count = 0; putIndex = 0; takeIndex = 0; notFull.signalAll(); } return n; } finally { lock.unlock(); } } /** * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ public int drainTo(Collection c, int maxElements) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); if (maxElements <= 0) return 0; final Object[] items = this.items; final ReentrantLock lock = this.lock; lock.lock(); try { int i = takeIndex; int n = 0; int sz = count; int max = (maxElements < count)? maxElements : count; while (n < max) { c.add(items[i]); items[i] = null; i = inc(i); ++n; } if (n > 0) { count -= n; takeIndex = i; notFull.signalAll(); } return n; } finally { lock.unlock(); } } /** * Returns an iterator over the elements in this queue in proper sequence. * The returned Iterator is a "weakly consistent" iterator that * will never throw {@link java.util.ConcurrentModificationException}, * and guarantees to traverse elements as they existed upon * construction of the iterator, and may (but is not guaranteed to) * reflect any modifications subsequent to construction. * * @return an iterator over the elements in this queue in proper sequence */ public Iterator iterator() { final ReentrantLock lock = this.lock; lock.lock(); try { return new Itr(); } finally { lock.unlock(); } } /** * Iterator for ArrayBlockingQueue */ private class Itr implements Iterator { /** * Index of element to be returned by next, * or a negative number if no such. */ private int nextIndex; /** * nextItem holds on to item fields because once we claim * that an element exists in hasNext(), we must return it in * the following next() call even if it was in the process of * being removed when hasNext() was called. */ private Object nextItem; /** * Index of element returned by most recent call to next. * Reset to -1 if this element is deleted by a call to remove. */ private int lastRet; Itr() { lastRet = -1; if (count == 0) nextIndex = -1; else { nextIndex = takeIndex; nextItem = items[takeIndex]; } } public boolean hasNext() { /* * No sync. We can return true by mistake here * only if this iterator passed across threads, * which we don't support anyway. */ return nextIndex >= 0; } /** * Checks whether nextIndex is valid; if so setting nextItem. * Stops iterator when either hits putIndex or sees null item. */ private void checkNext() { if (nextIndex == putIndex) { nextIndex = -1; nextItem = null; } else { nextItem = items[nextIndex]; if (nextItem == null) nextIndex = -1; } } public Object next() { final ReentrantLock lock = ArrayBlockingQueue.this.lock; lock.lock(); try { if (nextIndex < 0) throw new NoSuchElementException(); lastRet = nextIndex; Object x = nextItem; nextIndex = inc(nextIndex); checkNext(); return x; } finally { lock.unlock(); } } public void remove() { final ReentrantLock lock = ArrayBlockingQueue.this.lock; lock.lock(); try { int i = lastRet; if (i == -1) throw new IllegalStateException(); lastRet = -1; int ti = takeIndex; removeAt(i); // back up cursor (reset to front if was first element) nextIndex = (i == ti) ? takeIndex : i; checkNext(); } finally { lock.unlock(); } } } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/Executor.java0000644001750700037720000000723710342377271032231 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; /** * An object that executes submitted {@link Runnable} tasks. This * interface provides a way of decoupling task submission from the * mechanics of how each task will be run, including details of thread * use, scheduling, etc. An Executor is normally used * instead of explicitly creating threads. For example, rather than * invoking new Thread(new(RunnableTask())).start() for each * of a set of tasks, you might use: * *
 * Executor executor = anExecutor;
 * executor.execute(new RunnableTask1());
 * executor.execute(new RunnableTask2());
 * ...
 * 
* * However, the Executor interface does not strictly * require that execution be asynchronous. In the simplest case, an * executor can run the submitted task immediately in the caller's * thread: * *
 * class DirectExecutor implements Executor {
 *     public void execute(Runnable r) {
 *         r.run();
 *     }
 * }
* * More typically, tasks are executed in some thread other * than the caller's thread. The executor below spawns a new thread * for each task. * *
 * class ThreadPerTaskExecutor implements Executor {
 *     public void execute(Runnable r) {
 *         new Thread(r).start();
 *     }
 * }
* * Many Executor implementations impose some sort of * limitation on how and when tasks are scheduled. The executor below * serializes the submission of tasks to a second executor, * illustrating a composite executor. * *
 * class SerialExecutor implements Executor {
 *     final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
 *     final Executor executor;
 *     Runnable active;
 *
 *     SerialExecutor(Executor executor) {
 *         this.executor = executor;
 *     }
 *
 *     public synchronized void execute(final Runnable r) {
 *         tasks.offer(new Runnable() {
 *             public void run() {
 *                 try {
 *                     r.run();
 *                 } finally {
 *                     scheduleNext();
 *                 }
 *             }
 *         });
 *         if (active == null) {
 *             scheduleNext();
 *         }
 *     }
 *
 *     protected synchronized void scheduleNext() {
 *         if ((active = tasks.poll()) != null) {
 *             executor.execute(active);
 *         }
 *     }
 * }
* * The Executor implementations provided in this package * implement {@link ExecutorService}, which is a more extensive * interface. The {@link ThreadPoolExecutor} class provides an * extensible thread pool implementation. The {@link Executors} class * provides convenient factory methods for these Executors. * *

Memory consistency effects: Actions in a thread prior to * submitting a {@code Runnable} object to an {@code Executor} * happen-before * its execution begins, perhaps in another thread. * * @since 1.5 * @author Doug Lea */ public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a new thread, in a pooled thread, or in the calling * thread, at the discretion of the Executor implementation. * * @param command the runnable task * @throws RejectedExecutionException if this task cannot be * accepted for execution. * @throws NullPointerException if command is null */ void execute(Runnable command); } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/concurrent/TimeUnit.java0000644001750700037720000004110210634055342032152 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util.concurrent; import java.io.InvalidObjectException; import java.io.ObjectStreamException; /** * A TimeUnit represents time durations at a given unit of * granularity and provides utility methods to convert across units, * and to perform timing and delay operations in these units. A * TimeUnit does not maintain time information, but only * helps organize and use time representations that may be maintained * separately across various contexts. A nanosecond is defined as one * thousandth of a microsecond, a microsecond as one thousandth of a * millisecond, a millisecond as one thousandth of a second, a minute * as sixty seconds, an hour as sixty minutes, and a day as twenty four * hours. * *

A TimeUnit is mainly used to inform time-based methods * how a given timing parameter should be interpreted. For example, * the following code will timeout in 50 milliseconds if the {@link * edu.emory.mathcs.backport.java.util.concurrent.locks.Lock lock} is not available: * *

  Lock lock = ...;
  *  if ( lock.tryLock(50L, TimeUnit.MILLISECONDS) ) ...
  * 
* while this code will timeout in 50 seconds: *
  *  Lock lock = ...;
  *  if ( lock.tryLock(50L, TimeUnit.SECONDS) ) ...
  * 
* * Note however, that there is no guarantee that a particular timeout * implementation will be able to notice the passage of time at the * same granularity as the given TimeUnit. * * @since 1.5 * @author Doug Lea */ public abstract class TimeUnit implements java.io.Serializable { public static final TimeUnit NANOSECONDS = new TimeUnit(0, "NANOSECONDS") { private final static long serialVersionUID = 535148490883208361L; public long toNanos(long d) { return d; } public long toMicros(long d) { return d/(C1/C0); } public long toMillis(long d) { return d/(C2/C0); } public long toSeconds(long d) { return d/(C3/C0); } public long toMinutes(long d) { return d/(C4/C0); } public long toHours(long d) { return d/(C5/C0); } public long toDays(long d) { return d/(C6/C0); } public long convert(long d, TimeUnit u) { return u.toNanos(d); } int excessNanos(long d, long m) { return (int)(d - (m*C2)); } }; public static final TimeUnit MICROSECONDS = new TimeUnit(1, "MICROSECONDS") { private final static long serialVersionUID = 2185906575929579108L; public long toNanos(long d) { return x(d, C1/C0, MAX/(C1/C0)); } public long toMicros(long d) { return d; } public long toMillis(long d) { return d/(C2/C1); } public long toSeconds(long d) { return d/(C3/C1); } public long toMinutes(long d) { return d/(C4/C1); } public long toHours(long d) { return d/(C5/C1); } public long toDays(long d) { return d/(C6/C1); } public long convert(long d, TimeUnit u) { return u.toMicros(d); } int excessNanos(long d, long m) { return (int)((d*C1) - (m*C2)); } }; public static final TimeUnit MILLISECONDS = new TimeUnit(2, "MILLISECONDS") { private final static long serialVersionUID = 9032047794123325184L; public long toNanos(long d) { return x(d, C2/C0, MAX/(C2/C0)); } public long toMicros(long d) { return x(d, C2/C1, MAX/(C2/C1)); } public long toMillis(long d) { return d; } public long toSeconds(long d) { return d/(C3/C2); } public long toMinutes(long d) { return d/(C4/C2); } public long toHours(long d) { return d/(C5/C2); } public long toDays(long d) { return d/(C6/C2); } public long convert(long d, TimeUnit u) { return u.toMillis(d); } int excessNanos(long d, long m) { return 0; } }; public static final TimeUnit SECONDS = new TimeUnit(3, "SECONDS") { private final static long serialVersionUID = 227755028449378390L; public long toNanos(long d) { return x(d, C3/C0, MAX/(C3/C0)); } public long toMicros(long d) { return x(d, C3/C1, MAX/(C3/C1)); } public long toMillis(long d) { return x(d, C3/C2, MAX/(C3/C2)); } public long toSeconds(long d) { return d; } public long toMinutes(long d) { return d/(C4/C3); } public long toHours(long d) { return d/(C5/C3); } public long toDays(long d) { return d/(C6/C3); } public long convert(long d, TimeUnit u) { return u.toSeconds(d); } int excessNanos(long d, long m) { return 0; } }; public static final TimeUnit MINUTES = new TimeUnit(4, "MINUTES") { private final static long serialVersionUID = 1827351566402609187L; public long toNanos(long d) { return x(d, C4/C0, MAX/(C4/C0)); } public long toMicros(long d) { return x(d, C4/C1, MAX/(C4/C1)); } public long toMillis(long d) { return x(d, C4/C2, MAX/(C4/C2)); } public long toSeconds(long d) { return x(d, C4/C3, MAX/(C4/C3)); } public long toMinutes(long d) { return d; } public long toHours(long d) { return d/(C5/C4); } public long toDays(long d) { return d/(C6/C4); } public long convert(long d, TimeUnit u) { return u.toMinutes(d); } int excessNanos(long d, long m) { return 0; } }; public static final TimeUnit HOURS = new TimeUnit(5, "HOURS") { private final static long serialVersionUID = -6438436134732089810L; public long toNanos(long d) { return x(d, C5/C0, MAX/(C5/C0)); } public long toMicros(long d) { return x(d, C5/C1, MAX/(C5/C1)); } public long toMillis(long d) { return x(d, C5/C2, MAX/(C5/C2)); } public long toSeconds(long d) { return x(d, C5/C3, MAX/(C5/C3)); } public long toMinutes(long d) { return x(d, C5/C4, MAX/(C5/C4)); } public long toHours(long d) { return d; } public long toDays(long d) { return d/(C6/C5); } public long convert(long d, TimeUnit u) { return u.toHours(d); } int excessNanos(long d, long m) { return 0; } }; public static final TimeUnit DAYS = new TimeUnit(6, "DAYS") { private final static long serialVersionUID = 567463171959674600L; public long toNanos(long d) { return x(d, C6/C0, MAX/(C6/C0)); } public long toMicros(long d) { return x(d, C6/C1, MAX/(C6/C1)); } public long toMillis(long d) { return x(d, C6/C2, MAX/(C6/C2)); } public long toSeconds(long d) { return x(d, C6/C3, MAX/(C6/C3)); } public long toMinutes(long d) { return x(d, C6/C4, MAX/(C6/C4)); } public long toHours(long d) { return x(d, C6/C5, MAX/(C6/C5)); } public long toDays(long d) { return d; } public long convert(long d, TimeUnit u) { return u.toDays(d); } int excessNanos(long d, long m) { return 0; } }; private static final TimeUnit[] values = new TimeUnit[] { NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS }; public static TimeUnit[] values() { return (TimeUnit[])values.clone(); } /** * Returns the enum constant of this type with the specified name. The * string must match exactly an identifier used to declare an * enum constant in this type. (Extraneous whitespace characters are not * permitted.) * * @param name the name of the enum constant to be returned * @return the enum constant with the specified name * @throws IllegalArgumentException * if this enum type has no constant with the specified name */ public static TimeUnit valueOf(String name) { for (int i = 0; i < values.length; i++) { if (values[i].name.equals(name)) { return values[i]; } } throw new IllegalArgumentException("No enum const TimeUnit." + name); } /** * The ordinal of this unit. This is useful both for {@link #ordinal()} * and to maintain serialization consistence with earlier versions. */ private final int index; /** name of this unit */ private final String name; /** Internal constructor */ TimeUnit(int index, String name) { this.index = index; this.name = name; } // Handy constants for conversion methods static final long C0 = 1; static final long C1 = C0 * 1000; static final long C2 = C1 * 1000; static final long C3 = C2 * 1000; static final long C4 = C3 * 60; static final long C5 = C4 * 60; static final long C6 = C5 * 24; static final long MAX = Long.MAX_VALUE; /** * Scale d by m, checking for overflow. * This has a short name to make above code more readable. */ static long x(long d, long m, long over) { if (d > over) return Long.MAX_VALUE; if (d < -over) return Long.MIN_VALUE; return d * m; } /** * Convert the given time duration in the given unit to this * unit. Conversions from finer to coarser granularities * truncate, so lose precision. For example converting * 999 milliseconds to seconds results in * 0. Conversions from coarser to finer granularities * with arguments that would numerically overflow saturate to * Long.MIN_VALUE if negative or Long.MAX_VALUE * if positive. * *

For example, to convert 10 minutes to milliseconds, use: * TimeUnit.MILLISECONDS.convert(10L, TimeUnit.MINUTES) * * @param sourceDuration the time duration in the given sourceUnit * @param sourceUnit the unit of the sourceDuration argument * @return the converted duration in this unit, * or Long.MIN_VALUE if conversion would negatively * overflow, or Long.MAX_VALUE if it would positively overflow. */ public abstract long convert(long sourceDuration, TimeUnit sourceUnit); /** * Equivalent to NANOSECONDS.convert(duration, this). * @param duration the duration * @return the converted duration, * or Long.MIN_VALUE if conversion would negatively * overflow, or Long.MAX_VALUE if it would positively overflow. * @see #convert */ public abstract long toNanos(long duration); /** * Equivalent to MICROSECONDS.convert(duration, this). * @param duration the duration * @return the converted duration, * or Long.MIN_VALUE if conversion would negatively * overflow, or Long.MAX_VALUE if it would positively overflow. * @see #convert */ public abstract long toMicros(long duration); /** * Equivalent to MILLISECONDS.convert(duration, this). * @param duration the duration * @return the converted duration, * or Long.MIN_VALUE if conversion would negatively * overflow, or Long.MAX_VALUE if it would positively overflow. * @see #convert */ public abstract long toMillis(long duration); /** * Equivalent to SECONDS.convert(duration, this). * @param duration the duration * @return the converted duration, * or Long.MIN_VALUE if conversion would negatively * overflow, or Long.MAX_VALUE if it would positively overflow. * @see #convert */ public abstract long toSeconds(long duration); /** * Equivalent to MINUTES.convert(duration, this). * @param duration the duration * @return the converted duration, * or Long.MIN_VALUE if conversion would negatively * overflow, or Long.MAX_VALUE if it would positively overflow. * @see #convert * @since 1.6 */ public abstract long toMinutes(long duration); /** * Equivalent to HOURS.convert(duration, this). * @param duration the duration * @return the converted duration, * or Long.MIN_VALUE if conversion would negatively * overflow, or Long.MAX_VALUE if it would positively overflow. * @see #convert * @since 1.6 */ public abstract long toHours(long duration); /** * Equivalent to DAYS.convert(duration, this). * @param duration the duration * @return the converted duration * @see #convert * @since 1.6 */ public abstract long toDays(long duration); /** * Utility to compute the excess-nanosecond argument to wait, * sleep, join. * @param d the duration * @param m the number of milliseconds * @return the number of nanoseconds */ abstract int excessNanos(long d, long m); /** * Returns the name of this enum constant, exactly as declared in its enum * declaration. Most programmers should use the * {@link #toString()} method in preference to this one, as the toString * method may return a more user-friendly name. This method is * designed primarily for use in specialized situations where correctness * depends on getting the exact name, which will not vary from release to * release. * * @return the name of this enum constant */ public String name() { return name; } /** * Returns the ordinal of this enumeration constant (its position in its * enum declaration, where the initial constant is assigned an ordinal of * zero). Most programmers will have no use for this method. It is * designed for use by sophisticated enum-based data structures, such as * EnumSet and EnumMap. * * @return the ordinal of this enumeration constant */ public int ordinal() { return index; } /* * Guarantees that deserialized objects will be referentially equal to the * standard enumeration objects. */ protected Object readResolve() throws ObjectStreamException { try { return valueOf(name); } catch (IllegalArgumentException e) { throw new InvalidObjectException(name + " is not a valid enum for TimeUnit"); } } /** * Performs a timed Object.wait using this time unit. * This is a convenience method that converts timeout arguments * into the form required by the Object.wait method. * *

For example, you could implement a blocking poll * method (see {@link BlockingQueue#poll BlockingQueue.poll}) * using: * *

  public synchronized  Object poll(long timeout, TimeUnit unit) throws InterruptedException {
     *    while (empty) {
     *      unit.timedWait(this, timeout);
     *      ...
     *    }
     *  }
* * @param obj the object to wait on * @param timeout the maximum time to wait. If less than * or equal to zero, do not wait at all. * @throws InterruptedException if interrupted while waiting. * @see java.lang.Object#wait(long, int) */ public void timedWait(Object obj, long timeout) throws InterruptedException { if (timeout > 0) { long ms = toMillis(timeout); int ns = excessNanos(timeout, ms); obj.wait(ms, ns); } } /** * Performs a timed Thread.join using this time unit. * This is a convenience method that converts time arguments into the * form required by the Thread.join method. * @param thread the thread to wait for * @param timeout the maximum time to wait. If less than * or equal to zero, do not wait at all. * @throws InterruptedException if interrupted while waiting. * @see java.lang.Thread#join(long, int) */ public void timedJoin(Thread thread, long timeout) throws InterruptedException { if (timeout > 0) { long ms = toMillis(timeout); int ns = excessNanos(timeout, ms); thread.join(ms, ns); } } /** * Performs a Thread.sleep using this unit. * This is a convenience method that converts time arguments into the * form required by the Thread.sleep method. * @param timeout the maximum time to sleep. If less than * or equal to zero, do not sleep at all. * @throws InterruptedException if interrupted while sleeping. * @see java.lang.Thread#sleep */ public void sleep(long timeout) throws InterruptedException { if (timeout > 0) { long ms = toMillis(timeout); int ns = excessNanos(timeout, ms); Thread.sleep(ms, ns); } } public String toString() { return name; } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/Collections.java0000644001750700037720000007020010633346000030502 0ustar dawidkdcl/* * Written by Dawid Kurzyniec, on the basis of public specifications and * public domain sources from JSR 166, and released to the public domain, * as explained at http://creativecommons.org/licenses/publicdomain. */ package edu.emory.mathcs.backport.java.util; import java.io.Serializable; import java.io.IOException; import java.io.ObjectInputStream; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.ConcurrentModificationException; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.Map; import java.util.Random; import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; /** * Augments {@link java.util.Collections} with methods added in Java 5.0 * and higher. Adds support for dynamically typesafe collection wrappers, * and several utility methods. * * @see java.util.Collections */ public class Collections { private Collections() {} public static void sort(List list) { java.util.Collections.sort(list); } public static void sort(List list, Comparator c) { java.util.Collections.sort(list, c); } public static int binarySearch(List list, Object key) { return java.util.Collections.binarySearch(list, key); } public static int binarySearch(List list, Object key, Comparator c) { return java.util.Collections.binarySearch(list, key, c); } public static void reverse(List list) { java.util.Collections.reverse(list); } public static void shuffle(List list) { java.util.Collections.shuffle(list); } public static void shuffle(List list, Random rnd) { java.util.Collections.shuffle(list, rnd); } public static void swap(List list, int i, int j) { java.util.Collections.swap(list, i, i); } public static void fill(List list, Object obj) { java.util.Collections.fill(list, obj); } public static void copy(List dest, List src) { java.util.Collections.copy(dest, src); } public static Object min(Collection coll) { return java.util.Collections.min(coll); } public static Object min(Collection coll, Comparator comp) { return java.util.Collections.min(coll, comp); } public static Object max(Collection coll) { return java.util.Collections.max(coll); } public static Object max(Collection coll, Comparator comp) { return java.util.Collections.max(coll, comp); } public static void rotate(List list, int distance) { java.util.Collections.rotate(list, distance); } public static boolean replaceAll(List list, Object oldVal, Object newVal) { return java.util.Collections.replaceAll(list, oldVal, newVal); } public static int indexOfSubList(List source, List target) { return java.util.Collections.indexOfSubList(source, target); } public static int lastIndexOfSubList(List source, List target) { return java.util.Collections.lastIndexOfSubList(source, target); } // unmodifiable views public static Collection unmodifiableCollection(Collection c) { return java.util.Collections.unmodifiableCollection(c); } public static Set unmodifiableSet(Set s) { return java.util.Collections.unmodifiableSet(s); } public static SortedSet unmodifiableSortedSet(SortedSet s) { return java.util.Collections.unmodifiableSortedSet(s); } public static List unmodifiableList(List l) { return java.util.Collections.unmodifiableList(l); } public static Map unmodifiableMap(Map m) { return java.util.Collections.unmodifiableMap(m); } public static SortedMap unmodifiableSortedMap(SortedMap m) { return java.util.Collections.unmodifiableSortedMap(m); } // synchronized views public static Collection synchronizedCollection(Collection c) { return java.util.Collections.synchronizedCollection(c); } public static Set synchronizedSet(Set s) { return java.util.Collections.synchronizedSet(s); } public static SortedSet synchronizedSortedSet(SortedSet s) { return java.util.Collections.synchronizedSortedSet(s); } public static List synchronizedList(List l) { return java.util.Collections.synchronizedList(l); } public static Map synchronizedMap(Map m) { return java.util.Collections.synchronizedMap(m); } public static SortedMap synchronizedSortedMap(SortedMap m) { return java.util.Collections.synchronizedSortedMap(m); } // checked views public static Collection checkedCollection(Collection c, Class type) { return new CheckedCollection(c, type); } public static Set checkedSet(Set s, Class type) { return new CheckedSet(s, type); } public static SortedSet checkedSortedSet(SortedSet s, Class type) { return new CheckedSortedSet(s, type); } public static List checkedList(List l, Class type) { return new CheckedList(l, type); } public static Map checkedMap(Map m, Class keyType, Class valueType) { return new CheckedMap(m, keyType, valueType); } public static SortedMap checkedSortedMap(SortedMap m, Class keyType, Class valueType) { return new CheckedSortedMap(m, keyType, valueType); } // empty views public static Set emptySet() { return java.util.Collections.EMPTY_SET; } public static List emptyList() { return java.util.Collections.EMPTY_LIST; } public static Map emptyMap() { return java.util.Collections.EMPTY_MAP; } // singleton views public static Set singleton(Object o) { return java.util.Collections.singleton(o); } public static List singletonList(Object o) { return java.util.Collections.singletonList(o); } public static Map singletonMap(Object key, Object value) { return java.util.Collections.singletonMap(key, value); } // other utils public static List nCopies(int n, Object o) { return java.util.Collections.nCopies(n, o); } public static Comparator reverseOrder() { return java.util.Collections.reverseOrder(); } public static Comparator reverseOrder(Comparator cmp) { return (cmp instanceof ReverseComparator) ? ((ReverseComparator)cmp).cmp : cmp == null ? reverseOrder() : new ReverseComparator(cmp); } public static Enumeration enumeration(Collection c) { return java.util.Collections.enumeration(c); } public static ArrayList list(Enumeration e) { return java.util.Collections.list(e); } public static int frequency(Collection c, Object o) { int freq = 0; if (o == null) { for (Iterator itr = c.iterator(); itr.hasNext();) { if (itr.next() == null) freq++; } } else { for (Iterator itr = c.iterator(); itr.hasNext();) { if (o.equals(itr.next())) freq++; } } return freq; } public static boolean disjoint(Collection a, Collection b) { // set.contains() is usually faster than for other collections if (a instanceof Set && (!(b instanceof Set) || a.size() < b.size())) { Collection tmp = a; a = b; b = tmp; } for (Iterator itr = a.iterator(); itr.hasNext();) { if (b.contains(itr.next())) return false; } return true; } public static boolean addAll(Collection c, Object[] a) { boolean modified = false; for (int i=0; i a.length) { a = base; } else { // need to copy back to a System.arraycopy(base, 0, a, 0, base.length); if (base.length < a.length) a[base.length] = null; } return a; } } private class EntryView implements Map.Entry, Serializable { final Map.Entry entry; EntryView(Map.Entry entry) { this.entry = entry; } public Object getKey() { return entry.getKey(); } public Object getValue() { return entry.getValue(); } public int hashCode() { return entry.hashCode(); } public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof Map.Entry)) return false; Map.Entry e = (Map.Entry)o; return eq(getKey(), e.getKey()) && eq(getValue(), e.getValue()); } public Object setValue(Object val) { typeCheckValue(val); return entry.setValue(val); } } } private static boolean eq(Object o1, Object o2) { return (o1 == null) ? o2 == null : o1.equals(o2); } private static class CheckedSortedMap extends CheckedMap implements SortedMap, Serializable { final SortedMap map; CheckedSortedMap(SortedMap map, Class keyType, Class valueType) { super(map, keyType, valueType); this.map = map; } public Comparator comparator() { return map.comparator(); } public Object firstKey() { return map.firstKey(); } public Object lastKey() { return map.lastKey(); } public SortedMap subMap(Object fromKey, Object toKey) { return new CheckedSortedMap(map.subMap(fromKey, toKey), keyType, valueType); } public SortedMap headMap(Object toKey) { return new CheckedSortedMap(map.headMap(toKey), keyType, valueType); } public SortedMap tailMap(Object fromKey) { return new CheckedSortedMap(map.tailMap(fromKey), keyType, valueType); } } private static class SetFromMap extends AbstractSet implements Serializable { private final static Object PRESENT = Boolean.TRUE; final Map map; transient Set keySet; SetFromMap(Map map) { this.map = map; this.keySet = map.keySet(); } public int hashCode() { return keySet.hashCode(); } public int size() { return map.size(); } public void clear() { map.clear(); } public boolean isEmpty() { return map.isEmpty(); } public boolean add(Object o) { return map.put(o, PRESENT) == null; } public boolean contains(Object o) { return map.containsKey(o); } public boolean equals(Object o) { return o == this || keySet.equals(o); } public boolean remove(Object o) { return map.remove(o) == PRESENT; } public boolean removeAll(Collection c) { return keySet.removeAll(c); } public boolean retainAll(Collection c) { return keySet.retainAll(c); } public Iterator iterator() { return keySet.iterator(); } public Object[] toArray() { return keySet.toArray(); } public Object[] toArray(Object[] a) { return keySet.toArray(a); } public boolean addAll(Collection c) { boolean modified = false; for (Iterator it = c.iterator(); it.hasNext();) { modified |= (map.put(it.next(), PRESENT) == null); } return modified; } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); keySet = map.keySet(); } } private static class AsLifoQueue extends AbstractQueue implements Queue, Serializable { final Deque deque; AsLifoQueue(Deque deque) { this.deque = deque; } public boolean add(Object e) { return deque.offerFirst(e); } public boolean offer(Object e) { return deque.offerFirst(e); } public Object remove() { return deque.removeFirst(); } public Object poll() { return deque.pollFirst(); } public Object element() { return deque.getFirst(); } public Object peek() { return deque.peekFirst(); } public int size() { return deque.size(); } public void clear() { deque.clear(); } public boolean isEmpty() { return deque.isEmpty(); } public Object[] toArray() { return deque.toArray(); } public Object[] toArray(Object[] a) { return deque.toArray(a); } public boolean contains(Object o) { return deque.contains(o); } public boolean remove(Object o) { return deque.remove(o); } public Iterator iterator() { return deque.iterator(); } public String toString() { return deque.toString(); } public boolean containsAll(Collection c) { return deque.containsAll(c); } public boolean removeAll(Collection c) { return deque.removeAll(c); } public boolean retainAll(Collection c) { return deque.retainAll(c); } } private static class ReverseComparator implements Comparator, Serializable { final Comparator cmp; ReverseComparator(Comparator cmp) { this.cmp = cmp; } public int compare(Object o1, Object o2) { return cmp.compare(o2, o1); } public boolean equals(Object o) { return (o == this) || (o instanceof ReverseComparator && cmp.equals(((ReverseComparator)o).cmp)); } public int hashCode() { return cmp.hashCode() ^ 0x10000000; } } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/Deque.java0000644001750700037720000005373010461021764027306 0ustar dawidkdcl/* * Written by Doug Lea and Josh Bloch with assistance from members of * JCP JSR-166 Expert Group and released to the public domain, as explained * at http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util; import edu.emory.mathcs.backport.java.util.*; // for javadoc import java.util.Iterator; /** * A linear collection that supports element insertion and removal at * both ends. The name deque is short for "double ended queue" * and is usually pronounced "deck". Most Deque * implementations place no fixed limits on the number of elements * they may contain, but this interface supports capacity-restricted * deques as well as those with no fixed size limit. * *

This interface defines methods to access the elements at both * ends of the deque. Methods are provided to insert, remove, and * examine the element. Each of these methods exists in two forms: * one throws an exception if the operation fails, the other returns a * special value (either null or false, depending on * the operation). The latter form of the insert operation is * designed specifically for use with capacity-restricted * Deque implementations; in most implementations, insert * operations cannot fail. * *

The twelve methods described above are summarized in the * following table: * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
First Element (Head) Last Element (Tail)
Throws exceptionSpecial valueThrows exceptionSpecial value
Insert{@link #addFirst addFirst(e)}{@link #offerFirst offerFirst(e)}{@link #addLast addLast(e)}{@link #offerLast offerLast(e)}
Remove{@link #removeFirst removeFirst()}{@link #pollFirst pollFirst()}{@link #removeLast removeLast()}{@link #pollLast pollLast()}
Examine{@link #getFirst getFirst()}{@link #peekFirst peekFirst()}{@link #getLast getLast()}{@link #peekLast peekLast()}
* *

This interface extends the {@link Queue} interface. When a deque is * used as a queue, FIFO (First-In-First-Out) behavior results. Elements are * added at the end of the deque and removed from the beginning. The methods * inherited from the Queue interface are precisely equivalent to * Deque methods as indicated in the following table: * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Queue Method Equivalent Deque Method
{@link edu.emory.mathcs.backport.java.util.Queue#add add(e)}{@link #addLast addLast(e)}
{@link edu.emory.mathcs.backport.java.util.Queue#offer offer(e)}{@link #offerLast offerLast(e)}
{@link edu.emory.mathcs.backport.java.util.Queue#remove remove()}{@link #removeFirst removeFirst()}
{@link edu.emory.mathcs.backport.java.util.Queue#poll poll()}{@link #pollFirst pollFirst()}
{@link edu.emory.mathcs.backport.java.util.Queue#element element()}{@link #getFirst getFirst()}
{@link edu.emory.mathcs.backport.java.util.Queue#peek peek()}{@link #peek peekFirst()}
* *

Deques can also be used as LIFO (Last-In-First-Out) stacks. This * interface should be used in preference to the legacy {@link java.util.Stack} class. * When a deque is used as a stack, elements are pushed and popped from the * beginning of the deque. Stack methods are precisely equivalent to * Deque methods as indicated in the table below: * *

* * * * * * * * * * * * * * * * * *
Stack Method Equivalent Deque Method
{@link #push push(e)}{@link #addFirst addFirst(e)}
{@link #pop pop()}{@link #removeFirst removeFirst()}
{@link #peek peek()}{@link #peekFirst peekFirst()}
* *

Note that the {@link #peek peek} method works equally well when * a deque is used as a queue or a stack; in either case, elements are * drawn from the beginning of the deque. * *

This interface provides two methods to remove interior * elements, {@link #removeFirstOccurrence removeFirstOccurrence} and * {@link #removeLastOccurrence removeLastOccurrence}. * *

Unlike the {@link java.util.List} interface, this interface does not * provide support for indexed access to elements. * *

While Deque implementations are not strictly required * to prohibit the insertion of null elements, they are strongly * encouraged to do so. Users of any Deque implementations * that do allow null elements are strongly encouraged not to * take advantage of the ability to insert nulls. This is so because * null is used as a special return value by various methods * to indicated that the deque is empty. * *

Deque implementations generally do not define * element-based versions of the equals and hashCode * methods, but instead inherit the identity-based versions from class * Object. * *

This interface is a member of the Java Collections * Framework. * * @author Doug Lea * @author Josh Bloch * @since 1.6 */ public interface Deque extends Queue { /** * Inserts the specified element at the front of this deque if it is * possible to do so immediately without violating capacity restrictions. * When using a capacity-restricted deque, it is generally preferable to * use method {@link #offerFirst}. * * @param e the element to add * @throws IllegalStateException if the element cannot be added at this * time due to capacity restrictions * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null and this * deque does not permit null elements * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ void addFirst(Object e); /** * Inserts the specified element at the end of this deque if it is * possible to do so immediately without violating capacity restrictions. * When using a capacity-restricted deque, it is generally preferable to * use method {@link #offerLast}. * *

This method is equivalent to {@link #add}. * * @param e the element to add * @throws IllegalStateException if the element cannot be added at this * time due to capacity restrictions * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null and this * deque does not permit null elements * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ void addLast(Object e); /** * Inserts the specified element at the front of this deque unless it would * violate capacity restrictions. When using a capacity-restricted deque, * this method is generally preferable to the {@link #addFirst} method, * which can fail to insert an element only by throwing an exception. * * @param e the element to add * @return true if the element was added to this deque, else * false * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null and this * deque does not permit null elements * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ boolean offerFirst(Object e); /** * Inserts the specified element at the end of this deque unless it would * violate capacity restrictions. When using a capacity-restricted deque, * this method is generally preferable to the {@link #addLast} method, * which can fail to insert an element only by throwing an exception. * * @param e the element to add * @return true if the element was added to this deque, else * false * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null and this * deque does not permit null elements * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ boolean offerLast(Object e); /** * Retrieves and removes the first element of this deque. This method * differs from {@link #pollFirst pollFirst} only in that it throws an * exception if this deque is empty. * * @return the head of this deque * @throws NoSuchElementException if this deque is empty */ Object removeFirst(); /** * Retrieves and removes the last element of this deque. This method * differs from {@link #pollLast pollLast} only in that it throws an * exception if this deque is empty. * * @return the tail of this deque * @throws NoSuchElementException if this deque is empty */ Object removeLast(); /** * Retrieves and removes the first element of this deque, * or returns null if this deque is empty. * * @return the head of this deque, or null if this deque is empty */ Object pollFirst(); /** * Retrieves and removes the last element of this deque, * or returns null if this deque is empty. * * @return the tail of this deque, or null if this deque is empty */ Object pollLast(); /** * Retrieves, but does not remove, the first element of this deque. * This method differs from {@link #peekFirst peekFirst} only in that it * throws an exception if this deque is empty. * * @return the head of this deque * @throws NoSuchElementException if this deque is empty */ Object getFirst(); /** * Retrieves, but does not remove, the last element of this deque. * This method differs from {@link #peekLast peekLast} only in that it * throws an exception if this deque is empty. * * @return the tail of this deque * @throws NoSuchElementException if this deque is empty */ Object getLast(); /** * Retrieves, but does not remove, the first element of this deque, * or returns null if this deque is empty. * * @return the head of this deque, or null if this deque is empty */ Object peekFirst(); /** * Retrieves, but does not remove, the last element of this deque, * or returns null if this deque is empty. * * @return the tail of this deque, or null if this deque is empty */ Object peekLast(); /** * Removes the first occurrence of the specified element from this deque. * If the deque does not contain the element, it is unchanged. * More formally, removes the first element e such that * (o==null ? e==null : o.equals(e)) * (if such an element exists). * Returns true if this deque contained the specified element * (or equivalently, if this deque changed as a result of the call). * * @param o element to be removed from this deque, if present * @return true if an element was removed as a result of this call * @throws ClassCastException if the class of the specified element * is incompatible with this deque (optional) * @throws NullPointerException if the specified element is null and this * deque does not permit null elements (optional) */ boolean removeFirstOccurrence(Object o); /** * Removes the last occurrence of the specified element from this deque. * If the deque does not contain the element, it is unchanged. * More formally, removes the last element e such that * (o==null ? e==null : o.equals(e)) * (if such an element exists). * Returns true if this deque contained the specified element * (or equivalently, if this deque changed as a result of the call). * * @param o element to be removed from this deque, if present * @return true if an element was removed as a result of this call * @throws ClassCastException if the class of the specified element * is incompatible with this deque (optional) * @throws NullPointerException if the specified element is null and this * deque does not permit null elements (optional) */ boolean removeLastOccurrence(Object o); // *** Queue methods *** /** * Inserts the specified element into the queue represented by this deque * (in other words, at the tail of this deque) if it is possible to do so * immediately without violating capacity restrictions, returning * true upon success and throwing an * IllegalStateException if no space is currently available. * When using a capacity-restricted deque, it is generally preferable to * use {@link #offer(Object) offer}. * *

This method is equivalent to {@link #addLast}. * * @param e the element to add * @return true (as specified by {@link java.util.Collection#add}) * @throws IllegalStateException if the element cannot be added at this * time due to capacity restrictions * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null and this * deque does not permit null elements * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ boolean add(Object e); /** * Inserts the specified element into the queue represented by this deque * (in other words, at the tail of this deque) if it is possible to do so * immediately without violating capacity restrictions, returning * true upon success and false if no space is currently * available. When using a capacity-restricted deque, this method is * generally preferable to the {@link #add} method, which can fail to * insert an element only by throwing an exception. * *

This method is equivalent to {@link #offerLast}. * * @param e the element to add * @return true if the element was added to this deque, else * false * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null and this * deque does not permit null elements * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ boolean offer(Object e); /** * Retrieves and removes the head of the queue represented by this deque * (in other words, the first element of this deque). * This method differs from {@link #poll poll} only in that it throws an * exception if this deque is empty. * *

This method is equivalent to {@link #removeFirst()}. * * @return the head of the queue represented by this deque * @throws NoSuchElementException if this deque is empty */ Object remove(); /** * Retrieves and removes the head of the queue represented by this deque * (in other words, the first element of this deque), or returns * null if this deque is empty. * *

This method is equivalent to {@link #pollFirst()}. * * @return the first element of this deque, or null if * this deque is empty */ Object poll(); /** * Retrieves, but does not remove, the head of the queue represented by * this deque (in other words, the first element of this deque). * This method differs from {@link #peek peek} only in that it throws an * exception if this deque is empty. * *

This method is equivalent to {@link #getFirst()}. * * @return the head of the queue represented by this deque * @throws NoSuchElementException if this deque is empty */ Object element(); /** * Retrieves, but does not remove, the head of the queue represented by * this deque (in other words, the first element of this deque), or * returns null if this deque is empty. * *

This method is equivalent to {@link #peekFirst()}. * * @return the head of the queue represented by this deque, or * null if this deque is empty */ Object peek(); // *** Stack methods *** /** * Pushes an element onto the stack represented by this deque (in other * words, at the head of this deque) if it is possible to do so * immediately without violating capacity restrictions, returning * true upon success and throwing an * IllegalStateException if no space is currently available. * *

This method is equivalent to {@link #addFirst}. * * @param e the element to push * @throws IllegalStateException if the element cannot be added at this * time due to capacity restrictions * @throws ClassCastException if the class of the specified element * prevents it from being added to this deque * @throws NullPointerException if the specified element is null and this * deque does not permit null elements * @throws IllegalArgumentException if some property of the specified * element prevents it from being added to this deque */ void push(Object e); /** * Pops an element from the stack represented by this deque. In other * words, removes and returns the first element of this deque. * *

This method is equivalent to {@link #removeFirst()}. * * @return the element at the front of this deque (which is the top * of the stack represented by this deque) * @throws NoSuchElementException if this deque is empty */ Object pop(); // *** Collection methods *** /** * Removes the first occurrence of the specified element from this deque. * If the deque does not contain the element, it is unchanged. * More formally, removes the first element e such that * (o==null ? e==null : o.equals(e)) * (if such an element exists). * Returns true if this deque contained the specified element * (or equivalently, if this deque changed as a result of the call). * *

This method is equivalent to {@link #removeFirstOccurrence}. * * @param o element to be removed from this deque, if present * @return true if an element was removed as a result of this call * @throws ClassCastException if the class of the specified element * is incompatible with this deque (optional) * @throws NullPointerException if the specified element is null and this * deque does not permit null elements (optional) */ boolean remove(Object o); /** * Returns true if this deque contains the specified element. * More formally, returns true if and only if this deque contains * at least one element e such that * (o==null ? e==null : o.equals(e)). * * @param o element whose presence in this deque is to be tested * @return true if this deque contains the specified element * @throws ClassCastException if the type of the specified element * is incompatible with this deque (optional) * @throws NullPointerException if the specified element is null and this * deque does not permit null elements (optional) */ boolean contains(Object o); /** * Returns the number of elements in this deque. * * @return the number of elements in this deque */ public int size(); /** * Returns an iterator over the elements in this deque in proper sequence. * The elements will be returned in order from first (head) to last (tail). * * @return an iterator over the elements in this deque in proper sequence */ Iterator iterator(); /** * Returns an iterator over the elements in this deque in reverse * sequential order. The elements will be returned in order from * last (tail) to first (head). * * @return an iterator over the elements in this deque in reverse * sequence */ Iterator descendingIterator(); } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/AbstractList.java0000644001750700037720000000165110360636052030635 0ustar dawidkdcl/* * Written by Dawid Kurzyniec, based on public domain code written by Doug Lea * and publictly available documentation, and released to the public domain, as * explained at http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; /** * Overrides toArray() and toArray(Object[]) in AbstractCollection to provide * implementations valid for concurrent lists. * * @author Doug Lea * @author Dawid Kurzyniec */ public abstract class AbstractList extends java.util.AbstractList { /** * Sole constructor. (For invocation by subclass constructors, typically * implicit.) */ protected AbstractList() { super(); } public Object[] toArray() { return Utils.collectionToArray(this); } public Object[] toArray(Object[] a) { return Utils.collectionToArray(this, a); } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/Arrays.java0000644001750700037720000005763510360633577027525 0ustar dawidkdcl/* * Written by Dawid Kurzyniec, based on code written by Doug Lea with assistance * from members of JCP JSR-166 Expert Group. Released to the public domain, * as explained at http://creativecommons.org/licenses/publicdomain. */ package edu.emory.mathcs.backport.java.util; import java.lang.reflect.Array; import java.util.List; import java.util.ArrayList; import java.util.Comparator; public class Arrays { private Arrays() {} public static void sort(long[] a) { java.util.Arrays.sort(a); } public static void sort(long[] a, int fromIndex, int toIndex) { java.util.Arrays.sort(a, fromIndex, toIndex); } public static void sort(int[] a) { java.util.Arrays.sort(a); } public static void sort(int[] a, int fromIndex, int toIndex) { java.util.Arrays.sort(a, fromIndex, toIndex); } public static void sort(short[] a) { java.util.Arrays.sort(a); } public static void sort(short[] a, int fromIndex, int toIndex) { java.util.Arrays.sort(a, fromIndex, toIndex); } public static void sort(char[] a) { java.util.Arrays.sort(a); } public static void sort(char[] a, int fromIndex, int toIndex) { java.util.Arrays.sort(a, fromIndex, toIndex); } public static void sort(byte[] a) { java.util.Arrays.sort(a); } public static void sort(byte[] a, int fromIndex, int toIndex) { java.util.Arrays.sort(a, fromIndex, toIndex); } public static void sort(double[] a) { java.util.Arrays.sort(a); } public static void sort(double[] a, int fromIndex, int toIndex) { java.util.Arrays.sort(a, fromIndex, toIndex); } public static void sort(float[] a) { java.util.Arrays.sort(a); } public static void sort(float[] a, int fromIndex, int toIndex) { java.util.Arrays.sort(a, fromIndex, toIndex); } public static void sort(Object[] a) { java.util.Arrays.sort(a); } public static void sort(Object[] a, int fromIndex, int toIndex) { java.util.Arrays.sort(a, fromIndex, toIndex); } public static void sort(Object[] a, Comparator c) { java.util.Arrays.sort(a, c); } public static void sort(Object[] a, int fromIndex, int toIndex, Comparator c) { java.util.Arrays.sort(a, fromIndex, toIndex, c); } // Searching public static int binarySearch(long[] a, long key) { return java.util.Arrays.binarySearch(a, key); } public static int binarySearch(int[] a, int key) { return java.util.Arrays.binarySearch(a, key); } public static int binarySearch(short[] a, short key) { return java.util.Arrays.binarySearch(a, key); } public static int binarySearch(char[] a, char key) { return java.util.Arrays.binarySearch(a, key); } public static int binarySearch(byte[] a, byte key) { return java.util.Arrays.binarySearch(a, key); } public static int binarySearch(double[] a, double key) { return java.util.Arrays.binarySearch(a, key); } public static int binarySearch(float[] a, float key) { return java.util.Arrays.binarySearch(a, key); } public static int binarySearch(Object[] a, Object key) { return java.util.Arrays.binarySearch(a, key); } public static int binarySearch(Object[] a, Object key, Comparator c) { return java.util.Arrays.binarySearch(a, key, c); } // Equality Testing public static boolean equals(long[] a, long[] a2) { return java.util.Arrays.equals(a, a2); } public static boolean equals(int[] a, int[] a2) { return java.util.Arrays.equals(a, a2); } public static boolean equals(short[] a, short a2[]) { return java.util.Arrays.equals(a, a2); } public static boolean equals(char[] a, char[] a2) { return java.util.Arrays.equals(a, a2); } public static boolean equals(byte[] a, byte[] a2) { return java.util.Arrays.equals(a, a2); } public static boolean equals(boolean[] a, boolean[] a2) { return java.util.Arrays.equals(a, a2); } public static boolean equals(double[] a, double[] a2) { return java.util.Arrays.equals(a, a2); } public static boolean equals(float[] a, float[] a2) { return java.util.Arrays.equals(a, a2); } public static boolean equals(Object[] a, Object[] a2) { return java.util.Arrays.equals(a, a2); } // Filling public static void fill(long[] a, long val) { java.util.Arrays.fill(a, val); } public static void fill(long[] a, int fromIndex, int toIndex, long val) { java.util.Arrays.fill(a, fromIndex, toIndex, val); } public static void fill(int[] a, int val) { java.util.Arrays.fill(a, val); } public static void fill(int[] a, int fromIndex, int toIndex, int val) { java.util.Arrays.fill(a, fromIndex, toIndex, val); } public static void fill(short[] a, short val) { java.util.Arrays.fill(a, val); } public static void fill(short[] a, int fromIndex, int toIndex, short val) { java.util.Arrays.fill(a, fromIndex, toIndex, val); } public static void fill(char[] a, char val) { java.util.Arrays.fill(a, val); } public static void fill(char[] a, int fromIndex, int toIndex, char val) { java.util.Arrays.fill(a, fromIndex, toIndex, val); } public static void fill(byte[] a, byte val) { java.util.Arrays.fill(a, val); } public static void fill(byte[] a, int fromIndex, int toIndex, byte val) { java.util.Arrays.fill(a, fromIndex, toIndex, val); } public static void fill(boolean[] a, boolean val) { java.util.Arrays.fill(a, val); } public static void fill(boolean[] a, int fromIndex, int toIndex, boolean val) { java.util.Arrays.fill(a, fromIndex, toIndex, val); } public static void fill(double[] a, double val) { java.util.Arrays.fill(a, val); } public static void fill(double[] a, int fromIndex, int toIndex,double val) { java.util.Arrays.fill(a, fromIndex, toIndex, val); } public static void fill(float[] a, float val) { java.util.Arrays.fill(a, val); } public static void fill(float[] a, int fromIndex, int toIndex, float val) { java.util.Arrays.fill(a, fromIndex, toIndex, val); } public static void fill(Object[] a, Object val) { java.util.Arrays.fill(a, val); } public static void fill(Object[] a, int fromIndex, int toIndex, Object val) { java.util.Arrays.fill(a, fromIndex, toIndex, val); } // Cloning /** * @since 1.6 */ public static Object[] copyOf(Object[] original, int newLength) { return copyOf(original, newLength, original.getClass()); } /** * @since 1.6 */ public static Object[] copyOf(Object[] original, int newLength, Class newType) { Object[] arr = (newType == Object[].class) ? new Object[newLength] : (Object[])Array.newInstance(newType.getComponentType(), newLength); int len = (original.length < newLength ? original.length : newLength); System.arraycopy(original, 0, arr, 0, len); return arr; } /** * @since 1.6 */ public static byte[] copyOf(byte[] original, int newLength) { byte[] arr = new byte[newLength]; int len = (original.length < newLength ? original.length : newLength); System.arraycopy(original, 0, arr, 0, len); return arr; } /** * @since 1.6 */ public static short[] copyOf(short[] original, int newLength) { short[] arr = new short[newLength]; int len = (original.length < newLength ? original.length : newLength); System.arraycopy(original, 0, arr, 0, len); return arr; } /** * @since 1.6 */ public static int[] copyOf(int[] original, int newLength) { int[] arr = new int[newLength]; int len = (original.length < newLength ? original.length : newLength); System.arraycopy(original, 0, arr, 0, len); return arr; } /** * @since 1.6 */ public static long[] copyOf(long[] original, int newLength) { long[] arr = new long[newLength]; int len = (original.length < newLength ? original.length : newLength); System.arraycopy(original, 0, arr, 0, len); return arr; } /** * @since 1.6 */ public static char[] copyOf(char[] original, int newLength) { char[] arr = new char[newLength]; int len = (original.length < newLength ? original.length : newLength); System.arraycopy(original, 0, arr, 0, len); return arr; } /** * @since 1.6 */ public static float[] copyOf(float[] original, int newLength) { float[] arr = new float[newLength]; int len = (original.length < newLength ? original.length : newLength); System.arraycopy(original, 0, arr, 0, len); return arr; } /** * @since 1.6 */ public static double[] copyOf(double[] original, int newLength) { double[] arr = new double[newLength]; int len = (original.length < newLength ? original.length : newLength); System.arraycopy(original, 0, arr, 0, len); return arr; } /** * @since 1.6 */ public static boolean[] copyOf(boolean[] original, int newLength) { boolean[] arr = new boolean[newLength]; int len = (original.length < newLength ? original.length : newLength); System.arraycopy(original, 0, arr, 0, len); return arr; } /** * @since 1.6 */ public static Object[] copyOfRange(Object[] original, int from, int to) { return copyOfRange(original, from, to, original.getClass()); } /** * @since 1.6 */ public static Object[] copyOfRange(Object[] original, int from, int to, Class newType) { int newLength = to - from; if (newLength < 0) throw new IllegalArgumentException(from + " > " + to); Object[] arr = (newType == Object[].class) ? new Object[newLength] : (Object[])Array.newInstance(newType.getComponentType(), newLength); int ceil = original.length-from; int len = (ceil < newLength) ? ceil : newLength; System.arraycopy(original, from, arr, 0, len); return arr; } /** * @since 1.6 */ public static byte[] copyOfRange(byte[] original, int from, int to) { int newLength = to - from; if (newLength < 0) throw new IllegalArgumentException(from + " > " + to); byte[] arr = new byte[newLength]; int ceil = original.length-from; int len = (ceil < newLength) ? ceil : newLength; System.arraycopy(original, from, arr, 0, len); return arr; } /** * @since 1.6 */ public static short[] copyOfRange(short[] original, int from, int to) { int newLength = to - from; if (newLength < 0) throw new IllegalArgumentException(from + " > " + to); short[] arr = new short[newLength]; int ceil = original.length-from; int len = (ceil < newLength) ? ceil : newLength; System.arraycopy(original, from, arr, 0, len); return arr; } /** * @since 1.6 */ public static int[] copyOfRange(int[] original, int from, int to) { int newLength = to - from; if (newLength < 0) throw new IllegalArgumentException(from + " > " + to); int[] arr = new int[newLength]; int ceil = original.length-from; int len = (ceil < newLength) ? ceil : newLength; System.arraycopy(original, from, arr, 0, len); return arr; } /** * @since 1.6 */ public static long[] copyOfRange(long[] original, int from, int to) { int newLength = to - from; if (newLength < 0) throw new IllegalArgumentException(from + " > " + to); long[] arr = new long[newLength]; int ceil = original.length-from; int len = (ceil < newLength) ? ceil : newLength; System.arraycopy(original, from, arr, 0, len); return arr; } /** * @since 1.6 */ public static char[] copyOfRange(char[] original, int from, int to) { int newLength = to - from; if (newLength < 0) throw new IllegalArgumentException(from + " > " + to); char[] arr = new char[newLength]; int ceil = original.length-from; int len = (ceil < newLength) ? ceil : newLength; System.arraycopy(original, from, arr, 0, len); return arr; } /** * @since 1.6 */ public static float[] copyOfRange(float[] original, int from, int to) { int newLength = to - from; if (newLength < 0) throw new IllegalArgumentException(from + " > " + to); float[] arr = new float[newLength]; int ceil = original.length-from; int len = (ceil < newLength) ? ceil : newLength; System.arraycopy(original, from, arr, 0, len); return arr; } /** * @since 1.6 */ public static double[] copyOfRange(double[] original, int from, int to) { int newLength = to - from; if (newLength < 0) throw new IllegalArgumentException(from + " > " + to); double[] arr = new double[newLength]; int ceil = original.length-from; int len = (ceil < newLength) ? ceil : newLength; System.arraycopy(original, from, arr, 0, len); return arr; } /** * @since 1.6 */ public static boolean[] copyOfRange(boolean[] original, int from, int to) { int newLength = to - from; if (newLength < 0) throw new IllegalArgumentException(from + " > " + to); boolean[] arr = new boolean[newLength]; int ceil = original.length-from; int len = (ceil < newLength) ? ceil : newLength; System.arraycopy(original, from, arr, 0, len); return arr; } public static List asList(Object[] a) { return java.util.Arrays.asList(a); } /** * @since 1.5 */ public static int hashCode(long a[]) { if (a == null) return 0; int hash = 1; for (int i=0; i>> 32)); } return hash; } /** * @since 1.5 */ public static int hashCode(int a[]) { if (a == null) return 0; int hash = 1; for (int i=0; i>> 32)); } return hash; } /** * @since 1.5 */ public static int hashCode(Object a[]) { if (a == null) return 0; int hash = 1; for (int i=0; i0) buf.append(", "); Object e = a[i]; if (e == null) { buf.append("null"); } else if (!e.getClass().isArray()) { buf.append(e.toString()); } else if (e instanceof Object[]) { if (seen.contains(e)) buf.append("[...]"); else deepToString((Object[])e, buf, seen); } else { // primitive arr buf.append( (e instanceof byte[]) ? toString( (byte[]) e) : (e instanceof short[]) ? toString( (short[]) e) : (e instanceof int[]) ? toString( (int[]) e) : (e instanceof long[]) ? toString( (long[]) e) : (e instanceof char[]) ? toString( (char[]) e) : (e instanceof boolean[]) ? toString( (boolean[]) e) : (e instanceof float[]) ? toString( (float[]) e) : (e instanceof double[]) ? toString( (double[]) e) : ""); } } buf.append(']'); seen.remove(seen.size()-1); } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/AbstractMap.java0000644001750700037720000001671110360636052030442 0ustar dawidkdcl/* * Written by Dawid Kurzyniec, based on public domain code written by Doug Lea * and publictly available documentation, and released to the public domain, as * explained at http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util; import java.util.Map; import java.util.Set; import java.util.Iterator; /** * Convenience base class for map implementations that provides helper classes * representing simple map entries, both mutable and immutable. * * @author Doug Lea * @author Dawid Kurzyniec */ public abstract class AbstractMap extends java.util.AbstractMap { transient Set keySet; /** * Sole constructor. (For invocation by subclass constructors, typically * implicit.) */ protected AbstractMap() {} /** * {@inheritDoc} */ public Set keySet() { if (keySet == null) { keySet = new AbstractSet() { // from e.e.m.b. (overrides toArray) public int size() { return AbstractMap.this.size(); } public boolean contains(Object e) { return AbstractMap.this.containsKey(e); } public Iterator iterator() { return new Iterator() { final Iterator itr = AbstractMap.this.entrySet().iterator(); public boolean hasNext() { return itr.hasNext(); } public Object next() { return ((Entry)itr.next()).getKey(); } public void remove() { itr.remove(); } }; } }; } return keySet; } /** * An Entry maintaining a key and a value. The value may be * changed using the setValue method. This class * facilitates the process of building custom map * implementations. For example, it may be convenient to return * arrays of SimpleEntry instances in method * Map.entrySet().toArray * * @since 1.6 */ public static class SimpleEntry implements Entry { private final Object key; private Object value; /** * Creates an entry representing a mapping from the specified * key to the specified value. * * @param key the key represented by this entry * @param value the value represented by this entry */ public SimpleEntry(Object key, Object value) { this.key = key; this.value = value; } /** * Creates an entry representing the same mapping as the * specified entry. * * @param entry the entry to copy */ public SimpleEntry(Entry entry) { this.key = entry.getKey(); this.value = entry.getValue(); } /** * Returns the key corresponding to this entry. * * @return the key corresponding to this entry */ public Object getKey() { return key; } /** * Returns the value corresponding to this entry. * * @return the value corresponding to this entry */ public Object getValue() { return value; } /** * Replaces the value corresponding to this entry with the specified * value. * * @param value new value to be stored in this entry * @return the old value corresponding to the entry */ public Object setValue(Object value) { Object oldValue = this.value; this.value = value; return oldValue; } public boolean equals(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry e = (Map.Entry)o; return eq(key, e.getKey()) && eq(value, e.getValue()); } public int hashCode() { return ((key == null) ? 0 : key.hashCode()) ^ ((value == null) ? 0 : value.hashCode()); } /** * Returns a String representation of this map entry. This * implementation returns the string representation of this * entry's key followed by the equals character ("=") * followed by the string representation of this entry's value. * * @return a String representation of this map entry */ public String toString() { return key + "=" + value; } } /** * An Entry maintaining an immutable key and value, This class * does not support method setValue. This class may be * convenient in methods that return thread-safe snapshots of * key-value mappings. * * @since 1.6 */ public static class SimpleImmutableEntry implements Entry { private final Object key; private final Object value; /** * Creates an entry representing a mapping from the specified * key to the specified value. * * @param key the key represented by this entry * @param value the value represented by this entry */ public SimpleImmutableEntry(Object key, Object value) { this.key = key; this.value = value; } /** * Creates an entry representing the same mapping as the * specified entry. * * @param entry the entry to copy */ public SimpleImmutableEntry(Entry entry) { this.key = entry.getKey(); this.value = entry.getValue(); } /** * Returns the key corresponding to this entry. * * @return the key corresponding to this entry */ public Object getKey() { return key; } /** * Returns the value corresponding to this entry. * * @return the value corresponding to this entry */ public Object getValue() { return value; } /** * Replaces the value corresponding to this entry with the specified * value (optional operation). This implementation simply throws * UnsupportedOperationException, as this class implements * an immutable map entry. * * @param value new value to be stored in this entry * @return (Does not return) * @throws UnsupportedOperationException always */ public Object setValue(Object value) { throw new UnsupportedOperationException(); } public boolean equals(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry e = (Map.Entry)o; return eq(key, e.getKey()) && eq(value, e.getValue()); } public int hashCode() { return ((key == null) ? 0 : key.hashCode()) ^ ((value == null) ? 0 : value.hashCode()); } /** * Returns a String representation of this map entry. This * implementation returns the string representation of this * entry's key followed by the equals character ("=") * followed by the string representation of this entry's value. * * @return a String representation of this map entry */ public String toString() { return key + "=" + value; } } private static boolean eq(Object o1, Object o2) { return (o1 == null ? o2 == null : o1.equals(o2)); } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/LinkedList.java0000644001750700037720000003302710431260156030277 0ustar dawidkdclpackage edu.emory.mathcs.backport.java.util; import java.io.*; import java.util.List; import java.util.Iterator; import java.util.Collection; import java.util.ListIterator; import java.util.AbstractSequentialList; import java.lang.reflect.Array; import java.util.NoSuchElementException; import java.util.ConcurrentModificationException; public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, Serializable { private static final long serialVersionUID = 876323262645176354L; private transient int size = 0; private transient int modCount; // bi-directional cyclic list; head contains a sentinel entry private transient Entry head; private static class Entry { Entry prev; Entry next; Object val; Entry(Object val) { this.val = val; } } public LinkedList() { Entry sentinel = new Entry(null); sentinel.next = sentinel.prev = sentinel; head = sentinel; } public LinkedList(Collection c) { this(); addAll(c); } public int size() { return size; } public boolean isEmpty() { return size == 0; } public boolean contains(Object o) { return findFirst(o) != null; } private Entry getAt(int idx) { Entry e; int size = this.size; if (idx < 0 || idx >= size) { throw new ArrayIndexOutOfBoundsException("Index: " + idx + "; Size: " + size); } if (idx < (size >> 1)) { for (e = head.next; idx>0; idx--) e = e.next; return e; } else { idx = size-idx-1; for (e = head.prev; idx>0; idx--) e = e.prev; return e; } } private Entry findFirst(Object o) { if (o == null) { for (Entry e = head.next; e != head; e = e.next) { if (e.val == null) return e; } } else { for (Entry e = head.next; e != head; e = e.next) { if (o.equals(e.val)) return e; } } return null; } private Entry findLast(Object o) { if (o == null) { for (Entry e = head.prev; e != head; e = e.prev) { if (e.val == null) return e; } } else { for (Entry e = head.prev; e != head; e = e.prev) { if (o.equals(e.val)) return e; } } return null; } public int indexOf(Object o) { int idx=0; if (o == null) { for (Entry e = head.next; e != head; e = e.next, idx++) { if (e.val == null) return idx; } } else { for (Entry e = head.next; e != head; e = e.next, idx++) { if (o.equals(e.val)) return idx; } } return -1; } public int lastIndexOf(Object o) { int idx=size-1; if (o == null) { for (Entry e = head.prev; e != head; e = e.prev, idx--) { if (e.val == null) return idx; } } else { for (Entry e = head.prev; e != head; e = e.prev, idx--) { if (o.equals(e.val)) return idx; } } return -1; } public Object[] toArray() { Object[] a = new Object[size]; int i=0; for (Entry e = head.next; e != head; e = e.next) a[i++] = e.val; return a; } public Object[] toArray(Object[] a) { int size = this.size; if (a.length < size) { a = (Object[])Array.newInstance(a.getClass().getComponentType(), size); } int i=0; for (Entry e = head.next; e != head; e = e.next) a[i++] = e.val; if (i < a.length) a[i++] = null; return a; } public boolean add(Object o) { insertBefore(head, o); return true; } private void insertAfter(Entry e, Object val) { modCount++; Entry succ = e.next; Entry newe = new Entry(val); newe.prev = e; newe.next = succ; e.next = newe; succ.prev = newe; size++; } private void insertBefore(Entry e, Object val) { modCount++; Entry pred = e.prev; Entry newe = new Entry(val); newe.prev = pred; newe.next = e; pred.next = newe; e.prev = newe; size++; } private Object remove(Entry e) { if (e == head) throw new NoSuchElementException(); modCount++; Entry succ = e.next; Entry pred = e.prev; pred.next = succ; succ.prev = pred; size--; return e.val; } public boolean remove(Object o) { Entry e = findFirst(o); if (e == null) return false; remove(e); return true; } public boolean addAll(Collection c) { return insertAllBefore(head, c); } public boolean addAll(int index, Collection c) { return insertAllBefore((index == size) ? head : getAt(index), c); } private boolean insertAllBefore(Entry succ, Collection c) { Iterator itr = c.iterator(); if (!itr.hasNext()) return false; modCount++; Entry first = new Entry(itr.next()); Entry prev = first; Entry curr = first; int added = 1; while (itr.hasNext()) { curr = new Entry(itr.next()); prev.next = curr; curr.prev = prev; prev = curr; added++; } Entry pred = succ.prev; first.prev = pred; curr.next = succ; pred.next = first; succ.prev = curr; size += added; return true; } public void clear() { modCount++; head.next = head.prev = head; size = 0; } public Object get(int index) { return getAt(index).val; } public Object set(int index, Object element) { Entry e = getAt(index); Object old = e.val; e.val = element; return old; } public void add(int index, Object element) { if (index == size) insertBefore(head, element); else insertBefore(index == size ? head : getAt(index), element); } public Object remove(int index) { return remove(getAt(index)); } public ListIterator listIterator() { return new Itr(); } public ListIterator listIterator(int index) { return new Itr(index == size ? head : getAt(index), index); } public void addFirst(Object e) { insertAfter(head, e); } public void addLast(Object e) { insertBefore(head, e); } public boolean offerFirst(Object e) { insertAfter(head, e); return true; } public boolean offerLast(Object e) { insertBefore(head, e); return true; } public Object removeFirst() { return remove(head.next); } public Object removeLast() { return remove(head.prev); } public Object pollFirst() { return (size == 0) ? null : remove(head.next); } public Object pollLast() { return (size == 0) ? null : remove(head.prev); } public Object getFirst() { if (size == 0) throw new NoSuchElementException(); else return head.next.val; } public Object getLast() { if (size == 0) throw new NoSuchElementException(); else return head.prev.val; } public Object peekFirst() { return (size == 0) ? null : head.next.val; } public Object peekLast() { return (size == 0) ? null : head.prev.val; } public boolean removeFirstOccurrence(Object o) { Entry e = findFirst(o); if (e == null) return false; remove(e); return true; } public boolean removeLastOccurrence(Object o) { Entry e = findLast(o); if (e == null) return false; remove(e); return true; } public boolean offer(Object e) { return add(e); } public Object remove() { return removeFirst(); } public Object poll() { return pollFirst(); } public Object element() { return getFirst(); } public Object peek() { return peekFirst(); } public void push(Object e) { addFirst(e); } public Object pop() { return removeFirst(); } public Iterator descendingIterator() { return new DescItr(); } private class Itr implements ListIterator { int expectedModCount; int idx; Entry cursor; Entry lastRet; Itr(Entry cursor, int idx) { this.cursor = cursor; this.idx = idx; this.expectedModCount = modCount; } Itr() { this(head.next, 0); } public boolean hasNext() { return cursor != head; } public int nextIndex() { return idx; } public boolean hasPrevious() { return cursor.prev != head; } public int previousIndex() { return idx-1; } public Object next() { if (expectedModCount != modCount) throw new ConcurrentModificationException(); if (cursor == head) throw new NoSuchElementException(); lastRet = cursor; cursor = cursor.next; idx++; return lastRet.val; } public Object previous() { if (expectedModCount != modCount) throw new ConcurrentModificationException(); if (cursor.prev == head) throw new NoSuchElementException(); lastRet = cursor = cursor.prev; idx--; return lastRet.val; } public void add(Object val) { if (expectedModCount != modCount) throw new ConcurrentModificationException(); insertBefore(cursor, val); lastRet = null; idx++; expectedModCount++; } public void set(Object newVal) { if (lastRet == null) throw new IllegalStateException(); lastRet.val = newVal; } public void remove() { if (expectedModCount != modCount) throw new ConcurrentModificationException(); if (lastRet == null) throw new IllegalStateException(); if (lastRet.next == cursor) idx--; else cursor = lastRet.next; LinkedList.this.remove(lastRet); lastRet = null; expectedModCount++; } } private class DescItr implements ListIterator { int expectedModCount; int idx; Entry cursor; Entry lastRet; DescItr(Entry cursor, int idx) { this.cursor = cursor; this.idx = idx; this.expectedModCount = modCount; } DescItr() { this(head.prev, 0); } public boolean hasNext() { return cursor != head; } public int nextIndex() { return idx; } public boolean hasPrevious() { return cursor.next != head; } public int previousIndex() { return idx-1; } public Object next() { if (expectedModCount != modCount) throw new ConcurrentModificationException(); if (cursor == head) throw new NoSuchElementException(); lastRet = cursor; cursor = cursor.prev; idx++; return lastRet.val; } public Object previous() { if (expectedModCount != modCount) throw new ConcurrentModificationException(); if (cursor.next == head) throw new NoSuchElementException(); lastRet = cursor = cursor.next; idx--; return lastRet; } public void add(Object val) { if (expectedModCount != modCount) throw new ConcurrentModificationException(); insertAfter(cursor, val); lastRet = null; idx++; expectedModCount++; } public void set(Object newVal) { if (lastRet == null) throw new IllegalStateException(); lastRet.val = newVal; } public void remove() { if (expectedModCount != modCount) throw new ConcurrentModificationException(); if (lastRet == null) throw new IllegalStateException(); if (lastRet.next == cursor) idx--; else cursor = lastRet.next; LinkedList.this.remove(lastRet); lastRet = null; expectedModCount++; } } private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); out.writeInt(size); for (Entry e = head.next; e != head; e = e.next) { out.writeObject(e.val); } } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); int size = in.readInt(); Entry head = new Entry(null); head.next = head.prev = head; for (int i=0; i < size; i++) { insertBefore(head, in.readObject()); } this.size = size; this.head = head; } public Object clone() { LinkedList clone = null; try { clone = (LinkedList) super.clone(); } catch (CloneNotSupportedException e) { throw new InternalError(); } Entry head = new Entry(null); head.next = head.prev = head; clone.head = head; clone.addAll(this); return clone; } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/ArrayDeque.java0000644001750700037720000007012310431777052030305 0ustar dawidkdcl/* * Written by Josh Bloch of Google Inc. and released to the public domain, * as explained at http://creativecommons.org/licenses/publicdomain. */ package edu.emory.mathcs.backport.java.util; import java.io.Serializable; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.IOException; import java.util.Collection; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.ConcurrentModificationException; /** * Resizable-array implementation of the {@link Deque} interface. Array * deques have no capacity restrictions; they grow as necessary to support * usage. They are not thread-safe; in the absence of external * synchronization, they do not support concurrent access by multiple threads. * Null elements are prohibited. This class is likely to be faster than * {@link java.util.Stack} when used as a stack, and faster than {@link LinkedList} * when used as a queue. * *

Most ArrayDeque operations run in amortized constant time. * Exceptions include {@link #remove(Object) remove}, {@link * #removeFirstOccurrence removeFirstOccurrence}, {@link #removeLastOccurrence * removeLastOccurrence}, {@link #contains contains}, {@link #iterator * iterator.remove()}, and the bulk operations, all of which run in linear * time. * *

The iterators returned by this class's iterator method are * fail-fast: If the deque is modified at any time after the iterator * is created, in any way except through the iterator's own remove * method, the iterator will generally throw a {@link * ConcurrentModificationException}. Thus, in the face of concurrent * modification, the iterator fails quickly and cleanly, rather than risking * arbitrary, non-deterministic behavior at an undetermined time in the * future. * *

Note that the fail-fast behavior of an iterator cannot be guaranteed * as it is, generally speaking, impossible to make any hard guarantees in the * presence of unsynchronized concurrent modification. Fail-fast iterators * throw ConcurrentModificationException on a best-effort basis. * Therefore, it would be wrong to write a program that depended on this * exception for its correctness: the fail-fast behavior of iterators * should be used only to detect bugs. * *

This class and its iterator implement all of the * optional methods of the {@link Collection} and {@link * Iterator} interfaces. * *

This class is a member of the * * Java Collections Framework. * * @author Josh Bloch and Doug Lea * @since 1.6 */ public class ArrayDeque extends AbstractCollection implements Deque, Cloneable, Serializable { /** * The array in which the elements of the deque are stored. * The capacity of the deque is the length of this array, which is * always a power of two. The array is never allowed to become * full, except transiently within an addX method where it is * resized (see doubleCapacity) immediately upon becoming full, * thus avoiding head and tail wrapping around to equal each * other. We also guarantee that all array cells not holding * deque elements are always null. */ private transient Object[] elements; /** * The index of the element at the head of the deque (which is the * element that would be removed by remove() or pop()); or an * arbitrary number equal to tail if the deque is empty. */ private transient int head; /** * The index at which the next element would be added to the tail * of the deque (via addLast(E), add(E), or push(E)). */ private transient int tail; /** * The minimum capacity that we'll use for a newly created deque. * Must be a power of 2. */ private static final int MIN_INITIAL_CAPACITY = 8; // ****** Array allocation and resizing utilities ****** /** * Allocate empty array to hold the given number of elements. * * @param numElements the number of elements to hold */ private void allocateElements(int numElements) { int initialCapacity = MIN_INITIAL_CAPACITY; // Find the best power of two to hold elements. // Tests "<=" because arrays aren't kept full. if (numElements >= initialCapacity) { initialCapacity = numElements; initialCapacity |= (initialCapacity >>> 1); initialCapacity |= (initialCapacity >>> 2); initialCapacity |= (initialCapacity >>> 4); initialCapacity |= (initialCapacity >>> 8); initialCapacity |= (initialCapacity >>> 16); initialCapacity++; if (initialCapacity < 0) // Too many elements, must back off initialCapacity >>>= 1;// Good luck allocating 2 ^ 30 elements } elements = (Object[]) new Object[initialCapacity]; } /** * Double the capacity of this deque. Call only when full, i.e., * when head and tail have wrapped around to become equal. */ private void doubleCapacity() { assert head == tail; int p = head; int n = elements.length; int r = n - p; // number of elements to the right of p int newCapacity = n << 1; if (newCapacity < 0) throw new IllegalStateException("Sorry, deque too big"); Object[] a = new Object[newCapacity]; System.arraycopy(elements, p, a, 0, r); System.arraycopy(elements, 0, a, r, p); elements = (Object[])a; head = 0; tail = n; } /** * Copies the elements from our element array into the specified array, * in order (from first to last element in the deque). It is assumed * that the array is large enough to hold all elements in the deque. * * @return its argument */ private Object[] copyElements(Object[] a) { if (head < tail) { System.arraycopy(elements, head, a, 0, size()); } else if (head > tail) { int headPortionLen = elements.length - head; System.arraycopy(elements, head, a, 0, headPortionLen); System.arraycopy(elements, 0, a, headPortionLen, tail); } return a; } /** * Constructs an empty array deque with an initial capacity * sufficient to hold 16 elements. */ public ArrayDeque() { elements = (Object[]) new Object[16]; } /** * Constructs an empty array deque with an initial capacity * sufficient to hold the specified number of elements. * * @param numElements lower bound on initial capacity of the deque */ public ArrayDeque(int numElements) { allocateElements(numElements); } /** * Constructs a deque containing the elements of the specified * collection, in the order they are returned by the collection's * iterator. (The first element returned by the collection's * iterator becomes the first element, or front of the * deque.) * * @param c the collection whose elements are to be placed into the deque * @throws NullPointerException if the specified collection is null */ public ArrayDeque(Collection c) { allocateElements(c.size()); addAll(c); } // The main insertion and extraction methods are addFirst, // addLast, pollFirst, pollLast. The other methods are defined in // terms of these. /** * Inserts the specified element at the front of this deque. * * @param e the element to add * @throws NullPointerException if the specified element is null */ public void addFirst(Object e) { if (e == null) throw new NullPointerException(); elements[head = (head - 1) & (elements.length - 1)] = e; if (head == tail) doubleCapacity(); } /** * Inserts the specified element at the end of this deque. * *

This method is equivalent to {@link #add}. * * @param e the element to add * @throws NullPointerException if the specified element is null */ public void addLast(Object e) { if (e == null) throw new NullPointerException(); elements[tail] = e; if ( (tail = (tail + 1) & (elements.length - 1)) == head) doubleCapacity(); } /** * Inserts the specified element at the front of this deque. * * @param e the element to add * @return true (as specified by {@link Deque#offerFirst}) * @throws NullPointerException if the specified element is null */ public boolean offerFirst(Object e) { addFirst(e); return true; } /** * Inserts the specified element at the end of this deque. * * @param e the element to add * @return true (as specified by {@link Deque#offerLast}) * @throws NullPointerException if the specified element is null */ public boolean offerLast(Object e) { addLast(e); return true; } /** * @throws NoSuchElementException {@inheritDoc} */ public Object removeFirst() { Object x = pollFirst(); if (x == null) throw new NoSuchElementException(); return x; } /** * @throws NoSuchElementException {@inheritDoc} */ public Object removeLast() { Object x = pollLast(); if (x == null) throw new NoSuchElementException(); return x; } public Object pollFirst() { int h = head; Object result = elements[h]; // Element is null if deque empty if (result == null) return null; elements[h] = null; // Must null out slot head = (h + 1) & (elements.length - 1); return result; } public Object pollLast() { int t = (tail - 1) & (elements.length - 1); Object result = elements[t]; if (result == null) return null; elements[t] = null; tail = t; return result; } /** * @throws NoSuchElementException {@inheritDoc} */ public Object getFirst() { Object x = elements[head]; if (x == null) throw new NoSuchElementException(); return x; } /** * @throws NoSuchElementException {@inheritDoc} */ public Object getLast() { Object x = elements[(tail - 1) & (elements.length - 1)]; if (x == null) throw new NoSuchElementException(); return x; } public Object peekFirst() { return elements[head]; // elements[head] is null if deque empty } public Object peekLast() { return elements[(tail - 1) & (elements.length - 1)]; } /** * Removes the first occurrence of the specified element in this * deque (when traversing the deque from head to tail). * If the deque does not contain the element, it is unchanged. * More formally, removes the first element e such that * o.equals(e) (if such an element exists). * Returns true if this deque contained the specified element * (or equivalently, if this deque changed as a result of the call). * * @param o element to be removed from this deque, if present * @return true if the deque contained the specified element */ public boolean removeFirstOccurrence(Object o) { if (o == null) return false; int mask = elements.length - 1; int i = head; Object x; while ( (x = elements[i]) != null) { if (o.equals(x)) { delete(i); return true; } i = (i + 1) & mask; } return false; } /** * Removes the last occurrence of the specified element in this * deque (when traversing the deque from head to tail). * If the deque does not contain the element, it is unchanged. * More formally, removes the last element e such that * o.equals(e) (if such an element exists). * Returns true if this deque contained the specified element * (or equivalently, if this deque changed as a result of the call). * * @param o element to be removed from this deque, if present * @return true if the deque contained the specified element */ public boolean removeLastOccurrence(Object o) { if (o == null) return false; int mask = elements.length - 1; int i = (tail - 1) & mask; Object x; while ( (x = elements[i]) != null) { if (o.equals(x)) { delete(i); return true; } i = (i - 1) & mask; } return false; } // *** Queue methods *** /** * Inserts the specified element at the end of this deque. * *

This method is equivalent to {@link #addLast}. * * @param e the element to add * @return true (as specified by {@link Collection#add}) * @throws NullPointerException if the specified element is null */ public boolean add(Object e) { addLast(e); return true; } /** * Inserts the specified element at the end of this deque. * *

This method is equivalent to {@link #offerLast}. * * @param e the element to add * @return true (as specified by {@link Queue#offer}) * @throws NullPointerException if the specified element is null */ public boolean offer(Object e) { return offerLast(e); } /** * Retrieves and removes the head of the queue represented by this deque. * * This method differs from {@link #poll poll} only in that it throws an * exception if this deque is empty. * *

This method is equivalent to {@link #removeFirst}. * * @return the head of the queue represented by this deque * @throws NoSuchElementException {@inheritDoc} */ public Object remove() { return removeFirst(); } /** * Retrieves and removes the head of the queue represented by this deque * (in other words, the first element of this deque), or returns * null if this deque is empty. * *

This method is equivalent to {@link #pollFirst}. * * @return the head of the queue represented by this deque, or * null if this deque is empty */ public Object poll() { return pollFirst(); } /** * Retrieves, but does not remove, the head of the queue represented by * this deque. This method differs from {@link #peek peek} only in * that it throws an exception if this deque is empty. * *

This method is equivalent to {@link #getFirst}. * * @return the head of the queue represented by this deque * @throws NoSuchElementException {@inheritDoc} */ public Object element() { return getFirst(); } /** * Retrieves, but does not remove, the head of the queue represented by * this deque, or returns null if this deque is empty. * *

This method is equivalent to {@link #peekFirst}. * * @return the head of the queue represented by this deque, or * null if this deque is empty */ public Object peek() { return peekFirst(); } // *** Stack methods *** /** * Pushes an element onto the stack represented by this deque. In other * words, inserts the element at the front of this deque. * *

This method is equivalent to {@link #addFirst}. * * @param e the element to push * @throws NullPointerException if the specified element is null */ public void push(Object e) { addFirst(e); } /** * Pops an element from the stack represented by this deque. In other * words, removes and returns the first element of this deque. * *

This method is equivalent to {@link #removeFirst()}. * * @return the element at the front of this deque (which is the top * of the stack represented by this deque) * @throws NoSuchElementException {@inheritDoc} */ public Object pop() { return removeFirst(); } private void checkInvariants() { assert elements[tail] == null; assert head == tail ? elements[head] == null : (elements[head] != null && elements[(tail - 1) & (elements.length - 1)] != null); assert elements[(head - 1) & (elements.length - 1)] == null; } /** * Removes the element at the specified position in the elements array, * adjusting head and tail as necessary. This can result in motion of * elements backwards or forwards in the array. * *

This method is called delete rather than remove to emphasize * that its semantics differ from those of {@link List#remove(int)}. * * @return true if elements moved backwards */ private boolean delete(int i) { checkInvariants(); final Object[] elements = this.elements; final int mask = elements.length - 1; final int h = head; final int t = tail; final int front = (i - h) & mask; final int back = (t - i) & mask; // Invariant: head <= i < tail mod circularity if (front >= ((t - h) & mask)) throw new ConcurrentModificationException(); // Optimize for least element motion if (front < back) { if (h <= i) { System.arraycopy(elements, h, elements, h + 1, front); } else { // Wrap around System.arraycopy(elements, 0, elements, 1, i); elements[0] = elements[mask]; System.arraycopy(elements, h, elements, h + 1, mask - h); } elements[h] = null; head = (h + 1) & mask; return false; } else { if (i < t) { // Copy the null tail as well System.arraycopy(elements, i + 1, elements, i, back); tail = t - 1; } else { // Wrap around System.arraycopy(elements, i + 1, elements, i, mask - i); elements[mask] = elements[0]; System.arraycopy(elements, 1, elements, 0, t); tail = (t - 1) & mask; } return true; } } // *** Collection Methods *** /** * Returns the number of elements in this deque. * * @return the number of elements in this deque */ public int size() { return (tail - head) & (elements.length - 1); } /** * Returns true if this deque contains no elements. * * @return true if this deque contains no elements */ public boolean isEmpty() { return head == tail; } /** * Returns an iterator over the elements in this deque. The elements * will be ordered from first (head) to last (tail). This is the same * order that elements would be dequeued (via successive calls to * {@link #remove} or popped (via successive calls to {@link #pop}). * * @return an iterator over the elements in this deque */ public Iterator iterator() { return new DeqIterator(); } public Iterator descendingIterator() { return new DescendingIterator(); } private class DeqIterator implements Iterator { /** * Index of element to be returned by subsequent call to next. */ private int cursor = head; /** * Tail recorded at construction (also in remove), to stop * iterator and also to check for comodification. */ private int fence = tail; /** * Index of element returned by most recent call to next. * Reset to -1 if element is deleted by a call to remove. */ private int lastRet = -1; public boolean hasNext() { return cursor != fence; } public Object next() { if (cursor == fence) throw new NoSuchElementException(); Object result = elements[cursor]; // This check doesn't catch all possible comodifications, // but does catch the ones that corrupt traversal if (tail != fence || result == null) throw new ConcurrentModificationException(); lastRet = cursor; cursor = (cursor + 1) & (elements.length - 1); return result; } public void remove() { if (lastRet < 0) throw new IllegalStateException(); if (delete(lastRet)) { // if left-shifted, undo increment in next() cursor = (cursor - 1) & (elements.length - 1); fence = tail; } lastRet = -1; } } private class DescendingIterator implements Iterator { /* * This class is nearly a mirror-image of DeqIterator, using * tail instead of head for initial cursor, and head instead of * tail for fence. */ private int cursor = tail; private int fence = head; private int lastRet = -1; public boolean hasNext() { return cursor != fence; } public Object next() { if (cursor == fence) throw new NoSuchElementException(); cursor = (cursor - 1) & (elements.length - 1); Object result = elements[cursor]; if (head != fence || result == null) throw new ConcurrentModificationException(); lastRet = cursor; return result; } public void remove() { if (lastRet < 0) throw new IllegalStateException(); if (!delete(lastRet)) { cursor = (cursor + 1) & (elements.length - 1); fence = head; } lastRet = -1; } } /** * Returns true if this deque contains the specified element. * More formally, returns true if and only if this deque contains * at least one element e such that o.equals(e). * * @param o object to be checked for containment in this deque * @return true if this deque contains the specified element */ public boolean contains(Object o) { if (o == null) return false; int mask = elements.length - 1; int i = head; Object x; while ( (x = elements[i]) != null) { if (o.equals(x)) return true; i = (i + 1) & mask; } return false; } /** * Removes a single instance of the specified element from this deque. * If the deque does not contain the element, it is unchanged. * More formally, removes the first element e such that * o.equals(e) (if such an element exists). * Returns true if this deque contained the specified element * (or equivalently, if this deque changed as a result of the call). * *

This method is equivalent to {@link #removeFirstOccurrence}. * * @param o element to be removed from this deque, if present * @return true if this deque contained the specified element */ public boolean remove(Object o) { return removeFirstOccurrence(o); } /** * Removes all of the elements from this deque. * The deque will be empty after this call returns. */ public void clear() { int h = head; int t = tail; if (h != t) { // clear all cells head = tail = 0; int i = h; int mask = elements.length - 1; do { elements[i] = null; i = (i + 1) & mask; } while (i != t); } } /** * Returns an array containing all of the elements in this deque * in proper sequence (from first to last element). * *

The returned array will be "safe" in that no references to it are * maintained by this deque. (In other words, this method must allocate * a new array). The caller is thus free to modify the returned array. * *

This method acts as bridge between array-based and collection-based * APIs. * * @return an array containing all of the elements in this deque */ public Object[] toArray() { return copyElements(new Object[size()]); } /** * Returns an array containing all of the elements in this deque in * proper sequence (from first to last element); the runtime type of the * returned array is that of the specified array. If the deque fits in * the specified array, it is returned therein. Otherwise, a new array * is allocated with the runtime type of the specified array and the * size of this deque. * *

If this deque fits in the specified array with room to spare * (i.e., the array has more elements than this deque), the element in * the array immediately following the end of the deque is set to * null. * *

Like the {@link #toArray()} method, this method acts as bridge between * array-based and collection-based APIs. Further, this method allows * precise control over the runtime type of the output array, and may, * under certain circumstances, be used to save allocation costs. * *

Suppose x is a deque known to contain only strings. * The following code can be used to dump the deque into a newly * allocated array of String: * *

     *     String[] y = x.toArray(new String[0]);
* * Note that toArray(new Object[0]) is identical in function to * toArray(). * * @param a the array into which the elements of the deque are to * be stored, if it is big enough; otherwise, a new array of the * same runtime type is allocated for this purpose * @return an array containing all of the elements in this deque * @throws ArrayStoreException if the runtime type of the specified array * is not a supertype of the runtime type of every element in * this deque * @throws NullPointerException if the specified array is null */ public Object[] toArray(Object[] a) { int size = size(); if (a.length < size) a = (Object[])java.lang.reflect.Array.newInstance( a.getClass().getComponentType(), size); copyElements(a); if (a.length > size) a[size] = null; return a; } // *** Object methods *** /** * Returns a copy of this deque. * * @return a copy of this deque */ public Object clone() { try { ArrayDeque result = (ArrayDeque) super.clone(); result.elements = Arrays.copyOf(elements, elements.length); return result; } catch (CloneNotSupportedException e) { throw new AssertionError(); } } /** * Appease the serialization gods. */ private static final long serialVersionUID = 2340985798034038923L; /** * Serialize this deque. * * @serialData The current size (int) of the deque, * followed by all of its elements (each an object reference) in * first-to-last order. */ private void writeObject(ObjectOutputStream s) throws IOException { s.defaultWriteObject(); // Write out size s.writeInt(size()); // Write out elements in order. int mask = elements.length - 1; for (int i = head; i != tail; i = (i + 1) & mask) s.writeObject(elements[i]); } /** * Deserialize this deque. */ private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { s.defaultReadObject(); // Read in size and allocate array int size = s.readInt(); allocateElements(size); head = 0; tail = size; // Read in all elements in the proper order. for (int i = 0; i < size; i++) elements[i] = s.readObject(); } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/PriorityQueue.java0000644001750700037720000005300710524252626031071 0ustar dawidkdcl/* * Written by Dawid Kurzyniec, on the basis of public specifications of class * java.util.PriorityQueue by Josh Bloch, and released to the public domain, * as explained at http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util; import java.util.Comparator; import java.util.SortedSet; import java.util.Iterator; import java.util.List; import java.util.Collection; import java.util.NoSuchElementException; import java.util.ArrayList; import java.util.ConcurrentModificationException; /** * An unbounded {@linkplain Queue queue} that supports element retrieval * in the order of relative priority. The ordering can be defined via an * explicit comparator; otherwise, the natural ordering of elements is used. * Element at the head of the queue is always the smallest one * according to the given ordering. * *

While this queue is logically * unbounded, attempted additions may fail due to resource exhaustion * (causing OutOfMemoryError). This class does not permit * null elements. A priority queue relying on {@linkplain * Comparable natural ordering} also does not permit insertion of * non-comparable objects (doing so results in * ClassCastException). * *

This class and its iterator implement all of the * optional methods of the {@link Collection} and {@link * Iterator} interfaces. The Iterator provided in method {@link * #iterator()} is not guaranteed to traverse the elements of * the PriorityQueue in any particular order. If you need * ordered traversal, consider using * Arrays.sort(pq.toArray()). * *

Operations on this class make no guarantees about the ordering * of elements with equal priority. If you need to enforce an * ordering, you can define custom classes or comparators that use a * secondary key to break ties in primary priority values. See * {@link edu.emory.mathcs.backport.java.util.concurrent.PriorityBlockingQueue} * for an example. * *

Implementation note: basic mutative methods (insert, offer, * remove, poll etc) have complexity O(log(n)). Parameterless inspection methods * (peek, element,isEmpty) have complexity O(1). Methods contains(Object) and * remove(Object) have complexity O(n). * * @since 1.5 * @author Dawid Kurzyniec */ public class PriorityQueue extends AbstractQueue implements java.io.Serializable { private final static long serialVersionUID = -7720805057305804111L; private final static int DEFAULT_INIT_CAPACITY = 11; private transient Object[] buffer; private int size; private final Comparator comparator; private transient int modCount; /** * Creates a PriorityQueue with the default * initial capacity (11) that orders its elements according to * their {@linkplain Comparable natural ordering}. */ public PriorityQueue() { this(DEFAULT_INIT_CAPACITY, null); } /** * Creates a PriorityQueue with the specified * initial capacity that orders its elements according to their * {@linkplain Comparable natural ordering}. * * @param initialCapacity the initial capacity for this priority queue * @throws IllegalArgumentException if initialCapacity is less * than 1 */ public PriorityQueue(int initialCapacity) { this(initialCapacity, null); } /** * Creates a PriorityQueue with the specified initial * capacity that orders its elements according to the specified * comparator. * * @param comparator the comparator used to order this priority queue. * If null then the order depends on the elements' natural * ordering. * @throws IllegalArgumentException if initialCapacity is less * than 1 */ public PriorityQueue(Comparator comparator) { this(DEFAULT_INIT_CAPACITY, comparator); } public PriorityQueue(int initialCapacity, Comparator comparator) { if (initialCapacity < 1) throw new IllegalArgumentException(); this.buffer = new Object[initialCapacity]; this.comparator = comparator; } /** * Creates a PriorityQueue containing the elements from * the specified priority queue. This priority queue has an initial * capacity of 110% of the size of the specified queue, and it is * sorted according to the same comparator as the specified queue, * or according to the natural ordering of its * elements if the specified queue is sorted according to the natural * ordering of its elements. * * @param q the queue whose elements are to be placed * into this priority queue. * @throws NullPointerException if the specified queue is null */ public PriorityQueue(PriorityQueue q) { this((Collection)q); } /** * Creates a PriorityQueue containing the elements * from the specified sorted set. This priority queue has an initial * capacity of 110% of the size of the specified set, and it is * sorted according to the same comparator as the specified set, * or according to the natural ordering of its * elements if the specified set is sorted according to the natural * ordering of its elements. * * @param s the set whose elements are to be placed * into this priority queue. * @throws NullPointerException if the specified set or any * of its elements are null */ public PriorityQueue(SortedSet s) { this((Collection)s); } /** * Creates a PriorityQueue containing the elements * in the specified collection. The priority queue has an initial * capacity of 110% of the size of the specified collection. If * the specified collection is a {@link java.util.SortedSet} or a {@link * PriorityQueue}, this priority queue will be sorted according to * the same comparator, or according to the natural ordering of its * elements if the collection is sorted according to the natural * ordering of its elements. Otherwise, this priority queue is * ordered according to the natural ordering of its elements. * * @param c the collection whose elements are to be placed * into this priority queue. * @throws ClassCastException if elements of the specified collection * cannot be compared to one another according to the priority * queue's ordering. * @throws NullPointerException if the specified collection or any * of its elements are null */ public PriorityQueue(Collection c) { int capacity = c.size(); capacity += size/10; if (capacity < 0) capacity = Integer.MAX_VALUE; else if (capacity == 0) capacity = 1; this.buffer = new Object[capacity]; if (c instanceof PriorityQueue) { PriorityQueue that = (PriorityQueue)c; this.comparator = that.comparator; this.size = that.size; System.arraycopy(that.buffer, 0, this.buffer, 0, this.size); } else if (c instanceof SortedSet) { SortedSet s = (SortedSet)c; this.comparator = s.comparator(); for (Iterator itr = s.iterator(); itr.hasNext();) { buffer[size++] = itr.next(); } } else { this.comparator = null; for (Iterator itr = c.iterator(); itr.hasNext();) { buffer[size++] = itr.next(); } for (int i=size/2; i>=0; --i) { percolateDown(i, buffer[i]); } } } /** * Returns an iterator over the elements in this queue. The * iterator does not return the elements in any particular order. * The returned iterator is a thread-safe "fast-fail" iterator * that will throw {@link java.util.ConcurrentModificationException} upon * detected interference. * * @return an iterator over the elements in this queue */ public Iterator iterator() { return new Itr(); } /** * Returns the comparator used to order the elements in this queue, * or null if this queue uses the {@linkplain Comparable * natural ordering} of its elements. * * @return the comparator used to order the elements in this queue, * or null if this queue uses the natural * ordering of its elements. */ public Comparator comparator() { return comparator; } /** * Inserts the specified element into this priority queue. * * @param o the element to add * @return true (as per the spec for {@link Queue#offer}) * @throws ClassCastException if the specified element cannot be compared * with elements currently in the priority queue according to the * priority queue's ordering * @throws NullPointerException if the specified element is null */ public boolean offer(Object o) { if (o == null) throw new NullPointerException(); if (size == buffer.length) { int newlen = buffer.length*2; if (newlen < buffer.length) { // overflow if (buffer.length == Integer.MAX_VALUE) { throw new OutOfMemoryError(); } newlen = Integer.MAX_VALUE; } Object[] newbuffer = new Object[newlen]; System.arraycopy(buffer, 0, newbuffer, 0, size); buffer = newbuffer; } modCount++; percolateUp(size++, o); return true; } /** * Retrieves, but does not remove, the head of this queue, or returns * null if this queue is empty. * * @return the head of this queue, or null if this queue is * empty */ public Object peek() { return (size == 0) ? null : buffer[0]; } /** * Retrieves and removes the head of this queue, or returns null * if this queue is empty. * * @return the head of this queue, or null if this queue is * empty */ public Object poll() { if (size == 0) return null; modCount++; Object head = buffer[0]; --size; percolateDown(0, buffer[size]); buffer[size] = null; return head; } /** * Returns the number of elements in this priority queue. * * @return the number of elements in this priority queue */ public int size() { return size; } /** * Assuming that the 'idx' element is to be overwritten, takes an element * (usually from the end of the queue) to replace 'idx' and percolates it * down the heap. */ private int percolateDown(int idx, Object e) { try { if (comparator != null) { while (true) { int c = (idx<<1)+1; if (c >= size) break; if (c+1 < size) { if (comparator.compare(buffer[c], buffer[c+1]) > 0) c++; } if (comparator.compare(e, buffer[c]) <= 0) break; buffer[idx] = buffer[c]; idx = c; } } else { Comparable ec = (Comparable)e; while (true) { int c = (idx<<1)+1; if (c >= size) break; if (c+1 < size) { if (((Comparable)buffer[c]).compareTo(buffer[c+1]) > 0) c++; } if (ec.compareTo(buffer[c]) <= 0) break; buffer[idx] = buffer[c]; idx = c; } } return idx; } finally { buffer[idx] = e; } } /** * Takes an element to be inserted into the queue, puts it at 'idx' and * percolates it up the heap. */ private int percolateUp(int idx, Object e) { try { if (comparator != null) { while (idx > 0) { int c = (idx-1)>>>1; if (comparator.compare(e, buffer[c]) >= 0) break; buffer[idx] = buffer[c]; idx = c; } return idx; } else { Comparable ce = (Comparable)e; while (idx > 0) { int c = (idx-1)>>>1; if (ce.compareTo(buffer[c]) >= 0) break; buffer[idx] = buffer[c]; idx = c; } return idx; } } finally { buffer[idx] = e; } } /** * Inserts the specified element into this priority queue. * * @param o the element to add * @return true (as per the spec for {@link Collection#add}) * @throws ClassCastException if the specified element cannot be compared * with elements currently in the priority queue according to the * priority queue's ordering * @throws NullPointerException if the specified element is null */ public boolean add(Object o) { return offer(o); } /** * Retrieves and removes the head of this queue. * * @return the head of this queue */ public Object remove() { if (size == 0) throw new NoSuchElementException(); Object head = buffer[0]; modCount++; --size; percolateDown(0, buffer[size]); buffer[size] = null; return head; } /** * Retrieves, but does not remove, the head of this queue. * * @return the head of this queue * @throws NoSuchElementException of the queue is empty */ public Object element() { if (size == 0) throw new NoSuchElementException(); return buffer[0]; } /** * Returns true if this queue contains no elements. * * @return true if this queue contains no elements */ public boolean isEmpty() { return size == 0; } /** * Returns true if this queue contains the specified element. * More formally, returns true if and only if this queue contains * at least one element e such that o.equals(e). * * @param o object to be checked for containment in this queue * @return true if this queue contains the specified element */ public boolean contains(Object o) { for (int i=0; iThe returned array will be "safe" in that no references to it are * maintained by this queue. (In other words, this method must allocate * a new array). The caller is thus free to modify the returned array. * *

This method acts as bridge between array-based and collection-based * APIs. * * @return an array containing all of the elements in this queue */ public Object[] toArray() { return Arrays.copyOf(buffer, size, Object[].class); } /** * Returns an array containing all of the elements in this queue; the * runtime type of the returned array is that of the specified array. * The returned array elements are in no particular order. * If the queue fits in the specified array, it is returned therein. * Otherwise, a new array is allocated with the runtime type of the * specified array and the size of this queue. * *

If this queue fits in the specified array with room to spare * (i.e., the array has more elements than this queue), the element in * the array immediately following the end of the queue is set to * null. * *

Like the {@link #toArray()} method, this method acts as bridge between * array-based and collection-based APIs. Further, this method allows * precise control over the runtime type of the output array, and may, * under certain circumstances, be used to save allocation costs. * *

Suppose x is a queue known to contain only strings. * The following code can be used to dump the queue into a newly * allocated array of String: * *

     *     String[] y = x.toArray(new String[0]);
* * Note that toArray(new Object[0]) is identical in function to * toArray(). * * @param a the array into which the elements of the queue are to * be stored, if it is big enough; otherwise, a new array of the * same runtime type is allocated for this purpose * @return an array containing all of the elements in this queue * @throws ArrayStoreException if the runtime type of the specified array * is not a supertype of the runtime type of every element in * this queue * @throws NullPointerException if the specified array is null */ public Object[] toArray(Object[] a) { if (a.length < size) { return Arrays.copyOf(buffer, size, a.getClass()); } else { System.arraycopy(buffer, 0, a, 0, size); if (a.length > size) a[size] = null; return a; } } /** * Removes a single instance of the specified element from this queue, * if it is present. * Returns true if this queue contained the specified element * (or equivalently, if this queue changed as a result of the call). * * @param o element to be removed from this queue, if present * @return true if this queue changed as a result of the call */ public boolean remove(Object o) { if (o == null) return false; if (comparator != null) { for (int i = 0; i < size; i++) { if (comparator.compare(buffer[i], o) == 0) { removeAt(i); return true; } } } else { for (int i = 0; i < size; i++) { if (((Comparable)buffer[i]).compareTo(o) == 0) { removeAt(i); return true; } } } return false; } private Object removeAt(int i) { assert (i < size); modCount++; --size; int newpos; Object e = buffer[size]; buffer[size] = null; // first, try percolating down newpos = percolateDown(i, e); if (newpos != i) return null; // not moved; so percolate up newpos = percolateUp(i, e); return (newpos < i ? e : null); } /** * Removes all of the elements from this queue. * The queue will be empty after this call returns. */ public void clear() { modCount++; Arrays.fill(buffer, 0, size, null); size = 0; } private class Itr implements Iterator { int cursor = 0; List percolatedElems; int cursorPercolated = 0; int expectedModCount = modCount; int lastRet; Object lastRetPercolated; Itr() {} public boolean hasNext() { return cursor < size || percolatedElems != null; } public Object next() { checkForComodification(); if (cursor < size) { lastRet = cursor++; return buffer[lastRet]; } else if (percolatedElems != null) { lastRet = -1; lastRetPercolated = percolatedElems.remove(percolatedElems.size()-1); if (percolatedElems.isEmpty()) { percolatedElems = null; } return lastRetPercolated; } else { throw new NoSuchElementException(); } } public void remove() { if (lastRet >= 0) { Object percolatedElem = removeAt(lastRet); lastRet = -1; if (percolatedElem == null) { cursor--; } else { if (percolatedElems == null) percolatedElems = new ArrayList(); percolatedElems.add(percolatedElem); } } else if (lastRetPercolated != null) { PriorityQueue.this.remove(lastRetPercolated); lastRetPercolated = null; } else { throw new IllegalStateException(); } expectedModCount = modCount; } private void checkForComodification() { if (expectedModCount != modCount) { throw new ConcurrentModificationException(); } } } /** * @serialData the length of the array (queue capacity) is stored, followed * by all of its elements (as Objects) */ private void writeObject(java.io.ObjectOutputStream os) throws java.io.IOException { os.defaultWriteObject(); os.writeInt(buffer.length); for (int i=0; i 0 && c instanceof SortedSet && map instanceof TreeMap && eq(((SortedSet)c).comparator(), this.comparator())) { ((TreeMap)map).buildFromSorted(new MapIterator(c.iterator()), c.size()); return true; } else { return super.addAll(c); } } public void clear() { map.clear(); } private static class MapIterator implements Iterator { final Iterator itr; MapIterator(Iterator itr) { this.itr = itr; } public boolean hasNext() { return itr.hasNext(); } public Object next() { return new AbstractMap.SimpleImmutableEntry(itr.next(), PRESENT); } public void remove() { throw new UnsupportedOperationException(); } } public Object clone() { TreeSet clone; try { clone = (TreeSet)super.clone(); } catch (CloneNotSupportedException e) { throw new InternalError(); } // deep-copy clone.map = new TreeMap(map); return clone; } private static boolean eq(Object o1, Object o2) { return o1 == null ? o2 == null : o1.equals(o2); } static class IOIterator extends TreeMap.IOIterator { IOIterator(ObjectInputStream in, int remaining) { super(in, remaining); } public Object next() { if (remaining <= 0) throw new NoSuchElementException(); remaining--; try { return new AbstractMap.SimpleImmutableEntry(ois.readObject(), PRESENT); } catch (IOException e) { throw new TreeMap.IteratorIOException(e); } catch (ClassNotFoundException e) { throw new TreeMap.IteratorNoClassException(e); } } public void remove() { throw new UnsupportedOperationException(); } } private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); out.writeObject(map.comparator()); out.writeInt(map.size()); for (Iterator itr = map.keySet().iterator(); itr.hasNext(); ) { out.writeObject(itr.next()); } } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); Comparator comparator = (Comparator)in.readObject(); TreeMap map = new TreeMap(comparator); int size = in.readInt(); try { map.buildFromSorted(new IOIterator(in, size), size); this.map = map; } catch (TreeMap.IteratorIOException e) { throw e.getException(); } catch (TreeMap.IteratorNoClassException e) { throw e.getException(); } } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/NavigableSet.java0000644001750700037720000003204710431777171030614 0ustar dawidkdcl/* * Written by Doug Lea and Josh Bloch with assistance from members of JCP * JSR-166 Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util; import java.util.SortedSet; import java.util.Iterator; /** * A {@link java.util.SortedSet} extended with navigation methods reporting * closest matches for given search targets. Methods {@code lower}, * {@code floor}, {@code ceiling}, and {@code higher} return elements * respectively less than, less than or equal, greater than or equal, * and greater than a given element, returning {@code null} if there * is no such element. A {@code NavigableSet} may be accessed and * traversed in either ascending or descending order. The {@code * descendingSet} method returns a view of the set with the senses of * all relational and directional methods inverted. The performance of * ascending operations and views is likely to be faster than that of * descending ones. This interface additionally defines methods * {@code pollFirst} and {@code pollLast} that return and remove the * lowest and highest element, if one exists, else returning {@code * null}. Methods {@code subSet}, {@code headSet}, * and {@code tailSet} differ from the like-named {@code * SortedSet} methods in accepting additional arguments describing * whether lower and upper bounds are inclusive versus exclusive. * Subsets of any {@code NavigableSet} must implement the {@code * NavigableSet} interface. * *

The return values of navigation methods may be ambiguous in * implementations that permit {@code null} elements. However, even * in this case the result can be disambiguated by checking * {@code contains(null)}. To avoid such issues, implementations of * this interface are encouraged to not permit insertion of * {@code null} elements. (Note that sorted sets of {@link * java.lang.Comparable} elements intrinsically do not permit {@code null}.) * *

Methods * {@link #subSet(Object, Object) subSet(E, E)}, * {@link #headSet(Object) headSet(E)}, and * {@link #tailSet(Object) tailSet(E)} * are specified to return {@code SortedSet} to allow existing * implementations of {@code SortedSet} to be compatibly retrofitted to * implement {@code NavigableSet}, but extensions and implementations * of this interface are encouraged to override these methods to return * {@code NavigableSet}. * *

This interface is a member of the * * Java Collections Framework. * * @author Doug Lea * @author Josh Bloch * @since 1.6 */ public interface NavigableSet extends SortedSet { /** * Returns the greatest element in this set strictly less than the * given element, or {@code null} if there is no such element. * * @param e the value to match * @return the greatest element less than {@code e}, * or {@code null} if there is no such element * @throws ClassCastException if the specified element cannot be * compared with the elements currently in the set * @throws NullPointerException if the specified element is null * and this set does not permit null elements */ Object lower(Object e); /** * Returns the greatest element in this set less than or equal to * the given element, or {@code null} if there is no such element. * * @param e the value to match * @return the greatest element less than or equal to {@code e}, * or {@code null} if there is no such element * @throws ClassCastException if the specified element cannot be * compared with the elements currently in the set * @throws NullPointerException if the specified element is null * and this set does not permit null elements */ Object floor(Object e); /** * Returns the least element in this set greater than or equal to * the given element, or {@code null} if there is no such element. * * @param e the value to match * @return the least element greater than or equal to {@code e}, * or {@code null} if there is no such element * @throws ClassCastException if the specified element cannot be * compared with the elements currently in the set * @throws NullPointerException if the specified element is null * and this set does not permit null elements */ Object ceiling(Object e); /** * Returns the least element in this set strictly greater than the * given element, or {@code null} if there is no such element. * * @param e the value to match * @return the least element greater than {@code e}, * or {@code null} if there is no such element * @throws ClassCastException if the specified element cannot be * compared with the elements currently in the set * @throws NullPointerException if the specified element is null * and this set does not permit null elements */ Object higher(Object e); /** * Retrieves and removes the first (lowest) element, * or returns {@code null} if this set is empty. * * @return the first element, or {@code null} if this set is empty */ Object pollFirst(); /** * Retrieves and removes the last (highest) element, * or returns {@code null} if this set is empty. * * @return the last element, or {@code null} if this set is empty */ Object pollLast(); /** * Returns an iterator over the elements in this set, in ascending order. * * @return an iterator over the elements in this set, in ascending order */ Iterator iterator(); /** * Returns a reverse order view of the elements contained in this set. * The descending set is backed by this set, so changes to the set are * reflected in the descending set, and vice-versa. If either set is * modified while an iteration over either set is in progress (except * through the iterator's own {@code remove} operation), the results of * the iteration are undefined. * *

The returned set has an ordering equivalent to * {@link Collections#reverseOrder(Comparator) Collections.reverseOrder}(comparator()). * The expression {@code s.descendingSet().descendingSet()} returns a * view of {@code s} essentially equivalent to {@code s}. * * @return a reverse order view of this set */ NavigableSet descendingSet(); /** * Returns an iterator over the elements in this set, in descending order. * Equivalent in effect to {@code descendingSet().iterator()}. * * @return an iterator over the elements in this set, in descending order */ Iterator descendingIterator(); /** * Returns a view of the portion of this set whose elements range from * {@code fromElement} to {@code toElement}. If {@code fromElement} and * {@code toElement} are equal, the returned set is empty unless {@code * fromExclusive} and {@code toExclusive} are both true. The returned set * is backed by this set, so changes in the returned set are reflected in * this set, and vice-versa. The returned set supports all optional set * operations that this set supports. * *

The returned set will throw an {@code IllegalArgumentException} * on an attempt to insert an element outside its range. * * @param fromElement low endpoint of the returned set * @param fromInclusive {@code true} if the low endpoint * is to be included in the returned view * @param toElement high endpoint of the returned set * @param toInclusive {@code true} if the high endpoint * is to be included in the returned view * @return a view of the portion of this set whose elements range from * {@code fromElement}, inclusive, to {@code toElement}, exclusive * @throws ClassCastException if {@code fromElement} and * {@code toElement} cannot be compared to one another using this * set's comparator (or, if the set has no comparator, using * natural ordering). Implementations may, but are not required * to, throw this exception if {@code fromElement} or * {@code toElement} cannot be compared to elements currently in * the set. * @throws NullPointerException if {@code fromElement} or * {@code toElement} is null and this set does * not permit null elements * @throws IllegalArgumentException if {@code fromElement} is * greater than {@code toElement}; or if this set itself * has a restricted range, and {@code fromElement} or * {@code toElement} lies outside the bounds of the range. */ NavigableSet subSet(Object fromElement, boolean fromInclusive, Object toElement, boolean toInclusive); /** * Returns a view of the portion of this set whose elements are less than * (or equal to, if {@code inclusive} is true) {@code toElement}. The * returned set is backed by this set, so changes in the returned set are * reflected in this set, and vice-versa. The returned set supports all * optional set operations that this set supports. * *

The returned set will throw an {@code IllegalArgumentException} * on an attempt to insert an element outside its range. * * @param toElement high endpoint of the returned set * @param inclusive {@code true} if the high endpoint * is to be included in the returned view * @return a view of the portion of this set whose elements are less than * (or equal to, if {@code inclusive} is true) {@code toElement} * @throws ClassCastException if {@code toElement} is not compatible * with this set's comparator (or, if the set has no comparator, * if {@code toElement} does not implement {@link java.lang.Comparable}). * Implementations may, but are not required to, throw this * exception if {@code toElement} cannot be compared to elements * currently in the set. * @throws NullPointerException if {@code toElement} is null and * this set does not permit null elements * @throws IllegalArgumentException if this set itself has a * restricted range, and {@code toElement} lies outside the * bounds of the range */ NavigableSet headSet(Object toElement, boolean inclusive); /** * Returns a view of the portion of this set whose elements are greater * than (or equal to, if {@code inclusive} is true) {@code fromElement}. * The returned set is backed by this set, so changes in the returned set * are reflected in this set, and vice-versa. The returned set supports * all optional set operations that this set supports. * *

The returned set will throw an {@code IllegalArgumentException} * on an attempt to insert an element outside its range. * * @param fromElement low endpoint of the returned set * @param inclusive {@code true} if the low endpoint * is to be included in the returned view * @return a view of the portion of this set whose elements are greater * than or equal to {@code fromElement} * @throws ClassCastException if {@code fromElement} is not compatible * with this set's comparator (or, if the set has no comparator, * if {@code fromElement} does not implement {@link java.lang.Comparable}). * Implementations may, but are not required to, throw this * exception if {@code fromElement} cannot be compared to elements * currently in the set. * @throws NullPointerException if {@code fromElement} is null * and this set does not permit null elements * @throws IllegalArgumentException if this set itself has a * restricted range, and {@code fromElement} lies outside the * bounds of the range */ NavigableSet tailSet(Object fromElement, boolean inclusive); /** * {@inheritDoc} * *

Equivalent to {@code subSet(fromElement, true, toElement, false)}. * * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ SortedSet subSet(Object fromElement, Object toElement); /** * {@inheritDoc} * *

Equivalent to {@code headSet(toElement, false)}. * * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ SortedSet headSet(Object toElement); /** * {@inheritDoc} * *

Equivalent to {@code tailSet(fromElement, true)}. * * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ SortedSet tailSet(Object fromElement); } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/AbstractQueue.java0000644001750700037720000001443010461021764031005 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util; import java.util.Iterator; import java.util.Collection; import java.util.NoSuchElementException; /** * This class provides skeletal implementations of some {@link Queue} * operations. The implementations in this class are appropriate when * the base implementation does not allow null * elements. Methods {@link #add add}, {@link #remove remove}, and * {@link #element element} are based on {@link #offer offer}, {@link * #poll poll}, and {@link #peek peek}, respectively but throw * exceptions instead of indicating failure via false or * null returns. * *

A Queue implementation that extends this class must * minimally define a method {@link Queue#offer} which does not permit * insertion of null elements, along with methods {@link * Queue#peek}, {@link Queue#poll}, {@link Collection#size}, and a * {@link Collection#iterator} supporting {@link * Iterator#remove}. Typically, additional methods will be overridden * as well. If these requirements cannot be met, consider instead * subclassing {@link AbstractCollection}. * *

This class is a member of the * * Java Collections Framework. * * @since 1.5 * @author Doug Lea */ public abstract class AbstractQueue extends AbstractCollection implements Queue { /** * Constructor for use by subclasses. */ protected AbstractQueue() { } /** * Inserts the specified element into this queue if it is possible to do so * immediately without violating capacity restrictions, returning * true upon success and throwing an IllegalStateException * if no space is currently available. * *

This implementation returns true if offer succeeds, * else throws an IllegalStateException. * * @param e the element to add * @return true (as specified by {@link Collection#add}) * @throws IllegalStateException if the element cannot be added at this * time due to capacity restrictions * @throws ClassCastException if the class of the specified element * prevents it from being added to this queue * @throws NullPointerException if the specified element is null and * this queue does not permit null elements * @throws IllegalArgumentException if some property of this element * prevents it from being added to this queue */ public boolean add(Object e) { if (offer(e)) return true; else throw new IllegalStateException("Queue full"); } /** * Retrieves and removes the head of this queue. This method differs * from {@link #poll poll} only in that it throws an exception if this * queue is empty. * *

This implementation returns the result of poll * unless the queue is empty. * * @return the head of this queue * @throws NoSuchElementException if this queue is empty */ public Object remove() { Object x = poll(); if (x != null) return x; else throw new NoSuchElementException(); } /** * Retrieves, but does not remove, the head of this queue. This method * differs from {@link #peek peek} only in that it throws an exception if * this queue is empty. * *

This implementation returns the result of peek * unless the queue is empty. * * @return the head of this queue * @throws NoSuchElementException if this queue is empty */ public Object element() { Object x = peek(); if (x != null) return x; else throw new NoSuchElementException(); } /** * Removes all of the elements from this queue. * The queue will be empty after this call returns. * *

This implementation repeatedly invokes {@link #poll poll} until it * returns null. */ public void clear() { while (poll() != null) ; } /** * Adds all of the elements in the specified collection to this * queue. Attempts to addAll of a queue to itself result in * IllegalArgumentException. Further, the behavior of * this operation is undefined if the specified collection is * modified while the operation is in progress. * *

This implementation iterates over the specified collection, * and adds each element returned by the iterator to this * queue, in turn. A runtime exception encountered while * trying to add an element (including, in particular, a * null element) may result in only some of the elements * having been successfully added when the associated exception is * thrown. * * @param c collection containing elements to be added to this queue * @return true if this queue changed as a result of the call * @throws ClassCastException if the class of an element of the specified * collection prevents it from being added to this queue * @throws NullPointerException if the specified collection contains a * null element and this queue does not permit null elements, * or if the specified collection is null * @throws IllegalArgumentException if some property of an element of the * specified collection prevents it from being added to this * queue, or if the specified collection is this queue * @throws IllegalStateException if not all the elements can be added at * this time due to insertion restrictions * @see #add(Object) */ public boolean addAll(Collection c) { if (c == null) throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); boolean modified = false; Iterator e = c.iterator(); while (e.hasNext()) { if (add(e.next())) modified = true; } return modified; } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/AbstractCollection.java0000644001750700037720000000170110360636052032011 0ustar dawidkdcl/* * Written by Dawid Kurzyniec, based on public domain code written by Doug Lea * and publictly available documentation, and released to the public domain, as * explained at http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; /** * Overrides toArray() and toArray(Object[]) in AbstractCollection to provide * implementations valid for concurrent collections. * * @author Doug Lea * @author Dawid Kurzyniec */ public abstract class AbstractCollection extends java.util.AbstractCollection { /** * Sole constructor. (For invocation by subclass constructors, typically * implicit.) */ protected AbstractCollection() { super(); } public Object[] toArray() { return Utils.collectionToArray(this); } public Object[] toArray(Object[] a) { return Utils.collectionToArray(this, a); } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/AbstractSet.java0000644001750700037720000000164510360636052030460 0ustar dawidkdcl/* * Written by Dawid Kurzyniec, based on public domain code written by Doug Lea * and publictly available documentation, and released to the public domain, as * explained at http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; /** * Overrides toArray() and toArray(Object[]) in AbstractCollection to provide * implementations valid for concurrent sets. * * @author Doug Lea * @author Dawid Kurzyniec */ public abstract class AbstractSet extends java.util.AbstractSet { /** * Sole constructor. (For invocation by subclass constructors, typically * implicit.) */ protected AbstractSet() { super(); } public Object[] toArray() { return Utils.collectionToArray(this); } public Object[] toArray(Object[] a) { return Utils.collectionToArray(this, a); } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/Queue.java0000644001750700037720000001757610461021764027337 0ustar dawidkdcl/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util; import java.util.Collection; /** * A collection designed for holding elements prior to processing. * Besides basic {@link java.util.Collection Collection} operations, * queues provide additional insertion, extraction, and inspection * operations. Each of these methods exists in two forms: one throws * an exception if the operation fails, the other returns a special * value (either null or false, depending on the * operation). The latter form of the insert operation is designed * specifically for use with capacity-restricted Queue * implementations; in most implementations, insert operations cannot * fail. * *

* * * * * * * * * * * * * * * * * * * * * *
Throws exceptionReturns special value
Insert{@link #add add(e)}{@link #offer offer(e)}
Remove{@link #remove remove()}{@link #poll poll()}
Examine{@link #element element()}{@link #peek peek()}
* *

Queues typically, but do not necessarily, order elements in a * FIFO (first-in-first-out) manner. Among the exceptions are * priority queues, which order elements according to a supplied * comparator, or the elements' natural ordering, and LIFO queues (or * stacks) which order the elements LIFO (last-in-first-out). * Whatever the ordering used, the head of the queue is that * element which would be removed by a call to {@link #remove() } or * {@link #poll()}. In a FIFO queue, all new elements are inserted at * the tail of the queue. Other kinds of queues may use * different placement rules. Every Queue implementation * must specify its ordering properties. * *

The {@link #offer offer} method inserts an element if possible, * otherwise returning false. This differs from the {@link * java.util.Collection#add Collection.add} method, which can fail to * add an element only by throwing an unchecked exception. The * offer method is designed for use when failure is a normal, * rather than exceptional occurrence, for example, in fixed-capacity * (or "bounded") queues. * *

The {@link #remove()} and {@link #poll()} methods remove and * return the head of the queue. * Exactly which element is removed from the queue is a * function of the queue's ordering policy, which differs from * implementation to implementation. The remove() and * poll() methods differ only in their behavior when the * queue is empty: the remove() method throws an exception, * while the poll() method returns null. * *

The {@link #element()} and {@link #peek()} methods return, but do * not remove, the head of the queue. * *

The Queue interface does not define the blocking queue * methods, which are common in concurrent programming. These methods, * which wait for elements to appear or for space to become available, are * defined in the {@link edu.emory.mathcs.backport.java.util.concurrent.BlockingQueue} interface, which * extends this interface. * *

Queue implementations generally do not allow insertion * of null elements, although some implementations, such as * {@link LinkedList}, do not prohibit insertion of null. * Even in the implementations that permit it, null should * not be inserted into a Queue, as null is also * used as a special return value by the poll method to * indicate that the queue contains no elements. * *

Queue implementations generally do not define * element-based versions of methods equals and * hashCode but instead inherit the identity based versions * from class Object, because element-based equality is not * always well-defined for queues with the same elements but different * ordering properties. * * *

This interface is a member of the * * Java Collections Framework. * * @see java.util.Collection * @see LinkedList * @see PriorityQueue * @see edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue * @see edu.emory.mathcs.backport.java.util.concurrent.BlockingQueue * @see edu.emory.mathcs.backport.java.util.concurrent.ArrayBlockingQueue * @see edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue * @see edu.emory.mathcs.backport.java.util.concurrent.PriorityBlockingQueue * @since 1.5 * @author Doug Lea */ public interface Queue extends Collection { /** * Inserts the specified element into this queue if it is possible to do so * immediately without violating capacity restrictions, returning * true upon success and throwing an IllegalStateException * if no space is currently available. * * @param e the element to add * @return true (as specified by {@link Collection#add}) * @throws IllegalStateException if the element cannot be added at this * time due to capacity restrictions * @throws ClassCastException if the class of the specified element * prevents it from being added to this queue * @throws NullPointerException if the specified element is null and * this queue not permit null elements * @throws IllegalArgumentException if some property of this element * prevents it from being added to this queue */ boolean add(Object e); /** * Inserts the specified element into this queue if it is possible to do * so immediately without violating capacity restrictions. * When using a capacity-restricted queue, this method is generally * preferable to {@link #add}, which can fail to insert an element only * by throwing an exception. * * @param e the element to add * @return true if the element was added to this queue, else * false * @throws ClassCastException if the class of the specified element * prevents it from being added to this queue * @throws NullPointerException if the specified element is null and * this queue does not permit null elements * @throws IllegalArgumentException if some property of this element * prevents it from being added to this queue */ boolean offer(Object e); /** * Retrieves and removes the head of this queue. This method differs * from {@link #poll poll} only in that it throws an exception if this * queue is empty. * is empty. * * @return the head of this queue * @throws NoSuchElementException if this queue is empty */ Object remove(); /** * Retrieves and removes the head of this queue, * or returns null if this queue is empty. * * @return the head of this queue, or null if this queue is empty */ Object poll(); /** * Retrieves, but does not remove, the head of this queue. This method * differs from {@link #peek peek} only in that it throws an exception * if this queue is empty. * * @return the head of this queue * @throws NoSuchElementException if this queue is empty */ Object element(); /** * Retrieves, but does not remove, the head of this queue, * or returns null if this queue is empty. * * @return the head of this queue, or null if this queue is empty */ Object peek(); } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/TreeMap.java0000644001750700037720000016540510432751727027612 0ustar dawidkdcl/* * Written by Dawid Kurzyniec, on the basis of public specifications and * public domain sources from JSR 166 and the Doug Lea's collections package, * and released to the public domain, * as explained at http://creativecommons.org/licenses/publicdomain. */ package edu.emory.mathcs.backport.java.util; import java.util.Comparator; import java.util.Map; import java.util.AbstractSet; import java.util.SortedSet; import java.util.Set; import java.util.Iterator; import java.util.SortedMap; import java.util.NoSuchElementException; import java.util.ConcurrentModificationException; import java.io.Serializable; import java.io.ObjectInputStream; import java.io.IOException; import java.io.ObjectOutputStream; import edu.emory.mathcs.backport.java.util.TreeMap.AscendingSubMap; /** * Sorted map implementation based on a red-black tree and implementing * all the methods from the NavigableMap interface. * * @author Dawid Kurzyniec */ public class TreeMap extends AbstractMap implements NavigableMap, Serializable { private static final long serialVersionUID = 919286545866124006L; private final Comparator comparator; private transient Entry root; private transient int size = 0; private transient int modCount = 0; private transient EntrySet entrySet; private transient KeySet navigableKeySet; private transient NavigableMap descendingMap; private transient Comparator reverseComparator; public TreeMap() { this.comparator = null; } public TreeMap(Comparator comparator) { this.comparator = comparator; } public TreeMap(SortedMap map) { this.comparator = map.comparator(); this.buildFromSorted(map.entrySet().iterator(), map.size()); } public TreeMap(Map map) { this.comparator = null; putAll(map); } public int size() { return size; } public void clear() { root = null; size = 0; modCount++; } public Object clone() { TreeMap clone; try { clone = (TreeMap)super.clone(); } catch (CloneNotSupportedException e) { throw new InternalError(); } clone.root = null; clone.size = 0; clone.modCount = 0; if (!isEmpty()) { clone.buildFromSorted(this.entrySet().iterator(), this.size); } return clone; } public Object put(Object key, Object value) { if (root == null) { root = new Entry(key, value); size++; modCount++; return null; } else { Entry t = root; for (;;) { int diff = compare(key, t.getKey(), comparator); if (diff == 0) return t.setValue(value); else if (diff <= 0) { if (t.left != null) t = t.left; else { size++; modCount++; Entry e = new Entry(key, value); e.parent = t; t.left = e; fixAfterInsertion(e); return null; } } else { if (t.right != null) t = t.right; else { size++; modCount++; Entry e = new Entry(key, value); e.parent = t; t.right = e; fixAfterInsertion(e); return null; } } } } } /** * {@inheritDoc} */ public Object get(Object key) { Entry entry = getEntry(key); return (entry == null) ? null : entry.getValue(); } public boolean containsKey(Object key) { return getEntry(key) != null; } public Set entrySet() { if (entrySet == null) { entrySet = new EntrySet(); } return entrySet; } public static class Entry implements Map.Entry, Cloneable, java.io.Serializable { private static final boolean RED = false; private static final boolean BLACK = true; private Object key; private Object element; /** * The node color (RED, BLACK) */ private boolean color; /** * Pointer to left child */ private Entry left; /** * Pointer to right child */ private Entry right; /** * Pointer to parent (null if root) */ private Entry parent; /** * Make a new node with given element, null links, and BLACK color. * Normally only called to establish a new root. */ public Entry(Object key, Object element) { this.key = key; this.element = element; this.color = BLACK; } /** * Return a new Entry with same element and color as self, * but with null links. (Since it is never OK to have * multiple identical links in a RB tree.) */ protected Object clone() throws CloneNotSupportedException { Entry t = new Entry(key, element); t.color = color; return t; } public final Object getKey() { return key; } /** * return the element value */ public final Object getValue() { return element; } /** * set the element value */ public final Object setValue(Object v) { Object old = element; element = v; return old; } public boolean equals(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry e = (Map.Entry)o; return eq(key, e.getKey()) && eq(element, e.getValue()); } public int hashCode() { return (key == null ? 0 : key.hashCode()) ^ (element == null ? 0 : element.hashCode()); } public String toString() { return key + "=" + element; } } /** * Return the inorder successor, or null if no such */ private static Entry successor(Entry e) { if (e.right != null) { for (e = e.right; e.left != null; e = e.left) {} return e; } else { Entry p = e.parent; while (p != null && e == p.right) { e = p; p = p.parent; } return p; } } /** * Return the inorder predecessor, or null if no such */ private static Entry predecessor(Entry e) { if (e.left != null) { for (e = e.left; e.right != null; e = e.right) {} return e; } else { Entry p = e.parent; while (p != null && e == p.left) { e = p; p = p.parent; } return p; } } private Entry getEntry(Object key) { Entry t = root; if (comparator != null) { for (;;) { if (t == null) return null; int diff = comparator.compare(key, t.key); if (diff == 0) return t; t = (diff < 0) ? t.left : t.right; } } else { Comparable c = (Comparable)key; for (;;) { if (t == null) return null; int diff = c.compareTo(t.key); if (diff == 0) return t; t = (diff < 0) ? t.left : t.right; } } } private Entry getHigherEntry(Object key) { Entry t = root; if (t == null) return null; for (;;) { int diff = compare(key, t.key, comparator); if (diff < 0) { if (t.left != null) t = t.left; else return t; } else { if (t.right != null) { t = t.right; } else { Entry parent = t.parent; while (parent != null && t == parent.right) { t = parent; parent = parent.parent; } return parent; } } } } private Entry getFirstEntry() { Entry e = root; if (e == null) return null; while (e.left != null) e = e.left; return e; } private Entry getLastEntry() { Entry e = root; if (e == null) return null; while (e.right != null) e = e.right; return e; } private Entry getCeilingEntry(Object key) { Entry e = root; if (e == null) return null; for (;;) { int diff = compare(key, e.key, comparator); if (diff < 0) { if (e.left != null) e = e.left; else return e; } else if (diff > 0) { if (e.right != null) { e = e.right; } else { Entry p = e.parent; while (p != null && e == p.right) { e = p; p = p.parent; } return p; } } else return e; } } private Entry getLowerEntry(Object key) { Entry e = root; if (e == null) return null; for (;;) { int diff = compare(key, e.key, comparator); if (diff > 0) { if (e.right != null) e = e.right; else return e; } else { if (e.left != null) { e = e.left; } else { Entry p = e.parent; while (p != null && e == p.left) { e = p; p = p.parent; } return p; } } } } private Entry getFloorEntry(Object key) { Entry e = root; if (e == null) return null; for (;;) { int diff = compare(key, e.key, comparator); if (diff > 0) { if (e.right != null) e = e.right; else return e; } else if (diff < 0) { if (e.left != null) { e = e.left; } else { Entry p = e.parent; while (p != null && e == p.left) { e = p; p = p.parent; } return p; } } else return e; } } void buildFromSorted(Iterator itr, int size) { modCount++; this.size = size; // nodes at the bottom (unbalanced) level must be red int bottom = 0; for (int ssize = 1; ssize-1 < size; ssize <<= 1) bottom++; this.root = createFromSorted(itr, size, 0, bottom); } private static Entry createFromSorted(Iterator itr, int size, int level, int bottom) { level++; if (size == 0) return null; int leftSize = (size-1) >> 1; int rightSize = size-1-leftSize; Entry left = createFromSorted(itr, leftSize, level, bottom); Map.Entry orig = (Map.Entry)itr.next(); Entry right = createFromSorted(itr, rightSize, level, bottom); Entry e = new Entry(orig.getKey(), orig.getValue()); if (left != null) { e.left = left; left.parent = e; } if (right != null) { e.right = right; right.parent = e; } if (level == bottom) e.color = Entry.RED; return e; } /** * Delete the current node, and then rebalance the tree it is in * @param root the root of the current tree * @return the new root of the current tree. (Rebalancing * can change the root!) */ private void delete(Entry e) { // handle case where we are only node if (e.left == null && e.right == null && e.parent == null) { root = null; size = 0; modCount++; return; } // if strictly internal, swap places with a successor if (e.left != null && e.right != null) { Entry s = successor(e); e.key = s.key; e.element = s.element; e = s; } // Start fixup at replacement node (normally a child). // But if no children, fake it by using self if (e.left == null && e.right == null) { if (e.color == Entry.BLACK) fixAfterDeletion(e); // Unlink (Couldn't before since fixAfterDeletion needs parent ptr) if (e.parent != null) { if (e == e.parent.left) e.parent.left = null; else if (e == e.parent.right) e.parent.right = null; e.parent = null; } } else { Entry replacement = e.left; if (replacement == null) replacement = e.right; // link replacement to parent replacement.parent = e.parent; if (e.parent == null) root = replacement; else if (e == e.parent.left) e.parent.left = replacement; else e.parent.right = replacement; e.left = null; e.right = null; e.parent = null; // fix replacement if (e.color == Entry.BLACK) fixAfterDeletion(replacement); } size--; modCount++; } /** * Return color of node p, or BLACK if p is null * (In the CLR version, they use * a special dummy `nil' node for such purposes, but that doesn't * work well here, since it could lead to creating one such special * node per real node.) * */ static boolean colorOf(Entry p) { return (p == null) ? Entry.BLACK : p.color; } /** * return parent of node p, or null if p is null */ static Entry parentOf(Entry p) { return (p == null) ? null : p.parent; } /** * Set the color of node p, or do nothing if p is null */ private static void setColor(Entry p, boolean c) { if (p != null) p.color = c; } /** * return left child of node p, or null if p is null */ private static Entry leftOf(Entry p) { return (p == null) ? null : p.left; } /** * return right child of node p, or null if p is null */ private static Entry rightOf(Entry p) { return (p == null) ? null : p.right; } /** From CLR */ private final void rotateLeft(Entry e) { Entry r = e.right; e.right = r.left; if (r.left != null) r.left.parent = e; r.parent = e.parent; if (e.parent == null) root = r; else if (e.parent.left == e) e.parent.left = r; else e.parent.right = r; r.left = e; e.parent = r; } /** From CLR */ private final void rotateRight(Entry e) { Entry l = e.left; e.left = l.right; if (l.right != null) l.right.parent = e; l.parent = e.parent; if (e.parent == null) root = l; else if (e.parent.right == e) e.parent.right = l; else e.parent.left = l; l.right = e; e.parent = l; } /** From CLR */ private final void fixAfterInsertion(Entry e) { e.color = Entry.RED; Entry x = e; while (x != null && x != root && x.parent.color == Entry.RED) { if (parentOf(x) == leftOf(parentOf(parentOf(x)))) { Entry y = rightOf(parentOf(parentOf(x))); if (colorOf(y) == Entry.RED) { setColor(parentOf(x), Entry.BLACK); setColor(y, Entry.BLACK); setColor(parentOf(parentOf(x)), Entry.RED); x = parentOf(parentOf(x)); } else { if (x == rightOf(parentOf(x))) { x = parentOf(x); rotateLeft(x); } setColor(parentOf(x), Entry.BLACK); setColor(parentOf(parentOf(x)), Entry.RED); if (parentOf(parentOf(x)) != null) rotateRight(parentOf(parentOf(x))); } } else { Entry y = leftOf(parentOf(parentOf(x))); if (colorOf(y) == Entry.RED) { setColor(parentOf(x), Entry.BLACK); setColor(y, Entry.BLACK); setColor(parentOf(parentOf(x)), Entry.RED); x = parentOf(parentOf(x)); } else { if (x == leftOf(parentOf(x))) { x = parentOf(x); rotateRight(x); } setColor(parentOf(x), Entry.BLACK); setColor(parentOf(parentOf(x)), Entry.RED); if (parentOf(parentOf(x)) != null) rotateLeft(parentOf(parentOf(x))); } } } root.color = Entry.BLACK; } /** From CLR */ private final Entry fixAfterDeletion(Entry e) { Entry x = e; while (x != root && colorOf(x) == Entry.BLACK) { if (x == leftOf(parentOf(x))) { Entry sib = rightOf(parentOf(x)); if (colorOf(sib) == Entry.RED) { setColor(sib, Entry.BLACK); setColor(parentOf(x), Entry.RED); rotateLeft(parentOf(x)); sib = rightOf(parentOf(x)); } if (colorOf(leftOf(sib)) == Entry.BLACK && colorOf(rightOf(sib)) == Entry.BLACK) { setColor(sib, Entry.RED); x = parentOf(x); } else { if (colorOf(rightOf(sib)) == Entry.BLACK) { setColor(leftOf(sib), Entry.BLACK); setColor(sib, Entry.RED); rotateRight(sib); sib = rightOf(parentOf(x)); } setColor(sib, colorOf(parentOf(x))); setColor(parentOf(x), Entry.BLACK); setColor(rightOf(sib), Entry.BLACK); rotateLeft(parentOf(x)); x = root; } } else { Entry sib = leftOf(parentOf(x)); if (colorOf(sib) == Entry.RED) { setColor(sib, Entry.BLACK); setColor(parentOf(x), Entry.RED); rotateRight(parentOf(x)); sib = leftOf(parentOf(x)); } if (colorOf(rightOf(sib)) == Entry.BLACK && colorOf(leftOf(sib)) == Entry.BLACK) { setColor(sib, Entry.RED); x = parentOf(x); } else { if (colorOf(leftOf(sib)) == Entry.BLACK) { setColor(rightOf(sib), Entry.BLACK); setColor(sib, Entry.RED); rotateLeft(sib); sib = leftOf(parentOf(x)); } setColor(sib, colorOf(parentOf(x))); setColor(parentOf(x), Entry.BLACK); setColor(leftOf(sib), Entry.BLACK); rotateRight(parentOf(x)); x = root; } } } setColor(x, Entry.BLACK); return root; } private class BaseEntryIterator { Entry cursor; Entry lastRet; int expectedModCount; BaseEntryIterator(Entry cursor) { this.cursor = cursor; this.expectedModCount = modCount; } public boolean hasNext() { return (cursor != null); } Entry nextEntry() { Entry curr = cursor; if (curr == null) throw new NoSuchElementException(); if (expectedModCount != modCount) throw new ConcurrentModificationException(); cursor = successor(curr); lastRet = curr; return curr; } Entry prevEntry() { Entry curr = cursor; if (curr == null) throw new NoSuchElementException(); if (expectedModCount != modCount) throw new ConcurrentModificationException(); cursor = predecessor(curr); lastRet = curr; return curr; } public void remove() { if (lastRet == null) throw new IllegalStateException(); if (expectedModCount != modCount) throw new ConcurrentModificationException(); // if removal strictly internal, it swaps places with a successor if (lastRet.left != null && lastRet.right != null && cursor != null) cursor = lastRet; delete(lastRet); lastRet = null; expectedModCount++; } } class EntryIterator extends BaseEntryIterator implements Iterator { EntryIterator(Entry cursor) { super(cursor); } public Object next() { return nextEntry(); } } class KeyIterator extends BaseEntryIterator implements Iterator { KeyIterator(Entry cursor) { super(cursor); } public Object next() { return nextEntry().key; } } class ValueIterator extends BaseEntryIterator implements Iterator { ValueIterator(Entry cursor) { super(cursor); } public Object next() { return nextEntry().element; } } class DescendingEntryIterator extends BaseEntryIterator implements Iterator { DescendingEntryIterator(Entry cursor) { super(cursor); } public Object next() { return prevEntry(); } } class DescendingKeyIterator extends BaseEntryIterator implements Iterator { DescendingKeyIterator(Entry cursor) { super(cursor); } public Object next() { return prevEntry().key; } } class DescendingValueIterator extends BaseEntryIterator implements Iterator { DescendingValueIterator(Entry cursor) { super(cursor); } public Object next() { return prevEntry().element; } } private Entry getMatchingEntry(Object o) { if (!(o instanceof Map.Entry)) return null; Map.Entry e = (Map.Entry)o; Entry found = TreeMap.this.getEntry(e.getKey()); return (found != null && eq(found.getValue(), e.getValue())) ? found : null; } class EntrySet extends AbstractSet { public int size() { return TreeMap.this.size(); } public boolean isEmpty() { return TreeMap.this.isEmpty(); } public void clear() { TreeMap.this.clear(); } public Iterator iterator() { return new EntryIterator(getFirstEntry()); } public boolean contains(Object o) { return getMatchingEntry(o) != null; } public boolean remove(Object o) { Entry e = getMatchingEntry(o); if (e == null) return false; delete(e); return true; } } class DescendingEntrySet extends EntrySet { public Iterator iterator() { return new DescendingEntryIterator(getLastEntry()); } } class ValueSet extends AbstractSet { public int size() { return TreeMap.this.size(); } public boolean isEmpty() { return TreeMap.this.isEmpty(); } public void clear() { TreeMap.this.clear(); } public boolean contains(Object o) { for (Entry e = getFirstEntry(); e != null; e = successor(e)) { if (eq(o, e.element)) return true; } return false; } public Iterator iterator() { return new ValueIterator(getFirstEntry()); } public boolean remove(Object o) { for (Entry e = getFirstEntry(); e != null; e = successor(e)) { if (eq(o, e.element)) { delete(e); return true; } } return false; } } abstract class KeySet extends AbstractSet implements NavigableSet { public int size() { return TreeMap.this.size(); } public boolean isEmpty() { return TreeMap.this.isEmpty(); } public void clear() { TreeMap.this.clear(); } public boolean contains(Object o) { return getEntry(o) != null; } public boolean remove(Object o) { Entry found = getEntry(o); if (found == null) return false; delete(found); return true; } public SortedSet subSet(Object fromElement, Object toElement) { return subSet(fromElement, true, toElement, false); } public SortedSet headSet(Object toElement) { return headSet(toElement, false); } public SortedSet tailSet(Object fromElement) { return tailSet(fromElement, true); } } class AscendingKeySet extends KeySet { public Iterator iterator() { return new KeyIterator(getFirstEntry()); } public Iterator descendingIterator() { return new DescendingKeyIterator(getFirstEntry()); } public Object lower(Object e) { return lowerKey(e); } public Object floor(Object e) { return floorKey(e); } public Object ceiling(Object e) { return ceilingKey(e); } public Object higher(Object e) { return higherKey(e); } public Object first() { return firstKey(); } public Object last() { return lastKey(); } public Comparator comparator() { return TreeMap.this.comparator(); } public Object pollFirst() { Map.Entry e = pollFirstEntry(); return e == null? null : e.getKey(); } public Object pollLast() { Map.Entry e = pollLastEntry(); return e == null? null : e.getKey(); } public NavigableSet subSet(Object fromElement, boolean fromInclusive, Object toElement, boolean toInclusive) { return (NavigableSet)(subMap(fromElement, fromInclusive, toElement, toInclusive)).keySet(); } public NavigableSet headSet(Object toElement, boolean inclusive) { return (NavigableSet)(headMap(toElement, inclusive)).keySet(); } public NavigableSet tailSet(Object fromElement, boolean inclusive) { return (NavigableSet)(tailMap(fromElement, inclusive)).keySet(); } public NavigableSet descendingSet() { return (NavigableSet)descendingMap().keySet(); } } class DescendingKeySet extends KeySet { public Iterator iterator() { return new DescendingKeyIterator(getLastEntry()); } public Iterator descendingIterator() { return new KeyIterator(getFirstEntry()); } public Object lower(Object e) { return higherKey(e); } public Object floor(Object e) { return ceilingKey(e); } public Object ceiling(Object e) { return floorKey(e); } public Object higher(Object e) { return lowerKey(e); } public Object first() { return lastKey(); } public Object last() { return firstKey(); } public Comparator comparator() { return descendingMap().comparator(); } public Object pollFirst() { Map.Entry e = pollLastEntry(); return e == null? null : e.getKey(); } public Object pollLast() { Map.Entry e = pollFirstEntry(); return e == null? null : e.getKey(); } public NavigableSet subSet(Object fromElement, boolean fromInclusive, Object toElement, boolean toInclusive) { return (NavigableSet)(descendingMap().subMap(fromElement, fromInclusive, toElement, toInclusive)).keySet(); } public NavigableSet headSet(Object toElement, boolean inclusive) { return (NavigableSet)(descendingMap().headMap(toElement, inclusive)).keySet(); } public NavigableSet tailSet(Object fromElement, boolean inclusive) { return (NavigableSet)(descendingMap().tailMap(fromElement, inclusive)).keySet(); } public NavigableSet descendingSet() { return (NavigableSet)keySet(); } } private static boolean eq(Object o1, Object o2) { return o1 == null ? o2 == null : o1.equals(o2); } private static int compare(Object o1, Object o2, Comparator cmp) { return (cmp == null) ? ((Comparable)o1).compareTo(o2) : cmp.compare(o1, o2); } /** * @since 1.6 */ public Map.Entry lowerEntry(Object key) { Map.Entry e = getLowerEntry(key); return (e == null) ? null : new AbstractMap.SimpleImmutableEntry(e); } /** * @since 1.6 */ public Object lowerKey(Object key) { Map.Entry e = getLowerEntry(key); return (e == null) ? null : e.getKey(); } /** * @since 1.6 */ public Map.Entry floorEntry(Object key) { Entry e = getFloorEntry(key); return (e == null) ? null : new AbstractMap.SimpleImmutableEntry(e); } /** * @since 1.6 */ public Object floorKey(Object key) { Entry e = getFloorEntry(key); return (e == null) ? null : e.key; } /** * @since 1.6 */ public Map.Entry ceilingEntry(Object key) { Entry e = getCeilingEntry(key); return (e == null) ? null : new AbstractMap.SimpleImmutableEntry(e); } /** * @since 1.6 */ public Object ceilingKey(Object key) { Entry e = getCeilingEntry(key); return (e == null) ? null : e.key; } /** * @since 1.6 */ public Map.Entry higherEntry(Object key) { Entry e = getHigherEntry(key); return (e == null) ? null : new AbstractMap.SimpleImmutableEntry(e); } /** * @since 1.6 */ public Object higherKey(Object key) { Entry e = getHigherEntry(key); return (e == null) ? null : e.key; } /** * @since 1.6 */ public Map.Entry firstEntry() { Entry e = getFirstEntry(); return (e == null) ? null : new AbstractMap.SimpleImmutableEntry(e); } /** * @since 1.6 */ public Map.Entry lastEntry() { Entry e = getLastEntry(); return (e == null) ? null : new AbstractMap.SimpleImmutableEntry(e); } /** * @since 1.6 */ public Map.Entry pollFirstEntry() { Entry e = getFirstEntry(); if (e == null) return null; Map.Entry res = new AbstractMap.SimpleImmutableEntry(e); delete(e); return res; } /** * @since 1.6 */ public Map.Entry pollLastEntry() { Entry e = getLastEntry(); if (e == null) return null; Map.Entry res = new AbstractMap.SimpleImmutableEntry(e); delete(e); return res; } /** * @since 1.6 */ public NavigableMap descendingMap() { NavigableMap map = descendingMap; if (map == null) { descendingMap = map = new DescendingSubMap(true, null, true, true, null, true); } return map; } public NavigableSet descendingKeySet() { return descendingMap().navigableKeySet(); } public SortedMap subMap(Object fromKey, Object toKey) { return subMap(fromKey, true, toKey, false); } public SortedMap headMap(Object toKey) { return headMap(toKey, false); } public SortedMap tailMap(Object fromKey) { return tailMap(fromKey, true); } public NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive) { return new AscendingSubMap(false, fromKey, fromInclusive, false, toKey, toInclusive); } public NavigableMap headMap(Object toKey, boolean toInclusive) { return new AscendingSubMap(true, null, true, false, toKey, toInclusive); } public NavigableMap tailMap(Object fromKey, boolean fromInclusive) { return new AscendingSubMap(false, fromKey, fromInclusive, true, null, true); } public Comparator comparator() { return comparator; } final Comparator reverseComparator() { if (reverseComparator == null) { reverseComparator = Collections.reverseOrder(comparator); } return reverseComparator; } public Object firstKey() { Entry e = getFirstEntry(); if (e == null) throw new NoSuchElementException(); return e.key; } public Object lastKey() { Entry e = getLastEntry(); if (e == null) throw new NoSuchElementException(); return e.key; } public boolean isEmpty() { return size == 0; } public boolean containsValue(Object value) { if (root == null) return false; return (value == null) ? containsNull(root) : containsValue(root, value); } private static boolean containsNull(Entry e) { if (e.element == null) return true; if (e.left != null && containsNull(e.left)) return true; if (e.right != null && containsNull(e.right)) return true; return false; } private static boolean containsValue(Entry e, Object val) { if (val.equals(e.element)) return true; if (e.left != null && containsValue(e.left, val)) return true; if (e.right != null && containsValue(e.right, val)) return true; return false; } public Object remove(Object key) { Entry e = getEntry(key); if (e == null) return null; Object old = e.getValue(); delete(e); return old; } public void putAll(Map map) { if (map instanceof SortedMap) { SortedMap smap = (SortedMap)map; if (eq(this.comparator, smap.comparator())) { this.buildFromSorted(smap.entrySet().iterator(), map.size()); return; } } // not a sorted map, or comparator mismatch super.putAll(map); } public Set keySet() { return navigableKeySet(); } public NavigableSet navigableKeySet() { if (navigableKeySet == null) { navigableKeySet = new AscendingKeySet(); } return navigableKeySet; } // public Collection values() { // if (valueSet == null) { // valueSet = new ValueSet(); // } // return valueSet; // } // private abstract class NavigableSubMap extends AbstractMap implements NavigableMap, Serializable { private static final long serialVersionUID = -6520786458950516097L; final Object fromKey, toKey; final boolean fromStart, toEnd; final boolean fromInclusive, toInclusive; transient int cachedSize = -1, cacheVersion; transient SubEntrySet entrySet; transient NavigableMap descendingMap; transient NavigableSet navigableKeySet; NavigableSubMap(boolean fromStart, Object fromKey, boolean fromInclusive, boolean toEnd, Object toKey, boolean toInclusive) { if (!fromStart && !toEnd) { if (compare(fromKey, toKey, comparator) > 0) { throw new IllegalArgumentException("fromKey > toKey"); } } else { if (!fromStart) compare(fromKey, fromKey, comparator); if (!toEnd) compare(toKey, toKey, comparator); } this.fromStart = fromStart; this.toEnd = toEnd; this.fromKey = fromKey; this.toKey = toKey; this.fromInclusive = fromInclusive; this.toInclusive = toInclusive; } final TreeMap.Entry checkLoRange(TreeMap.Entry e) { return (e == null || absTooLow(e.key)) ? null : e; } final TreeMap.Entry checkHiRange(TreeMap.Entry e) { return (e == null || absTooHigh(e.key)) ? null : e; } final boolean inRange(Object key) { return !absTooLow(key) && !absTooHigh(key); } final boolean inRangeExclusive(Object key) { return (fromStart || compare(key, fromKey, comparator) >= 0) && (toEnd || compare(toKey, key, comparator) >= 0); } final boolean inRange(Object key, boolean inclusive) { return inclusive ? inRange(key) : inRangeExclusive(key); } private boolean absTooHigh(Object key) { if (toEnd) return false; int c = compare(key, toKey, comparator); return (c > 0 || (c == 0 && !toInclusive)); } private boolean absTooLow(Object key) { if (fromStart) return false; int c = compare(key, fromKey, comparator); return (c < 0 || (c == 0 && !fromInclusive)); } protected abstract TreeMap.Entry first(); protected abstract TreeMap.Entry last(); protected abstract TreeMap.Entry lower(Object key); protected abstract TreeMap.Entry floor(Object key); protected abstract TreeMap.Entry ceiling(Object key); protected abstract TreeMap.Entry higher(Object key); protected abstract TreeMap.Entry uncheckedHigher(TreeMap.Entry e); // absolute comparisons, for use by subclasses final TreeMap.Entry absLowest() { return checkHiRange((fromStart) ? getFirstEntry() : fromInclusive ? getCeilingEntry(fromKey) : getHigherEntry(fromKey)); } final TreeMap.Entry absHighest() { return checkLoRange((toEnd) ? getLastEntry() : toInclusive ? getFloorEntry(toKey) : getLowerEntry(toKey)); } final TreeMap.Entry absLower(Object key) { return absTooHigh(key) ? absHighest() : checkLoRange(getLowerEntry(key)); } final TreeMap.Entry absFloor(Object key) { return absTooHigh(key) ? absHighest() : checkLoRange(getFloorEntry(key)); } final TreeMap.Entry absCeiling(Object key) { return absTooLow(key) ? absLowest() : checkHiRange(getCeilingEntry(key)); } final TreeMap.Entry absHigher(Object key) { return absTooLow(key) ? absLowest() : checkHiRange(getHigherEntry(key)); } // navigable implementations, using subclass-defined comparisons public Map.Entry firstEntry() { TreeMap.Entry e = first(); return (e == null) ? null : new AbstractMap.SimpleImmutableEntry(e); } public Object firstKey() { TreeMap.Entry e = first(); if (e == null) throw new NoSuchElementException(); return e.key; } public Map.Entry lastEntry() { TreeMap.Entry e = last(); return (e == null) ? null : new AbstractMap.SimpleImmutableEntry(e); } public Object lastKey() { TreeMap.Entry e = last(); if (e == null) throw new NoSuchElementException(); return e.key; } public Map.Entry pollFirstEntry() { TreeMap.Entry e = first(); if (e == null) return null; Map.Entry result = new SimpleImmutableEntry(e); delete(e); return result; } public java.util.Map.Entry pollLastEntry() { TreeMap.Entry e = last(); if (e == null) return null; Map.Entry result = new SimpleImmutableEntry(e); delete(e); return result; } public Map.Entry lowerEntry(Object key) { TreeMap.Entry e = lower(key); return (e == null) ? null : new AbstractMap.SimpleImmutableEntry(e); } public Object lowerKey(Object key) { TreeMap.Entry e = lower(key); return (e == null) ? null : e.key; } public Map.Entry floorEntry(Object key) { TreeMap.Entry e = floor(key); return (e == null) ? null : new AbstractMap.SimpleImmutableEntry(e); } public Object floorKey(Object key) { TreeMap.Entry e = floor(key); return (e == null) ? null : e.key; } public Map.Entry ceilingEntry(Object key) { TreeMap.Entry e = ceiling(key); return (e == null) ? null : new AbstractMap.SimpleImmutableEntry(e); } public Object ceilingKey(Object key) { TreeMap.Entry e = ceiling(key); return (e == null) ? null : e.key; } public Map.Entry higherEntry(Object key) { TreeMap.Entry e = higher(key); return (e == null) ? null : new AbstractMap.SimpleImmutableEntry(e); } public Object higherKey(Object key) { TreeMap.Entry e = higher(key); return (e == null) ? null : e.key; } public NavigableSet descendingKeySet() { return descendingMap().navigableKeySet(); } public SortedMap subMap(Object fromKey, Object toKey) { return subMap(fromKey, true, toKey, false); } public SortedMap headMap(Object toKey) { return headMap(toKey, false); } public SortedMap tailMap(Object fromKey) { return tailMap(fromKey, true); } public int size() { if (cachedSize < 0 || cacheVersion != modCount) { cachedSize = recalculateSize(); cacheVersion = modCount; } return cachedSize; } private int recalculateSize() { TreeMap.Entry terminator = absHighest(); Object terminalKey = terminator != null ? terminator.key : null; int size = 0; for (TreeMap.Entry e = absLowest(); e != null; e = (e.key == terminalKey) ? null : successor(e)) { size++; } return size; } public boolean isEmpty() { return absLowest() == null; } public boolean containsKey(Object key) { return (inRange(key) && TreeMap.this.containsKey(key)); } public Object get(Object key) { if (!inRange(key)) return null; else return TreeMap.this.get(key); } public Object put(Object key, Object value) { if (!inRange(key)) throw new IllegalArgumentException("Key out of range"); return TreeMap.this.put(key, value); } public Object remove(Object key) { if (!inRange(key)) return null; return TreeMap.this.remove(key); } public Set entrySet() { if (entrySet == null) { entrySet = new SubEntrySet(); } return entrySet; } public Set keySet() { return navigableKeySet(); } public NavigableSet navigableKeySet() { if (navigableKeySet == null) { navigableKeySet = new SubKeySet(); } return navigableKeySet; } private TreeMap.Entry getMatchingSubEntry(Object o) { if (!(o instanceof Map.Entry)) return null; Map.Entry e = (Map.Entry)o; Object key = e.getKey(); if (!inRange(key)) return null; TreeMap.Entry found = getEntry(key); return (found != null && eq(found.getValue(), e.getValue())) ? found : null; } class SubEntrySet extends AbstractSet { public int size() { return NavigableSubMap.this.size(); } public boolean isEmpty() { return NavigableSubMap.this.isEmpty(); } public boolean contains(Object o) { return getMatchingSubEntry(o) != null; } public boolean remove(Object o) { TreeMap.Entry e = getMatchingSubEntry(o); if (e == null) return false; delete(e); return true; } public Iterator iterator() { return new SubEntryIterator(); } } class SubKeySet extends AbstractSet implements NavigableSet { public int size() { return NavigableSubMap.this.size(); } public boolean isEmpty() { return NavigableSubMap.this.isEmpty(); } public void clear() { NavigableSubMap.this.clear(); } public boolean contains(Object o) { return getEntry(o) != null; } public boolean remove(Object o) { if (!inRange(o)) return false; TreeMap.Entry found = getEntry(o); if (found == null) return false; delete(found); return true; } public SortedSet subSet(Object fromElement, Object toElement) { return subSet(fromElement, true, toElement, false); } public SortedSet headSet(Object toElement) { return headSet(toElement, false); } public SortedSet tailSet(Object fromElement) { return tailSet(fromElement, true); } public Iterator iterator() { return new SubKeyIterator(NavigableSubMap.this.entrySet().iterator()); } public Iterator descendingIterator() { return new SubKeyIterator(NavigableSubMap.this.descendingMap().entrySet().iterator()); } public Object lower(Object e) { return NavigableSubMap.this.lowerKey(e); } public Object floor(Object e) { return NavigableSubMap.this.floorKey(e); } public Object ceiling(Object e) { return NavigableSubMap.this.ceilingKey(e); } public Object higher(Object e) { return NavigableSubMap.this.higherKey(e); } public Object first() { return NavigableSubMap.this.firstKey(); } public Object last() { return NavigableSubMap.this.lastKey(); } public Comparator comparator() { return NavigableSubMap.this.comparator(); } public Object pollFirst() { Map.Entry e = NavigableSubMap.this.pollFirstEntry(); return e == null? null : e.getKey(); } public Object pollLast() { Map.Entry e = NavigableSubMap.this.pollLastEntry(); return e == null? null : e.getKey(); } public NavigableSet subSet(Object fromElement, boolean fromInclusive, Object toElement, boolean toInclusive) { return (NavigableSet)(NavigableSubMap.this.subMap(fromElement, fromInclusive, toElement, toInclusive)).keySet(); } public NavigableSet headSet(Object toElement, boolean inclusive) { return (NavigableSet)(NavigableSubMap.this.headMap(toElement, inclusive)).keySet(); } public NavigableSet tailSet(Object fromElement, boolean inclusive) { return (NavigableSet)(NavigableSubMap.this.tailMap(fromElement, inclusive)).keySet(); } public NavigableSet descendingSet() { return (NavigableSet)NavigableSubMap.this.descendingMap().keySet(); } } class SubEntryIterator extends BaseEntryIterator implements Iterator { final Object terminalKey; SubEntryIterator() { super(first()); TreeMap.Entry terminator = last(); this.terminalKey = terminator == null ? null : terminator.key; } public boolean hasNext() { return cursor != null; } public Object next() { TreeMap.Entry curr = cursor; if (curr == null) throw new NoSuchElementException(); if (expectedModCount != modCount) throw new ConcurrentModificationException(); cursor = (curr.key == terminalKey) ? null : uncheckedHigher(curr); lastRet = curr; return curr; } } class SubKeyIterator implements Iterator { final Iterator itr; SubKeyIterator(Iterator itr) { this.itr = itr; } public boolean hasNext() { return itr.hasNext(); } public Object next() { return ((Map.Entry)itr.next()).getKey(); } public void remove() { itr.remove(); } } } class AscendingSubMap extends NavigableSubMap { AscendingSubMap(boolean fromStart, Object fromKey, boolean fromInclusive, boolean toEnd, Object toKey, boolean toInclusive) { super(fromStart, fromKey, fromInclusive, toEnd, toKey, toInclusive); } public Comparator comparator() { return comparator; } protected TreeMap.Entry first() { return absLowest(); } protected TreeMap.Entry last() { return absHighest(); } protected TreeMap.Entry lower(Object key) { return absLower(key); } protected TreeMap.Entry floor(Object key) { return absFloor(key); } protected TreeMap.Entry ceiling(Object key) { return absCeiling(key); } protected TreeMap.Entry higher(Object key) { return absHigher(key); } protected TreeMap.Entry uncheckedHigher(TreeMap.Entry e) { return successor(e); } public NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive) { if (!inRange(fromKey, fromInclusive)) { throw new IllegalArgumentException("fromKey out of range"); } if (!inRange(toKey, toInclusive)) { throw new IllegalArgumentException("toKey out of range"); } return new AscendingSubMap(false, fromKey, fromInclusive, false, toKey, toInclusive); } public NavigableMap headMap(Object toKey, boolean toInclusive) { if (!inRange(toKey, toInclusive)) { throw new IllegalArgumentException("toKey out of range"); } return new AscendingSubMap(fromStart, fromKey, fromInclusive, false, toKey, toInclusive); } public NavigableMap tailMap(Object fromKey, boolean fromInclusive) { if (!inRange(fromKey, fromInclusive)) { throw new IllegalArgumentException("fromKey out of range"); } return new AscendingSubMap(false, fromKey, fromInclusive, toEnd, toKey, toInclusive); } public NavigableMap descendingMap() { if (descendingMap == null) { descendingMap = new DescendingSubMap(fromStart, fromKey, fromInclusive, toEnd, toKey, toInclusive); } return descendingMap; } } class DescendingSubMap extends NavigableSubMap { DescendingSubMap(boolean fromStart, Object fromKey, boolean fromInclusive, boolean toEnd, Object toKey, boolean toInclusive) { super(fromStart, fromKey, fromInclusive, toEnd, toKey, toInclusive); } public Comparator comparator() { return TreeMap.this.reverseComparator(); } protected TreeMap.Entry first() { return absHighest(); } protected TreeMap.Entry last() { return absLowest(); } protected TreeMap.Entry lower(Object key) { return absHigher(key); } protected TreeMap.Entry floor(Object key) { return absCeiling(key); } protected TreeMap.Entry ceiling(Object key) { return absFloor(key); } protected TreeMap.Entry higher(Object key) { return absLower(key); } protected TreeMap.Entry uncheckedHigher(TreeMap.Entry e) { return predecessor(e); } public NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive) { if (!inRange(fromKey, fromInclusive)) { throw new IllegalArgumentException("fromKey out of range"); } if (!inRange(toKey, toInclusive)) { throw new IllegalArgumentException("toKey out of range"); } return new DescendingSubMap(false, toKey, toInclusive, false, fromKey, fromInclusive); } public NavigableMap headMap(Object toKey, boolean toInclusive) { if (!inRange(toKey, toInclusive)) { throw new IllegalArgumentException("toKey out of range"); } return new DescendingSubMap(false, toKey, toInclusive, this.toEnd, this.toKey, this.toInclusive); } public NavigableMap tailMap(Object fromKey, boolean fromInclusive) { if (!inRange(fromKey, fromInclusive)) { throw new IllegalArgumentException("fromKey out of range"); } return new DescendingSubMap(this.fromStart, this.fromKey, this.fromInclusive, false, fromKey, fromInclusive); } public NavigableMap descendingMap() { if (descendingMap == null) { descendingMap = new AscendingSubMap(fromStart, fromKey, fromInclusive, toEnd, toKey, toInclusive); } return descendingMap; } } // serialization static class IteratorIOException extends RuntimeException { IteratorIOException(java.io.IOException e) { super(e); } java.io.IOException getException() { return (java.io.IOException)getCause(); } } static class IteratorNoClassException extends RuntimeException { IteratorNoClassException(ClassNotFoundException e) { super(e); } ClassNotFoundException getException() { return (ClassNotFoundException)getCause(); } } static class IOIterator implements Iterator { final java.io.ObjectInputStream ois; int remaining; IOIterator(java.io.ObjectInputStream ois, int remaining) { this.ois = ois; this.remaining = remaining; } public boolean hasNext() { return remaining > 0; } public Object next() { if (remaining <= 0) throw new NoSuchElementException(); remaining--; try { return new AbstractMap.SimpleImmutableEntry(ois.readObject(), ois.readObject()); } catch (java.io.IOException e) { throw new IteratorIOException(e); } catch (ClassNotFoundException e) { throw new IteratorNoClassException(e); } } public void remove() { throw new UnsupportedOperationException(); } } private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); out.writeInt(size); for (Entry e = getFirstEntry(); e != null; e = successor(e)) { out.writeObject(e.key); out.writeObject(e.element); } } private void readObject(ObjectInputStream in) throws java.io.IOException, ClassNotFoundException { in.defaultReadObject(); int size = in.readInt(); try { buildFromSorted(new IOIterator(in, size), size); } catch (IteratorIOException e) { throw e.getException(); } catch (IteratorNoClassException e) { throw e.getException(); } } private class SubMap extends AbstractMap implements Serializable, NavigableMap { private static final long serialVersionUID = -6520786458950516097L; final Object fromKey, toKey; SubMap() { fromKey = toKey = null; } private Object readResolve() { return new AscendingSubMap(fromKey == null, fromKey, true, toKey == null, toKey, false); } public Map.Entry lowerEntry(Object key) { throw new Error(); } public Object lowerKey(Object key) { throw new Error(); } public Map.Entry floorEntry(Object key) { throw new Error(); } public Object floorKey(Object key) { throw new Error(); } public Map.Entry ceilingEntry(Object key) { throw new Error(); } public Object ceilingKey(Object key) { throw new Error(); } public Map.Entry higherEntry(Object key) { throw new Error(); } public Object higherKey(Object key) { throw new Error(); } public Map.Entry firstEntry() { throw new Error(); } public Map.Entry lastEntry() { throw new Error(); } public Map.Entry pollFirstEntry() { throw new Error(); } public Map.Entry pollLastEntry() { throw new Error(); } public NavigableMap descendingMap() { throw new Error(); } public NavigableSet navigableKeySet() { throw new Error(); } public NavigableSet descendingKeySet() { throw new Error(); } public Set entrySet() { throw new Error(); } public NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive) { throw new Error(); } public NavigableMap headMap(Object toKey, boolean inclusive) { throw new Error(); } public NavigableMap tailMap(Object fromKey, boolean inclusive) { throw new Error(); } public SortedMap subMap(Object fromKey, Object toKey) { throw new Error(); } public SortedMap headMap(Object toKey) { throw new Error(); } public SortedMap tailMap(Object fromKey) { throw new Error(); } public Comparator comparator() { throw new Error(); } public Object firstKey() { throw new Error(); } public Object lastKey() { throw new Error(); } } } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/NavigableMap.java0000644001750700037720000004256510431777171030604 0ustar dawidkdcl/* * Written by Doug Lea and Josh Bloch with assistance from members of JCP * JSR-166 Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util; import java.util.Map; import java.util.SortedMap; /** * A {@link java.util.SortedMap} extended with navigation methods returning the * closest matches for given search targets. Methods * {@code lowerEntry}, {@code floorEntry}, {@code ceilingEntry}, * and {@code higherEntry} return {@code Map.Entry} objects * associated with keys respectively less than, less than or equal, * greater than or equal, and greater than a given key, returning * {@code null} if there is no such key. Similarly, methods * {@code lowerKey}, {@code floorKey}, {@code ceilingKey}, and * {@code higherKey} return only the associated keys. All of these * methods are designed for locating, not traversing entries. * *

A {@code NavigableMap} may be accessed and traversed in either * ascending or descending key order. The {@code descendingMap} * method returns a view of the map with the senses of all relational * and directional methods inverted. The performance of ascending * operations and views is likely to be faster than that of descending * ones. Methods {@code subMap}, {@code headMap}, * and {@code tailMap} differ from the like-named {@code * SortedMap} methods in accepting additional arguments describing * whether lower and upper bounds are inclusive versus exclusive. * Submaps of any {@code NavigableMap} must implement the {@code * NavigableMap} interface. * *

This interface additionally defines methods {@code firstEntry}, * {@code pollFirstEntry}, {@code lastEntry}, and * {@code pollLastEntry} that return and/or remove the least and * greatest mappings, if any exist, else returning {@code null}. * *

Implementations of entry-returning methods are expected to * return {@code Map.Entry} pairs representing snapshots of mappings * at the time they were produced, and thus generally do not * support the optional {@code Entry.setValue} method. Note however * that it is possible to change mappings in the associated map using * method {@code put}. * *

Methods * {@link #subMap(Object, Object) subMap(K, K)}, * {@link #headMap(Object) headMap(K)}, and * {@link #tailMap(Object) tailMap(K)} * are specified to return {@code SortedMap} to allow existing * implementations of {@code SortedMap} to be compatibly retrofitted to * implement {@code NavigableMap}, but extensions and implementations * of this interface are encouraged to override these methods to return * {@code NavigableMap}. Similarly, * {@link #keySet()} can be overriden to return {@code NavigableSet}. * *

This interface is a member of the * * Java Collections Framework. * * @author Doug Lea * @author Josh Bloch * @since 1.6 */ public interface NavigableMap extends SortedMap { /** * Returns a key-value mapping associated with the greatest key * strictly less than the given key, or {@code null} if there is * no such key. * * @param key the key * @return an entry with the greatest key less than {@code key}, * or {@code null} if there is no such key * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key is null * and this map does not permit null keys */ Map.Entry lowerEntry(Object key); /** * Returns the greatest key strictly less than the given key, or * {@code null} if there is no such key. * * @param key the key * @return the greatest key less than {@code key}, * or {@code null} if there is no such key * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key is null * and this map does not permit null keys */ Object lowerKey(Object key); /** * Returns a key-value mapping associated with the greatest key * less than or equal to the given key, or {@code null} if there * is no such key. * * @param key the key * @return an entry with the greatest key less than or equal to * {@code key}, or {@code null} if there is no such key * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key is null * and this map does not permit null keys */ Map.Entry floorEntry(Object key); /** * Returns the greatest key less than or equal to the given key, * or {@code null} if there is no such key. * * @param key the key * @return the greatest key less than or equal to {@code key}, * or {@code null} if there is no such key * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key is null * and this map does not permit null keys */ Object floorKey(Object key); /** * Returns a key-value mapping associated with the least key * greater than or equal to the given key, or {@code null} if * there is no such key. * * @param key the key * @return an entry with the least key greater than or equal to * {@code key}, or {@code null} if there is no such key * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key is null * and this map does not permit null keys */ Map.Entry ceilingEntry(Object key); /** * Returns the least key greater than or equal to the given key, * or {@code null} if there is no such key. * * @param key the key * @return the least key greater than or equal to {@code key}, * or {@code null} if there is no such key * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key is null * and this map does not permit null keys */ Object ceilingKey(Object key); /** * Returns a key-value mapping associated with the least key * strictly greater than the given key, or {@code null} if there * is no such key. * * @param key the key * @return an entry with the least key greater than {@code key}, * or {@code null} if there is no such key * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key is null * and this map does not permit null keys */ Map.Entry higherEntry(Object key); /** * Returns the least key strictly greater than the given key, or * {@code null} if there is no such key. * * @param key the key * @return the least key greater than {@code key}, * or {@code null} if there is no such key * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if the specified key is null * and this map does not permit null keys */ Object higherKey(Object key); /** * Returns a key-value mapping associated with the least * key in this map, or {@code null} if the map is empty. * * @return an entry with the least key, * or {@code null} if this map is empty */ Map.Entry firstEntry(); /** * Returns a key-value mapping associated with the greatest * key in this map, or {@code null} if the map is empty. * * @return an entry with the greatest key, * or {@code null} if this map is empty */ Map.Entry lastEntry(); /** * Removes and returns a key-value mapping associated with * the least key in this map, or {@code null} if the map is empty. * * @return the removed first entry of this map, * or {@code null} if this map is empty */ Map.Entry pollFirstEntry(); /** * Removes and returns a key-value mapping associated with * the greatest key in this map, or {@code null} if the map is empty. * * @return the removed last entry of this map, * or {@code null} if this map is empty */ Map.Entry pollLastEntry(); /** * Returns a reverse order view of the mappings contained in this map. * The descending map is backed by this map, so changes to the map are * reflected in the descending map, and vice-versa. If either map is * modified while an iteration over a collection view of either map * is in progress (except through the iterator's own {@code remove} * operation), the results of the iteration are undefined. * *

The returned map has an ordering equivalent to * {@link Collections#reverseOrder(Comparator) Collections.reverseOrder}(comparator()). * The expression {@code m.descendingMap().descendingMap()} returns a * view of {@code m} essentially equivalent to {@code m}. * * @return a reverse order view of this map */ NavigableMap descendingMap(); /** * Returns a {@link NavigableSet} view of the keys contained in this map. * The set's iterator returns the keys in ascending order. * The set is backed by the map, so changes to the map are reflected in * the set, and vice-versa. If the map is modified while an iteration * over the set is in progress (except through the iterator's own {@code * remove} operation), the results of the iteration are undefined. The * set supports element removal, which removes the corresponding mapping * from the map, via the {@code Iterator.remove}, {@code Set.remove}, * {@code removeAll}, {@code retainAll}, and {@code clear} operations. * It does not support the {@code add} or {@code addAll} operations. * * @return a navigable set view of the keys in this map */ NavigableSet navigableKeySet(); /** * Returns a reverse order {@link NavigableSet} view of the keys contained in this map. * The set's iterator returns the keys in descending order. * The set is backed by the map, so changes to the map are reflected in * the set, and vice-versa. If the map is modified while an iteration * over the set is in progress (except through the iterator's own {@code * remove} operation), the results of the iteration are undefined. The * set supports element removal, which removes the corresponding mapping * from the map, via the {@code Iterator.remove}, {@code Set.remove}, * {@code removeAll}, {@code retainAll}, and {@code clear} operations. * It does not support the {@code add} or {@code addAll} operations. * * @return a reverse order navigable set view of the keys in this map */ NavigableSet descendingKeySet(); /** * Returns a view of the portion of this map whose keys range from * {@code fromKey} to {@code toKey}. If {@code fromKey} and * {@code toKey} are equal, the returned map is empty unless * {@code fromExclusive} and {@code toExclusive} are both true. The * returned map is backed by this map, so changes in the returned map are * reflected in this map, and vice-versa. The returned map supports all * optional map operations that this map supports. * *

The returned map will throw an {@code IllegalArgumentException} * on an attempt to insert a key outside of its range, or to construct a * submap either of whose endpoints lie outside its range. * * @param fromKey low endpoint of the keys in the returned map * @param fromInclusive {@code true} if the low endpoint * is to be included in the returned view * @param toKey high endpoint of the keys in the returned map * @param toInclusive {@code true} if the high endpoint * is to be included in the returned view * @return a view of the portion of this map whose keys range from * {@code fromKey} to {@code toKey} * @throws ClassCastException if {@code fromKey} and {@code toKey} * cannot be compared to one another using this map's comparator * (or, if the map has no comparator, using natural ordering). * Implementations may, but are not required to, throw this * exception if {@code fromKey} or {@code toKey} * cannot be compared to keys currently in the map. * @throws NullPointerException if {@code fromKey} or {@code toKey} * is null and this map does not permit null keys * @throws IllegalArgumentException if {@code fromKey} is greater than * {@code toKey}; or if this map itself has a restricted * range, and {@code fromKey} or {@code toKey} lies * outside the bounds of the range */ NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive); /** * Returns a view of the portion of this map whose keys are less than (or * equal to, if {@code inclusive} is true) {@code toKey}. The returned * map is backed by this map, so changes in the returned map are reflected * in this map, and vice-versa. The returned map supports all optional * map operations that this map supports. * *

The returned map will throw an {@code IllegalArgumentException} * on an attempt to insert a key outside its range. * * @param toKey high endpoint of the keys in the returned map * @param inclusive {@code true} if the high endpoint * is to be included in the returned view * @return a view of the portion of this map whose keys are less than * (or equal to, if {@code inclusive} is true) {@code toKey} * @throws ClassCastException if {@code toKey} is not compatible * with this map's comparator (or, if the map has no comparator, * if {@code toKey} does not implement {@link java.lang.Comparable}). * Implementations may, but are not required to, throw this * exception if {@code toKey} cannot be compared to keys * currently in the map. * @throws NullPointerException if {@code toKey} is null * and this map does not permit null keys * @throws IllegalArgumentException if this map itself has a * restricted range, and {@code toKey} lies outside the * bounds of the range */ NavigableMap headMap(Object toKey, boolean inclusive); /** * Returns a view of the portion of this map whose keys are greater than (or * equal to, if {@code inclusive} is true) {@code fromKey}. The returned * map is backed by this map, so changes in the returned map are reflected * in this map, and vice-versa. The returned map supports all optional * map operations that this map supports. * *

The returned map will throw an {@code IllegalArgumentException} * on an attempt to insert a key outside its range. * * @param fromKey low endpoint of the keys in the returned map * @param inclusive {@code true} if the low endpoint * is to be included in the returned view * @return a view of the portion of this map whose keys are greater than * (or equal to, if {@code inclusive} is true) {@code fromKey} * @throws ClassCastException if {@code fromKey} is not compatible * with this map's comparator (or, if the map has no comparator, * if {@code fromKey} does not implement {@link java.lang.Comparable}). * Implementations may, but are not required to, throw this * exception if {@code fromKey} cannot be compared to keys * currently in the map. * @throws NullPointerException if {@code fromKey} is null * and this map does not permit null keys * @throws IllegalArgumentException if this map itself has a * restricted range, and {@code fromKey} lies outside the * bounds of the range */ NavigableMap tailMap(Object fromKey, boolean inclusive); /** * {@inheritDoc} * *

Equivalent to {@code subMap(fromKey, true, toKey, false)}. * * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ SortedMap subMap(Object fromKey, Object toKey); /** * {@inheritDoc} * *

Equivalent to {@code headMap(toKey, false)}. * * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ SortedMap headMap(Object toKey); /** * {@inheritDoc} * *

Equivalent to {@code tailMap(fromKey, true)}. * * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} */ SortedMap tailMap(Object fromKey); } backport-util-concurrent-3.1-src/src/edu/emory/mathcs/backport/java/util/AbstractSequentialList.java0000644001750700037720000000170710360636052032672 0ustar dawidkdcl/* * Written by Dawid Kurzyniec, based on public domain code written by Doug Lea * and publictly available documentation, and released to the public domain, as * explained at http://creativecommons.org/licenses/publicdomain */ package edu.emory.mathcs.backport.java.util; import edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils; /** * Overrides toArray() and toArray(Object[]) in AbstractCollection to provide * implementations valid for concurrent lists. * * @author Doug Lea * @author Dawid Kurzyniec */ public abstract class AbstractSequentialList extends java.util.AbstractSequentialList { /** * Sole constructor. (For invocation by subclass constructors, typically * implicit.) */ protected AbstractSequentialList() { super(); } public Object[] toArray() { return Utils.collectionToArray(this); } public Object[] toArray(Object[] a) { return Utils.collectionToArray(this, a); } } backport-util-concurrent-3.1-src/backport-util-concurrent.jpx0000644001750700037720000001763510545415604023411 0ustar dawidkdcl backport-util-concurrent-3.1-src/version.properties0000644001750700037720000000006110643375330021512 0ustar dawidkdcllog.startat.revision=3332 log.linkto.version=3.0 backport-util-concurrent-3.1-src/RECONCILED_ON0000644001750700037720000000001310643127225017630 0ustar dawidkdcl2007-07-04 backport-util-concurrent-3.1-src/build-jbexport.xml0000644001750700037720000001260610262114013021355 0ustar dawidkdcl backport-util-concurrent-3.1-src/stripgenerics.pl0000644001750700037720000000155410253674504021137 0ustar dawidkdcl#!/usr/bin/perl print $#ARGV; print "AAAA"; if ($#ARGV < 1) { die "usage: stripgenerics.pl "; } open(IF, $ARGV[0]); open(OF, ">" . $ARGV[1]); while ($line = ) { $line =~ s/ java\.util\./ edu.emory.mathcs.backport.java.util./g; if ($line =~ m/^\s*\* \@param <[A-Za-z,.]+> /) { next; } # skip HTML tags if ($line =~ m/^\s*\* /) { print OF $line; next; } $line =~ s/ <[A-Za-z, ]+>//g; $line =~ s/<[A-Za-z, ]+>//g; $line =~ s/<((\? super )?(\? extends )?[A-Za-z .]+,?)+>//g; $line =~ s/<((\? super )?(\? extends )?[\?A-Za-z .]+,?)+>//g; $line =~ s/ [A-Z] / Object /g; $line =~ s/\([A-Z] /(Object /g; $line =~ s/\([A-Z]\)//g; $line =~ s/ [A-Z]\[\]/ Object[]/g; $line =~ s/\([A-Z]\[\]/(Object[]/g; print OF $line; } close(OF); close(IF); backport-util-concurrent-3.1-src/junit.library0000644001750700037720000000035310156637464020442 0ustar dawidkdcl junit [external/junit.jar] 1102549187645 backport-util-concurrent-3.1-src/backport-util-concurrent.jpx.local.template0000644001750700037720000000112510522544323026273 0ustar dawidkdclbuild.menu.1[0]=com.borland.primetime.build.ProjectBuildActionContainer;Make distribution##com.borland.jbuilder.build.AntBuilder;build.xml;dist## build.menu.2[0]=com.borland.primetime.build.ProjectBuildActionContainer;Rebuild distribution##com.borland.jbuilder.build.AntBuilder;build.xml;rebuild.dist## classFilter.unittest.1[0]=junit.framework.* classFilter.unittest.2[0]=java.lang.reflect.Method classFilter.unittest.3[0]=com.borland.jbuilder.unittest.JBTestRunner classFilter.unittest.4[0]=sun.reflect.NativeMethodAccessorImpl classFilter.unittest.5[0]=sun.reflect.DelegatingMethodAccessorImpl backport-util-concurrent-3.1-src/build.xml0000755001750700037720000004035310634075652017547 0ustar dawidkdcl