From 026d6e14291aee1e1f5cc7c0fda3e0418d919f79 Mon Sep 17 00:00:00 2001 From: hns Date: Tue, 16 Dec 2003 13:14:07 +0000 Subject: [PATCH] Fix object precedence in parent prototype registration: If an object is already registered with a parent prototype's name, leave it as it is and don't overwrite it since it has higher precedence than we have. --- src/helma/framework/core/Prototype.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/helma/framework/core/Prototype.java b/src/helma/framework/core/Prototype.java index ce824903..28d2f773 100644 --- a/src/helma/framework/core/Prototype.java +++ b/src/helma/framework/core/Prototype.java @@ -176,14 +176,21 @@ public final class Prototype { } /** - * Register an object as handler for all our parent prototypes. + * Register an object as handler for all our parent prototypes, but only if + * a handler by that prototype name isn't registered yet. This is used to + * implement direct over indirect prototype precedence and child over parent + * precedence. */ public final void registerParents(Map handlers, Object obj) { Prototype p = parent; while ((p != null) && !"hopobject".equalsIgnoreCase(p.getName())) { - handlers.put(p.name, obj); + Object old = handlers.put(p.name, obj); + // if an object was already registered by this name, put it back in again. + if (old != null) { + handlers.put(p.name, old); + } p = p.parent; }