yes.

Currently gogo  converts any array result into a list (Closure.java:228):

        if (last.result instanceof Object[])
        {
            return Arrays.asList((Object[]) last.result);
        }

If it didn't do this, then

g! headers (bundles)

will work directly with any extra coercion being needed.

We would also need to allow a method to access arrays:

b = (bundles)

b1 = $b 1

(currently this is 'b1 = $b get 1', because b is converted to an array
list).

I'll test this locally, to check it doesn't break the tests or have any
obvious bad side effects.

Derek




On 28 May 2010 00:39, Richard S. Hall <[email protected]> wrote:

> Do you have a suggestion for a quick fix before we try to release?
>
> The plan was to cut a release on Sunday...
>
> -> richard
>
>
> On 5/27/10 7:33 PM, Derek Baum wrote:
>
>> Further investigation shows:
>>
>> g! type bundles
>> bundles is Bundle[] context:bundles()
>> true
>>
>> g! type headers
>> headers is void felix:headers(Bundle[])
>> true
>>
>> // so bundles appears to return the Bundle[] type required by the headers
>> command
>>
>> g! b = (bundles)
>>     0|Active     |    0|org.apache.felix.framework (2.0.4)
>>     1|Active     |    1|org.apache.felix.gogo.command (0.5.0.SNAPSHOT)
>>     2|Active     |    1|org.apache.felix.gogo.runtime (0.5.0.SNAPSHOT)
>>     3|Active     |    1|org.apache.felix.gogo.shell (0.5.0.SNAPSHOT)
>>
>> g! set b
>> ArrayList       b               [org.apache.felix.framework [0],
>> org.apache.f...
>>
>>
>> // but the result is actually converted into an ArrayList
>> // and the current coercion mechanism is failing to convert the ArrayList
>> back to the required Array[]
>>
>> // explicit conversion works, but should not be necessary:
>>
>> g! ba = $b toarray
>>     0|Active     |    0|org.apache.felix.framework (2.0.4)
>>     1|Active     |    1|org.apache.felix.gogo.command (0.5.0.SNAPSHOT)
>>     2|Active     |    1|org.apache.felix.gogo.runtime (0.5.0.SNAPSHOT)
>>     3|Active     |    1|org.apache.felix.gogo.shell (0.5.0.SNAPSHOT)
>>
>> g! set ba
>> Bundle[]        ba              [Lorg.osgi.framework.Bundle;@67d225a7
>> g! headers $ba
>>
>> System Bundle (0)
>> -----------------
>> Bundle-Description = This bundle is system specific; it implements various
>> system services.
>> // etc
>>
>>
>> Note: https://issues.apache.org/jira/browse/FELIX-2337 is also related to
>> this, as
>>
>> x = command args
>>
>> can set x to an array[], while
>>
>> x = (command args)
>>
>> will always convert the result to an ArrayList.
>>
>> ArrayLists are undoubtedly more "useful", but I wonder whether array[]
>> results should be automatically converted to ArrayLists, rather than just
>> coerced as needed, like any other type.
>>
>>
>> Derek
>>
>> On 28 May 2010 00:12, Richard S. Hall<[email protected]>  wrote:
>>
>>
>>
>>> On 5/27/10 7:10 PM, Guillaume Nodet wrote:
>>>
>>>
>>>
>>>> It seems the new coercion mechanism is a bit flawed:
>>>>
>>>> g! headers (bundles)
>>>> gogo: IllegalArgumentException: Cannot coerce
>>>> headers[[org.apache.felix.framework [0],
>>>> org.apache.felix.bundlerepository
>>>> [1], org.apache.felix.gogo.command [2], org.apache.felix.gogo.runtime
>>>> [3],
>>>> org.apache.felix.gogo.shell [4]]] to any of [(Bundle[])]
>>>>
>>>> That should work without problems. The coercer needs to be enhacned with
>>>> the
>>>> following code:
>>>>
>>>>
>>>>
>>>> http://svn.apache.org/repos/asf/felix/trunk/gogo/commands/src/main/java/org/apache/felix/gogo/commands/converter/DefaultConverter.java
>>>>
>>>>
>>>>
>>>>
>>> Thanks. I will try to look into it tomorrow.
>>>
>>> ->  richard
>>>
>>>
>>>  On Thu, May 27, 2010 at 20:49, Richard S. Hall<[email protected]>
>>>
>>>
>>>>  wrote:
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>> So, we are gearing up to release the 3.0 version of the framework. As
>>>>> part
>>>>> of this release, we're going to include Gogo as the default shell in
>>>>> the
>>>>> framework binary distribution. Gogo requires Java 5 or later, but don't
>>>>> worry, the framework still targets lesser JREs. :-)
>>>>>
>>>>> I've uploaded a snapshot of the distribution in tar.gz and zip if
>>>>> anyone
>>>>> wants to play with it:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> https://repository.apache.org/content/groups/snapshots-group/org/apache/felix/org.apache.felix.main.distribution/2.1.0-SNAPSHOT/
>>>>>
>>>>> Word of warning, the "ps" command has been renamed to "lb" (i.e., list
>>>>> bundles)...type "help" to see available commands.
>>>>>
>>>>> ->   richard
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>

Reply via email to