public function create(ClassType $classType, array $parameters)
 {
     $source = $this->sourceFactory->create($classType);
     //Add constructor method.
     $source->addConstructorMethod($this->definitionFactory->createConstructorMethod($parameters));
     //Adds Broadway ReadModelInterface.
     $source->addInterface(InterfaceType::create('Broadway\\ReadModel\\ReadModelInterface'));
     //Adds Broadway SerializableInterface.
     $source->addInterface(InterfaceType::create('Broadway\\Serializer\\SerializableInterface'));
     //Adds serialize() method.
     $source->addMethod($this->definitionFactory->createSerializeMethod($source));
     //Adds static deserialize() method.
     $source->addMethod($this->definitionFactory->createDeserializeMethod($source));
     $source->addMethod($this->definitionFactory->createReadModelIdGetterMethod($parameters[0]));
     return $source;
 }
 public function it_will_create_source_from_given_class_type_and_constructor_params(ClassSourceFactory $sourceFactory, DefinitionFactory $definitionFactory, ClassType $classType, ImprovedClassSource $classSource, Parameter $parameter1, Parameter $parameter2, ConstructorMethod $constructorMethod, SerializeMethod $serializeMethod, DeserializeMethod $deserializeMethod)
 {
     $sourceFactory->create($classType)->willReturn($classSource);
     $definitionFactory->createConstructorMethod([$parameter1, $parameter2])->shouldBeCalled()->willReturn($constructorMethod);
     $definitionFactory->createSerializeMethod($classSource)->shouldBeCalled()->willReturn($serializeMethod);
     $definitionFactory->createDeserializeMethod($classSource)->shouldBeCalled()->willReturn($deserializeMethod);
     $this->create($classType, [$parameter1, $parameter2])->shouldReturn($classSource);
 }