Tucker, I'm resending this review after 'svn up'. Do you have time to review this? - Don
Change dda-20110407-qa4 by [email protected] on 2011-04-07 09:46:30 EDT in /Users/dda/laszlo/src/svn/openlaszlo/trunk-c for http://svn.openlaszlo.org/openlaszlo/trunk Summary: Emit reference classes for all LFC classes that do not have tags New Features: Bugs Fixed: LPP-9873 : with(this) emitted for in class extending LzEventable Technical Reviewer: ptw (pending) QA Reviewer: (pending) Doc Reviewer: (pending) Documentation: Release Notes: Overview: In previous commits, the issue of having reference classes for LFC classes that were not associated with tags was deferred. This commit fixes that deficiency. The primary mechanism is for the js2doc 'schemabuilder' to create dummy lzx tags for any public LFC javascript class that does not have an lzx tag. For example LzEventable is given tag "$tag$LzEventable". A tag name starting with '$' is illegal to use in XML, so it amounts to a private name, used internally only to identify inheritance. This approach firmly establishes a 1-1 relationship between tags and Javascript classes, and allows these classes to be emitted as reference classes while keeping the tag compiler clean. The end result is that: - methods of classes written in script that extend (previously) non-tagged classes, such as LzEventable, will now be considered for 'with(this) removal' - The LFC class heirarchy is now completely known, except for method arg types, and can be used for other purposes: helping to identify globals, helping to evaluate 'is' expressions, etc. Details: test/lztest/lztest-class-impl.lzx - added test case that shows the error in LPP-9873. If a with(this) is generated for that case, the 'pragma errorWithThis' results in a compile error (that behavior was tested too). - Added 'pragma errorWithThis' to several existing tests to ensure that with(this) is not emitted as a regression in the future. test/smoke/compiler.lzl - disabled some test functions that now fail given the 'complete knowledge'. For these, with(this) removal is now errantly done, even though a new transformation is needed, see http://jira.openlaszlo.org/jira/browse/LPP-9822 . - added tests for Aliasing using a non-LFC class to parallel tests that use an LFC class. These remain partially disabled due to LPP-9822 . WEB-INF/lps/schema/lfc-undeclared.lzx - Removed 'setAttribute' and 'ondestroy' from the list of added methods/events for <node>. These are from LzEventable (which node inherits from), and had been inserted previously to cover for this class missing from the reference class hierarchy. WEB-INF/lps/server/src/org/openlaszlo/js2doc/SchemaBuilder.java - For classes that do not have an lzxname, the class name prefixed by "$tag$" is used. - Guaranteeing that all emitted classes have an lzxname cleans up some code. WEB-INF/lps/server/src/org/openlaszlo/compiler/ClassCompiler.java - Removed special case code for a class with null tagName and non-null jsname. - Changed addClassModel() signature to pass through the jsname, if it exists, into the ClassModel. WEB-INF/lps/server/src/org/openlaszlo/compiler/ViewCompiler.java WEB-INF/lps/server/src/org/openlaszlo/compiler/TypeCompiler.java WEB-INF/lps/server/src/org/openlaszlo/compiler/ViewSchema.java WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java - Changed addClassModel() signature to pass through the jsname, if it exists, into the ClassModel. WEB-INF/lps/server/src/org/openlaszlo/compiler/ClassModel.java - className is now a constructor arg, if it exists, it will be the JS name. Tests: - smoke, lztest, runlzunit (lztest incorporates a test that shows the original problem) - Examined .js produced in test/lztest, all but 20 with(this) occurrences have gone away (there were about 100 before, most attributable to inheritance from LzEventable). Of the remaining 20, 1 of these is an intentional test case that uses with(somevariable), the others result from an explicit with(this) used in: lps/components/lztest/lztestmanager.lzx that is included in all the test cases. Files: M test/lztest/lztest-class-impl.lzx M test/smoke/compiler.lzl M WEB-INF/lps/schema/lfc-undeclared.lzx M WEB-INF/lps/server/src/org/openlaszlo/js2doc/SchemaBuilder.java M WEB-INF/lps/server/src/org/openlaszlo/compiler/ClassCompiler.java M WEB-INF/lps/server/src/org/openlaszlo/compiler/ViewCompiler.java M WEB-INF/lps/server/src/org/openlaszlo/compiler/TypeCompiler.java M WEB-INF/lps/server/src/org/openlaszlo/compiler/ViewSchema.java M WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java M WEB-INF/lps/server/src/org/openlaszlo/compiler/ClassModel.java M build-tools/runlzunit.sh Changeset: http://svn.openlaszlo.org/openlaszlo/patches/dda-20110407-qa4.tar -- Don Anderson Java/C/C++, Berkeley DB, systems consultant voice: 617-306-2057 email: [email protected] www: http://www.ddanderson.com blog: http://libdb.wordpress.com
