def visitReferenceProperty(self, propertyName, value, ctx):
     # containsKey to distinguish null from unknown
     if propertyName in self._flatValueMap:
         elementType = ctx.getElementType() if isinstance(ctx, CollectionPropertyContext) else None
         newValue = EntityCodex.decode(self._state, ctx.getType(),
                 elementType, self._flatValueMap[propertyName])
         resolved = self._state.getResolver().resolveDomainValue(newValue, False)
         self._procesor._service.setProperty(self._domain, propertyName,
                 self._procesor._service.resolveDomainClass(ctx.getType()), resolved)
     return False
    def decodeInvocationArguments(self, source, parameters, contextArgs,
            genericArgs):
        """Handles instance invocations as the instance at the 0th parameter.
        """
        if parameters is None:
            # Can't return Collections.emptyList() because this must be mutable
            return list()

        assert len(parameters) == contextArgs.length
        args = list()
        for i in range(contextArgs.length):
            type_ = contextArgs[i]
            elementType = None
            if Collection.isAssignableFrom(type_):
                elementType = TypeUtils.ensureBaseType(TypeUtils.getSingleParameterization(Collection, genericArgs[i]))
                split = parameters.get(i)
            else:
                split = parameters.get(i)
            arg = EntityCodex.decode(source, type_, elementType, split)
            arg = source.getResolver().resolveDomainValue(arg, not (EntityProxyId == contextArgs[i]))
            args.add(arg)
        return args