<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
>
<!-- MHonArc v2.6.10 -->
	<channel>
		<title>mdt-ocl.dev</title>
		<link>http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/maillist.html</link>
		<description>mdt-ocl.dev</description>
		<language>en-us</language>
		<pubDate>Tue, 22 May 2012 06:00:06 GMT</pubDate>
		<lastBuildDate>Tue, 22 May 2012 06:00:06 GMT</lastBuildDate>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<generator>MHonArc RSS 2.0 RCFile</generator>
		<managingEditor>webmaster@eclipse.org (Webmaster)</managingEditor>
		<webMaster>webmaster@eclipse.org (Webmaster)</webMaster>
		<image>
			<title>mdt-ocl.dev</title>
			<url>http://www.eclipse.org/eclipse.org-common/themes/Phoenix/images/eclipse_home_header.jpg</url>
			<link>http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/maillist.html</link>
		</image>
 

	<item>
		<title>Re: [mdt-ocl.dev] Promotion of the Pivot binding and Xtext editors for Kepler</title>
		<link>http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01215.html</link>
		<description>_______________________________________________ mdt-ocl.dev mailing list mdt-ocl.dev@xxxxxxxxxxx https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev ----- No virus found in this message. Checked by AVG - www.avg.com Version: 2012.0.2176 / Virus Database: ...</description>
		<content:encoded><![CDATA[<pre style="margin: 0em;">Hi</pre><br>
<tt>No. Because I will make time during the Kepler release cycle to review 
the code, since I want a Pivot-compatible version of the IA so that, for 
Kepler, the pivot is a 100% (optional) replacement for the Ecore/UML 
bindings.</tt><br>
<br>
<tt>To make progress we need a solution to polymorphic dispatch and 
decoupling from the existing OCL Standard Library pseudo-model.</tt><br>
<br>
<pre style="margin: 0em;">    Regards</pre><br>
<pre style="margin: 0em;">        Ed</pre><br>
<tt>On 21/05/2012 22:16, Axel Uhl wrote:
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Do you think we can apply a similar process for IA promotion?</pre><br>
<pre style="margin: 0em;">Best,
-- Axel</pre><br>
<tt>On 5/21/2012 7:27 PM, Ed Willink wrote:
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Hi</pre><br>
<pre style="margin: 0em;">Promoting the pivot binding code and associated editors provides a major
reviewing challenge, which under our current policy of everything being
reviewed means that promotion would never happen.</pre><br>
<pre style="margin: 0em;">I see little alternative but to promote everything shortly after Kepler
and hope to be able to react to as many review comments as possible.
This will avoid projects such as Acceleo having to accommodate a much
later change to package names.</pre><br>
<pre style="margin: 0em;">In the next couple of weeks I plan to provide documentation on the pivot
binding and will sort out the external API eliminating many duplicate
test code helpers and trying to replicate the existing OCL facade
classes as far as possible. This might clear 10 Bugzillas and give a
relatively stable target for Java users. The internal API will evolve a
little as strict alignment with UML 2.5 occurs and editor scoping is
autogenerated.</pre><br>
<pre style="margin: 0em;">Any objections/better ideas?</pre><br>
<pre style="margin: 0em;">Regards</pre><br>
<pre style="margin: 0em;">Ed
_______________________________________________
mdt-ocl.dev mailing list
mdt-ocl.dev@xxxxxxxxxxx
<a  href="https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev">https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev</a></pre><br>
<br>
</blockquote><pre style="margin: 0em;">_______________________________________________
mdt-ocl.dev mailing list
mdt-ocl.dev@xxxxxxxxxxx
<a  href="https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev">https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev</a></pre><br>
<pre style="margin: 0em;"><br>-----
No virus found in this message.
Checked by AVG - www.avg.com
Version: 2012.0.2176 / Virus Database: 2425/5013 - Release Date: 05/21/12</pre><br>
<br>
</blockquote><br>
]]></content:encoded>
		<pubDate>Tue, 22 May 2012 05:52:37 GMT</pubDate>
		<guid isPermaLink="true">http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01215.html</guid>
		<author>ed@xxxxxxx (Ed Willink)</author>
	</item>


	<item>
		<title>Re: [mdt-ocl.dev] Promotion of the Pivot binding and Xtext editors for Kepler</title>
		<link>http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01214.html</link>
		<description> </description>
		<content:encoded><![CDATA[<pre style="margin: 0em;">Do you think we can apply a similar process for IA promotion?</pre><br>
<pre style="margin: 0em;">Best,
-- Axel</pre><br>
<tt>On 5/21/2012 7:27 PM, Ed Willink wrote:
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Hi</pre><br>
<pre style="margin: 0em;">Promoting the pivot binding code and associated editors provides a major
reviewing challenge, which under our current policy of everything being
reviewed means that promotion would never happen.</pre><br>
<pre style="margin: 0em;">I see little alternative but to promote everything shortly after Kepler
and hope to be able to react to as many review comments as possible.
This will avoid projects such as Acceleo having to accommodate a much
later change to package names.</pre><br>
<pre style="margin: 0em;">In the next couple of weeks I plan to provide documentation on the pivot
binding and will sort out the external API eliminating many duplicate
test code helpers and trying to replicate the existing OCL facade
classes as far as possible. This might clear 10 Bugzillas and give a
relatively stable target for Java users. The internal API will evolve a
little as strict alignment with UML 2.5 occurs and editor scoping is
autogenerated.</pre><br>
<pre style="margin: 0em;">Any objections/better ideas?</pre><br>
<pre style="margin: 0em;">Regards</pre><br>
<pre style="margin: 0em;">Ed
_______________________________________________
mdt-ocl.dev mailing list
mdt-ocl.dev@xxxxxxxxxxx
<a  href="https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev">https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev</a></pre><br>
<br>
</blockquote><br>
]]></content:encoded>
		<pubDate>Mon, 21 May 2012 21:16:31 GMT</pubDate>
		<guid isPermaLink="true">http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01214.html</guid>
		<author>eclipse@xxxxxxx (Axel Uhl)</author>
	</item>
	<item>
		<title>[mdt-ocl.dev] Promotion of the Pivot binding and Xtext editors for	Kepler</title>
		<link>http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01213.html</link>
		<description>Hi Promoting the pivot binding code and associated editors provides a major reviewing challenge, which under our current policy of everything being reviewed means that promotion would never happen. I see little alternative but to promote everything shortly...</description>
		<content:encoded><![CDATA[<pre style="margin: 0em;">Hi</pre><br>
<tt>Promoting the pivot binding code and associated editors provides a major 
reviewing challenge, which under our current policy of everything being 
reviewed means that promotion would never happen.</tt><br>
<br>
<tt>I see little alternative but to promote everything shortly after Kepler 
and hope to be able to react to as many review comments as possible. 
This will avoid projects such as Acceleo having to accommodate a much 
later change to package names.</tt><br>
<br>
<tt>In the next couple of weeks I plan to provide documentation on the pivot 
binding and will sort out the external API eliminating many duplicate 
test code helpers and trying to replicate the existing OCL facade 
classes as far as possible. This might clear 10 Bugzillas and give a 
relatively stable target for Java users. The internal API will evolve a 
little as strict alignment with UML 2.5 occurs and editor scoping is 
autogenerated.</tt><br>
<br>
<pre style="margin: 0em;">Any objections/better ideas?</pre><br>
<pre style="margin: 0em;">    Regards</pre><br>
<pre style="margin: 0em;">        Ed</pre><br>
]]></content:encoded>
		<pubDate>Mon, 21 May 2012 17:27:12 GMT</pubDate>
		<guid isPermaLink="true">http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01213.html</guid>
		<author>ed@xxxxxxx (Ed Willink)</author>
	</item>
	<item>
		<title>[mdt-ocl.dev] Releng Bugzillas</title>
		<link>http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01212.html</link>
		<description>Hi Adolfo For Indigo we had 0 major, 65 normal active bugs. Currently we have 0 major, 107 normal active bugs. I'd like to get closer to the Indigo figure, which will be pretty good since we have 208 new bugs in the interval. For the releng-ish bugs: 28976...</description>
		<content:encoded><![CDATA[<pre style="margin: 0em;">Hi Adolfo</pre><br>
<pre style="margin: 0em;">For Indigo we had 0 major, 65 normal active bugs.</pre><br>
<pre style="margin: 0em;">Currently we have 0 major, 107 normal active bugs.</pre><br>
<tt>I'd like to get closer to the Indigo figure, which will be pretty good 
since we have 208 new bugs in the interval.</tt><br>
<br>
<pre style="margin: 0em;">For the releng-ish bugs:</pre><br>
<pre style="margin: 0em;">289763 Proposed plugin and feature re-organisation</pre><br>
<tt>I think we've done what little is relevant for now. A new bug later for 
Kepler promotion.</tt><br>
<br>
<tt>349300 Automate the creation of p2.mirrorsURL and p2.statsURI properties 
in the generated properties</tt><br>
<br>
<pre style="margin: 0em;">Any chance of progress?</pre><br>
<pre style="margin: 0em;">355912 Migrate PSFs to GIT</pre><br>
<pre style="margin: 0em;">PSFs don't seem to fit the GIT mentality. Give up???</pre><br>
<pre style="margin: 0em;">360611 P2 repository details</pre><br>
<pre style="margin: 0em;">Perhaps resolvable/wontfix.</pre><br>
<pre style="margin: 0em;">363208 Some zips are not packaged</pre><br>
<pre style="margin: 0em;">Any chance of progress?</pre><br>
<pre style="margin: 0em;">370347 Documentation for Releng  problems</pre><br>
<pre style="margin: 0em;">This is not a bug; it can never be resolved. Please move to the wiki.</pre><br>
<pre style="margin: 0em;">370361 Review OCL downloads page</pre><br>
<pre style="margin: 0em;">Looks easy to finish</pre><br>
<pre style="margin: 0em;">373065 Study an integrate the p2.index files</pre><br>
<pre style="margin: 0em;">Any chance of progress?</pre><br>
<tt>373667 Merge Core and Tools build features content commonalities into a 
common build feature</tt><br>
<br>
<pre style="margin: 0em;">Seems non-trivial. Do you really want to do this.</pre><br>
<pre style="margin: 0em;">376722 Review unused dependencies</pre><br>
<pre style="margin: 0em;">Resolved ??</pre><br>
<pre style="margin: 0em;">376733 Prepare an updates/staging repository to feed the release train build</pre><br>
<pre style="margin: 0em;">Looks nearly done ??</pre><br>
<pre style="margin: 0em;">    Regards</pre><br>
<pre style="margin: 0em;">        Ed</pre><br>
]]></content:encoded>
		<pubDate>Mon, 21 May 2012 17:13:39 GMT</pubDate>
		<guid isPermaLink="true">http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01212.html</guid>
		<author>ed@xxxxxxx (Ed Willink)</author>
	</item>


	<item>
		<title>[mdt-ocl.dev] New OCL Standard Library functions</title>
		<link>http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01211.html</link>
		<description>Hi The API 'safe' addition of library functions was not so safe after all. Some of the functions were already implemented by QVTo which now has ambiguous definitions that fortunately are resolved with only warning messages in the editor, but lead to JUnit ...</description>
		<content:encoded><![CDATA[<pre style="margin: 0em;">Hi</pre><br>
<pre style="margin: 0em;">The API 'safe' addition of library functions was not so safe after all.</pre><br>
<tt>Some of the functions were already implemented  by QVTo which now has 
ambiguous definitions that fortunately are resolved with only warning 
messages in the editor, but lead to JUnit failures.</tt><br>
<br>
<tt>The String::lastIndexOf function has a 'duplicate' undocumented QVTo 
implementation that returns Java rather than OCL indexes.</tt><br>
<br>
<tt>If QVTo is to be strictly QVT 1.1, then String::+ comes from the QVT 
library, and OCL 2.2, OCL 2.3, 'OCL 2.5' library functions are not 
available. i.e. no String::at(), no String::characters() and reduced 
OrderedSet functionality.</tt><br>
<br>
<tt>If QVTo is to maintain OMG currency then String::+ etc come from OCL 
2.2/2.3.</tt><br>
<br>
<tt>If QVTo is to maintain Eclipse currency then all the new functions can 
come from the OCL 2.5 candidate.</tt><br>
<br>
<pre style="margin: 0em;">---</pre><br>
<pre style="margin: 0em;">Should we do something to assist strict tooling?</pre><br>
<tt>The usage severity approach taken for closure() will not work for the 
case of migrating declarations that have become ambiguous.</tt><br>
<br>
<tt>For strict support we need two options that control the presence of 
declarations</tt><br>
<br>
<pre style="margin: 0em;">Enable_OCL_2_2_functions declarations for String::+ etc</pre><br>
<pre style="margin: 0em;">Enable_OCL_2_5_candidates for String::lastIndexOf, regex, etc</pre><br>
<tt>These are easily accommodated in the programmatic OCLstdlib builder, 
which is now the default. More tedious are the oclstdlib.ecore/uml 
pseudo-models. Might need multiple files.</tt><br>
<br>
<pre style="margin: 0em;">---</pre><br>
<tt>This change does not seem to impact on Acceleo that is not so tightly 
coupled.</tt><br>
<br>
<pre style="margin: 0em;">    Regards</pre><br>
<pre style="margin: 0em;">        Ed Willink</pre><br>
<pre style="margin: 0em;"><br></pre><br>
<pre style="margin: 0em;"><br></pre><br>
<pre style="margin: 0em;"><br></pre><br>
]]></content:encoded>
		<pubDate>Thu, 10 May 2012 06:36:38 GMT</pubDate>
		<guid isPermaLink="true">http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01211.html</guid>
		<author>ed@xxxxxxx (Ed Willink)</author>
	</item>


	<item>
		<title>Re: [mdt-ocl.dev] Overload resolution and dynamic dispatch patch</title>
		<link>http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01210.html</link>
		<description>not so common sense after all if a reference path leads through Y back to X. Which resources from a repository an editor loads into a ResourceSet is fairly random. JDT wouldn't be the same if errors in Java resources not currently open in an editor remaine...</description>
		<content:encoded><![CDATA[<pre style="margin: 0em;">Hi Axel</pre><br>
<pre style="margin: 0em;">I can't answer your question because it doesn't make sense to me.</pre><br>
<tt>It seems we now agree that we have to be able to find the opposites. 
Once you have those it's easy, you just use the type-specific selections 
in the style of a dependency analysis. The new 
CachedTypeChecker.getDynamicOperation(dynamicType, staticOperation) does 
precisely the body discovery you need.</tt><br>
<br>
<pre style="margin: 0em;">    Regards</pre><br>
<pre style="margin: 0em;">        Ed Willink</pre><br>
<pre style="margin: 0em;"><br></pre><br>
<tt><br>On 08/05/2012 08:10, Axel Uhl wrote:
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><tt>a) is ugly but unavoidable if we want to maintain the current, 
otherwise well-working approach; b) and c) are already encapsulated by 
the OppositeEndFinder which does exactly that and offers a way to plug 
different ways of repository query capabilities.</tt><br>
<br>
<tt>I suppose it may be best to extend OppositeEndFinder such that it also 
encapsulates how to obtain the body expressions of any overriding 
method for a given method. Like the default for hidden opposite 
navigation which is based on the state of the loaded resources only, 
the default for discovering overrides would also only be based on 
loaded metamodel state and as such be consistent with the default 
hidden opposite navigation.</tt><br>
<br>
<tt>If someone (such as the query2 folks) may want to provide an 
OppositeEndFinder implementation using their richer query capabilities 
on a well-defined universe, they may as well define what the metamodel 
universe looks like and offer a way to discover the overriding method 
bodies.</tt><br>
<br>
<tt>Let me know what you think and I can work on a corresponding extension 
of OppositeEndFinder.</tt><br>
<br>
<pre style="margin: 0em;">Best,
-- Axel</pre><br>
<tt>On 5/8/2012 7:59 AM, Ed Willink wrote:
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Hi Axel</pre><br>
<pre style="margin: 0em;">Ok, so we misunderstood the application domain.</pre><br>
<pre style="margin: 0em;">The IA is targetted at huge models of which only large sub-models are
loaded in memory.</pre><br>
<tt>This now makes sense of your 'what are all the meta-models' questions.<br>
If the loaded submodels consist of A objects and the unloaded submodels<br>
might contain X objects, you need to known whether an X::a relationship<br>
exists, so that when an A changes you can propagate impact to an X. This<br>
has three problems:<br>
a) you need to know all the meta-models of all the unloaded parts of the<br>
models to discover that there is an X::a relationship<br>
b) you need to be able to identify all X objects in the unloaded 
submodels<br>
c) you need to identify which X objects have an X::a relationship<br>
targetting the impacted A object</tt><br>
<br>
<pre style="margin: 0em;">a) is soluble by requiring a closed universe of declared meta-models
b) is only soluble with some collaboration; if the unloaded objects are
in a repository, the repository may partition by class and so may be
able to support allInstances() without a total scan since the result of
allInstances() is cached as repository control state
c) is similarly soluble via a repository's allInstances() cache - but
only via an inefficient large scan for a huge model</pre><br>
<pre style="margin: 0em;">If the repository maintains an allInstances() cache, the the repository
can certainly provide an allClasses()/allPackages() response to enable
all meta-models to be identified for a).</pre><br>
<pre style="margin: 0em;">I see no way of doing hidden opposites from unloaded resources without
cached state resulting from a transient load of the whole model.</pre><br>
<pre style="margin: 0em;">The problem of dynamic dispatch is much the same as hidden opposites.
Any function computes using modeled state, so the source type is
deducible whenever the function uses fully navigable relationships. The
problem is that if the function uses forward relationships, then you
cannot follow in reverse. This is the hidden opposites impact problem.</pre><br>
<pre style="margin: 0em;">----</pre><br>
<pre style="margin: 0em;">So if we have a large partial model in memory, in order to propagate
impact to the unloaded part, there are three options:
a) don't - it is an unsupported capability
b) use a type-based allInstances() search of those objects that might be
hidden opposites
c) use an instance-based cache that supports navigation of the hidden
opposite relationships</pre><br>
<pre style="margin: 0em;">a) is easy and useful for large loadable models.</pre><br>
<pre style="margin: 0em;">Both b) and c) rely on cached knowledge of the whole system, so if
you're going to have cached knowledge surely you should provide the
cache that supports efficient instance-based navigation rather than
dubiously scalable type-based searches?</pre><br>
<pre style="margin: 0em;">The instance-based cache could take a variety of forms. To support huge
unloaded models, it is probably a good idea for objects to have
co-objects that contain their hidden opposites. The co-objects can be
unloaded and maintained in the repository, so the in-memory cost is
proportional to the size of the in-memory model and the number of actual
hidden opposites per object. Whenever impact spreads, you can load the
impacted objects and their co-objects. The IA can of course maintain the
co-object relationships automatically.</pre><br>
<pre style="margin: 0em;">Some classes, such as OCLExpression, have a large number of hidden
opposites, so the 'coOCLExpression' probably wants to use a list of
(feature,object) pairs for the typically one hidden opposite that
actually exists.</pre><br>
<pre style="margin: 0em;">-----</pre><br>
<pre style="margin: 0em;">Once co-objects support navigation of all relationships of all loaded
objects, the active system consists of unloaded (co-)objects and loaded
(co-)objects, some of which are on the boundary because they have one or
more relationships to unloaded objects. To prime the impact propagation,
dependency analysis from all loaded objects populates the notifier
chain. If at run-time an impact reaches a border object, the dynamic
types of the unloaded neighbours are examined to see if impact
propagation is possible and if necessary, neighbouring objects are
loaded, analyzed for dependencies, notifiers installed, and the impact
continues to propagate, loading only impacted unloaded objects and
co-objects.</pre><br>
<pre style="margin: 0em;">Regards</pre><br>
<pre style="margin: 0em;">Ed Willink</pre><br>
<tt>On 07/05/2012 20:44, Axel Uhl wrote:
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Ok, understood. This conflicts with the way the current IA approach
works. It is geared towards non-loaded resources and large, scalable
repositories. The design assumes that it's impractical to load all
relevant resources into memory, analyze and then memorize all
dependencies for all OCL expressions for all context elements.
Instead, it is analyzing the expression structure up-front, then
deriving the change listeners which obviously need to be registered
only on objects loaded into memory because only for those changes can
be detected at all. Once a change occurs, the change is analyzed by
traversing the element graph &quot;backwards&quot; using the expression
structure. This also works for even the largest repositories because
the memory required for backwards traversal doesn't grow with
repository size.</pre><br>
<pre style="margin: 0em;">It would be good if we knew which classes were generally available in
the scope of a ResourceSet so as to scan their operations during
backwards traversal (&quot;traceback&quot;). For the &quot;traceback&quot; approach this
would consider all operations known/loaded at that time. The
NavigationStep approach which is pre-computing the traceback paths
would not work this way because it wouldn't know operations loaded
through metamodels that become available after the IA has pre-computed
the navigation steps.</pre><br>
<pre style="margin: 0em;">What would be a good way to scan all existing operations and be
notified when new subclasses with redefinitions / overrides become
available? Wasn't there an open EMF bug requesting a notification
mechanism for EPackage loads?</pre><br>
<pre style="margin: 0em;">Best,
-- Axel</pre><br>
<tt>On 5/7/2012 9:06 PM, Ed Willink wrote:
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Hi</pre><br>
<blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;"><br>a) unloaded Resources</pre><br>
<tt>In your earlier example with resource Y (unloaded) so that 
propagation<br>
of 42 through resource X failed to impact:</tt><br>
<br>
<tt>Using my dependency analysis perspective, if the Y resource is not<br>
loaded, I don't analyze it, I don't detect any dependencies, so I<br>
don't<br>
install any listeners/notifiers to cause the Y resource elements to<br>
react to changes. So I agree that it doesn't work. It's nothing 
to do<br>
with EMF-based; it's just common sense.
</tt></blockquote><tt><br>not so common sense after all if a reference path leads through Y 
back<br>
to X. Which resources from a repository an editor loads into a<br>
ResourceSet is fairly random. JDT wouldn't be the same if errors in<br>
Java resources not currently open in an editor remained undetected<br>
until the resource is loaded.
</tt></blockquote><tt><br>Exactly. JDT knows how to open all files, and in order to report 
errors<br>
it either loads everything or exploits some sort of memento of 
previous<br>
results.</tt><br>
<br>
<tt>It seems to be mandatory to load all resources for which any form of<br>
analysis is to be performed. (It may be that they are unloaded 
retaining<br>
only a memento, but they must be loaded to create the memento.)
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><br>
<blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><tt>Consider a doctor's patient list and the impact of a policy 
change to<br>
invite all patients over 50 rather than over 60 to have a free flu<br>
vaccination for the winter. The derived property of the number of<br>
required injections can only be determined by examining each 
patients<br>
records. If a patient's record is not loaded into the 
system/looked at<br>
by a human, the accurate answer cannot be determined. It seems<br>
unreasonable to expect to have impact or dependencies for unloaded<br>
resources.</tt><br>
<br>
<pre style="margin: 0em;">b) polymorphic calls</pre><br>
<tt>It seems that your traceback does not use the source object and so<br>
needs<br>
to consider all possible operations. This seems inefficient and may<br>
lead<br>
to fat notifications that can be filtered. The dependency 
perspective<br>
knows the source object and so need only consider the relevant<br>
operation.
</tt></blockquote><pre style="margin: 0em;"><br>I don't understand your &quot;dependency perspective.&quot; Maybe you can
explain using the example I gave earlier?
</pre></blockquote><pre style="margin: 0em;"><br>For the derived property</pre><br>
<pre style="margin: 0em;">context X::derivedProperty : Integer = self.m().i</pre><br>
<pre style="margin: 0em;">on y1:Y, which is loaded so its dependencies are analyzed.
- it is a Y, so Y::m() which is self.b.a so depends on
-- the object identity at self.b, which is currently a B
-- the object value at self.b, which is b.a, so depends on
--- the object identity at self.b.a, which is currently an A
--- the object value at self.b.a which is i, so depends on
[---- the object identity i is not relevant since it is a data type]
---- the datatype value i</pre><br>
<tt>Each of the dependencies needs a direct or transitive notifier 
chain to<br>
cause the change to propagate and in the case of identity changes, the<br>
notifier chain to be adjusted.</tt><br>
<br>
<pre style="margin: 0em;">Regards</pre><br>
<pre style="margin: 0em;">Ed</pre><br>
<pre style="margin: 0em;">_______________________________________________
mdt-ocl.dev mailing list
mdt-ocl.dev@xxxxxxxxxxx
<a  href="https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev">https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev</a></pre><br>
<br>
</blockquote><pre style="margin: 0em;">_______________________________________________
mdt-ocl.dev mailing list
mdt-ocl.dev@xxxxxxxxxxx
<a  href="https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev">https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev</a></pre><br>
<tt><br>-----<br>
No virus found in this message.<br>
Checked by AVG - www.avg.com<br>
Version: 2012.0.2171 / Virus Database: 2425/4983 - Release Date: 
05/07/12</tt><br>
<br>
<br>
</blockquote><pre style="margin: 0em;"><br>_______________________________________________
mdt-ocl.dev mailing list
mdt-ocl.dev@xxxxxxxxxxx
<a  href="https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev">https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev</a></pre><br>
<br>
</blockquote><pre style="margin: 0em;">_______________________________________________
mdt-ocl.dev mailing list
mdt-ocl.dev@xxxxxxxxxxx
<a  href="https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev">https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev</a></pre><br>
<pre style="margin: 0em;"><br>-----
No virus found in this message.
Checked by AVG - www.avg.com
Version: 2012.0.2171 / Virus Database: 2425/4983 - Release Date: 05/07/12</pre><br>
<br>
</blockquote><pre style="margin: 0em;"><br></pre><br>
]]></content:encoded>
		<pubDate>Tue, 08 May 2012 11:10:06 GMT</pubDate>
		<guid isPermaLink="true">http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01210.html</guid>
		<author>ed@xxxxxxx (Ed Willink)</author>
	</item>
	<item>
		<title>Re: [mdt-ocl.dev] Overload resolution and dynamic dispatch patch</title>
		<link>http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01209.html</link>
		<description>not so common sense after all if a reference path leads through Y back to X. Which resources from a repository an editor loads into a ResourceSet is fairly random. JDT wouldn't be the same if errors in Java resources not currently open in an editor remaine...</description>
		<content:encoded><![CDATA[<tt>a) is ugly but unavoidable if we want to maintain the current, otherwise 
well-working approach; b) and c) are already encapsulated by the 
OppositeEndFinder which does exactly that and offers a way to plug 
different ways of repository query capabilities.</tt><br>
<br>
<tt>I suppose it may be best to extend OppositeEndFinder such that it also 
encapsulates how to obtain the body expressions of any overriding method 
for a given method. Like the default for hidden opposite navigation 
which is based on the state of the loaded resources only, the default 
for discovering overrides would also only be based on loaded metamodel 
state and as such be consistent with the default hidden opposite navigation.</tt><br>
<br>
<tt>If someone (such as the query2 folks) may want to provide an 
OppositeEndFinder implementation using their richer query capabilities 
on a well-defined universe, they may as well define what the metamodel 
universe looks like and offer a way to discover the overriding method 
bodies.</tt><br>
<br>
<tt>Let me know what you think and I can work on a corresponding extension 
of OppositeEndFinder.</tt><br>
<br>
<pre style="margin: 0em;">Best,
-- Axel</pre><br>
<tt>On 5/8/2012 7:59 AM, Ed Willink wrote:
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Hi Axel</pre><br>
<pre style="margin: 0em;">Ok, so we misunderstood the application domain.</pre><br>
<pre style="margin: 0em;">The IA is targetted at huge models of which only large sub-models are
loaded in memory.</pre><br>
<pre style="margin: 0em;">This now makes sense of your 'what are all the meta-models' questions.
If the loaded submodels consist of A objects and the unloaded submodels
might contain X objects, you need to known whether an X::a relationship
exists, so that when an A changes you can propagate impact to an X. This
has three problems:
a) you need to know all the meta-models of all the unloaded parts of the
models to discover that there is an X::a relationship
b) you need to be able to identify all X objects in the unloaded submodels
c) you need to identify which X objects have an X::a relationship
targetting the impacted A object</pre><br>
<pre style="margin: 0em;">a) is soluble by requiring a closed universe of declared meta-models
b) is only soluble with some collaboration; if the unloaded objects are
in a repository, the repository may partition by class and so may be
able to support allInstances() without a total scan since the result of
allInstances() is cached as repository control state
c) is similarly soluble via a repository's allInstances() cache - but
only via an inefficient large scan for a huge model</pre><br>
<pre style="margin: 0em;">If the repository maintains an allInstances() cache, the the repository
can certainly provide an allClasses()/allPackages() response to enable
all meta-models to be identified for a).</pre><br>
<pre style="margin: 0em;">I see no way of doing hidden opposites from unloaded resources without
cached state resulting from a transient load of the whole model.</pre><br>
<pre style="margin: 0em;">The problem of dynamic dispatch is much the same as hidden opposites.
Any function computes using modeled state, so the source type is
deducible whenever the function uses fully navigable relationships. The
problem is that if the function uses forward relationships, then you
cannot follow in reverse. This is the hidden opposites impact problem.</pre><br>
<pre style="margin: 0em;">----</pre><br>
<pre style="margin: 0em;">So if we have a large partial model in memory, in order to propagate
impact to the unloaded part, there are three options:
a) don't - it is an unsupported capability
b) use a type-based allInstances() search of those objects that might be
hidden opposites
c) use an instance-based cache that supports navigation of the hidden
opposite relationships</pre><br>
<pre style="margin: 0em;">a) is easy and useful for large loadable models.</pre><br>
<pre style="margin: 0em;">Both b) and c) rely on cached knowledge of the whole system, so if
you're going to have cached knowledge surely you should provide the
cache that supports efficient instance-based navigation rather than
dubiously scalable type-based searches?</pre><br>
<pre style="margin: 0em;">The instance-based cache could take a variety of forms. To support huge
unloaded models, it is probably a good idea for objects to have
co-objects that contain their hidden opposites. The co-objects can be
unloaded and maintained in the repository, so the in-memory cost is
proportional to the size of the in-memory model and the number of actual
hidden opposites per object. Whenever impact spreads, you can load the
impacted objects and their co-objects. The IA can of course maintain the
co-object relationships automatically.</pre><br>
<pre style="margin: 0em;">Some classes, such as OCLExpression, have a large number of hidden
opposites, so the 'coOCLExpression' probably wants to use a list of
(feature,object) pairs for the typically one hidden opposite that
actually exists.</pre><br>
<pre style="margin: 0em;">-----</pre><br>
<pre style="margin: 0em;">Once co-objects support navigation of all relationships of all loaded
objects, the active system consists of unloaded (co-)objects and loaded
(co-)objects, some of which are on the boundary because they have one or
more relationships to unloaded objects. To prime the impact propagation,
dependency analysis from all loaded objects populates the notifier
chain. If at run-time an impact reaches a border object, the dynamic
types of the unloaded neighbours are examined to see if impact
propagation is possible and if necessary, neighbouring objects are
loaded, analyzed for dependencies, notifiers installed, and the impact
continues to propagate, loading only impacted unloaded objects and
co-objects.</pre><br>
<pre style="margin: 0em;">Regards</pre><br>
<pre style="margin: 0em;">Ed Willink</pre><br>
<tt>On 07/05/2012 20:44, Axel Uhl wrote:
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Ok, understood. This conflicts with the way the current IA approach
works. It is geared towards non-loaded resources and large, scalable
repositories. The design assumes that it's impractical to load all
relevant resources into memory, analyze and then memorize all
dependencies for all OCL expressions for all context elements.
Instead, it is analyzing the expression structure up-front, then
deriving the change listeners which obviously need to be registered
only on objects loaded into memory because only for those changes can
be detected at all. Once a change occurs, the change is analyzed by
traversing the element graph &quot;backwards&quot; using the expression
structure. This also works for even the largest repositories because
the memory required for backwards traversal doesn't grow with
repository size.</pre><br>
<pre style="margin: 0em;">It would be good if we knew which classes were generally available in
the scope of a ResourceSet so as to scan their operations during
backwards traversal (&quot;traceback&quot;). For the &quot;traceback&quot; approach this
would consider all operations known/loaded at that time. The
NavigationStep approach which is pre-computing the traceback paths
would not work this way because it wouldn't know operations loaded
through metamodels that become available after the IA has pre-computed
the navigation steps.</pre><br>
<pre style="margin: 0em;">What would be a good way to scan all existing operations and be
notified when new subclasses with redefinitions / overrides become
available? Wasn't there an open EMF bug requesting a notification
mechanism for EPackage loads?</pre><br>
<pre style="margin: 0em;">Best,
-- Axel</pre><br>
<tt>On 5/7/2012 9:06 PM, Ed Willink wrote:
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Hi</pre><br>
<blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;"><br>a) unloaded Resources</pre><br>
<pre style="margin: 0em;">In your earlier example with resource Y (unloaded) so that propagation
of 42 through resource X failed to impact:</pre><br>
<pre style="margin: 0em;">Using my dependency analysis perspective, if the Y resource is not
loaded, I don't analyze it, I don't detect any dependencies, so I
don't
install any listeners/notifiers to cause the Y resource elements to
react to changes. So I agree that it doesn't work. It's nothing to do
with EMF-based; it's just common sense.
</pre></blockquote><pre style="margin: 0em;"><br>not so common sense after all if a reference path leads through Y back
to X. Which resources from a repository an editor loads into a
ResourceSet is fairly random. JDT wouldn't be the same if errors in
Java resources not currently open in an editor remained undetected
until the resource is loaded.
</pre></blockquote><pre style="margin: 0em;"><br>Exactly. JDT knows how to open all files, and in order to report errors
it either loads everything or exploits some sort of memento of previous
results.</pre><br>
<pre style="margin: 0em;">It seems to be mandatory to load all resources for which any form of
analysis is to be performed. (It may be that they are unloaded retaining
only a memento, but they must be loaded to create the memento.)
</pre><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><br>
<blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Consider a doctor's patient list and the impact of a policy change to
invite all patients over 50 rather than over 60 to have a free flu
vaccination for the winter. The derived property of the number of
required injections can only be determined by examining each patients
records. If a patient's record is not loaded into the system/looked at
by a human, the accurate answer cannot be determined. It seems
unreasonable to expect to have impact or dependencies for unloaded
resources.</pre><br>
<pre style="margin: 0em;">b) polymorphic calls</pre><br>
<pre style="margin: 0em;">It seems that your traceback does not use the source object and so
needs
to consider all possible operations. This seems inefficient and may
lead
to fat notifications that can be filtered. The dependency perspective
knows the source object and so need only consider the relevant
operation.
</pre></blockquote><pre style="margin: 0em;"><br>I don't understand your &quot;dependency perspective.&quot; Maybe you can
explain using the example I gave earlier?
</pre></blockquote><pre style="margin: 0em;"><br>For the derived property</pre><br>
<pre style="margin: 0em;">context X::derivedProperty : Integer = self.m().i</pre><br>
<pre style="margin: 0em;">on y1:Y, which is loaded so its dependencies are analyzed.
- it is a Y, so Y::m() which is self.b.a so depends on
-- the object identity at self.b, which is currently a B
-- the object value at self.b, which is b.a, so depends on
--- the object identity at self.b.a, which is currently an A
--- the object value at self.b.a which is i, so depends on
[---- the object identity i is not relevant since it is a data type]
---- the datatype value i</pre><br>
<pre style="margin: 0em;">Each of the dependencies needs a direct or transitive notifier chain to
cause the change to propagate and in the case of identity changes, the
notifier chain to be adjusted.</pre><br>
<pre style="margin: 0em;">Regards</pre><br>
<pre style="margin: 0em;">Ed</pre><br>
<pre style="margin: 0em;">_______________________________________________
mdt-ocl.dev mailing list
mdt-ocl.dev@xxxxxxxxxxx
<a  href="https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev">https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev</a></pre><br>
<br>
</blockquote><pre style="margin: 0em;">_______________________________________________
mdt-ocl.dev mailing list
mdt-ocl.dev@xxxxxxxxxxx
<a  href="https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev">https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev</a></pre><br>
<pre style="margin: 0em;"><br>-----
No virus found in this message.
Checked by AVG - www.avg.com
Version: 2012.0.2171 / Virus Database: 2425/4983 - Release Date: 05/07/12</pre><br>
<br>
</blockquote><pre style="margin: 0em;"><br>_______________________________________________
mdt-ocl.dev mailing list
mdt-ocl.dev@xxxxxxxxxxx
<a  href="https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev">https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev</a></pre><br>
<br>
</blockquote><br>
]]></content:encoded>
		<pubDate>Tue, 08 May 2012 07:10:40 GMT</pubDate>
		<guid isPermaLink="true">http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01209.html</guid>
		<author>eclipse@xxxxxxx (Axel Uhl)</author>
	</item>
	<item>
		<title>Re: [mdt-ocl.dev] Overload resolution and dynamic dispatch patch</title>
		<link>http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01208.html</link>
		<description>not so common sense after all if a reference path leads through Y back to X. Which resources from a repository an editor loads into a ResourceSet is fairly random. JDT wouldn't be the same if errors in Java resources not currently open in an editor remaine...</description>
		<content:encoded><![CDATA[<pre style="margin: 0em;">Hi Axel</pre><br>
<pre style="margin: 0em;">Ok, so we misunderstood the application domain.</pre><br>
<tt>The IA is targetted at huge models of which only large sub-models are 
loaded in memory.</tt><br>
<br>
<tt>This now makes sense of your 'what are all the meta-models' questions. 
If the loaded submodels consist of A objects and the unloaded submodels 
might contain X objects, you need to known whether an X::a relationship 
exists, so that when an A changes you can propagate impact to an X. This 
has three problems:<br>
a) you need to know all the meta-models of all the unloaded parts of the 
models to discover that there is an X::a relationship<br>
b) you need to be able to identify all X objects in the unloaded submodels<br>
c) you need to identify which X objects have an X::a relationship 
targetting the impacted A object</tt><br>
<br>
<tt>a) is soluble by requiring a closed universe of declared meta-models<br>
b) is only soluble with some collaboration; if the unloaded objects are 
in a repository, the repository may partition by class and so may be 
able to support allInstances() without a total scan since the result of 
allInstances() is cached as repository control state<br>
c) is similarly soluble via a repository's allInstances() cache - but 
only via an inefficient large scan for a huge model</tt><br>
<br>
<tt>If the repository maintains an allInstances() cache, the the repository 
can certainly provide an allClasses()/allPackages() response to enable 
all meta-models to be identified for a).</tt><br>
<br>
<tt>I see no way of doing hidden opposites from unloaded resources without 
cached state resulting from a transient load of the whole model.</tt><br>
<br>
<tt>The problem of dynamic dispatch is much the same as hidden opposites. 
Any function computes using modeled state, so the source type is 
deducible whenever the function uses fully navigable relationships. The 
problem is that if the function uses forward relationships, then you 
cannot follow in reverse. This is the hidden opposites impact problem.</tt><br>
<br>
<pre style="margin: 0em;">----</pre><br>
<tt>So if we have a large partial model in memory, in order to propagate 
impact to the unloaded part, there are three options:<br>
a) don't - it is an unsupported capability<br>
b) use a type-based allInstances() search of those objects that might be 
hidden opposites<br>
c) use an instance-based cache that supports navigation of the hidden 
opposite relationships</tt><br>
<br>
<pre style="margin: 0em;">a) is easy and useful for large loadable models.</pre><br>
<tt>Both b) and c) rely on cached knowledge of the whole system, so if 
you're going to have cached knowledge surely you should provide the 
cache that supports efficient instance-based navigation rather than 
dubiously scalable type-based searches?</tt><br>
<br>
<tt>The instance-based cache could take a variety of forms. To support huge 
unloaded models, it is probably a good idea for objects to have 
co-objects that contain their hidden opposites. The co-objects can be 
unloaded and maintained in the repository, so the in-memory cost is 
proportional to the size of the in-memory model and the number of actual 
hidden opposites per object. Whenever impact spreads, you can load the 
impacted objects and their co-objects. The IA can of course maintain the 
co-object relationships automatically.</tt><br>
<br>
<tt>Some classes, such as OCLExpression, have a large number of hidden 
opposites, so the 'coOCLExpression' probably wants to use a list of 
(feature,object) pairs for the typically one hidden opposite that 
actually exists.</tt><br>
<br>
<pre style="margin: 0em;">-----</pre><br>
<tt>Once co-objects support navigation of all relationships of all loaded 
objects, the active system consists of unloaded (co-)objects and loaded 
(co-)objects, some of which are on the boundary because they have one or 
more relationships to unloaded objects. To prime the impact propagation, 
dependency analysis from all loaded objects populates the notifier 
chain. If at run-time an impact reaches a border object, the dynamic 
types of the unloaded neighbours are examined to see if impact 
propagation is possible and if necessary, neighbouring objects are 
loaded, analyzed for dependencies, notifiers installed, and the impact 
continues to propagate, loading only impacted unloaded objects and 
co-objects.</tt><br>
<br>
<pre style="margin: 0em;">    Regards</pre><br>
<pre style="margin: 0em;">        Ed Willink</pre><br>
<tt>On 07/05/2012 20:44, Axel Uhl wrote:
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><tt>Ok, understood. This conflicts with the way the current IA approach 
works. It is geared towards non-loaded resources and large, scalable 
repositories. The design assumes that it's impractical to load all 
relevant resources into memory, analyze and then memorize all 
dependencies for all OCL expressions for all context elements. 
Instead, it is analyzing the expression structure up-front, then 
deriving the change listeners which obviously need to be registered 
only on objects loaded into memory because only for those changes can 
be detected at all. Once a change occurs, the change is analyzed by 
traversing the element graph &quot;backwards&quot; using the expression 
structure. This also works for even the largest repositories because 
the memory required for backwards traversal doesn't grow with 
repository size.</tt><br>
<br>
<tt>It would be good if we knew which classes were generally available in 
the scope of a ResourceSet so as to scan their operations during 
backwards traversal (&quot;traceback&quot;). For the &quot;traceback&quot; approach this 
would consider all operations known/loaded at that time. The 
NavigationStep approach which is pre-computing the traceback paths 
would not work this way because it wouldn't know operations loaded 
through metamodels that become available after the IA has pre-computed 
the navigation steps.</tt><br>
<br>
<tt>What would be a good way to scan all existing operations and be 
notified when new subclasses with redefinitions / overrides become 
available? Wasn't there an open EMF bug requesting a notification 
mechanism for EPackage loads?</tt><br>
<br>
<pre style="margin: 0em;">Best,
-- Axel</pre><br>
<tt>On 5/7/2012 9:06 PM, Ed Willink wrote:
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Hi</pre><br>
<blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;"><br>a) unloaded Resources</pre><br>
<pre style="margin: 0em;">In your earlier example with resource Y (unloaded) so that propagation
of 42 through resource X failed to impact:</pre><br>
<tt>Using my dependency analysis perspective, if the Y resource is not<br>
loaded, I don't analyze it, I don't detect any dependencies, so I 
don't<br>
install any listeners/notifiers to cause the Y resource elements to<br>
react to changes. So I agree that it doesn't work. It's nothing to do<br>
with EMF-based; it's just common sense.
</tt></blockquote><pre style="margin: 0em;"><br>not so common sense after all if a reference path leads through Y back
to X. Which resources from a repository an editor loads into a
ResourceSet is fairly random. JDT wouldn't be the same if errors in
Java resources not currently open in an editor remained undetected
until the resource is loaded.
</pre></blockquote><pre style="margin: 0em;"><br>Exactly. JDT knows how to open all files, and in order to report errors
it either loads everything or exploits some sort of memento of previous
results.</pre><br>
<pre style="margin: 0em;">It seems to be mandatory to load all resources for which any form of
analysis is to be performed. (It may be that they are unloaded retaining
only a memento, but they must be loaded to create the memento.)
</pre><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><br>
<blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Consider a doctor's patient list and the impact of a policy change to
invite all patients over 50 rather than over 60 to have a free flu
vaccination for the winter. The derived property of the number of
required injections can only be determined by examining each patients
records. If a patient's record is not loaded into the system/looked at
by a human, the accurate answer cannot be determined. It seems
unreasonable to expect to have impact or dependencies for unloaded
resources.</pre><br>
<pre style="margin: 0em;">b) polymorphic calls</pre><br>
<tt>It seems that your traceback does not use the source object and so 
needs<br>
to consider all possible operations. This seems inefficient and may 
lead<br>
to fat notifications that can be filtered. The dependency perspective<br>
knows the source object and so need only consider the relevant<br>
operation.
</tt></blockquote><pre style="margin: 0em;"><br>I don't understand your &quot;dependency perspective.&quot; Maybe you can
explain using the example I gave earlier?
</pre></blockquote><pre style="margin: 0em;"><br>For the derived property</pre><br>
<pre style="margin: 0em;">context X::derivedProperty : Integer = self.m().i</pre><br>
<pre style="margin: 0em;">on y1:Y, which is loaded so its dependencies are analyzed.
- it is a Y, so Y::m() which is self.b.a so depends on
-- the object identity at self.b, which is currently a B
-- the object value at self.b, which is b.a, so depends on
--- the object identity at self.b.a, which is currently an A
--- the object value at self.b.a which is i, so depends on
[---- the object identity i is not relevant since it is a data type]
---- the datatype value i</pre><br>
<pre style="margin: 0em;">Each of the dependencies needs a direct or transitive notifier chain to
cause the change to propagate and in the case of identity changes, the
notifier chain to be adjusted.</pre><br>
<pre style="margin: 0em;">Regards</pre><br>
<pre style="margin: 0em;">Ed</pre><br>
<pre style="margin: 0em;">_______________________________________________
mdt-ocl.dev mailing list
mdt-ocl.dev@xxxxxxxxxxx
<a  href="https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev">https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev</a></pre><br>
<br>
</blockquote><pre style="margin: 0em;">_______________________________________________
mdt-ocl.dev mailing list
mdt-ocl.dev@xxxxxxxxxxx
<a  href="https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev">https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev</a></pre><br>
<pre style="margin: 0em;"><br>-----
No virus found in this message.
Checked by AVG - www.avg.com
Version: 2012.0.2171 / Virus Database: 2425/4983 - Release Date: 05/07/12</pre><br>
<br>
</blockquote><pre style="margin: 0em;"><br></pre><br>
]]></content:encoded>
		<pubDate>Tue, 08 May 2012 05:59:24 GMT</pubDate>
		<guid isPermaLink="true">http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01208.html</guid>
		<author>ed@xxxxxxx (Ed Willink)</author>
	</item>


	<item>
		<title>Re: [mdt-ocl.dev] Overload resolution and dynamic dispatch patch</title>
		<link>http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01207.html</link>
		<description>not so common sense after all if a reference path leads through Y back to X. Which resources from a repository an editor loads into a ResourceSet is fairly random. JDT wouldn't be the same if errors in Java resources not currently open in an editor remaine...</description>
		<content:encoded><![CDATA[<tt>Ok, understood. This conflicts with the way the current IA approach 
works. It is geared towards non-loaded resources and large, scalable 
repositories. The design assumes that it's impractical to load all 
relevant resources into memory, analyze and then memorize all 
dependencies for all OCL expressions for all context elements. Instead, 
it is analyzing the expression structure up-front, then deriving the 
change listeners which obviously need to be registered only on objects 
loaded into memory because only for those changes can be detected at 
all. Once a change occurs, the change is analyzed by traversing the 
element graph &quot;backwards&quot; using the expression structure. This also 
works for even the largest repositories because the memory required for 
backwards traversal doesn't grow with repository size.</tt><br>
<br>
<tt>It would be good if we knew which classes were generally available in 
the scope of a ResourceSet so as to scan their operations during 
backwards traversal (&quot;traceback&quot;). For the &quot;traceback&quot; approach this 
would consider all operations known/loaded at that time. The 
NavigationStep approach which is pre-computing the traceback paths would 
not work this way because it wouldn't know operations loaded through 
metamodels that become available after the IA has pre-computed the 
navigation steps.</tt><br>
<br>
<tt>What would be a good way to scan all existing operations and be notified 
when new subclasses with redefinitions / overrides become available? 
Wasn't there an open EMF bug requesting a notification mechanism for 
EPackage loads?</tt><br>
<br>
<pre style="margin: 0em;">Best,
-- Axel</pre><br>
<tt>On 5/7/2012 9:06 PM, Ed Willink wrote:
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Hi</pre><br>
<blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;"><br>a) unloaded Resources</pre><br>
<pre style="margin: 0em;">In your earlier example with resource Y (unloaded) so that propagation
of 42 through resource X failed to impact:</pre><br>
<pre style="margin: 0em;">Using my dependency analysis perspective, if the Y resource is not
loaded, I don't analyze it, I don't detect any dependencies, so I don't
install any listeners/notifiers to cause the Y resource elements to
react to changes. So I agree that it doesn't work. It's nothing to do
with EMF-based; it's just common sense.
</pre></blockquote><pre style="margin: 0em;"><br>not so common sense after all if a reference path leads through Y back
to X. Which resources from a repository an editor loads into a
ResourceSet is fairly random. JDT wouldn't be the same if errors in
Java resources not currently open in an editor remained undetected
until the resource is loaded.
</pre></blockquote><pre style="margin: 0em;"><br>Exactly. JDT knows how to open all files, and in order to report errors
it either loads everything or exploits some sort of memento of previous
results.</pre><br>
<pre style="margin: 0em;">It seems to be mandatory to load all resources for which any form of
analysis is to be performed. (It may be that they are unloaded retaining
only a memento, but they must be loaded to create the memento.)
</pre><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><br>
<blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Consider a doctor's patient list and the impact of a policy change to
invite all patients over 50 rather than over 60 to have a free flu
vaccination for the winter. The derived property of the number of
required injections can only be determined by examining each patients
records. If a patient's record is not loaded into the system/looked at
by a human, the accurate answer cannot be determined. It seems
unreasonable to expect to have impact or dependencies for unloaded
resources.</pre><br>
<pre style="margin: 0em;">b) polymorphic calls</pre><br>
<pre style="margin: 0em;">It seems that your traceback does not use the source object and so needs
to consider all possible operations. This seems inefficient and may lead
to fat notifications that can be filtered. The dependency perspective
knows the source object and so need only consider the relevant
operation.
</pre></blockquote><pre style="margin: 0em;"><br>I don't understand your &quot;dependency perspective.&quot; Maybe you can
explain using the example I gave earlier?
</pre></blockquote><pre style="margin: 0em;"><br>For the derived property</pre><br>
<pre style="margin: 0em;">context X::derivedProperty : Integer = self.m().i</pre><br>
<pre style="margin: 0em;">on y1:Y, which is loaded so its dependencies are analyzed.
- it is a Y, so Y::m() which is self.b.a so depends on
-- the object identity at self.b, which is currently a B
-- the object value at self.b, which is b.a, so depends on
--- the object identity at self.b.a, which is currently an A
--- the object value at self.b.a which is i, so depends on
[---- the object identity i is not relevant since it is a data type]
---- the datatype value i</pre><br>
<pre style="margin: 0em;">Each of the dependencies needs a direct or transitive notifier chain to
cause the change to propagate and in the case of identity changes, the
notifier chain to be adjusted.</pre><br>
<pre style="margin: 0em;">Regards</pre><br>
<pre style="margin: 0em;">Ed</pre><br>
<pre style="margin: 0em;">_______________________________________________
mdt-ocl.dev mailing list
mdt-ocl.dev@xxxxxxxxxxx
<a  href="https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev">https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev</a></pre><br>
<br>
</blockquote><br>
]]></content:encoded>
		<pubDate>Mon, 07 May 2012 19:44:35 GMT</pubDate>
		<guid isPermaLink="true">http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01207.html</guid>
		<author>eclipse@xxxxxxx (Axel Uhl)</author>
	</item>
	<item>
		<title>Re: [mdt-ocl.dev] Overload resolution and dynamic dispatch patch</title>
		<link>http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01206.html</link>
		<description>Hi not so common sense after all if a reference path leads through Y back to X. Which resources from a repository an editor loads into a ResourceSet is fairly random. JDT wouldn't be the same if errors in Java resources not currently open in an editor rema...</description>
		<content:encoded><![CDATA[<pre style="margin: 0em;">Hi</pre><br>
<blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;"><br>a) unloaded Resources</pre><br>
<pre style="margin: 0em;">In your earlier example with resource Y (unloaded) so that propagation
of 42 through resource X failed to impact:</pre><br>
<pre style="margin: 0em;">Using my dependency analysis perspective, if the Y resource is not
loaded, I don't analyze it, I don't detect any dependencies, so I don't
install any listeners/notifiers to cause the Y resource elements to
react to changes. So I agree that it doesn't work. It's nothing to do
with EMF-based; it's just common sense.
</pre></blockquote><tt><br>not so common sense after all if a reference path leads through Y back 
to X. Which resources from a repository an editor loads into a 
ResourceSet is fairly random. JDT wouldn't be the same if errors in 
Java resources not currently open in an editor remained undetected 
until the resource is loaded.
</tt></blockquote><tt><br>Exactly. JDT knows how to open all files, and in order to report errors 
it either loads everything or exploits some sort of memento of previous 
results.</tt><br>
<br>
<tt>It seems to be mandatory to load all resources for which any form of 
analysis is to be performed. (It may be that they are unloaded retaining 
only a memento, but they must  be loaded to create the memento.)
</tt><blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><br>
<blockquote style="border-left: #5555EE solid 0.2em; margin: 0em; padding-left: 0.85em"><pre style="margin: 0em;">Consider a doctor's patient list and the impact of a policy change to
invite all patients over 50 rather than over 60 to have a free flu
vaccination for the winter. The derived property of the number of
required injections can only be determined by examining each patients
records. If a patient's record is not loaded into the system/looked at
by a human, the accurate answer cannot be determined. It seems
unreasonable to expect to have impact or dependencies for unloaded
resources.</pre><br>
<pre style="margin: 0em;">b) polymorphic calls</pre><br>
<tt>It seems that your traceback does not use the source object and so needs<br>
to consider all possible operations. This seems inefficient and may lead<br>
to fat notifications that can be filtered. The dependency perspective<br>
knows the source object and so need only consider the relevant 
operation.
</tt></blockquote><tt><br>I don't understand your &quot;dependency perspective.&quot; Maybe you can 
explain using the example I gave earlier?
</tt></blockquote><pre style="margin: 0em;"><br>For the derived property</pre><br>
<pre style="margin: 0em;">context X::derivedProperty : Integer = self.m().i</pre><br>
<pre style="margin: 0em;">on y1:Y, which is loaded so its dependencies are analyzed.
- it is a Y, so Y::m() which is self.b.a so depends on
-- the object identity at self.b, which is currently a B
-- the object value at self.b, which is b.a, so depends on
--- the object identity at self.b.a, which is currently an A
--- the object value at self.b.a which is i, so depends on
[---- the object identity i is not relevant since it is a data type]
---- the datatype value i</pre><br>
<tt>Each of the dependencies needs a direct or transitive notifier chain to 
cause the change to propagate and in the case of identity changes, the 
notifier chain to be adjusted.</tt><br>
<br>
<pre style="margin: 0em;">    Regards</pre><br>
<pre style="margin: 0em;">        Ed</pre><br>
<br>
]]></content:encoded>
		<pubDate>Mon, 07 May 2012 19:06:43 GMT</pubDate>
		<guid isPermaLink="true">http://dev.eclipse.org/mhonarc/lists/mdt-ocl.dev/msg01206.html</guid>
		<author>ed@xxxxxxx (Ed Willink)</author>
	</item>

 
	</channel>
	</rss>
<!-- MHonArc v2.6.10 -->

