[Laszlo-dev] [Laszlo-checkins] r7200 - in openlaszlo/trunk/WEB-INF/lps: misc schema server/src/org/openlaszlo/compiler
P T Withington
ptw at pobox.com
Sat Nov 10 15:04:50 PST 2007
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
More information about the Laszlo-dev
mailing list