public final void getPropertyValueInternal( final Property property, final PropertyAcc pas, final boolean fromInstanceSlaveCall) throws InvalidModelException { /* * First see if the property is defined locally in the instance. Such * local property associations arise from component property * associations in the declarative spec, from explicit programmatic * setting of the property, or as cached results from earlier property * lookups. */ if (pas.addLocal(this)) { return; } /* * If we don't find the property locally we defer to the declarative * specifications. */ getPropertyValueFromDeclarativeModel(property, pas); /* * If we still don't have a value, and the property is "inherit", get it * from the enclosing component instance. Don't short-circuit this step * because the property caching during instantiation doesn't catch * contained property values that may be attached to an ancestor * instance and that might be inherited by this instance. */ if (property.isInherit()) { final NamedElement ph = (NamedElement) eContainer(); if (ph != null) { ph.getPropertyValueInternal(property, pas, false); } } }
/** * Get the property value from the declarative model elements associated with the instance object. * This implementation works for everything but ConnectionInstances; this method is overridden in * ConnectionInstance to handle the problem of dealing with all the connections that make up the * semantic connection. * * @param property The property to lookup * @param pva The property value accumulator to use to build the property value * @throws InvalidModelException Thrown if the property value cannot be retrieved because the * model is incomplete or otherwise invalid. */ protected void getPropertyValueFromDeclarativeModel( final Property property, final PropertyAcc pas) throws InvalidModelException { // apv.pushCurrentComponent(getContainingComponentInstanceOrSelf()); try { final List<? extends NamedElement> compDecls = getInstantiatedObjects(); // Here we assume compDecls is empty or has only one element if (!compDecls.isEmpty()) { final NamedElement compDecl = compDecls.get(0); if (compDecl == null) return; compDecl.getPropertyValueInternal(property, pas, true); } } finally { // apv.popCurrentComponent(); } }