Skip to content

Cast error while accessing related elements #26

@manuelleduc

Description

@manuelleduc

Using this model :

with version "6.0.0-SNAPSHOT"
class org.kevoree.Instance extends org.kevoree.Element {
    with instantiation "false"
    att name: String with index
}

class org.kevoree.Channel extends org.kevoree.Instance {
    rel outputs: org.kevoree.OutputPort with opposite "channels"
}

class org.kevoree.Component extends org.kevoree.Instance {
    rel outputs: org.kevoree.OutputPort with opposite "channels"
}

class org.kevoree.Port extends org.kevoree.Element {
    att name: String with index
    rel channels: org.kevoree.Channel with opposite "outputs"
}

class org.kevoree.OutputPort extends org.kevoree.Port {
}

I wrote this code which instanciate a Component, add it an OutputPort and then tries to retrieve the OutputPort from the Component :

import org.KevoreeModel;
import org.junit.Test;
import org.kevoree.*;
import org.kevoree.modeling.KCallback;
import org.kevoree.modeling.memory.manager.DataManagerBuilder;
import org.kevoree.modeling.scheduler.impl.DirectScheduler;

public class BugTest {

    @Test
    public void test() throws Exception {
        final KevoreeModel tm = new KevoreeModel(DataManagerBuilder.create().withScheduler(new DirectScheduler()).build());
        tm.connect(new KCallback() {
            @Override
            public void on(Object cb) {
                final Component component1 = tm.createComponent(0, 0);
                component1.setName("comp0");
                final OutputPort outputPort = tm.createOutputPort(0, 0);
                component1.addOutputs(outputPort);
                outputPort.getChannels(new KCallback<Channel[]>() {
                    @Override
                    public void on(Channel[] channels) {
                        for (Channel channel : channels) {
                            System.out.println("Channel : " + channel.getName());
                        }
                    }
                });
            }
        });
    }
}

The resulting error is :

java.lang.ClassCastException: org.kevoree.impl.ComponentImpl cannot be cast to org.kevoree.Channel
    at org.kevoree.impl.OutputPortImpl$1.on(OutputPortImpl.java:46)
    at org.kevoree.impl.OutputPortImpl$1.on(OutputPortImpl.java:41)
    at org.kevoree.modeling.memory.resolver.impl.DistortedTimeResolver$2$1$1$1$1.on(DistortedTimeResolver.java:180)
    at org.kevoree.modeling.memory.resolver.impl.DistortedTimeResolver$2$1$1$1$1.on(DistortedTimeResolver.java:162)
    at org.kevoree.modeling.memory.resolver.impl.DistortedTimeResolver.getOrLoadAndMarkAll(DistortedTimeResolver.java:688)
    at org.kevoree.modeling.memory.resolver.impl.DistortedTimeResolver$2$1$1$1.on(DistortedTimeResolver.java:162)
    at org.kevoree.modeling.memory.resolver.impl.DistortedTimeResolver$2$1$1$1.on(DistortedTimeResolver.java:142)
    at org.kevoree.modeling.memory.resolver.impl.DistortedTimeResolver.getOrLoadAndMarkAll(DistortedTimeResolver.java:688)
    at org.kevoree.modeling.memory.resolver.impl.DistortedTimeResolver$2$1$1.on(DistortedTimeResolver.java:142)
    at org.kevoree.modeling.memory.resolver.impl.DistortedTimeResolver$2$1$1.on(DistortedTimeResolver.java:127)
    at org.kevoree.modeling.memory.resolver.impl.DistortedTimeResolver.getOrLoadAndMarkAll(DistortedTimeResolver.java:688)
    at org.kevoree.modeling.memory.resolver.impl.DistortedTimeResolver$2$1.on(DistortedTimeResolver.java:127)
    at org.kevoree.modeling.memory.resolver.impl.DistortedTimeResolver$2$1.on(DistortedTimeResolver.java:117)
    at org.kevoree.modeling.memory.resolver.impl.DistortedTimeResolver.getOrLoadAndMark(DistortedTimeResolver.java:657)
    at org.kevoree.modeling.memory.resolver.impl.DistortedTimeResolver$2.run(DistortedTimeResolver.java:117)
    at org.kevoree.modeling.scheduler.impl.DirectScheduler.dispatch(DirectScheduler.java:10)
    at org.kevoree.modeling.memory.manager.impl.DataManager.lookupAllObjects(DataManager.java:328)
    at org.kevoree.modeling.abs.AbstractKObject.internal_getRelation(AbstractKObject.java:364)
    at org.kevoree.modeling.abs.AbstractKObject.getRelation(AbstractKObject.java:351)
    at org.kevoree.impl.OutputPortImpl.getChannels(OutputPortImpl.java:41)
    at BugTest$1.on(BugTest.java:20)
    at org.kevoree.modeling.memory.manager.impl.DataManager$2$1$1$1.on(DataManager.java:271)
    at org.kevoree.modeling.memory.manager.impl.DataManager$2$1$1$1.on(DataManager.java:239)
    at org.kevoree.modeling.cdn.impl.MemoryContentDeliveryDriver.get(MemoryContentDeliveryDriver.java:54)
    at org.kevoree.modeling.memory.manager.impl.DataManager$2$1$1.on(DataManager.java:239)
    at org.kevoree.modeling.memory.manager.impl.DataManager$2$1$1.on(DataManager.java:230)
    at org.kevoree.modeling.cdn.impl.MemoryContentDeliveryDriver.atomicGetIncrement(MemoryContentDeliveryDriver.java:43)
    at org.kevoree.modeling.memory.manager.impl.DataManager$2$1.on(DataManager.java:229)
    at org.kevoree.modeling.memory.manager.impl.DataManager$2$1.on(DataManager.java:216)
    at org.kevoree.modeling.cdn.impl.MemoryContentDeliveryDriver.connect(MemoryContentDeliveryDriver.java:93)
    at org.kevoree.modeling.memory.manager.impl.DataManager$2.run(DataManager.java:216)
    at org.kevoree.modeling.scheduler.impl.DirectScheduler.dispatch(DirectScheduler.java:10)
    at org.kevoree.modeling.memory.manager.impl.DataManager.connect(DataManager.java:213)
    at org.kevoree.modeling.abs.AbstractKModel.connect(AbstractKModel.java:34)
    at BugTest.test(BugTest.java:13)
    [...]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions