On Wed, Jun 8, 2011 at 6:55 PM, Tudor Girba <tudor(a)tudorgirba.com> wrote:
Hi,
On 8 Jun 2011, at 18:29, Usman Bhatti wrote:
On Wed, Jun 8, 2011 at 5:16 PM, Tudor Girba
<tudor(a)tudorgirba.com>
wrote:
Hi,
On 8 Jun 2011, at 17:07, Usman Bhatti wrote:
> On Wed, Jun 8, 2011 at 3:54 PM, Tudor Girba <tudor(a)tudorgirba.com>
wrote:
> Hi,
>
> On 8 Jun 2011, at 15:45, Usman Bhatti wrote:
>
> > On Wed, Jun 8, 2011 at 3:10 PM, Tudor Girba <tudor(a)tudorgirba.com>
wrote:
> > Hi,
> >
> > On 8 Jun 2011, at 14:21, Simon Denier wrote:
> >
> > >
> > > On 8 juin 2011, at 11:52, Usman Bhatti wrote:
> > >
> > >> I am looking to understand what mse entities are created for
associations (except inheritance i.e. invocations, access, refs) in code and
how to exactly treat the duplicates. I have seen a reference of it in a bug
reported for VerveineJ but I am not sure if this issue has been discussed
elsewhere.
> > >>
> > >> For example,
> > >>
> > >> A a;
> > >> M()
> > >> {
> > >> a = new A();
> > >> a = new A();
> > >> a.CallAMethod();
> > >> a.CallAMethod();
> > >>
> > >> }
> > >>
> > >> The above code creates these associations (with Verveinesharp) ..
> > >> 1. An invocations to A's constructor (duplicate constructor
invocation is ignored).
> > >> 2. A field access to the field
a (only one instance is recorded,
the others are just ignored).
> > >> 3. An invocation to
CallAMethod (field access is already recorded
so this one is not considered).
> > >> 4. A reference from method M()
to type A (Duplicate reference is
ignored).
> > >
> > >
> > > To me it seems like there are:
> > > - 2 invocations to A constructor
> > > - 2 field accesses to a
> > > - 2 invocations to CallAMethod
> > >
> > > There is no direct reference to class A, only indirect references
through the constructor/method calls.
> >
> > Yes! This is the correct interpretation.
> >
> > Usman, please do it like suggested by Simon.
> >
> > So, we keep the duplicates in MSE. Ok I'll change VerveineSharp to
implement this interpretation. But I do not understand what is mean by
direct and indirect references because as I understand the meta-model
provides only one type i.e. a Reference class to instantiate references. How
do we do the different between direct and indirect?
>
> What Simon meant is that in the code there is no Reference to class A.
There
are only calls to the constructor A. And a call to a constructor can
be considered an indirect reference. But, the model should only represent
what is found in the code.
Is direct reference = static reference?
Pretty much.
> Because we can only refer to an object of a class through a field or
through
a constructor. Static references refer to the class directly.Sorry
for insisting on that but I want to implement this thing correctly.
Well, this is an unclear territory, so do not feel bad for insisting :).
The thing
is like this. If you would manipulate the class as a variable,
this would be a reference to that class. For example:
- if you pass the class as a parameter to a
function, or
just a final clarification (I hope :-)
m (A a)
{
//do square brackets provide correct interpretation?
a.CallAmethod(); [not a reference, access and invocation only]
Correct.
A b = new A();
Here we have an access to b and an invocation to constructor A.
a = b; [reference to A + 2 accesses to A]
No. There is no reference to A, only an access to a and an access to b.
Ok. Now I understand. Merely, passing a type as a parameter creates a
reference. It is not important how that parameter is used in the method.
thanx a lot