Brevity is going to be our friend here.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5473 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -613,28 +613,28 @@ public class DObject
|
|||||||
* // simple usage
|
* // simple usage
|
||||||
* DObject o1 = new DObject();
|
* DObject o1 = new DObject();
|
||||||
* BaseLocalAttr base = new BaseLocalAttr();
|
* BaseLocalAttr base = new BaseLocalAttr();
|
||||||
* o1.setLocalAttribute(BaseLocalAttr.class, base);
|
* o1.setLocal(BaseLocalAttr.class, base);
|
||||||
* assertSame(o1.getLocalAttribute(BaseLocalAttr.class), base); // true
|
* assertSame(o1.getLocal(BaseLocalAttr.class), base); // true
|
||||||
*
|
*
|
||||||
* // polymorphic usage
|
* // polymorphic usage
|
||||||
* DObject o2 = new DObject();
|
* DObject o2 = new DObject();
|
||||||
* DerivedLocalAttr derived = new DerivedLocalAttr();
|
* DerivedLocalAttr derived = new DerivedLocalAttr();
|
||||||
* o2.setLocalAttribute(DerivedLocalAttr.class, derived);
|
* o2.setLocal(DerivedLocalAttr.class, derived);
|
||||||
* BaseLocalAttr upcasted = derived;
|
* BaseLocalAttr upcasted = derived;
|
||||||
* assertSame(o2.getLocalAttribute(DerivedLocalAttr.class), derived); // true
|
* assertSame(o2.getLocal(DerivedLocalAttr.class), derived); // true
|
||||||
* assertSame(o2.getLocalAttribute(BaseLocalAttr.class), upcasted); // true
|
* assertSame(o2.getLocal(BaseLocalAttr.class), upcasted); // true
|
||||||
*
|
*
|
||||||
* // cannot overwrite already set attribute
|
* // cannot overwrite already set attribute
|
||||||
* DObject o3 = new DObject();
|
* DObject o3 = new DObject();
|
||||||
* o3.setLocalAttribute(DerivedLocalAttr.class, derived);
|
* o3.setLocal(DerivedLocalAttr.class, derived);
|
||||||
* o3.setLocalAttribute(DerivedLocalAttr.class, new DerivedLocalAttr()); // will fail
|
* o3.setLocal(DerivedLocalAttr.class, new DerivedLocalAttr()); // will fail
|
||||||
* o3.setLocalAttribute(BaseLocalAttr.class, new BaseLocalAttr()); // will fail
|
* o3.setLocal(BaseLocalAttr.class, new BaseLocalAttr()); // will fail
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @exception IllegalStateException thrown if an attempt is made to set a local attribute that
|
* @exception IllegalStateException thrown if an attempt is made to set a local attribute that
|
||||||
* already contains a non-null value with any non-null value.
|
* already contains a non-null value with any non-null value.
|
||||||
*/
|
*/
|
||||||
public <T> void setLocalAttribute (Class<T> key, T attr)
|
public <T> void setLocal (Class<T> key, T attr)
|
||||||
{
|
{
|
||||||
// locate any existing attribute that matches our key
|
// locate any existing attribute that matches our key
|
||||||
for (int ii = 0, ll = _locattrs.length; ii < ll; ii++) {
|
for (int ii = 0, ll = _locattrs.length; ii < ll; ii++) {
|
||||||
@@ -658,7 +658,7 @@ public class DObject
|
|||||||
* information on key polymorphism. Returns null if no attribute is found that matches the
|
* information on key polymorphism. Returns null if no attribute is found that matches the
|
||||||
* supplied key.
|
* supplied key.
|
||||||
*/
|
*/
|
||||||
public <T> T getLocalAttribute (Class<T> key)
|
public <T> T getLocal (Class<T> key)
|
||||||
{
|
{
|
||||||
for (Object attr : _locattrs) {
|
for (Object attr : _locattrs) {
|
||||||
if (key.isInstance(attr)) {
|
if (key.isInstance(attr)) {
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ public class LocalAttrTest
|
|||||||
{
|
{
|
||||||
DObject o1 = new DObject();
|
DObject o1 = new DObject();
|
||||||
BaseLocalAttr base = new BaseLocalAttr();
|
BaseLocalAttr base = new BaseLocalAttr();
|
||||||
o1.setLocalAttribute(BaseLocalAttr.class, base);
|
o1.setLocal(BaseLocalAttr.class, base);
|
||||||
assertSame(o1.getLocalAttribute(BaseLocalAttr.class), base);
|
assertSame(o1.getLocal(BaseLocalAttr.class), base);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test public void testPoly ()
|
@Test public void testPoly ()
|
||||||
@@ -33,22 +33,22 @@ public class LocalAttrTest
|
|||||||
// polymorphic usage
|
// polymorphic usage
|
||||||
DObject o2 = new DObject();
|
DObject o2 = new DObject();
|
||||||
DerivedLocalAttr derived = new DerivedLocalAttr();
|
DerivedLocalAttr derived = new DerivedLocalAttr();
|
||||||
o2.setLocalAttribute(DerivedLocalAttr.class, derived);
|
o2.setLocal(DerivedLocalAttr.class, derived);
|
||||||
BaseLocalAttr upcasted = derived;
|
BaseLocalAttr upcasted = derived;
|
||||||
assertSame(o2.getLocalAttribute(DerivedLocalAttr.class), derived);
|
assertSame(o2.getLocal(DerivedLocalAttr.class), derived);
|
||||||
assertSame(o2.getLocalAttribute(BaseLocalAttr.class), upcasted);
|
assertSame(o2.getLocal(BaseLocalAttr.class), upcasted);
|
||||||
|
|
||||||
// cannot overwrite already set attribute
|
// cannot overwrite already set attribute
|
||||||
DObject o3 = new DObject();
|
DObject o3 = new DObject();
|
||||||
o3.setLocalAttribute(DerivedLocalAttr.class, derived);
|
o3.setLocal(DerivedLocalAttr.class, derived);
|
||||||
try {
|
try {
|
||||||
o3.setLocalAttribute(DerivedLocalAttr.class, new DerivedLocalAttr());
|
o3.setLocal(DerivedLocalAttr.class, new DerivedLocalAttr());
|
||||||
fail("Object allowed attribute overwrite.");
|
fail("Object allowed attribute overwrite.");
|
||||||
} catch (IllegalStateException ise) {
|
} catch (IllegalStateException ise) {
|
||||||
// good
|
// good
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
o3.setLocalAttribute(BaseLocalAttr.class, new BaseLocalAttr());
|
o3.setLocal(BaseLocalAttr.class, new BaseLocalAttr());
|
||||||
fail("Object allowed polymorhic attribute overwrite.");
|
fail("Object allowed polymorhic attribute overwrite.");
|
||||||
} catch (IllegalStateException ise) {
|
} catch (IllegalStateException ise) {
|
||||||
// good
|
// good
|
||||||
@@ -59,13 +59,13 @@ public class LocalAttrTest
|
|||||||
{
|
{
|
||||||
DObject o1 = new DObject();
|
DObject o1 = new DObject();
|
||||||
BaseLocalAttr base = new BaseLocalAttr();
|
BaseLocalAttr base = new BaseLocalAttr();
|
||||||
o1.setLocalAttribute(BaseLocalAttr.class, base);
|
o1.setLocal(BaseLocalAttr.class, base);
|
||||||
assertSame(o1.getLocalAttribute(BaseLocalAttr.class), base);
|
assertSame(o1.getLocal(BaseLocalAttr.class), base);
|
||||||
o1.setLocalAttribute(BaseLocalAttr.class, null);
|
o1.setLocal(BaseLocalAttr.class, null);
|
||||||
assertNull(o1.getLocalAttribute(BaseLocalAttr.class));
|
assertNull(o1.getLocal(BaseLocalAttr.class));
|
||||||
BaseLocalAttr nbase = new BaseLocalAttr();
|
BaseLocalAttr nbase = new BaseLocalAttr();
|
||||||
o1.setLocalAttribute(BaseLocalAttr.class, nbase);
|
o1.setLocal(BaseLocalAttr.class, nbase);
|
||||||
assertNotSame(o1.getLocalAttribute(BaseLocalAttr.class), base);
|
assertNotSame(o1.getLocal(BaseLocalAttr.class), base);
|
||||||
assertSame(o1.getLocalAttribute(BaseLocalAttr.class), nbase);
|
assertSame(o1.getLocal(BaseLocalAttr.class), nbase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user