Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [wtp-dev] JSDT inference: type of "this"


The default InferenceEngine will create an anonymous type when is sees a Object Literal.  
Assuming that you have override handleFunctionCall() in you inferengine to process the "qx.Class.define", in that code
you would "drill down" to that object initializer and call "traverse()" in its field initializers, thus bypassing the default handling of visit(IObjectInitializer).
The handleFunctionCall() should return false, so the InferEngine does not visit the children of the function call .

Phil Berkland
IBM Software Group Emerging Technologies



Matthias Kempka <mkempka@xxxxxxxxxxxxxx>
Sent by: wtp-dev-bounces@xxxxxxxxxxx

04/08/2008 03:41 AM

Please respond to
"General discussion of project-wide or architectural issues."        <wtp-dev@xxxxxxxxxxx>

To
"General discussion of project-wide or architectural issues." <wtp-dev@xxxxxxxxxxx>
cc
Subject
Re: [wtp-dev] JSDT inference: type of "this"






On Apr 8, 2008, at 2:04 AM, Phil Berkland wrote:
> This "this" should have the same type as the current context in the  
> InferEngine.  You can set the current context by doing  
> "currentContext.currentType= ??".
> If we see a "this.something" in a function, we assume there is  
> somekind of object involved, and if we dont know the type, we create  
> an anonymous type.

True.
But how can I set the currentContext.currentType? Everything about the  
context is package private.

It seems to me the problem goes like this:

When defining a constructor, I work with a definition that looks like  
this:

qx.Class.define("Application", {
                construct : function(x) { }
});

The function declaration is in the initializer of a first-level object  
literal field. The context is preserved from where the type  
"Application is defined, and thus(?) "this" gets the type "Application".

However, Qooxdoo method declarations go like this:

qx.Class.define("Application", {
                members : {
                    aMethod : function(x) {
                    }
        }
});

This is an object literal field within the first-level object literal  
field. There, the context type is lost and an anonymous type is  
created. It contains all the members but nothing else of type  
"Application". (I don't really understand why it contains all the  
members  since I'm actually adding them to the inferred type  
"Application".)

What can I do to preserve the type within nested object literal fields?

Best Regards,
Matthias Kempka
--
Dipl.-Inform. Matthias Kempka
Innoopract Informationssysteme GmbH
mkempka@xxxxxxxxxxxxxx
Tel:  0721 - 66 47 33 - 0
Fax: 0721 - 66 47 33 29
========================= Legal Disclaimer =====================
According to Section 80 of the German Corporation Act
Innoopract Informationssysteme GmbH must indicate the following  
information:
Address: Stephanienstrasse 20, 76133 Karlsruhe Germany
General Manager: Jochen Krause, Eric von der Heyden
Registered Office: Karlsruhe, Commercial Register Karlsruhe HRB 7883
============================================================





_______________________________________________
wtp-dev mailing list
wtp-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/wtp-dev


Back to the top