Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [imp-dev] Double call to parser when loading file with imports


Andy,

Apologies for not getting back to you sooner with more information about this.  I've had some non-IMP duties to attend to lately, and Bob has been on vacation.

I believe that I know why the parser is getting called twice when a file is first loaded.  In UniversalEditor, the main method that is responsible for setting up a new editor is createPartControl(..).  The logic in createPartControl(..) can be divided roughly into three parts:  1) preliminary initializations, 2) initializations of most language services, and 3) later initializations.  In the middle phase, when we initialize the language services, we also initialize the parse controller and call the parser.  (That's what you see happening in the main thread.)  In the last phase we call a method watchDocument() that does two things.  One is to put a documentChanged listener onto the editor's document, the other is to run the parser scheduler directly to catch any changes that may have happened before the listener could be added.  (This results in the call to the parser that you see in the worker thread.)

This code was written by Bob originally and has been extended and refactored a few times since then.  At this point I don't know if the double invocation of the parser is intentional or accidental, or whether it's really necessary, just helpful, or superfluous (or even possibly harmful).  I'll discuss this with Bob next week.  I did a couple of quick experiments where I commented out one or the other of those parser invocations and found that I could run a couple of different editors with no real (or apparent) problems.  I imagine that in either case the consequences would be short-lived and probably not apparent to the user.  Still, I haven't had a chance to trace through the logic in detail.  In any case, we'll discuss it and see if there's something to be done.

If this is actually causing a problem for you (or your users) please let us know.  If it's just confusing, that's still reason enough to remove the double invocation if it's not needed, and there'd be nothing wrong with eliminating a little overhead in the start-up process, as well.

Regards,

Stan


Stan Sutton, Ph. D.
IBM T. J. Watson Research Center
19 Skyline Drive, Hawthorne, NY 10532 USA
telephone:  1-914-784-7316, FAX:  1-914-784-7455, T/L 863
e-mail:  suttons@xxxxxxxxxx, Stan Sutton/Watson/IBM@IBMUS



"Crapo, Andrew (GE, Research)" <crapo@xxxxxx>
Sent by: imp-dev-bounces@xxxxxxxxxxx

09/05/2008 09:55 AM

Please respond to
IMP Developers List <imp-dev@xxxxxxxxxxx>

To
<imp-dev@xxxxxxxxxxx>
cc
Subject
[imp-dev] Double call to parser when loading file with imports





I am having a problem, reminiscent of an old issue from almost a year ago, having to do with the parser getting called twice while loading a file.

Given two files, f1.sadl and f2.sadl, and f2.sadl imports f1.sadl (meaning that when f2.sadl is parsed, if f1.sadl isn't already parsed and the resulting model available to use in error checking, f1.sadl will be parsed (although not shown in an editor).

If f1.sadl is opened in the editor, the parser is only called once. However, if f2.sadl is opened, the parser is called for f2.sadl, then f1.sadl is parsed, and then a different thread invokes the parser a second time for f2.sadl. At this point the call stack is:

I can't see what in my code would be causing this to happen. This is an IMP application created with Eclipse 3.2.2 some time ago and I'm moving it to Eclipse 3.3.2 and the latest IMP. I don't believe I was seeing this until I upgraded to 0.1.75.

Any insights would be greatly appreciated.

Andrew Crapo
GE Global Research

Information Scientist

T 518 387 5729
F 518 387 6104

D *833 5729

E crapo@xxxxxxxxxxxxxxx

www.research.ge.com

One Research Circle
Niskayuna, NY 12309 USA

General Electric Company
_______________________________________________
imp-dev mailing list
imp-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/imp-dev


Back to the top