Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Archived » M2M (model-to-model transformation) » [ATL] Model checking with ATL
[ATL] Model checking with ATL [message #58117] Fri, 17 August 2007 11:03 Go to next message
Eclipse UserFriend
Originally posted by: kernheiko.gmx.de

Hello,

I would like to use ATL for checking models. An approach for this is
described in [1]. Examples are given in [2] and [3].

I wrote the following two rules for checking my models:

rule SetOfEventsNotEmpty {
from i : Aris!Model(i.getSymbols()
->collect(symbol|symbol.oclIsTypeOf(Aris!S_Ereignis_1))
->isEmpty())

to o : Problem!Problem (
description <- 'No event exists.',
severity <- #error,
location <- 'model name: ' + i.name + '--- id: ' + i.id )
}

rule SetOfFunctionsNotEmpty {
from i : Aris!Model(i.getSymbols()
->collect(symbol|symbol.oclIsTypeOf(Aris!S_Funktion_335))
->isEmpty())

to o : Problem!Problem (
description <- 'No function exists.',
severity <- #error,
location <- 'model name: ' + i.name + ' --- id: ' + i.id )
}


During the execution ATL prints the following stack trace message:

****** BEGIN Stack Trace
message: trying to register several rules as default for element
IN!Kein_Ereignis_und_keine_Funktion: 'SetOfEventsNotEmpty' and
'SetOfFunctionsNotEmpty'
A.main() : ??#22 null
local variables = {self=epk_check : ASMModule}
local stack = []
A.__matcher__() : ??#3 null
local variables = {self=epk_check : ASMModule}
local stack = []
A.__matchSetOfFunctionsNotEmpty() : ??#50 null
local variables = {i=IN!Kein_Ereignis_und_keine_Funktion,
self=epk_check : ASMModule}
local stack = []
NativeOperation public static void
org.atl.engine.vm.nativelib.ASMTransientLinkSet.addLink(org. atl.engine.vm.StackFrame,org.
atl.engine.vm.nativelib.ASMTransientLinkSet,org.atl.engine.v m.nativelib.ASMTransientLink)
args = [TransientLinkSet {TransientLink {rule =
'SetOfEventsNotEmpty', sourceElements = {i =
IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
OUT!<unnamed>}, variables = {}}}, TransientLink {rule =
'SetOfFunctionsNotEmpty', sourceElements = {i =
IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
OUT!<unnamed>}, variables = {}}]
****** END Stack Trace
Execution terminated due to error (see launch configuration to allow
continuation after errors).

I think the problem is that ATL cannot apply several rules to one
Aris!Model. Is that right? Is there an alternative to describe my rules?

Thanks,
Heiko

------

[1]: Bézivin and Jouault: Using ATL for Checking Models. Workshop on
Graph and Model Transformation (GraMoT). 2005.
[2]: http://www.eclipse.org/m2m/atl/atlTransformations/#KM32Probl em
[3]: http://www.eclipse.org/m2m/atl/atlTransformations/#ATL2Probl em
Re: [ATL] Model checking with ATL [message #58544 is a reply to message #58117] Fri, 17 August 2007 20:53 Go to previous messageGo to next message
Frédéric Jouault is currently offline Frédéric JouaultFriend
Messages: 572
Registered: July 2009
Senior Member
Hi,

You correctly diagnosed the problem.

By default, standard rules register "default" traceability links.
Obviously, only one such link can exist for a given source.

You may prefix the rule definitions with the "nodefault" keyword to
prevent standard rules from registering "default" traceability links.

Note that you may need to switch to the latest version of ATL (2.0RC2)
available from:
http://www.eclipse.org/m2m/atl/download/


Regards,

Frédéric Jouault


Heiko Kern wrote:
> Hello,
>
> I would like to use ATL for checking models. An approach for this is
> described in [1]. Examples are given in [2] and [3].
>
> I wrote the following two rules for checking my models:
>
> rule SetOfEventsNotEmpty {
> from i : Aris!Model(i.getSymbols()
> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Ereignis_1))
> ->isEmpty())
>
> to o : Problem!Problem (
> description <- 'No event exists.',
> severity <- #error,
> location <- 'model name: ' + i.name + '--- id: ' + i.id )
> }
>
> rule SetOfFunctionsNotEmpty {
> from i : Aris!Model(i.getSymbols()
> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Funktion_335))
> ->isEmpty())
>
> to o : Problem!Problem (
> description <- 'No function exists.',
> severity <- #error,
> location <- 'model name: ' + i.name + ' --- id: ' + i.id )
> }
>
>
> During the execution ATL prints the following stack trace message:
>
> ****** BEGIN Stack Trace
> message: trying to register several rules as default for element
> IN!Kein_Ereignis_und_keine_Funktion: 'SetOfEventsNotEmpty' and
> 'SetOfFunctionsNotEmpty'
> A.main() : ??#22 null
> local variables = {self=epk_check : ASMModule}
> local stack = []
> A.__matcher__() : ??#3 null
> local variables = {self=epk_check : ASMModule}
> local stack = []
> A.__matchSetOfFunctionsNotEmpty() : ??#50 null
> local variables = {i=IN!Kein_Ereignis_und_keine_Funktion,
> self=epk_check : ASMModule}
> local stack = []
> NativeOperation public static void
> org.atl.engine.vm.nativelib.ASMTransientLinkSet.addLink(org. atl.engine.vm.StackFrame,org.
>
> atl.engine.vm.nativelib.ASMTransientLinkSet,org.atl.engine.v m.nativelib.ASMTransientLink)
>
> args = [TransientLinkSet {TransientLink {rule =
> 'SetOfEventsNotEmpty', sourceElements = {i =
> IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
> OUT!<unnamed>}, variables = {}}}, TransientLink {rule =
> 'SetOfFunctionsNotEmpty', sourceElements = {i =
> IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
> OUT!<unnamed>}, variables = {}}]
> ****** END Stack Trace
> Execution terminated due to error (see launch configuration to allow
> continuation after errors).
>
> I think the problem is that ATL cannot apply several rules to one
> Aris!Model. Is that right? Is there an alternative to describe my rules?
>
> Thanks,
> Heiko
>
> ------
>
> [1]: Bézivin and Jouault: Using ATL for Checking Models. Workshop on
> Graph and Model Transformation (GraMoT). 2005.
> [2]: http://www.eclipse.org/m2m/atl/atlTransformations/#KM32Probl em
> [3]: http://www.eclipse.org/m2m/atl/atlTransformations/#ATL2Probl em
Re: [ATL] Model checking with ATL [message #58742 is a reply to message #58544] Mon, 20 August 2007 09:58 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: kernheiko.gmx.de

Hello,

I marked the rules with the keyword "nodefault", but ATL (ATL_Bundle_2.0.0RC2_Windows) printed the
same error message plus an exception. I don't know why?

My changed rules:

nodefault rule SetOfEventsNotEmpty {
from i : Aris!Model(i.getSymbols()
->collect(symbol|symbol.oclIsTypeOf(Aris!S_Ereignis_1))->isEmpty())

to o : Problem!Problem (
description <- 'No event exists.',
severity <- #error,
location <- 'model name: ' + i.name + '--- id: ' + i.id
)
}


nodefault rule SetOfFunctionsNotEmpty {
from i : Aris!Model(i.getSymbols()
->collect(symbol|symbol.oclIsTypeOf(Aris!S_Funktion_335))->isEmpty())

to o : Problem!Problem (
description <- 'No function exists.',
severity <- #error,
location <- 'model name: ' + i.name + ' --- id: ' + i.id
)
}

Error Message:

SCHWERWIEGEND: ****** BEGIN Stack Trace
SCHWERWIEGEND: message: trying to register several rules as default for element
IN!Kein_Ereignis_und_keine_Funktion: 'SetOfEventsNotEmpty' and 'SetOfFunctionsNotEmpty'
SCHWERWIEGEND: A.main() : ??#22 null
SCHWERWIEGEND: local variables = {self=epk_check : ASMModule}
SCHWERWIEGEND: local stack = []
SCHWERWIEGEND: A.__matcher__() : ??#3 null
SCHWERWIEGEND: local variables = {self=epk_check : ASMModule}
SCHWERWIEGEND: local stack = []
SCHWERWIEGEND: A.__matchSetOfFunctionsNotEmpty() : ??#50 null
SCHWERWIEGEND: local variables = {null=IN!<unnamed>, i=IN!Kein_Ereignis_und_keine_Funktion,
self=epk_check : ASMModule}
SCHWERWIEGEND: local stack = []
SCHWERWIEGEND: NativeOperation public static void
org.eclipse.m2m.atl.engine.vm.nativelib.ASMTransientLinkSet. addLink(org.eclipse.m2m.atl.engine.vm.StackFrame,org.eclipse .m2m.atl.engine.vm.nativelib.ASMTransientLinkSet,org.eclipse .m2m.atl.engine.vm.nativelib.ASMTransientLink)
SCHWERWIEGEND: args = [TransientLinkSet {TransientLink {rule = 'SetOfEventsNotEmpty',
sourceElements = {i = IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o = OUT!<unnamed>},
variables = {}}}, TransientLink {rule = 'SetOfFunctionsNotEmpty', sourceElements = {i =
IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o = OUT!<unnamed>}, variables = {}}]
SCHWERWIEGEND: ****** END Stack Trace
INFO: Execution terminated due to error (see launch configuration to allow continuation after errors).
SCHWERWIEGEND: java.lang.reflect.InvocationTargetException cannot be cast to java.lang.RuntimeException
java.lang.ClassCastException: java.lang.reflect.InvocationTargetException cannot be cast to
java.lang.RuntimeException
at org.eclipse.m2m.atl.engine.vm.SimpleDebugger.error(SimpleDeb ugger.java:162)
at org.eclipse.m2m.atl.engine.vm.StackFrame.printStackTrace(Sta ckFrame.java:85)
at org.eclipse.m2m.atl.engine.vm.StackFrame.printStackTrace(Sta ckFrame.java:77)
at org.eclipse.m2m.atl.engine.vm.ClassNativeOperation.exec(Clas sNativeOperation.java:67)
at org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:133)
at org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:91)
at org.eclipse.m2m.atl.engine.vm.ASMOperation.realExec(ASMOpera tion.java:230)
at org.eclipse.m2m.atl.engine.vm.ASMOperation.realExec(ASMOpera tion.java:325)
at org.eclipse.m2m.atl.engine.vm.ASMOperation.exec(ASMOperation .java:161)
at org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:133)
at org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:91)
at org.eclipse.m2m.atl.engine.vm.ASMOperation.realExec(ASMOpera tion.java:230)
at org.eclipse.m2m.atl.engine.vm.ASMOperation.exec(ASMOperation .java:161)
at org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:133)
at org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:91)
at org.eclipse.m2m.atl.engine.vm.ASMOperation.realExec(ASMOpera tion.java:230)
at org.eclipse.m2m.atl.engine.vm.ASMOperation.exec(ASMOperation .java:161)
at org.eclipse.m2m.atl.engine.vm.ASMInterpreter.<init>(ASMInterpreter.java:289)
at org.eclipse.m2m.atl.engine.AtlLauncher.launch(AtlLauncher.ja va:155)
at org.eclipse.m2m.atl.engine.AtlLauncher.launch(AtlLauncher.ja va:105)
at org.eclipse.m2m.atl.engine.AtlLauncher.launch(AtlLauncher.ja va:81)
at org.eclipse.m2m.atl.adt.launching.AtlRegularVM.runAtlLaunche r(AtlRegularVM.java:351)
at org.eclipse.m2m.atl.adt.launching.AtlRegularVM.runAtlLaunche r(AtlRegularVM.java:453)
at org.eclipse.m2m.atl.adt.launching.AtlRegularVM.launch(AtlReg ularVM.java:425)
at
org.eclipse.m2m.atl.adt.launching.AtlLaunchConfigurationDele gate.launch(AtlLaunchConfigurationDelegate.java:35)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(L aunchConfiguration.java:766)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(L aunchConfiguration.java:608)
at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(D ebugUIPlugin.java:899)
at org.eclipse.debug.internal.ui.DebugUIPlugin$7.run(DebugUIPlu gin.java:1102)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)


