[Laszlo-dev] [Laszlo-checkins] r7200 - in openlaszlo/trunk/WEB-INF/lps: misc schema server/src/org/openlaszlo/compiler
Donald Anderson
dda at ddanderson.com
Sat Nov 10 14:37:49 PST 2007
I second that - I'm now looking at how to address a particular issue
in generated code for SWF9. The most straightforward solution is
to support the 'override' keyword in our script compiler, where
'override' means I'm overriding this now. It would be good to
keep our terminology between these two worlds consistent.
On Nov 10, 2007, at 4:46 PM, P T Withington wrote:
> I'm ok with this, but your term 'override' is inconsistent with
> JS2. In JS2 if you want to say you cannot override a method, it is
> designated 'final'. So, I think it would be better if you used
> that term (reversing the polarity of your declarations).
>
> On 2007-11-09, at 09:25 EST, hqm at openlaszlo.org wrote:
>
>> Author: hqm
>> Date: 2007-11-09 06:25:10 -0800 (Fri, 09 Nov 2007)
>> New Revision: 7200
>>
>> Modified:
>> openlaszlo/trunk/WEB-INF/lps/misc/lzx-autoincludes.properties
>> openlaszlo/trunk/WEB-INF/lps/schema/lfc.lzx
>> openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/compiler/
>> NodeModel.java
>> openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/compiler/
>> ViewSchema.java
>> Log:
>> Change 20071109-hqm-6 by hqm at IBM-2E06404CB67 on 2007-11-09
>> 09:23:21 EST
>> in /cygdrive/c/users/hqm/openlaszlo/trunk
>> for http://svn.openlaszlo.org/openlaszlo/trunk
>>
>> Summary: prevent spurious compiler warnings when overriding apply()
>> method on subclases of <state>
>>
>> New Features:
>>
>> Bugs Fixed: LPP-5067, LPP-5065
>>
>> Technical Reviewer: ptw
>> QA Reviewer: pbr
>> Doc Reviewer:
>>
>> Documentation:
>>
>> Release Notes:
>>
>> Details:
>>
>>
>> I modified the compiler to not warn if the attribute being overriden
>> was declared explicitly with a value of "true" for it's 'override'
>> property.
>>
>> So in lfc.lzx, we declare apply as non overridable, on the base
>> Instance
>>
>> <interface name="Instance" extends="Object">
>> <method name="apply" override="false"/>
>>
>> but "state" declares it overridable, so any subclass of state can
>> override it
>>
>>
>> <interface name="state" extends="node">
>> <attribute name="apply" override="true" />
>>
>>
>> I made the compiler not only not warn if you override the method with
>> another method, but not warn if you override an attribute with a
>> method. That is a little too loose I guess, but it only happens
>> when you
>> declare "override=true" on an attribute.
>>
>>
>> Tests:
>>
>> test/compiler_errors/override-state.lzx
>> override-builtin.lzx
>> smokecheck
>> amazon
>> calendar
>> examples/components/style_example.lzx
>>
>>
>>
>>
>> Modified: openlaszlo/trunk/WEB-INF/lps/misc/lzx-
>> autoincludes.properties
>> ===================================================================
>> --- openlaszlo/trunk/WEB-INF/lps/misc/lzx-autoincludes.properties
>> 2007-11-09 04:16:09 UTC (rev 7199)
>> +++ openlaszlo/trunk/WEB-INF/lps/misc/lzx-autoincludes.properties
>> 2007-11-09 14:25:10 UTC (rev 7200)
>> @@ -6,125 +6,125 @@
>> # * Use is subject to license
>> terms. *
>> # * P_LZ_COPYRIGHT_END
>> ********************************************************
>>
>> -basebutton: base/basebutton.lzx
>> -multistatebutton: base/multistatebutton.lzx
>> -basecomponent: base/basecomponent.lzx
>> -statictext: base/basecomponent.lzx
>> -basevaluecomponent: base/basevaluecomponent.lzx
>> -baseform: base/baseform.lzx
>> -submit: base/submit.lzx
>> -baseformitem: base/baseformitem.lzx
>> -baselist: base/baselist.lzx
>> -baselistitem: base/baselistitem.lzx
>> -basescrollbar: base/basescrollbar.lzx
>> -baseslider: base/baseslider.lzx
>> -basesliderthumb: base/baseslider.lzx
>> -baseslidertrack: base/baseslider.lzx
>> -basetabs: base/basetabs.lzx
>> -basetabslider: base/basetabslider.lzx
>> -basetabelement: base/basetabelement.lzx
>> -basetrackgroup: base/basetrackgroup.lzx
>> -basetree: base/basetree.lzx
>> -basewindow: base/basewindow.lzx
>> -basecombobox: base/basecombobox.lzx
>> -basedatacombobox: base/basedatacombobox.lzx
>> -resizeview_x: base/resizeview.lzx
>> -resizeview_y: base/resizeview.lzx
>> -style: base/style.lzx
>> -swatchview: base/swatchview.lzx
>> -basegrid: base/basegrid.lzx
>> -basedatepicker: base/basedatepicker.lzx
>> -basedatepickerday: base/basedatepickerday.lzx
>> -basedatepickerweek: base/basedatepickerweek.lzx
>> +basebutton: /base/basebutton.lzx
>> +multistatebutton: /base/multistatebutton.lzx
>> +basecomponent: /base/basecomponent.lzx
>> +statictext: /base/basecomponent.lzx
>> +basevaluecomponent: /base/basevaluecomponent.lzx
>> +baseform: /base/baseform.lzx
>> +submit: /base/submit.lzx
>> +baseformitem: /base/baseformitem.lzx
>> +baselist: /base/baselist.lzx
>> +baselistitem: /base/baselistitem.lzx
>> +basescrollbar: /base/basescrollbar.lzx
>> +baseslider: /base/baseslider.lzx
>> +basesliderthumb: /base/baseslider.lzx
>> +baseslidertrack: /base/baseslider.lzx
>> +basetabs: /base/basetabs.lzx
>> +basetabslider: /base/basetabslider.lzx
>> +basetabelement: /base/basetabelement.lzx
>> +basetrackgroup: /base/basetrackgroup.lzx
>> +basetree: /base/basetree.lzx
>> +basewindow: /base/basewindow.lzx
>> +basecombobox: /base/basecombobox.lzx
>> +basedatacombobox: /base/basedatacombobox.lzx
>> +resizeview_x: /base/resizeview.lzx
>> +resizeview_y: /base/resizeview.lzx
>> +style: /base/style.lzx
>> +swatchview: /base/swatchview.lzx
>> +basegrid: /base/basegrid.lzx
>> +basedatepicker: /base/basedatepicker.lzx
>> +basedatepickerday: /base/basedatepickerday.lzx
>> +basedatepickerweek: /base/basedatepickerweek.lzx
>>
>>
>> -constantlayout: utils/layouts/constantlayout.lzx
>> -resizelayout: utils/layouts/resizelayout.lzx
>> -simplelayout: utils/layouts/simplelayout.lzx
>> -stableborderlayout: utils/layouts/stableborderlayout.lzx
>> -wrappinglayout: utils/layouts/wrappinglayout.lzx
>> -reverselayout: utils/layouts/reverselayout.lzx
>> -dragstate: utils/states/dragstate.lzx
>> -resizestate: utils/states/resizestate.lzx
>> +constantlayout: /utils/layouts/constantlayout.lzx
>> +resizelayout: /utils/layouts/resizelayout.lzx
>> +simplelayout: /utils/layouts/simplelayout.lzx
>> +stableborderlayout: /utils/layouts/stableborderlayout.lzx
>> +wrappinglayout: /utils/layouts/wrappinglayout.lzx
>> +reverselayout: /utils/layouts/reverselayout.lzx
>> +dragstate: /utils/states/dragstate.lzx
>> +resizestate: /utils/states/resizestate.lzx
>>
>> -inittimer: utils/diagnostic/inittimer.lzx
>> -frametimer: utils/diagnostic/frametimer.lzx
>> -versioninfo: utils/diagnostic/versioninfo.lzx
>> -inspector: utils/diagnostic/inspector/inspector.lzx
>> +inittimer: /utils/diagnostic/inittimer.lzx
>> +frametimer: /utils/diagnostic/frametimer.lzx
>> +versioninfo: /utils/diagnostic/versioninfo.lzx
>> +inspector: /utils/diagnostic/inspector/inspector.lzx
>>
>> -checkbox: lz/checkbox.lzx
>> -button: lz/button.lzx
>> -combobox: lz/combobox.lzx
>> -datacombobox: lz/datacombobox.lzx
>> -menu: lz/menu.lzx
>> -menubar: lz/menu.lzx
>> -menuitem: lz/menu.lzx
>> -menuseparator: lz/menu.lzx
>> -radiogroup: lz/radio.lzx
>> -radiobutton: lz/radio.lzx
>> -slider: lz/slider.lzx
>> -slidertrack: lz/slider.lzx
>> -sliderthumb: lz/slider.lzx
>> -scrollbar: lz/scrollbar.lzx
>> -hscrollbar: lz/hscrollbar.lzx
>> -vscrollbar: lz/vscrollbar.lzx
>> -window: lz/window.lzx
>> -modaldialog: lz/window.lzx
>> -alert: lz/window.lzx
>> -edittext: lz/edittext.lzx
>> -simpleinputtext: lz/simpletext.lzx
>> -form: lz/form.lzx
>> -tabs: lz/tabs.lzx
>> -tabpane: lz/tabs.lzx
>> -tabbar: lz/tabs.lzx
>> -list: lz/list.lzx
>> -listitem: lz/listitem.lzx
>> -textlistitem: lz/textlistitem.lzx
>> -basefloatinglist: lz/basefloatinglist.lzx
>> -floatinglist: lz/floatinglist.lzx
>> -plainfloatinglist: lz/plainfloatinglist.lzx
>> -windowpanel: lz/windowpanel.lzx
>> -tabslider: lz/tabslider.lzx
>> -tabelement: lz/tabelement.lzx
>> -tree: lz/tree.lzx
>> -grid: lz/grid.lzx
>> -datepicker: lz/datepicker.lzx
>> +checkbox: /lz/checkbox.lzx
>> +button: /lz/button.lzx
>> +combobox: /lz/combobox.lzx
>> +datacombobox: /lz/datacombobox.lzx
>> +menu: /lz/menu.lzx
>> +menubar: /lz/menu.lzx
>> +menuitem: /lz/menu.lzx
>> +menuseparator: /lz/menu.lzx
>> +radiogroup: /lz/radio.lzx
>> +radiobutton: /lz/radio.lzx
>> +slider: /lz/slider.lzx
>> +slidertrack: /lz/slider.lzx
>> +sliderthumb: /lz/slider.lzx
>> +scrollbar: /lz/scrollbar.lzx
>> +hscrollbar: /lz/hscrollbar.lzx
>> +vscrollbar: /lz/vscrollbar.lzx
>> +window: /lz/window.lzx
>> +modaldialog: /lz/window.lzx
>> +alert: /lz/window.lzx
>> +edittext: /lz/edittext.lzx
>> +simpleinputtext: /lz/simpletext.lzx
>> +form: /lz/form.lzx
>> +tabs: /lz/tabs.lzx
>> +tabpane: /lz/tabs.lzx
>> +tabbar: /lz/tabs.lzx
>> +list: /lz/list.lzx
>> +listitem: /lz/listitem.lzx
>> +textlistitem: /lz/textlistitem.lzx
>> +basefloatinglist: /lz/basefloatinglist.lzx
>> +floatinglist: /lz/floatinglist.lzx
>> +plainfloatinglist: /lz/plainfloatinglist.lzx
>> +windowpanel: /lz/windowpanel.lzx
>> +tabslider: /lz/tabslider.lzx
>> +tabelement: /lz/tabelement.lzx
>> +tree: /lz/tree.lzx
>> +grid: /lz/grid.lzx
>> +datepicker: /lz/datepicker.lzx
>>
>> -whitestyle: base/defaultstyles.lzx
>> -silverstyle: base/defaultstyles.lzx
>> -bluestyle: base/defaultstyles.lzx
>> -greenstyle: base/defaultstyles.lzx
>> -goldstyle: base/defaultstyles.lzx
>> -purplestyle: base/defaultstyles.lzx
>> +whitestyle: /base/defaultstyles.lzx
>> +silverstyle: /base/defaultstyles.lzx
>> +bluestyle: /base/defaultstyles.lzx
>> +greenstyle: /base/defaultstyles.lzx
>> +goldstyle: /base/defaultstyles.lzx
>> +purplestyle: /base/defaultstyles.lzx
>>
>> -javarpc: rpc/javarpc.lzx
>> -sessionrpc: rpc/sessionrpc.lzx
>> -webapprpc: rpc/webapprpc.lzx
>> -soap: rpc/soap.lzx
>> -xmlrpc: rpc/xmlrpc.lzx
>> +javarpc: /rpc/javarpc.lzx
>> +sessionrpc: /rpc/sessionrpc.lzx
>> +webapprpc: /rpc/webapprpc.lzx
>> +soap: /rpc/soap.lzx
>> +xmlrpc: /rpc/xmlrpc.lzx
>>
>> -richinputtext: extensions/views/richinputtext.lzx
>> +richinputtext: /extensions/views/richinputtext.lzx
>>
>> -html: extensions/html.lzx
>> -drawview: extensions/drawview.lzx
>> +html: /extensions/html.lzx
>> +drawview: /extensions/drawview.lzx
>>
>> -rtmpconnection: extensions/av/rtmpconnection.lzx
>> -mediastream: extensions/av/mediastream.lzx
>> -mediadevice: extensions/av/mediadevice.lzx
>> -camera: extensions/av/camera.lzx
>> -microphone: extensions/av/microphone.lzx
>> -videoview: extensions/av/videoview.lzx
>> +rtmpconnection: /extensions/av/rtmpconnection.lzx
>> +mediastream: /extensions/av/mediastream.lzx
>> +mediadevice: /extensions/av/mediadevice.lzx
>> +camera: /extensions/av/camera.lzx
>> +microphone: /extensions/av/microphone.lzx
>> +videoview: /extensions/av/videoview.lzx
>>
>> -rtmpstatus: av/rtmpstatus.lzx
>> +rtmpstatus: /av/rtmpstatus.lzx
>>
>> -hbox: base/hbox.lzx
>> -vbox: base/vbox.lzx
>> -image: base/image.lzx
>> +hbox: /base/hbox.lzx
>> +vbox: /base/vbox.lzx
>> +image: /base/image.lzx
>>
>> -barchart: charts/barchart/barchart.lzx
>> -columnchart: charts/columnchart/columnchart.lzx
>> -linechart: charts/linechart/linechart.lzx
>> -piechart: charts/piechart/piechart.lzx
>> +barchart: /charts/barchart/barchart.lzx
>> +columnchart: /charts/columnchart/columnchart.lzx
>> +linechart: /charts/linechart/linechart.lzx
>> +piechart: /charts/piechart/piechart.lzx
>>
>> -lazyreplicator: utils/replicator/lazyreplicator.lzx
>> -replicator: utils/replicator/replicator.lzx
>> +lazyreplicator: /utils/replicator/lazyreplicator.lzx
>> +replicator: /utils/replicator/replicator.lzx
>>
>> Modified: openlaszlo/trunk/WEB-INF/lps/schema/lfc.lzx
>> ===================================================================
>> --- openlaszlo/trunk/WEB-INF/lps/schema/lfc.lzx 2007-11-09
>> 04:16:09 UTC (rev 7199)
>> +++ openlaszlo/trunk/WEB-INF/lps/schema/lfc.lzx 2007-11-09
>> 14:25:10 UTC (rev 7200)
>> @@ -25,12 +25,7 @@
>> <method name="isPrototypeOf" override="false"/>
>> <method name="toLocaleString" override="false"/>
>> <method name="prototype" override="false"/>
>> - <!--
>> - 'apply' is ambiguous because <state> is
>> - using it for both a method and an attribute. Just omit it from
>> - the declarations for now.
>> <method name="apply" override="false"/>
>> - -->
>> <method name="call" override="false"/>
>> </interface>
>>
>> @@ -244,13 +239,13 @@
>> </containsElements>
>> </interface>
>>
>> -<interface name="class" extends="view">
>> +<interface name="class" extends="node">
>> <attribute name="extends" type="token" value="view"/>
>> <!-- The comma-separated list of mixins, applied in order -->
>> <attribute name="with" type="string"/>
>> </interface>
>>
>> -<interface name="interface" extends="view">
>> +<interface name="interface" extends="node">
>> <attribute name="extends" type="token" value="view"/>
>> <!-- The comma-separated list of mixins, applied in order -->
>> <attribute name="with" type="string"/>
>>
>> Modified: openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/
>> compiler/NodeModel.java
>> ===================================================================
>> --- openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/
>> compiler/NodeModel.java 2007-11-09 04:16:09 UTC (rev 7199)
>> +++ openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/
>> compiler/NodeModel.java 2007-11-09 14:25:10 UTC (rev 7200)
>> @@ -1527,6 +1527,9 @@
>> Schema.Type type = null;
>> Schema.Type parenttype = null;
>>
>> + AttributeSpec parentAttrSpec = schema.getAttributeSpec
>> (parent.getName(), name);
>> + boolean forceOverride = parentAttrSpec != null &&
>> "true".equals(parentAttrSpec.override);
>> +
>> try {
>> if (parent.getName().equals("class")) {
>> parenttype = getAttributeTypeInfoFromSuperclass
>> (parent, name);
>> @@ -1562,9 +1565,10 @@
>> NodeModel.class.getName(),"051018-1211", new Object
>> [] {typestr})
>> , element);
>> }
>> +
>> // If we are trying to declare the attribute with a
>> // conflicting type to the parent, throw an error
>> - if (parenttype != null && type != parenttype) {
>> + if (!forceOverride && parenttype != null && type !=
>> parenttype) {
>> env.warn(
>> new CompilationError(
>> element,
>> @@ -1581,11 +1585,14 @@
>> }
>> }
>>
>> +
>> +
>> // Warn if we are overidding a method, handler, or other
>> function
>> - if (parenttype == schema.METHOD_TYPE ||
>> - parenttype == schema.EVENT_HANDLER_TYPE ||
>> - parenttype == schema.SETTER_TYPE ||
>> - parenttype == schema.REFERENCE_TYPE) {
>> + if (!forceOverride &&
>> + (parenttype == schema.METHOD_TYPE ||
>> + parenttype == schema.EVENT_HANDLER_TYPE ||
>> + parenttype == schema.SETTER_TYPE ||
>> + parenttype == schema.REFERENCE_TYPE)) {
>> env.warn( "In element '" + parent.getName()
>> + "' attribute '" + name
>> + "' is overriding parent class attribute
>> which has the same name but type: "
>>
>> Modified: openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/
>> compiler/ViewSchema.java
>> ===================================================================
>> --- openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/
>> compiler/ViewSchema.java 2007-11-09 04:16:09 UTC (rev 7199)
>> +++ openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/
>> compiler/ViewSchema.java 2007-11-09 14:25:10 UTC (rev 7200)
>> @@ -396,7 +396,14 @@
>> // Check that the overriding type is the same
>> as the superclass' type
>> parentType = getAttributeType(classname,
>> attr.name);
>>
>> - if (parentType != attr.type) {
>> + // Does the parent attribute definition
>> assert override=true?
>> + // If so, we're not going to warn if the
>> types mismatch.
>> + AttributeSpec parentAttrSpec =
>> getAttributeSpec(classname, attr.name);
>> + boolean forceOverride = parentAttrSpec !=
>> null && "true".equals(parentAttrSpec.override);
>> +
>> + if (!forceOverride && (parentType !=
>> attr.type)) {
>> + // get the parent attribute, so we can
>> see if it says override is allowed
>> +
>> env.warn(/* (non-Javadoc)
>> * @i18n.test
>> * @org-mes="In class '" + p[0] +
>> "' attribute '" + p[1] + "' with type '" + p[2] + "' is overriding
>> superclass attribute with same name but different type: " + p[3]
>> @@ -503,7 +510,30 @@
>> }
>>
>>
>> +
>> /**
>> + * Finds the AttributeSpec definition of an attribute, on a
>> class
>> + * or by searching up it's parent class chain.
>> + *
>> + * @param elt an Element name
>> + * @param attrName an attribute name
>> + * @return the AttributeSpec or null
>> + */
>> + public AttributeSpec getAttributeSpec(String elt, String
>> attrName)
>> + {
>> + String elementName = elt.intern();
>> +
>> + // Look up attribute in type map for this element
>> + ClassModel classModel = getClassModel(elementName);
>> +
>> + if (classModel != null) {
>> + return classModel.getAttribute(attrName);
>> + } else {
>> + return null;
>> + }
>> + }
>> +
>> + /**
>> * checks whether a method with a given method is allowed to
>> be overridden
>> * @param elt an Element name
>> * @param methodName a method name
>>
>>
>> _______________________________________________
>> Laszlo-checkins mailing list
>> Laszlo-checkins at openlaszlo.org
>> http://www.openlaszlo.org/mailman/listinfo/laszlo-checkins
>
--
Don Anderson
Java/C/C++, Berkeley DB, systems consultant
Voice: 617-547-7881
Email: dda at ddanderson.com
WWW: http://www.ddanderson.com
More information about the Laszlo-dev
mailing list