In order to solve my problem, I rewrote my rules as follows:

rule SetOfEventsNotEmpty {

from i : Aris!Model

do {

if( i.getSymbols()->collect(symbol|symbol.oclIsTypeOf(Aris!S_Ereignis_1))
->isEmpty() ) {

thisModule.CreateProblem( 'No event exists', 'error' ,
'model name: ' + i.name + ' --- id: ' + i.id );
}

if( i.getSymbols()->collect(symbol|symbol.oclIsTypeOf(Aris!S_Funktion_335))
->isEmpty() ) {

thisModule.CreateProblem( 'No function exists', 'error',
'model name: ' + i.name + ' --- id: ' + i.id );
}

}
}


rule CreateProblem( desc : String, sev : String , loc : String ) {

to
o : Problem!Problem(
description <- desc,
severity <-
if sev = 'warning'
then #warning
else if sev = 'critic'
then #critic
else #error
endif
endif,
location <- loc)
}


This variant works fine, but I am interested in the "nodefault-variant", because I find it better to
separate every check criterion in one ATL-rule.

Thanks,
Heiko



Frédéric Jouault schrieb:
> Hi,
>
> You correctly diagnosed the problem.
>
> By default, standard rules register "default" traceability links.
> Obviously, only one such link can exist for a given source.
>
> You may prefix the rule definitions with the "nodefault" keyword to
> prevent standard rules from registering "default" traceability links.
>
> Note that you may need to switch to the latest version of ATL (2.0RC2)
> available from:
> http://www.eclipse.org/m2m/atl/download/
>
>
> Regards,
>
> Frédéric Jouault
>
>
> Heiko Kern wrote:
>> Hello,
>>
>> I would like to use ATL for checking models. An approach for this is
>> described in [1]. Examples are given in [2] and [3].
>>
>> I wrote the following two rules for checking my models:
>>
>> rule SetOfEventsNotEmpty {
>> from i : Aris!Model(i.getSymbols()
>> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Ereignis_1))
>> ->isEmpty())
>> to o : Problem!Problem (
>> description <- 'No event exists.',
>> severity <- #error,
>> location <- 'model name: ' + i.name + '--- id: ' + i.id )
>> }
>>
>> rule SetOfFunctionsNotEmpty {
>> from i : Aris!Model(i.getSymbols()
>> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Funktion_335))
>> ->isEmpty())
>> to o : Problem!Problem (
>> description <- 'No function exists.',
>> severity <- #error,
>> location <- 'model name: ' + i.name + ' --- id: ' + i.id )
>> }
>>
>>
>> During the execution ATL prints the following stack trace message:
>>
>> ****** BEGIN Stack Trace
>> message: trying to register several rules as default for element
>> IN!Kein_Ereignis_und_keine_Funktion: 'SetOfEventsNotEmpty' and
>> 'SetOfFunctionsNotEmpty'
>> A.main() : ??#22 null
>> local variables = {self=epk_check : ASMModule}
>> local stack = []
>> A.__matcher__() : ??#3 null
>> local variables = {self=epk_check : ASMModule}
>> local stack = []
>> A.__matchSetOfFunctionsNotEmpty() : ??#50 null
>> local variables = {i=IN!Kein_Ereignis_und_keine_Funktion,
>> self=epk_check : ASMModule}
>> local stack = []
>> NativeOperation public static void
>> org.atl.engine.vm.nativelib.ASMTransientLinkSet.addLink(org. atl.engine.vm.StackFrame,org.
>>
>> atl.engine.vm.nativelib.ASMTransientLinkSet,org.atl.engine.v m.nativelib.ASMTransientLink)
>>
>> args = [TransientLinkSet {TransientLink {rule =
>> 'SetOfEventsNotEmpty', sourceElements = {i =
>> IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
>> OUT!<unnamed>}, variables = {}}}, TransientLink {rule =
>> 'SetOfFunctionsNotEmpty', sourceElements = {i =
>> IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
>> OUT!<unnamed>}, variables = {}}]
>> ****** END Stack Trace
>> Execution terminated due to error (see launch configuration to allow
>> continuation after errors).
>>
>> I think the problem is that ATL cannot apply several rules to one
>> Aris!Model. Is that right? Is there an alternative to describe my rules?
>>
>> Thanks,
>> Heiko
>>
>> ------
>>
>> [1]: Bézivin and Jouault: Using ATL for Checking Models. Workshop on
>> Graph and Model Transformation (GraMoT). 2005.
>> [2]: http://www.eclipse.org/m2m/atl/atlTransformations/#KM32Probl em
>> [3]: http://www.eclipse.org/m2m/atl/atlTransformations/#ATL2Probl em
Re: [ATL] Model checking with ATL [message #59178 is a reply to message #58742] Thu, 23 August 2007 18:35 Go to previous messageGo to next message
Frédéric Jouault is currently offline Frédéric JouaultFriend
Messages: 572
Registered: July 2009
Senior Member
Hello,

Sorry, I forgot to say that you must use ATL 2006 for "nodefault" to be
actually recognized.


Regards,

Frédéric Jouault


Heiko Kern wrote:
> Hello,
>
> I marked the rules with the keyword "nodefault", but ATL
> (ATL_Bundle_2.0.0RC2_Windows) printed the
> same error message plus an exception. I don't know why?
>
> My changed rules:
>
> nodefault rule SetOfEventsNotEmpty {
> from i : Aris!Model(i.getSymbols()
> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Ereignis_1))->isEmpty())
>
> to o : Problem!Problem (
> description <- 'No event exists.',
> severity <- #error,
> location <- 'model name: ' + i.name + '--- id: ' + i.id
> )
> }
>
>
> nodefault rule SetOfFunctionsNotEmpty {
> from i : Aris!Model(i.getSymbols()
> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Funktion_335))->isEmpty())
>
> to o : Problem!Problem (
> description <- 'No function exists.',
> severity <- #error,
> location <- 'model name: ' + i.name + ' --- id: ' + i.id
> )
> }
>
> Error Message:
>
> SCHWERWIEGEND: ****** BEGIN Stack Trace
> SCHWERWIEGEND: message: trying to register several rules as default
> for element
> IN!Kein_Ereignis_und_keine_Funktion: 'SetOfEventsNotEmpty' and
> 'SetOfFunctionsNotEmpty'
> SCHWERWIEGEND: A.main() : ??#22 null
> SCHWERWIEGEND: local variables = {self=epk_check : ASMModule}
> SCHWERWIEGEND: local stack = []
> SCHWERWIEGEND: A.__matcher__() : ??#3 null
> SCHWERWIEGEND: local variables = {self=epk_check : ASMModule}
> SCHWERWIEGEND: local stack = []
> SCHWERWIEGEND: A.__matchSetOfFunctionsNotEmpty() : ??#50 null
> SCHWERWIEGEND: local variables = {null=IN!<unnamed>,
> i=IN!Kein_Ereignis_und_keine_Funktion,
> self=epk_check : ASMModule}
> SCHWERWIEGEND: local stack = []
> SCHWERWIEGEND: NativeOperation public static void
> org.eclipse.m2m.atl.engine.vm.nativelib.ASMTransientLinkSet. addLink(org.eclipse.m2m.atl.engine.vm.StackFrame,org.eclipse .m2m.atl.engine.vm.nativelib.ASMTransientLinkSet,org.eclipse .m2m.atl.engine.vm.nativelib.ASMTransientLink)
>
> SCHWERWIEGEND: args = [TransientLinkSet {TransientLink {rule =
> 'SetOfEventsNotEmpty',
> sourceElements = {i = IN!Kein_Ereignis_und_keine_Funktion},
> targetElements = {o = OUT!<unnamed>},
> variables = {}}}, TransientLink {rule = 'SetOfFunctionsNotEmpty',
> sourceElements = {i =
> IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
> OUT!<unnamed>}, variables = {}}]
> SCHWERWIEGEND: ****** END Stack Trace
> INFO: Execution terminated due to error (see launch configuration to
> allow continuation after errors).
> SCHWERWIEGEND: java.lang.reflect.InvocationTargetException cannot be
> cast to java.lang.RuntimeException
> java.lang.ClassCastException:
> java.lang.reflect.InvocationTargetException cannot be cast to
> java.lang.RuntimeException
> at
> org.eclipse.m2m.atl.engine.vm.SimpleDebugger.error(SimpleDeb ugger.java:162)
> at
> org.eclipse.m2m.atl.engine.vm.StackFrame.printStackTrace(Sta ckFrame.java:85)
>
> at
> org.eclipse.m2m.atl.engine.vm.StackFrame.printStackTrace(Sta ckFrame.java:77)
>
> at
> org.eclipse.m2m.atl.engine.vm.ClassNativeOperation.exec(Clas sNativeOperation.java:67)
>
> at
> org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:133)
>
> at
> org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:91)
> at
> org.eclipse.m2m.atl.engine.vm.ASMOperation.realExec(ASMOpera tion.java:230)
> at
> org.eclipse.m2m.atl.engine.vm.ASMOperation.realExec(ASMOpera tion.java:325)
> at
> org.eclipse.m2m.atl.engine.vm.ASMOperation.exec(ASMOperation .java:161)
> at
> org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:133)
>
> at
> org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:91)
> at
> org.eclipse.m2m.atl.engine.vm.ASMOperation.realExec(ASMOpera tion.java:230)
> at
> org.eclipse.m2m.atl.engine.vm.ASMOperation.exec(ASMOperation .java:161)
> at
> org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:133)
>
> at
> org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:91)
> at
> org.eclipse.m2m.atl.engine.vm.ASMOperation.realExec(ASMOpera tion.java:230)
> at
> org.eclipse.m2m.atl.engine.vm.ASMOperation.exec(ASMOperation .java:161)
> at
> org.eclipse.m2m.atl.engine.vm.ASMInterpreter.<init>(ASMInterpreter.java:289)
>
> at org.eclipse.m2m.atl.engine.AtlLauncher.launch(AtlLauncher.ja va:155)
> at org.eclipse.m2m.atl.engine.AtlLauncher.launch(AtlLauncher.ja va:105)
> at org.eclipse.m2m.atl.engine.AtlLauncher.launch(AtlLauncher.ja va:81)
> at
> org.eclipse.m2m.atl.adt.launching.AtlRegularVM.runAtlLaunche r(AtlRegularVM.java:351)
>
> at
> org.eclipse.m2m.atl.adt.launching.AtlRegularVM.runAtlLaunche r(AtlRegularVM.java:453)
>
> at
> org.eclipse.m2m.atl.adt.launching.AtlRegularVM.launch(AtlReg ularVM.java:425)
>
> at
> org.eclipse.m2m.atl.adt.launching.AtlLaunchConfigurationDele gate.launch(AtlLaunchConfigurationDelegate.java:35)
>
> at
> org.eclipse.debug.internal.core.LaunchConfiguration.launch(L aunchConfiguration.java:766)
>
> at
> org.eclipse.debug.internal.core.LaunchConfiguration.launch(L aunchConfiguration.java:608)
>
> at
> org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(D ebugUIPlugin.java:899)
>
> at
> org.eclipse.debug.internal.ui.DebugUIPlugin$7.run(DebugUIPlu gin.java:1102)
> at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
>
>
> In order to solve my problem, I rewrote my rules as follows:
>
> rule SetOfEventsNotEmpty {
>
> from i : Aris!Model
>
> do {
>
> if(
> i.getSymbols()->collect(symbol|symbol.oclIsTypeOf(Aris!S_Ereignis_1))
> ->isEmpty() ) {
>
> thisModule.CreateProblem( 'No event exists', 'error' ,
> 'model name: ' + i.name + ' --- id: ' + i.id );
> }
>
> if(
> i.getSymbols()->collect(symbol|symbol.oclIsTypeOf(Aris!S_Funktion_335))
> ->isEmpty() ) {
>
> thisModule.CreateProblem( 'No function exists', 'error',
> 'model name: ' + i.name + ' --- id: ' + i.id );
> }
>
> }
> }
>
>
> rule CreateProblem( desc : String, sev : String , loc : String ) {
>
> to
> o : Problem!Problem(
> description <- desc,
> severity <-
> if sev = 'warning'
> then #warning
> else if sev = 'critic'
> then #critic
> else #error
> endif
> endif,
> location <- loc)
> }
>
>
> This variant works fine, but I am interested in the "nodefault-variant",
> because I find it better to separate every check criterion in one ATL-rule.
>
> Thanks,
> Heiko
>
>
>
> Frédéric Jouault schrieb:
>> Hi,
>>
>> You correctly diagnosed the problem.
>>
>> By default, standard rules register "default" traceability links.
>> Obviously, only one such link can exist for a given source.
>>
>> You may prefix the rule definitions with the "nodefault" keyword to
>> prevent standard rules from registering "default" traceability links.
>>
>> Note that you may need to switch to the latest version of ATL (2.0RC2)
>> available from:
>> http://www.eclipse.org/m2m/atl/download/
>>
>>
>> Regards,
>>
>> Frédéric Jouault
>>
>>
>> Heiko Kern wrote:
>>> Hello,
>>>
>>> I would like to use ATL for checking models. An approach for this is
>>> described in [1]. Examples are given in [2] and [3].
>>>
>>> I wrote the following two rules for checking my models:
>>>
>>> rule SetOfEventsNotEmpty {
>>> from i : Aris!Model(i.getSymbols()
>>> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Ereignis_1))
>>> ->isEmpty())
>>> to o : Problem!Problem (
>>> description <- 'No event exists.',
>>> severity <- #error,
>>> location <- 'model name: ' + i.name + '--- id: ' + i.id )
>>> }
>>>
>>> rule SetOfFunctionsNotEmpty {
>>> from i : Aris!Model(i.getSymbols()
>>> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Funktion_335))
>>> ->isEmpty())
>>> to o : Problem!Problem (
>>> description <- 'No function exists.',
>>> severity <- #error,
>>> location <- 'model name: ' + i.name + ' --- id: ' + i.id )
>>> }
>>>
>>>
>>> During the execution ATL prints the following stack trace message:
>>>
>>> ****** BEGIN Stack Trace
>>> message: trying to register several rules as default for element
>>> IN!Kein_Ereignis_und_keine_Funktion: 'SetOfEventsNotEmpty' and
>>> 'SetOfFunctionsNotEmpty'
>>> A.main() : ??#22 null
>>> local variables = {self=epk_check : ASMModule}
>>> local stack = []
>>> A.__matcher__() : ??#3 null
>>> local variables = {self=epk_check : ASMModule}
>>> local stack = []
>>> A.__matchSetOfFunctionsNotEmpty() : ??#50 null
>>> local variables = {i=IN!Kein_Ereignis_und_keine_Funktion,
>>> self=epk_check : ASMModule}
>>> local stack = []
>>> NativeOperation public static void
>>> org.atl.engine.vm.nativelib.ASMTransientLinkSet.addLink(org. atl.engine.vm.StackFrame,org.
>>>
>>> atl.engine.vm.nativelib.ASMTransientLinkSet,org.atl.engine.v m.nativelib.ASMTransientLink)
>>>
>>> args = [TransientLinkSet {TransientLink {rule =
>>> 'SetOfEventsNotEmpty', sourceElements = {i =
>>> IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
>>> OUT!<unnamed>}, variables = {}}}, TransientLink {rule =
>>> 'SetOfFunctionsNotEmpty', sourceElements = {i =
>>> IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
>>> OUT!<unnamed>}, variables = {}}]
>>> ****** END Stack Trace
>>> Execution terminated due to error (see launch configuration to allow
>>> continuation after errors).
>>>
>>> I think the problem is that ATL cannot apply several rules to one
>>> Aris!Model. Is that right? Is there an alternative to describe my rules?
>>>
>>> Thanks,
>>> Heiko
>>>
>>> ------
>>>
>>> [1]: Bézivin and Jouault: Using ATL for Checking Models. Workshop on
>>> Graph and Model Transformation (GraMoT). 2005.
>>> [2]: http://www.eclipse.org/m2m/atl/atlTransformations/#KM32Probl em
>>> [3]: http://www.eclipse.org/m2m/atl/atlTransformations/#ATL2Probl em
>
>
>
Re: [ATL] Model checking with ATL [message #59657 is a reply to message #59178] Tue, 28 August 2007 08:40 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: kernheiko.gmx.de

Hello,

Thanks for the information. It works.

Here are my two example rules:

--@atlcompiler atl2006

....

nodefault rule NoEvent {
from
i : Aris!M_EPK_13(i.getAllEventSymbols()->isEmpty())

to
o : Problem!Problem(
description <- 'No event exists.',
severity <- #error,
location <- 'model name: '
+ i.name + ' --- model id: ' + i.id)
}

nodefault rule NoFunction {
from
i : Aris!M_EPK_13(i.getAllFunctionSymbols()->isEmpty())

to
o : Problem!Problem(
description <- 'No function exists.',
severity <- #error,
location <- 'model name: '
+ i.name + ' --- model id: ' + i.id)
}

....

Regards,
Heiko


Frédéric Jouault schrieb:
> Hello,
>
> Sorry, I forgot to say that you must use ATL 2006 for "nodefault" to be
> actually recognized.
>
>
> Regards,
>
> Frédéric Jouault
>
>
> Heiko Kern wrote:
>> Hello,
>>
>> I marked the rules with the keyword "nodefault", but ATL
>> (ATL_Bundle_2.0.0RC2_Windows) printed the
>> same error message plus an exception. I don't know why?
>>
>> My changed rules:
>>
>> nodefault rule SetOfEventsNotEmpty {
>> from i : Aris!Model(i.getSymbols()
>> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Ereignis_1))->isEmpty())
>> to o : Problem!Problem (
>> description <- 'No event exists.',
>> severity <- #error,
>> location <- 'model name: ' + i.name + '--- id: ' + i.id
>> )
>> }
>>
>>
>> nodefault rule SetOfFunctionsNotEmpty {
>> from i : Aris!Model(i.getSymbols()
>> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Funktion_335))->isEmpty())
>> to o : Problem!Problem (
>> description <- 'No function exists.',
>> severity <- #error,
>> location <- 'model name: ' + i.name + ' --- id: ' + i.id
>> )
>> }
>>
>> Error Message:
>>
>> SCHWERWIEGEND: ****** BEGIN Stack Trace
>> SCHWERWIEGEND: message: trying to register several rules as
>> default for element
>> IN!Kein_Ereignis_und_keine_Funktion: 'SetOfEventsNotEmpty' and
>> 'SetOfFunctionsNotEmpty'
>> SCHWERWIEGEND: A.main() : ??#22 null
>> SCHWERWIEGEND: local variables = {self=epk_check : ASMModule}
>> SCHWERWIEGEND: local stack = []
>> SCHWERWIEGEND: A.__matcher__() : ??#3 null
>> SCHWERWIEGEND: local variables = {self=epk_check : ASMModule}
>> SCHWERWIEGEND: local stack = []
>> SCHWERWIEGEND: A.__matchSetOfFunctionsNotEmpty() : ??#50 null
>> SCHWERWIEGEND: local variables = {null=IN!<unnamed>,
>> i=IN!Kein_Ereignis_und_keine_Funktion,
>> self=epk_check : ASMModule}
>> SCHWERWIEGEND: local stack = []
>> SCHWERWIEGEND: NativeOperation public static void
>> org.eclipse.m2m.atl.engine.vm.nativelib.ASMTransientLinkSet. addLink(org.eclipse.m2m.atl.engine.vm.StackFrame,org.eclipse .m2m.atl.engine.vm.nativelib.ASMTransientLinkSet,org.eclipse .m2m.atl.engine.vm.nativelib.ASMTransientLink)
>>
>> SCHWERWIEGEND: args = [TransientLinkSet {TransientLink {rule =
>> 'SetOfEventsNotEmpty',
>> sourceElements = {i = IN!Kein_Ereignis_und_keine_Funktion},
>> targetElements = {o = OUT!<unnamed>},
>> variables = {}}}, TransientLink {rule = 'SetOfFunctionsNotEmpty',
>> sourceElements = {i =
>> IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
>> OUT!<unnamed>}, variables = {}}]
>> SCHWERWIEGEND: ****** END Stack Trace
>> INFO: Execution terminated due to error (see launch configuration to
>> allow continuation after errors).
>> SCHWERWIEGEND: java.lang.reflect.InvocationTargetException cannot be
>> cast to java.lang.RuntimeException
>> java.lang.ClassCastException:
>> java.lang.reflect.InvocationTargetException cannot be cast to
>> java.lang.RuntimeException
>> at
>> org.eclipse.m2m.atl.engine.vm.SimpleDebugger.error(SimpleDeb ugger.java:162)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.StackFrame.printStackTrace(Sta ckFrame.java:85)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.StackFrame.printStackTrace(Sta ckFrame.java:77)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.ClassNativeOperation.exec(Clas sNativeOperation.java:67)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:133)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:91)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.ASMOperation.realExec(ASMOpera tion.java:230)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.ASMOperation.realExec(ASMOpera tion.java:325)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.ASMOperation.exec(ASMOperation .java:161)
>> at
>> org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:133)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:91)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.ASMOperation.realExec(ASMOpera tion.java:230)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.ASMOperation.exec(ASMOperation .java:161)
>> at
>> org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:133)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.nativelib.ASMOclAny.invoke(ASM OclAny.java:91)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.ASMOperation.realExec(ASMOpera tion.java:230)
>>
>> at
>> org.eclipse.m2m.atl.engine.vm.ASMOperation.exec(ASMOperation .java:161)
>> at
>> org.eclipse.m2m.atl.engine.vm.ASMInterpreter.<init>(ASMInterpreter.java:289)
>>
>> at
>> org.eclipse.m2m.atl.engine.AtlLauncher.launch(AtlLauncher.ja va:155)
>> at
>> org.eclipse.m2m.atl.engine.AtlLauncher.launch(AtlLauncher.ja va:105)
>> at org.eclipse.m2m.atl.engine.AtlLauncher.launch(AtlLauncher.ja va:81)
>> at
>> org.eclipse.m2m.atl.adt.launching.AtlRegularVM.runAtlLaunche r(AtlRegularVM.java:351)
>>
>> at
>> org.eclipse.m2m.atl.adt.launching.AtlRegularVM.runAtlLaunche r(AtlRegularVM.java:453)
>>
>> at
>> org.eclipse.m2m.atl.adt.launching.AtlRegularVM.launch(AtlReg ularVM.java:425)
>>
>> at
>> org.eclipse.m2m.atl.adt.launching.AtlLaunchConfigurationDele gate.launch(AtlLaunchConfigurationDelegate.java:35)
>>
>> at
>> org.eclipse.debug.internal.core.LaunchConfiguration.launch(L aunchConfiguration.java:766)
>>
>> at
>> org.eclipse.debug.internal.core.LaunchConfiguration.launch(L aunchConfiguration.java:608)
>>
>> at
>> org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(D ebugUIPlugin.java:899)
>>
>> at
>> org.eclipse.debug.internal.ui.DebugUIPlugin$7.run(DebugUIPlu gin.java:1102)
>>
>> at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
>>
>>
>> In order to solve my problem, I rewrote my rules as follows:
>>
>> rule SetOfEventsNotEmpty {
>>
>> from i : Aris!Model
>>
>> do {
>> if(
>> i.getSymbols()->collect(symbol|symbol.oclIsTypeOf(Aris!S_Ereignis_1))
>> ->isEmpty() ) {
>> thisModule.CreateProblem( 'No event exists',
>> 'error' ,
>> 'model name: ' + i.name + ' --- id: ' + i.id );
>> }
>> if(
>> i.getSymbols()->collect(symbol|symbol.oclIsTypeOf(Aris!S_Funktion_335))
>> ->isEmpty() ) {
>> thisModule.CreateProblem( 'No function exists',
>> 'error',
>> 'model name: ' + i.name + ' --- id: ' + i.id );
>> }
>>
>> }
>> }
>>
>>
>> rule CreateProblem( desc : String, sev : String , loc : String ) {
>> to
>> o : Problem!Problem(
>> description <- desc,
>> severity <-
>> if sev = 'warning'
>> then #warning
>> else if sev = 'critic'
>> then #critic
>> else #error
>> endif
>> endif,
>> location <- loc)
>> }
>>
>>
>> This variant works fine, but I am interested in the
>> "nodefault-variant", because I find it better to separate every check
>> criterion in one ATL-rule.
>>
>> Thanks,
>> Heiko
>>
>>
>>
>> Frédéric Jouault schrieb:
>>> Hi,
>>>
>>> You correctly diagnosed the problem.
>>>
>>> By default, standard rules register "default" traceability links.
>>> Obviously, only one such link can exist for a given source.
>>>
>>> You may prefix the rule definitions with the "nodefault" keyword to
>>> prevent standard rules from registering "default" traceability links.
>>>
>>> Note that you may need to switch to the latest version of ATL
>>> (2.0RC2) available from:
>>> http://www.eclipse.org/m2m/atl/download/
>>>
>>>
>>> Regards,
>>>
>>> Frédéric Jouault
>>>
>>>
>>> Heiko Kern wrote:
>>>> Hello,
>>>>
>>>> I would like to use ATL for checking models. An approach for this is
>>>> described in [1]. Examples are given in [2] and [3].
>>>>
>>>> I wrote the following two rules for checking my models:
>>>>
>>>> rule SetOfEventsNotEmpty {
>>>> from i : Aris!Model(i.getSymbols()
>>>> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Ereignis_1))
>>>> ->isEmpty())
>>>> to o : Problem!Problem (
>>>> description <- 'No event exists.',
>>>> severity <- #error,
>>>> location <- 'model name: ' + i.name + '--- id: ' + i.id )
>>>> }
>>>>
>>>> rule SetOfFunctionsNotEmpty {
>>>> from i : Aris!Model(i.getSymbols()
>>>> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Funktion_335))
>>>> ->isEmpty())
>>>> to o : Problem!Problem (
>>>> description <- 'No function exists.',
>>>> severity <- #error,
>>>> location <- 'model name: ' + i.name + ' --- id: ' + i.id )
>>>> }
>>>>
>>>>
>>>> During the execution ATL prints the following stack trace message:
>>>>
>>>> ****** BEGIN Stack Trace
>>>> message: trying to register several rules as default for element
>>>> IN!Kein_Ereignis_und_keine_Funktion: 'SetOfEventsNotEmpty' and
>>>> 'SetOfFunctionsNotEmpty'
>>>> A.main() : ??#22 null
>>>> local variables = {self=epk_check : ASMModule}
>>>> local stack = []
>>>> A.__matcher__() : ??#3 null
>>>> local variables = {self=epk_check : ASMModule}
>>>> local stack = []
>>>> A.__matchSetOfFunctionsNotEmpty() : ??#50 null
>>>> local variables = {i=IN!Kein_Ereignis_und_keine_Funktion,
>>>> self=epk_check : ASMModule}
>>>> local stack = []
>>>> NativeOperation public static void
>>>> org.atl.engine.vm.nativelib.ASMTransientLinkSet.addLink(org. atl.engine.vm.StackFrame,org.
>>>>
>>>> atl.engine.vm.nativelib.ASMTransientLinkSet,org.atl.engine.v m.nativelib.ASMTransientLink)
>>>>
>>>> args = [TransientLinkSet {TransientLink {rule =
>>>> 'SetOfEventsNotEmpty', sourceElements = {i =
>>>> IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
>>>> OUT!<unnamed>}, variables = {}}}, TransientLink {rule =
>>>> 'SetOfFunctionsNotEmpty', sourceElements = {i =
>>>> IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
>>>> OUT!<unnamed>}, variables = {}}]
>>>> ****** END Stack Trace
>>>> Execution terminated due to error (see launch configuration to allow
>>>> continuation after errors).
>>>>
>>>> I think the problem is that ATL cannot apply several rules to one
>>>> Aris!Model. Is that right? Is there an alternative to describe my
>>>> rules?
>>>>
>>>> Thanks,
>>>> Heiko
>>>>
>>>> ------
>>>>
>>>> [1]: Bézivin and Jouault: Using ATL for Checking Models. Workshop on
>>>> Graph and Model Transformation (GraMoT). 2005.
>>>> [2]: http://www.eclipse.org/m2m/atl/atlTransformations/#KM32Probl em
>>>> [3]: http://www.eclipse.org/m2m/atl/atlTransformations/#ATL2Probl em
>>
>>
>>
Re: [ATL] Model checking with ATL [message #59730 is a reply to message #58544] Wed, 29 August 2007 08:23 Go to previous message
Eclipse UserFriend
Originally posted by: r.c.ladan.tue.nl

Hi,

so if I understand the 'nodefault' keyword correctly, it can be used to tell
the ATL engine to use this rule instead of another one in case there are
conflicting input patterns.

E.g., in a.atl :

rule A {
from mm!Elem
to mm!Elem(...)
}

and b.atl, which references a.atl by superimposition:

nodefault rule B {
from mm!Elem(condition)
to mm!Elem(...)
}

Normally rule A and B conflict (because rule B does not extend rule A), but using
the 'nodefault' keyword seems to tell the ATL engine to use rule B in this case.

Is this correct?

Regards,
Rene

Frédéric Jouault wrote:
> Hi,
>
> You correctly diagnosed the problem.
>
> By default, standard rules register "default" traceability links.
> Obviously, only one such link can exist for a given source.
>
> You may prefix the rule definitions with the "nodefault" keyword to
> prevent standard rules from registering "default" traceability links.
>
> Note that you may need to switch to the latest version of ATL (2.0RC2)
> available from:
> http://www.eclipse.org/m2m/atl/download/
>
>
> Regards,
>
> Frédéric Jouault
>
>
> Heiko Kern wrote:
>> Hello,
>>
>> I would like to use ATL for checking models. An approach for this is
>> described in [1]. Examples are given in [2] and [3].
>>
>> I wrote the following two rules for checking my models:
>>
>> rule SetOfEventsNotEmpty {
>> from i : Aris!Model(i.getSymbols()
>> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Ereignis_1))
>> ->isEmpty())
>> to o : Problem!Problem (
>> description <- 'No event exists.',
>> severity <- #error,
>> location <- 'model name: ' + i.name + '--- id: ' + i.id )
>> }
>>
>> rule SetOfFunctionsNotEmpty {
>> from i : Aris!Model(i.getSymbols()
>> ->collect(symbol|symbol.oclIsTypeOf(Aris!S_Funktion_335))
>> ->isEmpty())
>> to o : Problem!Problem (
>> description <- 'No function exists.',
>> severity <- #error,
>> location <- 'model name: ' + i.name + ' --- id: ' + i.id )
>> }
>>
>>
>> During the execution ATL prints the following stack trace message:
>>
>> ****** BEGIN Stack Trace
>> message: trying to register several rules as default for element
>> IN!Kein_Ereignis_und_keine_Funktion: 'SetOfEventsNotEmpty' and
>> 'SetOfFunctionsNotEmpty'
>> A.main() : ??#22 null
>> local variables = {self=epk_check : ASMModule}
>> local stack = []
>> A.__matcher__() : ??#3 null
>> local variables = {self=epk_check : ASMModule}
>> local stack = []
>> A.__matchSetOfFunctionsNotEmpty() : ??#50 null
>> local variables = {i=IN!Kein_Ereignis_und_keine_Funktion,
>> self=epk_check : ASMModule}
>> local stack = []
>> NativeOperation public static void
>> org.atl.engine.vm.nativelib.ASMTransientLinkSet.addLink(org. atl.engine.vm.StackFrame,org.
>>
>> atl.engine.vm.nativelib.ASMTransientLinkSet,org.atl.engine.v m.nativelib.ASMTransientLink)
>>
>> args = [TransientLinkSet {TransientLink {rule =
>> 'SetOfEventsNotEmpty', sourceElements = {i =
>> IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
>> OUT!<unnamed>}, variables = {}}}, TransientLink {rule =
>> 'SetOfFunctionsNotEmpty', sourceElements = {i =
>> IN!Kein_Ereignis_und_keine_Funktion}, targetElements = {o =
>> OUT!<unnamed>}, variables = {}}]
>> ****** END Stack Trace
>> Execution terminated due to error (see launch configuration to allow
>> continuation after errors).
>>
>> I think the problem is that ATL cannot apply several rules to one
>> Aris!Model. Is that right? Is there an alternative to describe my rules?
>>
>> Thanks,
>> Heiko
>>
>> ------
>>
>> [1]: Bézivin and Jouault: Using ATL for Checking Models. Workshop on
>> Graph and Model Transformation (GraMoT). 2005.
>> [2]: http://www.eclipse.org/m2m/atl/atlTransformations/#KM32Probl em
>> [3]: http://www.eclipse.org/m2m/atl/atlTransformations/#ATL2Probl em
Previous Topic:[ATL] "OclUndefined has no property" when compiling ATL
Next Topic:[ATL] how to match rules only once
Goto Forum:
  


Current Time: Sat Apr 10 15:10:13 GMT 2021

Powered by FUDForum. Page generated in 0.01728 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top