Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "VJET/Validation Requirements"
(New page: === JSDT parse – produces syntax errors lists === === Translation errors – errors are not reported to user === === Resolution errors – errors are reported to user === === Semantic va...) |
|||
(One intermediate revision by the same user not shown) | |||
Line 167: | Line 167: | ||
==== Ability to default problems to error, warning, informational as required. ==== | ==== Ability to default problems to error, warning, informational as required. ==== | ||
=== Extension points for additional custom validation. === | === Extension points for additional custom validation. === | ||
+ | |||
+ | |||
+ | = Misc = | ||
+ | Nested types, all flavors and access control. | ||
+ | |||
+ | |||
+ | Do we support doing an anonymous inner class. <nowiki>This could be done with any ctype, ctype //< abstract or itype.</nowiki> | ||
+ | |||
+ | |||
+ | = Completions, Proposals, Validations = | ||
+ | There are relationships between these elements. First, lets describe each first. | ||
+ | |||
+ | |||
+ | Examples | ||
+ | |||
+ | |||
+ | if … | ||
+ | |||
+ | what follows must be a left paren. | ||
+ | |||
+ | |||
+ | SomeType. … | ||
+ | |||
+ | what follows are the various static properties and methods. | ||
+ | |||
+ | |||
+ | someInstance. … | ||
+ | |||
+ | what follows are the various instance properties and methods | ||
+ | |||
+ | |||
+ | if (someBoolExpr) { }… | ||
+ | |||
+ | what follows could be an else or some naked-target | ||
+ | |||
+ | |||
+ | somePkg. … | ||
+ | |||
+ | What follows are any types at the somePkg level as well as an subPackages | ||
+ | |||
+ | |||
+ | # | ||
+ | ## '''''Scope''''' | ||
+ | |||
+ | These are the varying nested levels in which completions, proposals and validations occur. The scopes themselves are basically a tree, with each branch potentially being represented by a stack. At certain levels, not all branches may be needed or present at a give time. | ||
+ | |||
+ | |||
+ | For example we start with something like this… | ||
+ | |||
+ | |||
+ | '''Global (native JS types)''' | ||
+ | |||
+ | '''VjO Bootstrap''' | ||
+ | |||
+ | '''VjO Libs''' | ||
+ | |||
+ | '''''AJAX''''' | ||
+ | |||
+ | '''''Others''''' | ||
+ | |||
+ | '''HTML DOM Types''' | ||
+ | |||
+ | '''Specific Browser Types''' | ||
+ | |||
+ | |||
+ | # | ||
+ | ## '''''Context''''' | ||
+ | |||
+ | What is the user trying to achieve? Are they typing where a package name is expected, a type, an instance method, a Boolean expr for a conditional etc… | ||
+ | |||
+ | # | ||
+ | ## '''''Naked Target''''' | ||
+ | |||
+ | This is the term to describe what is possible in open whitespace where nothing else has been typed yet. For example if we are in the middle of a completed main(…) method, what proposals do you suggest at the …? | ||
+ | |||
+ | |||
+ | main: function(args) { | ||
+ | |||
+ | … | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | # | ||
+ | ## '''''Completions''''' | ||
+ | |||
+ | A completion is: | ||
+ | |||
+ | * an interactive authoring aid | ||
+ | * the current type being authored may not be syntactically or semantically complete | ||
+ | * may provide a fragment, skeleton, to complete expression/statement | ||
+ | * can take into account other semantics such as VjO type structure | ||
+ | |||
+ | # | ||
+ | ## '''''Proposals''''' | ||
+ | |||
+ | A proposal is: | ||
+ | |||
+ | * an interactive authoring aid | ||
+ | * the current type being authored may not be syntactically or semantically complete | ||
+ | * describes ''everything'' that is known at a given scope/context in a source unit | ||
+ | * uses information from the type space | ||
+ | |||
+ | * uses information that can come from syntax options | ||
+ | * normally active at the “dot” in expressions/statements | ||
+ | |||
+ | # | ||
+ | ## '''''Validations''''' | ||
+ | |||
+ | * Can take place at authoring time | ||
+ | * Can take place on completed source units | ||
+ | * Needs all the same information that completions and proposals do | ||
+ | * Need to related back to specific line/col numbers for errors | ||
+ | * Detailed messages are essential since errors may be in code that is not familiar to developer (i.e. their change broke code in someone else’s area) | ||
+ | |||
+ | = General approach and guidelines = | ||
+ | Semantic analysis should pay attention to functionally correct results first and then think of optimizations. This is not to say don’t think about optimizations, it’s just that we have such a limited time to pull this off. | ||
+ | |||
+ | |||
+ | The core data structures are graphs: | ||
+ | |||
+ | * syntax AST | ||
+ | * type space (graph with API’s) | ||
+ | |||
+ | = Issues = | ||
+ | We haven’t really addressed the cases where JavaScript semantics would be trumped by VjO type semantics. This might occur with Arrays, Strings and various implicit type conversions such as the + operator and Strings or such. | ||
+ | |||
+ | = Environment Specifics = | ||
+ | Part of the overall validation should take into account: | ||
+ | |||
+ | * Version of JavaScript | ||
+ | * Specific Browser/OS Version combination | ||
+ | |||
+ | = Contexts and Scopes = | ||
+ | I think we need to better define all the terms we are using to do Semantic Analysis. | ||
+ | |||
+ | |||
+ | Scopes are the levels at which specific elements are defined and/or made available. | ||
+ | |||
+ | |||
+ | = Scopes = | ||
+ | All of the available information we need | ||
+ | |||
+ | # | ||
+ | ## '''''Global (native JS Types)''''' | ||
+ | |||
+ | '''VjO Bootstrap (vjo, vjo.Class, vjo.Object, vjo.Enum)''' | ||
+ | |||
+ | |||
+ | '''AJAX (service engine)''' | ||
+ | |||
+ | |||
+ | '''HTML DOM Types (classic DOM)''' | ||
+ | |||
+ | |||
+ | '''Specific Browser Types (per browser type)''' | ||
+ | |||
+ | |||
+ | '''Package''' | ||
+ | |||
+ | |||
+ | '''Type''' | ||
+ | |||
+ | under package space if we assume “default” name for a package. In actuality, we can just assume top level packages and top level types are at the same space. | ||
+ | |||
+ | '''''Class''''' | ||
+ | |||
+ | '''Static''' | ||
+ | |||
+ | |||
+ | '''Instance''' | ||
+ | |||
+ | |||
+ | '''Initializer''' | ||
+ | |||
+ | |||
+ | '''''Interface''''' | ||
+ | |||
+ | '''Static''' | ||
+ | |||
+ | |||
+ | '''Instance''' | ||
+ | |||
+ | |||
+ | '''Initializaer''' | ||
+ | |||
+ | |||
+ | '''''Enum''''' | ||
+ | |||
+ | '''Static''' | ||
+ | |||
+ | |||
+ | '''Instance''' | ||
+ | |||
+ | |||
+ | '''Initializer''' | ||
+ | |||
+ | |||
+ | '''''Mixin''''' | ||
+ | |||
+ | '''Static''' | ||
+ | |||
+ | |||
+ | '''Instance''' | ||
+ | |||
+ | |||
+ | '''''OType''''' | ||
+ | |||
+ | '''Defs''' | ||
+ | |||
+ | |||
+ | # | ||
+ | ## '''''Member''''' | ||
+ | |||
+ | leftSide : rightHandExpr | ||
+ | |||
+ | # | ||
+ | ## '''''Method''''' | ||
+ | |||
+ | <nowiki>name: function([args]) [throws A [ ,B ,C…]]</nowiki> | ||
+ | |||
+ | |||
+ | While within a method args trump | ||
+ | |||
+ | '''Constructor''' | ||
+ | |||
+ | specific checks with super | ||
+ | |||
+ | |||
+ | # | ||
+ | ## '''''Statement''''' | ||
+ | |||
+ | Statements provide a scope where only certain other elements can occur. Much of the statements structure should come from syntactical checks. | ||
+ | |||
+ | # | ||
+ | ## '''''Expression''''' | ||
+ | |||
+ | = Relationship to TypeSpace and VJET = | ||
+ | The validator will live outside of the TS. | ||
+ | |||
+ | The validator will leverage information from the TS. | ||
+ | |||
+ | VJET will use the validator to identify semantic warnings/errors etc… that should be reported to tool. | ||
+ | |||
+ | Validation should also work in batch or build mode where errors would be reported to a log or console. Similar to what javac would do. | ||
+ | |||
+ | |||
+ | = Contexts = | ||
+ | are the combination of activity and scope something is being validated. | ||
+ | |||
+ | |||
+ | = Parsing = | ||
+ | = Syntax = | ||
+ | We need to completely define “what” is catchable in our language grammar that is syntax oriented. For example, are we making sure that you can only use the keyword break in a loop or case statement. We need to know these so that we can determine what part of our processing: syntax, grammar or semantic are where we need to defines constraints and rules. | ||
+ | |||
+ | |||
+ | = Keywords = | ||
+ | You should avoid using these reserved words and keywords as function or variable names as JavaScript has reserved these words for its own use. | ||
+ | |||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | colspan="8" style="border:0.0361in double #808080;padding:0.025in;"| <center>'''JavaScript Reserved Words'''</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| break | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| continue | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| do | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| for | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| import | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| new | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| this | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| void | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| case | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| default | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| else | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| function | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| in | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| return | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| typeof | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| while | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| comment | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| delete | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| export | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| if | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| label | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| switch | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| var | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| with | ||
+ | |||
+ | |} | ||
+ | All keywords must not be allowed to be used in: | ||
+ | |||
+ | * package names | ||
+ | * type names (any) | ||
+ | * member names | ||
+ | * method names | ||
+ | * formal argument names | ||
+ | * variable names | ||
+ | * loop variables | ||
+ | |||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | colspan="3" style="border:0.0361in double #808080;padding:0.025in;"| <center>'''Java Keywords (Reserved by JavaScript)'''</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| abstract | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| implements | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| protected | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| boolean | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| instanceOf | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| public | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| byte | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| int | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| short | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| char | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| interface | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| static | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| double | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| long | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| synchronized | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| false | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| native | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| throws | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| final | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| null | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| transient | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| float | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| package | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| true | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| goto | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| private | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | colspan="3" style="border:0.0361in double #808080;padding:0.025in;"| <center>'''ECMAScipt Reserved Words'''</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| catch | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| enum | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| throw | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| class | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| extends | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| try | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| const | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| finally | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| debugger | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| super | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | colspan="5" style="border:0.0361in double #808080;padding:0.025in;"| <center>'''Other JavaScript Keywords'''</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| alert | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| eval | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Link | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| outerHeight | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| scrollTo | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Anchor | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| FileUpload | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| location | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| outerWidth | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| Select | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Area | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| find | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Location | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Packages | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| self | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| arguments | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| focus | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| locationbar | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| pageXoffset | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| setInterval | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Array | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Form | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Math | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| pageYoffset | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| setTimeout | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| assign | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Frame | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| menubar | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| parent | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| status | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| blur | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| frames | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| MimeType | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| parseFloat | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| statusbar | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Boolean | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Function | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| moveBy | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| parseInt | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| stop | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Button | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| getClass | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| moveTo | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Password | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| String | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| callee | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Hidden | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| name | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| personalbar | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| Submit | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| caller | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| history | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| NaN | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Plugin | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| sun | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| captureEvents | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| History | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| navigate | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| print | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| taint | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Checkbox | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| home | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| navigator | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| prompt | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| Text | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| clearInterval | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Image | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Navigator | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| prototype | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| Textarea | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| clearTimeout | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Infinity | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| netscape | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Radio | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| toolbar | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| close | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| innerHeight | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Number | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| ref | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| top | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| closed | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| innerWidth | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Object | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| RegExp | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| toString | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| confirm | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| isFinite | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| onBlur | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| releaseEvents | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| unescape | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| constructor | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| isNan | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| onError | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Reset | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| untaint | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Date | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| java | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| onFocus | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| resizeBy | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| unwatch | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| defaultStatus | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| JavaArray | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| onLoad | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| resizeTo | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| valueOf | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| document | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| JavaClass | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| onUnload | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| routeEvent | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| watch | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Document | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| JavaObject | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| open | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| scroll | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| window | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Element | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| JavaPackage | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| opener | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| scrollbars | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| Window | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| escape | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| length | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| Option | ||
+ | | style="border-top:0.0361in double #808080;border-bottom:0.0361in double #808080;border-left:0.0361in double #808080;border-right:none;padding:0.025in;"| scrollBy | ||
+ | | style="border:0.0361in double #808080;padding:0.025in;"| | ||
+ | |||
+ | |} | ||
+ | = Some of the most common/meaningful errors to catch = | ||
+ | # | ||
+ | ## '''''Unknown references''''' | ||
+ | |||
+ | In JavaScript the most common errors are related to making a reference to an object or property of an object that does not exist. | ||
+ | |||
+ | |||
+ | This check is at the root of many other checks as well (such as visibility and access control). | ||
+ | |||
+ | # | ||
+ | ## '''''Dependency''''' | ||
+ | |||
+ | Based on some dependency mechanism – usually at a project level (ie above the normal Java package/access control levels) means you can’t “see” a specific type. | ||
+ | |||
+ | # | ||
+ | ## '''''Access Control''''' | ||
+ | |||
+ | Access control is based on how an elements access is defined and who can see it based on a given access context. This is different from Dependency which says ''independent'' of access control whether you have the right to see a type at all. | ||
+ | |||
+ | |||
+ | # | ||
+ | ## '''''Methods''''' | ||
+ | |||
+ | '''Wrong number or arguments''' | ||
+ | |||
+ | |||
+ | '''Should or should not return a value''' | ||
+ | |||
+ | |||
+ | '''Not returning the correct type''' | ||
+ | |||
+ | |||
+ | = Packages = | ||
+ | All of the various VjO types can have a package component to their names. Here are some rules with packages: | ||
+ | |||
+ | * Each subpackage name must not collide with a global set of keywords | ||
+ | * Each subpackage levels namespace must be unique between other subpackage names at that level as well as any other VjO types at that level | ||
+ | |||
+ | = VjO Sections = | ||
+ | All of the VjO types are composed of sections. These sections describe the specific type being created, various declarations and then a required ending section (.endType()). A section is really a method that takes an Object Literal as an argument. | ||
+ | |||
+ | |||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Key</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Note</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Green | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Required. Each type starts with a section that says what kind of type we are defining. | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Yellow | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Optional. Your type may or may not have this section depending on your needs. | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Red | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Disallowed. This section is not valid for the specific type in question | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| 0 .. n | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| You can have 0 or more of these sections. A single section can contain multiple definitions for convenience. | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| 0 .. 1 | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| You can have 0 or 1 of these sections. | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| 1 | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| You must have only one of these sections. | ||
+ | |||
+ | |} | ||
+ | When looking at the following table, find the type (class, interface, enum, etc…) you are interested in defining. The column for that type describes the sections that are valid for that type. The order of the rows (from top to bottom) for that column, is the order you should follow in your types definition. | ||
+ | |||
+ | |||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>sections</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>class/</center> | ||
+ | |||
+ | <center>abstract class</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>interface</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>enum</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>mixin</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>otype</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| vjo-type | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>.ctype</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>.itype</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>.etype</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>.mtype</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>.otype</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .defs | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>1</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .values | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .options | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. 1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .needs | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .needsLib | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .inherits | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. 1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .satisfies | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .requires | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .expects | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .mixin | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .mixinProps | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. n</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .props | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. 1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. 1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. 1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. 1</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .protos | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. 1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. 1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. 1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. 1</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .inits | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. 1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. 1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>0 .. 1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>X</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .endType | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>1</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>1</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>1</center> | ||
+ | |||
+ | |} | ||
+ | = Access Control and Modifiers = | ||
+ | Access control is based on how an elements access is defined and who can see it based on a given access context. This is different from Dependency which says ''independent'' of access control whether you have the right to see a type at all. | ||
+ | |||
+ | |||
+ | All access control and modifiers are defined using the structured VjO comment syntax. Applying these access controls and modifiers are leveraged by the VjO build process and VJET. | ||
+ | |||
+ | # | ||
+ | ## '''''public''''' | ||
+ | |||
+ | # | ||
+ | ## '''''default''''' | ||
+ | |||
+ | # | ||
+ | ## '''''protected''''' | ||
+ | |||
+ | # | ||
+ | ## '''''private''''' | ||
+ | |||
+ | # | ||
+ | ## '''''friend''''' | ||
+ | |||
+ | # | ||
+ | ## '''''Access Table''''' | ||
+ | |||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| public | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| protected | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <nowiki><default></nowiki> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| private | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| abstract | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| final | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| transient | ||
+ | |||
+ | Not supported yet | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| ctype | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| etype | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes?</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes?</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| itype | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes?</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| otype | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| mtype | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| member | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| method | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| constructor | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| return type | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| argument | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Yes</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| local variable | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| for loop variable | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| for in variable | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>No</center> | ||
+ | |||
+ | |} | ||
+ | = Who is “this” = | ||
+ | Who does “this” refer to while in the various VjO definition sections? The | ||
+ | |||
+ | |||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>sections</center> | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Who does “this” refer to</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| vjo-type | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Not applicable | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .options | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Not applicable | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .needs | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Not applicable | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .needsLib | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Not applicable | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .inherits | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Not applicable | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .satisfies | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Not applicable | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .requires | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Not applicable | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .expects | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Not applicable | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .mixin | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Not applicable | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .mixinProps | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Not applicable | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .props | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| The type being defined (props – statics members) | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .inits | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| The type being defined (props – statics members) | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .protos | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| The instance (prototype – instance members) | ||
+ | |||
+ | |- | ||
+ | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| .endType | ||
+ | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Not applicable | ||
+ | |||
+ | |} | ||
+ | = Sections = | ||
+ | Ideally we can use tables to define these validations. | ||
+ | |||
+ | |||
+ | # | ||
+ | ## '''''order of sections''''' | ||
+ | |||
+ | # | ||
+ | ## '''''certain sections only make sense for certain type''''' | ||
+ | |||
+ | # | ||
+ | ## '''''how many of each section can occur''''' | ||
+ | |||
+ | # | ||
+ | ## '''''arguments for each section''''' | ||
+ | |||
+ | # | ||
+ | ## '''''Each Section''''' | ||
+ | |||
+ | '''ctype''' | ||
+ | |||
+ | |||
+ | '''otype''' | ||
+ | |||
+ | |||
+ | '''mtype''' | ||
+ | |||
+ | |||
+ | '''itype''' | ||
+ | |||
+ | |||
+ | '''etype''' | ||
+ | |||
+ | |||
+ | '''options''' | ||
+ | |||
+ | |||
+ | '''defs''' | ||
+ | |||
+ | |||
+ | '''values''' | ||
+ | |||
+ | |||
+ | '''needs''' | ||
+ | |||
+ | |||
+ | '''.needs'''('Proc') | ||
+ | |||
+ | '''.needs'''('util.Proc') | ||
+ | |||
+ | |||
+ | '''.needs'''<nowiki>([</nowiki>'Proc']) | ||
+ | |||
+ | '''.needs'''<nowiki>([</nowiki>'util.Proc']) | ||
+ | |||
+ | |||
+ | '''.needs'''<nowiki>([</nowiki>'util.Proc', 'util.Proc2', 'Proc3']) | ||
+ | |||
+ | |||
+ | What is the reason we use an array? This may seem easier for our implementations but not necessarily easier for someone using it. | ||
+ | |||
+ | |||
+ | Having something like a comma-delimited single-string-literal seems easier to type and read. | ||
+ | |||
+ | |||
+ | '''.needs'''('util.Proc, util.Proc2, Proc3') | ||
+ | |||
+ | |||
+ | '''needsLib''' | ||
+ | |||
+ | |||
+ | '''inherits''' | ||
+ | |||
+ | |||
+ | '''satisfies''' | ||
+ | |||
+ | |||
+ | '''requires''' | ||
+ | |||
+ | |||
+ | '''expects''' | ||
+ | |||
+ | |||
+ | '''mixin''' | ||
+ | |||
+ | |||
+ | '''mixinProps''' | ||
+ | |||
+ | |||
+ | '''props''' | ||
+ | |||
+ | |||
+ | '''protos''' | ||
+ | |||
+ | |||
+ | '''inits''' | ||
+ | |||
+ | |||
+ | '''endType''' | ||
+ | |||
+ | |||
+ | = Namespace = | ||
+ | proper names such as a.b.c.Type | ||
+ | |||
+ | uniqueness – can’t have package a.b.C and a type a.b.C | ||
+ | |||
+ | types must be unique at each package level | ||
+ | |||
+ | |||
+ | = Modifiers = | ||
+ | # | ||
+ | ## '''''abstract''''' | ||
+ | |||
+ | Only ctypes can be abstract | ||
+ | |||
+ | Only instance methods can be defined abstract and only in an abstract ctype | ||
+ | |||
+ | # | ||
+ | ## '''''final''''' | ||
+ | |||
+ | ctypes but not abstract ctypes | ||
+ | |||
+ | methods | ||
+ | |||
+ | not constructors | ||
+ | |||
+ | members | ||
+ | |||
+ | arguments | ||
+ | |||
+ | # | ||
+ | ## '''''transient (not in use yet)''''' | ||
+ | |||
+ | = Error Messages = | ||
+ | = Misc = | ||
+ | = Arrays = | ||
+ | = Object Literals = | ||
+ | = Type References = | ||
+ | = Function References = | ||
+ | = Operators = | ||
+ | # | ||
+ | ## '''''special''''' | ||
+ | |||
+ | '''arguments''' | ||
+ | |||
+ | This is the built in variable for all function invocations. | ||
+ | |||
+ | |||
+ | doit: function(a, b) { <nowiki>//< void doit(int, boolean) {</nowiki> | ||
+ | |||
+ | <nowiki>var avalue = arguments[0] ; //< int</nowiki> | ||
+ | |||
+ | <nowiki>var bvalue = arguments[1] ; //< </nowiki> | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | '''new''' | ||
+ | |||
+ | |||
+ | ''objectName'' = new ''objectType''(''param1''<nowiki> [,</nowiki>''param2''<nowiki>] ...[,</nowiki>''paramN'']) | ||
+ | |||
+ | '''Parameters ''' | ||
+ | |||
+ | objectName | ||
+ | |||
+ | Name of the new object instance. | ||
+ | |||
+ | objectType | ||
+ | |||
+ | Object type. It must be a function that defines an object type. | ||
+ | |||
+ | param1...paramN | ||
+ | |||
+ | Property values for the object. These properties are parameters defined for the objectType function. | ||
+ | |||
+ | |||
+ | '''instanceof''' | ||
+ | |||
+ | |||
+ | '''typeof''' | ||
+ | |||
+ | |||
+ | forms: | ||
+ | |||
+ | * typeof operand | ||
+ | * typeof (operand) | ||
+ | |||
+ | operand can really be any value or reference | ||
+ | |||
+ | |||
+ | This table summarizes the possible return values of typeof: | ||
+ | |||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | style="border:none;padding:0.0104in;"| Type | ||
+ | | style="border:none;padding:0.0104in;"| Result | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0104in;"| Undefined | ||
+ | | style="border:none;padding:0.0104in;"| "undefined" | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0104in;"| Null | ||
+ | | style="border:none;padding:0.0104in;"| "object" | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0104in;"| Boolean | ||
+ | | style="border:none;padding:0.0104in;"| "boolean" | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0104in;"| Number | ||
+ | | style="border:none;padding:0.0104in;"| "number" | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0104in;"| String | ||
+ | | style="border:none;padding:0.0104in;"| "string" | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0104in;"| Host object (provided by the JS environment) | ||
+ | | style="border:none;padding:0.0104in;"| ''Implementation-dependent'' | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0104in;"| <nowiki>Function object (implements [[Call]] in ECMA-262 terms)</nowiki> | ||
+ | | style="border:none;padding:0.0104in;"| "function" | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0104in;"| Any other object | ||
+ | | style="border:none;padding:0.0104in;"| "object" | ||
+ | |||
+ | |} | ||
+ | '''delete''' | ||
+ | |||
+ | righthand has to be property or function. | ||
+ | |||
+ | |||
+ | We have issues is whether or not delete should even be allowed on VjO types since those types are based on full typespace consistency. | ||
+ | |||
+ | |||
+ | Dynamic objects created outside of VjO typespace should be ok. | ||
+ | |||
+ | |||
+ | We don’t have the notion of sealed types or sealed objects yet. | ||
+ | |||
+ | # | ||
+ | ## '''''Arithmetic''''' | ||
+ | |||
+ | '''+''' | ||
+ | |||
+ | |||
+ | '''-''' | ||
+ | |||
+ | |||
+ | '''<nowiki>*</nowiki>''' | ||
+ | |||
+ | |||
+ | '''/''' | ||
+ | |||
+ | |||
+ | '''%''' | ||
+ | |||
+ | |||
+ | '''++''' | ||
+ | |||
+ | |||
+ | '''--''' | ||
+ | |||
+ | |||
+ | # | ||
+ | ## '''''Assignment''''' | ||
+ | |||
+ | '''<nowiki>=</nowiki>''' | ||
+ | |||
+ | |||
+ | '''+=''' | ||
+ | |||
+ | |||
+ | '''-=''' | ||
+ | |||
+ | |||
+ | '''<nowiki>*=</nowiki>''' | ||
+ | |||
+ | |||
+ | '''/=''' | ||
+ | |||
+ | |||
+ | '''%=''' | ||
+ | |||
+ | |||
+ | # | ||
+ | ## '''''Comparison''''' | ||
+ | |||
+ | '''<nowiki>==</nowiki>''' | ||
+ | |||
+ | |||
+ | '''!=''' | ||
+ | |||
+ | |||
+ | '''>''' | ||
+ | |||
+ | |||
+ | '''<nowiki><</nowiki>''' | ||
+ | |||
+ | |||
+ | '''>=''' | ||
+ | |||
+ | |||
+ | '''<nowiki><=</nowiki>''' | ||
+ | |||
+ | |||
+ | # | ||
+ | ## '''''Logical''''' | ||
+ | |||
+ | '''&&''' | ||
+ | |||
+ | |||
+ | '''||''' | ||
+ | |||
+ | |||
+ | '''!''' | ||
+ | |||
+ | |||
+ | # | ||
+ | ## '''''Conditional (?:)''''' | ||
+ | |||
+ | = Statements = | ||
+ | # | ||
+ | ## '''''if-else''''' | ||
+ | |||
+ | # | ||
+ | ## '''''switch''''' | ||
+ | |||
+ | # | ||
+ | ## '''''for loop''''' | ||
+ | |||
+ | # | ||
+ | ## '''''while loop''''' | ||
+ | |||
+ | # | ||
+ | ## '''''break loops''''' | ||
+ | |||
+ | # | ||
+ | ## '''''for … in''''' | ||
+ | |||
+ | for (variable in obj) { … } | ||
+ | |||
+ | |||
+ | The variable name becomes a new scoped name. | ||
+ | |||
+ | # | ||
+ | ## '''''try … catch''''' | ||
+ | |||
+ | # | ||
+ | ## '''''throw''''' | ||
+ | |||
+ | # | ||
+ | ## '''''onerror''''' | ||
+ | |||
+ | # | ||
+ | ## '''''with''''' | ||
+ | |||
+ | This is a tricky one as it creates a new scope for target object in the with(…) | ||
+ | |||
+ | |||
+ | function foo(){ | ||
+ | |||
+ | <nowiki>with(document.forms[0])</nowiki> { | ||
+ | |||
+ | <nowiki>var x = elements[0].value;</nowiki> | ||
+ | |||
+ | <nowiki>var y = elements[1].value;</nowiki> | ||
+ | |||
+ | <nowiki>with(elements[2])</nowiki> { | ||
+ | |||
+ | <nowiki>var z = options[selectedIndex].text</nowiki> | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | = To be figured out = | ||
+ | JavaScript has built in values such as NaN, null and undefined that need to be thought out in terms of how they fit with our overall typing scheme. | ||
+ | |||
+ | |||
+ | For example an if or while etc… is based on a Boolean expression. However an if (somethingThatIsUndefined) is a common check in JavaScript. | ||
+ | |||
+ | |||
+ | == Type Check == | ||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''No. '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Rule Description '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Applicable Jst Node Types '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Code Suggestion '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Status/ONOFF '''</center> | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 1 | ||
+ | | style="border:none;padding:0.0194in;"| validity of assignment; rhs value is assignable to lhs value; | ||
+ | | style="border:none;padding:0.0194in;"| AssignExpr | ||
+ | | style="border:none;padding:0.0194in;"| TypeCheckUtil#isAssignable | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 2 | ||
+ | | style="border:none;padding:0.0194in;"| type is allowed for the operations; | ||
+ | | style="border:none;padding:0.0194in;"| PostfixExpr, PrefixExpr, InfixExpr | ||
+ | | style="border:none;padding:0.0194in;"| TypeCheckUtil#isAssignable | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 3 | ||
+ | | style="border:none;padding:0.0194in;"| array accessing index must be string/int | ||
+ | | style="border:none;padding:0.0194in;"| ArrayAccessExpr | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 5 | ||
+ | | style="border:none;padding:0.0194in;"| items' type are compatible with array def | ||
+ | | style="border:none;padding:0.0194in;"| ArrayCreationExpr, JstArrayInitializer, ArrayLiteral | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 6 | ||
+ | | style="border:none;padding:0.0194in;"| id is array type | ||
+ | | style="border:none;padding:0.0194in;"| ArrayCreationExpr | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| Yet DONE/OFF | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 8 | ||
+ | | style="border:none;padding:0.0194in;"| cast to is assignable to cast from (Only used for Java2JS, skip this one) | ||
+ | | style="border:none;padding:0.0194in;"| CastExpr | ||
+ | | style="border:none;padding:0.0194in;"| revised | ||
+ | | style="border:none;padding:0.0194in;"| DONE/OFF | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 9 | ||
+ | | style="border:none;padding:0.0194in;"| then and else are compatible type | ||
+ | | style="border:none;padding:0.0194in;"| ConditionalExpr | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/OFF | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 10 | ||
+ | | style="border:none;padding:0.0194in;"| argument type satifies the parameter definition of the JstMethod (overloading method included) | ||
+ | | style="border:none;padding:0.0194in;"| MtdInvocationExpr, ObjCreationExpr | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 11 | ||
+ | | style="border:none;padding:0.0194in;"| generics, JstTypeWithArgs satisfies JstType#getParamTypes boundaries | ||
+ | | style="border:none;padding:0.0194in;"| MtdInvocationExpr, FieldAccessExpr | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 12 | ||
+ | | style="border:none;padding:0.0194in;"| exception type in CatchStmt is defined in the functions used in the block (Need to revisit this one later, can turn it off or skip it) | ||
+ | | style="border:none;padding:0.0194in;"| TryStmt | ||
+ | | style="border:none;padding:0.0194in;"| revised | ||
+ | | style="border:none;padding:0.0194in;"| Yet DONE/OFF | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 13 | ||
+ | | style="border:none;padding:0.0194in;"| switch expr type matches expr type in CaseStmt (Need to revisit this one later, can turn it off or skip it) | ||
+ | | style="border:none;padding:0.0194in;"| SwitchStmt | ||
+ | | style="border:none;padding:0.0194in;"| revised | ||
+ | | style="border:none;padding:0.0194in;"| Done/OFF | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 14 | ||
+ | | style="border:none;padding:0.0194in;"| expr type matches function return type | ||
+ | | style="border:none;padding:0.0194in;"| RtnStmt | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| Done/ON | ||
+ | |||
+ | |} | ||
+ | == Hierachy/Structure == | ||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''No. '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Rule Description '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Applicable Jst Node Types '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Code Suggestion '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Status '''</center> | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 1 | ||
+ | | style="border:none;padding:0.0194in;"| Override method should have wider visibility | ||
+ | | style="border:none;padding:0.0194in;"| JstMethod | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 2 | ||
+ | | style="border:none;padding:0.0194in;"| Override method should not have ambiguous signature | ||
+ | | style="border:none;padding:0.0194in;"| JstMethod | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 4 | ||
+ | | style="border:none;padding:0.0194in;"| Mixin method should not conflict | ||
+ | | style="border:none;padding:0.0194in;"| JstMethod | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 5 | ||
+ | | style="border:none;padding:0.0194in;"| Mixin property should not conflict | ||
+ | | style="border:none;padding:0.0194in;"| JstProperty | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 6 | ||
+ | | style="border:none;padding:0.0194in;"| Methods defined in interface must be implemented in concrete type (ctype/etype) | ||
+ | | style="border:none;padding:0.0194in;"| JstType | ||
+ | | style="border:none;padding:0.0194in;"| revised | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 7 | ||
+ | | style="border:none;padding:0.0194in;"| Abstract methods in super type must be implemented in concrete class | ||
+ | | style="border:none;padding:0.0194in;"| JstType | ||
+ | | style="border:none;padding:0.0194in;"| revised | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 8 | ||
+ | | style="border:none;padding:0.0194in;"| case cannot fall thru (nice to have) | ||
+ | | style="border:none;padding:0.0194in;"| JstSwitchStmt | ||
+ | | style="border:none;padding:0.0194in;"| revised | ||
+ | | style="border:none;padding:0.0194in;"| Yet DONE/OFF | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 9 | ||
+ | | style="border:none;padding:0.0194in;"| override method cannot be called in constuctor (revisit this later, skip for now) | ||
+ | | style="border:none;padding:0.0194in;"| JstConstructor | ||
+ | | style="border:none;padding:0.0194in;"| revised | ||
+ | | style="border:none;padding:0.0194in;"| Yet DONE/OFF | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| property/method cannot be both abstract and final | ||
+ | | style="border:none;padding:0.0194in;"| JstProperty, JstMethod | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 10 | ||
+ | | style="border:none;padding:0.0194in;"| return should present in function with a return type | ||
+ | | style="border:none;padding:0.0194in;"| JstFunction | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 11 | ||
+ | | style="border:none;padding:0.0194in;"| statement should be reachable | ||
+ | | style="border:none;padding:0.0194in;"| JstStatement | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| super type must be ctype for ctype, itype for itype | ||
+ | | style="border:none;padding:0.0194in;"| JstType | ||
+ | | style="border:none;padding:0.0194in;"| new | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| satifies type must be an interface | ||
+ | | style="border:none;padding:0.0194in;"| JstType | ||
+ | | style="border:none;padding:0.0194in;"| new | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| mixin type must be mtype | ||
+ | | style="border:none;padding:0.0194in;"| JstType | ||
+ | | style="border:none;padding:0.0194in;"| new | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 12 | ||
+ | | style="border:none;padding:0.0194in;"| mtype cannot have constructor | ||
+ | | style="border:none;padding:0.0194in;"| JstType | ||
+ | | style="border:none;padding:0.0194in;"| new | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| etype cannot be inherited | ||
+ | | style="border:none;padding:0.0194in;"| JstType | ||
+ | | style="border:none;padding:0.0194in;"| new | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| otype cannot have none objLiteral property or none-abstract method | ||
+ | | style="border:none;padding:0.0194in;"| JstType | ||
+ | | style="border:none;padding:0.0194in;"| new | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| otype cannot be nested as inner type or outer type | ||
+ | | style="border:none;padding:0.0194in;"| JstType | ||
+ | | style="border:none;padding:0.0194in;"| new | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |} | ||
+ | == Uniqueness == | ||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''No. '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Rule Description '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Applicable Jst Node Types '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Code Suggestion '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Status '''</center> | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 1 | ||
+ | | style="border:none;padding:0.0194in;"| local variable id should be unique within its scope | ||
+ | | style="border:none;padding:0.0194in;"| JstBlock | ||
+ | | style="border:none;padding:0.0194in;"| For JstVar & JstVars statements, we need to look up the symbol table for existing variables|functions of the same id, jstMethod need to add its parameters to the symbol tables as well | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 2 | ||
+ | | style="border:none;padding:0.0194in;"| name should be unique | ||
+ | | style="border:none;padding:0.0194in;"| ObjLiteral | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 3 | ||
+ | | style="border:none;padding:0.0194in;"| variable name conflict with reserved names in the scope, check Mr.P's document | ||
+ | | style="border:none;padding:0.0194in;"| JstBlock, JstType | ||
+ | | style="border:none;padding:0.0194in;"| revised | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 4 | ||
+ | | style="border:none;padding:0.0194in;"| Needs should not have ambiguous ref | ||
+ | | style="border:none;padding:0.0194in;"| JstType | ||
+ | | style="border:none;padding:0.0194in;"| .needs("a.b.c.D", '') is empty alias treated differently | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 5 | ||
+ | | style="border:none;padding:0.0194in;"| Method name should be unique | ||
+ | | style="border:none;padding:0.0194in;"| JstType | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 6 | ||
+ | | style="border:none;padding:0.0194in;"| Property name should be unique | ||
+ | | style="border:none;padding:0.0194in;"| JstType | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 7 | ||
+ | | style="border:none;padding:0.0194in;"| With scope's Property/Method name should not conflict with any local variables in the current scope (Need to revisit this later, can skip for now) | ||
+ | | style="border:none;padding:0.0194in;"| WithStmt | ||
+ | | style="border:none;padding:0.0194in;"| revised | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 8 | ||
+ | | style="border:none;padding:0.0194in;"| Redeclare any variable is NOT ok, even conflict with func parameters | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| same as no.1 | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 9 | ||
+ | | style="border:none;padding:0.0194in;"| Func args should be unique | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| new | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 10 | ||
+ | | style="border:none;padding:0.0194in;"| Global vars should be unique (Need to revisit this later) | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| Yet DONE/OFF | ||
+ | |||
+ | |} | ||
+ | == Accessibility (var, func, scope) == | ||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''No. '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Rule Description '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Applicable Jst Node Types '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Code Suggestion '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Status '''</center> | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 1 | ||
+ | | style="border:none;padding:0.0194in;"| qualifier must be defined | ||
+ | | style="border:none;padding:0.0194in;"| FieldAccessExpr, MtdInvocationExpr | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 2 | ||
+ | | style="border:none;padding:0.0194in;"| qualifier type must be initialized | ||
+ | | style="border:none;padding:0.0194in;"| FieldAccessExpr, MtdInvocationExpr, ObjCreationExpr, | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 3 | ||
+ | | style="border:none;padding:0.0194in;"| field/method must be defined/unless dynamic qualifier type presents | ||
+ | | style="border:none;padding:0.0194in;"| FieldAccessExpr, MtdInvocationExp, ObjCreationExpr, | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 4 | ||
+ | | style="border:none;padding:0.0194in;"| field/method must be visible | ||
+ | | style="border:none;padding:0.0194in;"| FieldAccessExpr, MtdInvocationExp, ObjCreationExp, | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 5 | ||
+ | | style="border:none;padding:0.0194in;"| static field/method cannot be accessed from instance scope | ||
+ | | style="border:none;padding:0.0194in;"| FieldAccessExpr, MtdInvocationExp, ObjCreationExp, | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 6 | ||
+ | | style="border:none;padding:0.0194in;"| field/func is defined | ||
+ | | style="border:none;padding:0.0194in;"| FieldAccessExpr, MtdInvocationExp, ObjCreationExp, | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 7 | ||
+ | | style="border:none;padding:0.0194in;"| none-static field/method cannot be accessed from static scope | ||
+ | | style="border:none;padding:0.0194in;"| FieldAccessExpr, MtdInvocationExp, ObjCreationExp, | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 8 | ||
+ | | style="border:none;padding:0.0194in;"| Ref types must be in Type space | ||
+ | | style="border:none;padding:0.0194in;"| JstType | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 9 | ||
+ | | style="border:none;padding:0.0194in;"| Ref types must have a needs or honory needs (inherience, implements, etc) | ||
+ | | style="border:none;padding:0.0194in;"| JstVars, JstProperty, JstMethod | ||
+ | | style="border:none;padding:0.0194in;"| com.ebay.dsf.jst.ts.util.JstTypeDependencyCollector | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |} | ||
+ | == Misc == | ||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''No. '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Rule Description '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Applicable Jst Node Types '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Code Suggestion '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Status '''</center> | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 1 | ||
+ | | style="border:none;padding:0.0194in;"| all final properties are initialized. | ||
+ | | style="border:none;padding:0.0194in;"| JstInitializer for static prop Constructor for instance prop | ||
+ | | style="border:none;padding:0.0194in;"| revised | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 2 | ||
+ | | style="border:none;padding:0.0194in;"| final variable should be assigned only in def or init (Can be turn off for now, revisite later) | ||
+ | | style="border:none;padding:0.0194in;"| JstType, JstInitializer | ||
+ | | style="border:none;padding:0.0194in;"| revised | ||
+ | | style="border:none;padding:0.0194in;"| DONE/OFF | ||
+ | |||
+ | |} | ||
+ | == Vjo Syntax == | ||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''No. '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Rule Description '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Applicable Jst Node Types '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Code Suggestion '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Status '''</center> | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 1 | ||
+ | | style="border:none;padding:0.0194in;"| All the method (TODO: list all methods) in "Vjo" type should called resonable times only except utils method. | ||
+ | | style="border:none;padding:0.0194in;"| scope: global, JstBlock of Vjo Type Def Tree in IScriptUnit | ||
+ | | style="border:none;padding:0.0194in;"| revised | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 2 | ||
+ | | style="border:none;padding:0.0194in;"| The method call sequence need to be right. | ||
+ | | style="border:none;padding:0.0194in;"| scope: global, JstBlock of Vjo Type Def Tree in IScriptUnit | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 3 | ||
+ | | style="border:none;padding:0.0194in;"| All the method (TODO: list all methods) in "xType" type should called resonable only except utils method. | ||
+ | | style="border:none;padding:0.0194in;"| CType, EType, ... | ||
+ | | style="border:none;padding:0.0194in;"| revised | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 4 | ||
+ | | style="border:none;padding:0.0194in;"| The method call sequence need to be right for "xType". | ||
+ | | style="border:none;padding:0.0194in;"| CType, EType, ... | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| DONE/ON | ||
+ | |||
+ | |} | ||
+ | == Coding Style (NOT in this release) == | ||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''No. '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Rule Description '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Applicable Jst Node Types '''</center> | ||
+ | | style="border:none;padding:0.0194in;"| <center>'''Code Suggestion '''</center> | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 1 | ||
+ | | style="border:none;padding:0.0194in;"| unused local variables (warning) | ||
+ | | style="border:none;padding:0.0194in;"| JstBlock | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 2 | ||
+ | | style="border:none;padding:0.0194in;"| empty block (warning) | ||
+ | | style="border:none;padding:0.0194in;"| JstBlock | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 3 | ||
+ | | style="border:none;padding:0.0194in;"| function params should not be assigned (warning) | ||
+ | | style="border:none;padding:0.0194in;"| JstBlock | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 4 | ||
+ | | style="border:none;padding:0.0194in;"| assignment has no effect (x=x) | ||
+ | | style="border:none;padding:0.0194in;"| AssignExpr | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 5 | ||
+ | | style="border:none;padding:0.0194in;"| possible accidental boolean assignment (if(a=b)) | ||
+ | | style="border:none;padding:0.0194in;"| IfStatment | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | |||
+ | |- | ||
+ | | style="border:none;padding:0.0194in;"| 6 | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | | style="border:none;padding:0.0194in;"| | ||
+ | |||
+ | |} |
Latest revision as of 22:00, 5 February 2013
Contents
- 1 JSDT parse – produces syntax errors lists
- 2 Translation errors – errors are not reported to user
- 3 Resolution errors – errors are reported to user
- 4 Semantic validation errors
- 5 Syntax validation
- 5.1 Syntax version based on JavaScript 1.6.
- 5.2 We are using the JSDT syntax validation (deals with validation and error recovery)
- 5.3 We need to file bugs to them to fix problem areas.
- 5.4 TODO - Need to double check syntax version
- 5.5 Translation Errors – currently uses ErrorObject – move to IJstProblem
- 6 Semantic Validation Asserts
- 7 BestCodePractices Asserts
- 8 Headless Requirement
- 9 Eclipse Integration
- 10 Misc
- 11 Completions, Proposals, Validations
- 12 General approach and guidelines
- 13 Issues
- 14 Environment Specifics
- 15 Contexts and Scopes
- 16 Scopes
- 17 Relationship to TypeSpace and VJET
- 18 Contexts
- 19 Parsing
- 20 Syntax
- 21 Keywords
- 22 Some of the most common/meaningful errors to catch
- 23 Packages
- 24 VjO Sections
- 25 Access Control and Modifiers
- 26 Who is “this”
- 27 Sections
- 28 Namespace
- 29 Modifiers
- 30 Error Messages
- 31 Misc
- 32 Arrays
- 33 Object Literals
- 34 Type References
- 35 Function References
- 36 Operators
- 37 Statements
- 38 To be figured out
JSDT parse – produces syntax errors lists
Translation errors – errors are not reported to user
Resolution errors – errors are reported to user
Semantic validation errors
Syntax validation
Syntax version based on JavaScript 1.6.
We are using the JSDT syntax validation (deals with validation and error recovery)
We need to file bugs to them to fix problem areas.
TODO - Need to double check syntax version
Translation Errors – currently uses ErrorObject – move to IJstProblem
Semantic Validation Asserts
UniquenessValidator (IJstType and IJstTypeSpace required)
Local
assertUniqueMembers
vjo.ctype("a.b.c")
.protos({
a:1,
a:function(){}
})
.props({
b:1,
b:function(){}
})
assertUniqueParamsAndVariables
a:function(a,a){
var a; a;
}
Redefining variable is wrong
Redefining parameter is wrong
assertUniqueNeedNames
Global
assertUniqueType
vjo.type('a.b.c.A')
.endType();
vjo.type('a.b.c.A')
.endType();
Redefining the type can cause issues
assertNoNativeOverRides
vjo.type('Date')
.endType();
Redefining the native types can cause collisions
assertNoDomOverRides
vjo.type('window')
.endType();
Redefining the dom types can cause collisions
ResolutionValidation (Resolved Jst required)
If Build path is incorrect resolving will fail
assertResolvedNeeds
assertResolvedParamTypes
assertResolvedVarTypes
assertResolvedMethodTypes
assertResolvedPropertyTypes
DependencyValidation (Type + TS)
Local
assertNoUnusedNeeds
this can be problematic if developers use with or eval.
assertValidateUseNeedsAlias
vjo.ctype('partials.NeedsAliasTest')
.needs('partials.Bug2149TypeB', 'MyAlias');
.props({
main: function() { //< public void main (String ... arguments)
this.vj$.Myalias
}
}).endType();
this.vj$.Myalias – is wrong name
AccessValidation (Type + TS)
assertTypeRefCanAccessTargetType
assertMethodRefCanAccessTargetMethod
assertPropertyRefCanAccessTargetProperty
ModifierValidation
assertValidTypeModifiers
vjo.ctype('a.b.c.D') //<public final
public is ok
final is not okay we have vjo method for that
assertValidMethodModifiers
assertValidPropertyModifiers
assertValidVariableModifiers
VJOStructureValidation
RequiredInput
assertTypeHasStringInput
assertValidNeedsInput
assertProtosHasObjectLiteral
assertPropsHasObjectLiteral
assertInitsHasFunction
RequiredStructure
assertEndTypeAtEndOfTypeDef
vjo.type("vjo.example.ExVjoType")
.satisfies("vjo.example.ISatisfier")
.protos({
doIt:function(){
// impl goes here
},
doIt2:function(){
// impl goes here
}});
.endType() is missing after definition of protos
assertETypeRequiredKeywordSet
assertCTypeRequiredKeywordSet
vjo.ctype("a.b.c.D")
.expects()
.endType();
Expects is working
assertMTypeRequiredKeywordSet
BestCodePractices Asserts
These could be Find Bug style but are optional
Headless Requirement
Validation should work without Eclipse UI. Ensuring that all logic is in infrastructure to be used in other other tooling such as CLI or other tooling platform such as Netbeans.
Eclipse Integration
Validation Configuration
Validation Preferences
Enabling/Disabling Validation
Build automatically turns it on but we need way to filter and turn off JS errors.
Manual Validation
Incremental validation
While you type for specific scope
Dependency validation
Using build spec in .project file
Validation filters
Because there are cases where you want to inherit old code you want ways to turn off validation.
3rd party code such as Js from Omniture
Other library code you do not own.
Validation markers
Ability to default problems to error, warning, informational as required.
Extension points for additional custom validation.
Misc
Nested types, all flavors and access control.
Do we support doing an anonymous inner class. This could be done with any ctype, ctype //< abstract or itype.
Completions, Proposals, Validations
There are relationships between these elements. First, lets describe each first.
Examples
if …
what follows must be a left paren.
SomeType. …
what follows are the various static properties and methods.
someInstance. …
what follows are the various instance properties and methods
if (someBoolExpr) { }…
what follows could be an else or some naked-target
somePkg. …
What follows are any types at the somePkg level as well as an subPackages
-
- Scope
These are the varying nested levels in which completions, proposals and validations occur. The scopes themselves are basically a tree, with each branch potentially being represented by a stack. At certain levels, not all branches may be needed or present at a give time.
For example we start with something like this…
Global (native JS types)
VjO Bootstrap
VjO Libs
AJAX
Others
HTML DOM Types
Specific Browser Types
-
- Context
What is the user trying to achieve? Are they typing where a package name is expected, a type, an instance method, a Boolean expr for a conditional etc…
-
- Naked Target
This is the term to describe what is possible in open whitespace where nothing else has been typed yet. For example if we are in the middle of a completed main(…) method, what proposals do you suggest at the …?
main: function(args) {
…
}
-
- Completions
A completion is:
- an interactive authoring aid
- the current type being authored may not be syntactically or semantically complete
- may provide a fragment, skeleton, to complete expression/statement
- can take into account other semantics such as VjO type structure
-
- Proposals
A proposal is:
- an interactive authoring aid
- the current type being authored may not be syntactically or semantically complete
- describes everything that is known at a given scope/context in a source unit
- uses information from the type space
- uses information that can come from syntax options
- normally active at the “dot” in expressions/statements
-
- Validations
- Can take place at authoring time
- Can take place on completed source units
- Needs all the same information that completions and proposals do
- Need to related back to specific line/col numbers for errors
- Detailed messages are essential since errors may be in code that is not familiar to developer (i.e. their change broke code in someone else’s area)
General approach and guidelines
Semantic analysis should pay attention to functionally correct results first and then think of optimizations. This is not to say don’t think about optimizations, it’s just that we have such a limited time to pull this off.
The core data structures are graphs:
- syntax AST
- type space (graph with API’s)
Issues
We haven’t really addressed the cases where JavaScript semantics would be trumped by VjO type semantics. This might occur with Arrays, Strings and various implicit type conversions such as the + operator and Strings or such.
Environment Specifics
Part of the overall validation should take into account:
- Version of JavaScript
- Specific Browser/OS Version combination
Contexts and Scopes
I think we need to better define all the terms we are using to do Semantic Analysis.
Scopes are the levels at which specific elements are defined and/or made available.
Scopes
All of the available information we need
-
- Global (native JS Types)
VjO Bootstrap (vjo, vjo.Class, vjo.Object, vjo.Enum)
AJAX (service engine)
HTML DOM Types (classic DOM)
Specific Browser Types (per browser type)
Package
Type
under package space if we assume “default” name for a package. In actuality, we can just assume top level packages and top level types are at the same space.
Class
Static
Instance
Initializer
Interface
Static
Instance
Initializaer
Enum
Static
Instance
Initializer
Mixin
Static
Instance
OType
Defs
-
- Member
leftSide : rightHandExpr
-
- Method
name: function([args]) [throws A [ ,B ,C…]]
While within a method args trump
Constructor
specific checks with super
-
- Statement
Statements provide a scope where only certain other elements can occur. Much of the statements structure should come from syntactical checks.
-
- Expression
Relationship to TypeSpace and VJET
The validator will live outside of the TS.
The validator will leverage information from the TS.
VJET will use the validator to identify semantic warnings/errors etc… that should be reported to tool.
Validation should also work in batch or build mode where errors would be reported to a log or console. Similar to what javac would do.
Contexts
are the combination of activity and scope something is being validated.
Parsing
Syntax
We need to completely define “what” is catchable in our language grammar that is syntax oriented. For example, are we making sure that you can only use the keyword break in a loop or case statement. We need to know these so that we can determine what part of our processing: syntax, grammar or semantic are where we need to defines constraints and rules.
Keywords
You should avoid using these reserved words and keywords as function or variable names as JavaScript has reserved these words for its own use.
| |||||||
break | continue | do | for | import | new | this | void |
case | default | else | function | in | return | typeof | while |
comment | delete | export | if | label | switch | var | with |
All keywords must not be allowed to be used in:
- package names
- type names (any)
- member names
- method names
- formal argument names
- variable names
- loop variables
| ||
abstract | implements | protected |
boolean | instanceOf | public |
byte | int | short |
char | interface | static |
double | long | synchronized |
false | native | throws |
final | null | transient |
float | package | true |
goto | private |
| ||
catch | enum | throw |
class | extends | try |
const | finally | |
debugger | super |
| ||||
alert | eval | Link | outerHeight | scrollTo |
Anchor | FileUpload | location | outerWidth | Select |
Area | find | Location | Packages | self |
arguments | focus | locationbar | pageXoffset | setInterval |
Array | Form | Math | pageYoffset | setTimeout |
assign | Frame | menubar | parent | status |
blur | frames | MimeType | parseFloat | statusbar |
Boolean | Function | moveBy | parseInt | stop |
Button | getClass | moveTo | Password | String |
callee | Hidden | name | personalbar | Submit |
caller | history | NaN | Plugin | sun |
captureEvents | History | navigate | taint | |
Checkbox | home | navigator | prompt | Text |
clearInterval | Image | Navigator | prototype | Textarea |
clearTimeout | Infinity | netscape | Radio | toolbar |
close | innerHeight | Number | ref | top |
closed | innerWidth | Object | RegExp | toString |
confirm | isFinite | onBlur | releaseEvents | unescape |
constructor | isNan | onError | Reset | untaint |
Date | java | onFocus | resizeBy | unwatch |
defaultStatus | JavaArray | onLoad | resizeTo | valueOf |
document | JavaClass | onUnload | routeEvent | watch |
Document | JavaObject | open | scroll | window |
Element | JavaPackage | opener | scrollbars | Window |
escape | length | Option | scrollBy |
Some of the most common/meaningful errors to catch
-
- Unknown references
In JavaScript the most common errors are related to making a reference to an object or property of an object that does not exist.
This check is at the root of many other checks as well (such as visibility and access control).
-
- Dependency
Based on some dependency mechanism – usually at a project level (ie above the normal Java package/access control levels) means you can’t “see” a specific type.
-
- Access Control
Access control is based on how an elements access is defined and who can see it based on a given access context. This is different from Dependency which says independent of access control whether you have the right to see a type at all.
-
- Methods
Wrong number or arguments
Should or should not return a value
Not returning the correct type
Packages
All of the various VjO types can have a package component to their names. Here are some rules with packages:
- Each subpackage name must not collide with a global set of keywords
- Each subpackage levels namespace must be unique between other subpackage names at that level as well as any other VjO types at that level
VjO Sections
All of the VjO types are composed of sections. These sections describe the specific type being created, various declarations and then a required ending section (.endType()). A section is really a method that takes an Object Literal as an argument.
|
|
Green | Required. Each type starts with a section that says what kind of type we are defining. |
Yellow | Optional. Your type may or may not have this section depending on your needs. |
Red | Disallowed. This section is not valid for the specific type in question |
0 .. n | You can have 0 or more of these sections. A single section can contain multiple definitions for convenience. |
0 .. 1 | You can have 0 or 1 of these sections. |
1 | You must have only one of these sections. |
When looking at the following table, find the type (class, interface, enum, etc…) you are interested in defining. The column for that type describes the sections that are valid for that type. The order of the rows (from top to bottom) for that column, is the order you should follow in your types definition.
|
|
|
|
|
|
vjo-type | |
|
|
|
|
.defs | |
|
|
|
|
.values | |
|
|
|
|
.options | |
|
|
|
|
.needs | |
|
|
|
|
.needsLib | |
|
|
|
|
.inherits | |
|
|
|
|
.satisfies | |
|
|
|
|
.requires | |
|
|
|
|
.expects | |
||||
.mixin | |
|
|
|
|
.mixinProps | |
|
|
|
|
.props | |
|
|
|
|
.protos | |
|
|
|
|
.inits | |
|
|
|
|
.endType | |
|
|
|
|
Access Control and Modifiers
Access control is based on how an elements access is defined and who can see it based on a given access context. This is different from Dependency which says independent of access control whether you have the right to see a type at all.
All access control and modifiers are defined using the structured VjO comment syntax. Applying these access controls and modifiers are leveraged by the VjO build process and VJET.
-
- public
-
- default
-
- protected
-
- private
-
- friend
-
- Access Table
public | protected | <default> | private | abstract | final | transient
Not supported yet | |
ctype | |
|
|
|
|
|
|
etype | |
|
|
|
|
|
|
itype | |
|
|
|
|
|
|
otype | |
|
|
|
|
|
|
mtype | |
|
|
|
|
|
|
member | |
|
|
|
|
|
|
method | |
|
|
|
|
|
|
constructor | |
|
|
|
|
|
|
return type | |
|
|
|
|
|
|
argument | |
|
|
|
|
|
|
local variable | |
|
|
|
|
|
|
for loop variable | |
|
|
|
|
|
|
for in variable | |
|
|
|
|
|
|
Who is “this”
Who does “this” refer to while in the various VjO definition sections? The
|
|
vjo-type | Not applicable |
.options | Not applicable |
.needs | Not applicable |
.needsLib | Not applicable |
.inherits | Not applicable |
.satisfies | Not applicable |
.requires | Not applicable |
.expects | Not applicable |
.mixin | Not applicable |
.mixinProps | Not applicable |
.props | The type being defined (props – statics members) |
.inits | The type being defined (props – statics members) |
.protos | The instance (prototype – instance members) |
.endType | Not applicable |
Sections
Ideally we can use tables to define these validations.
-
- order of sections
-
- certain sections only make sense for certain type
-
- how many of each section can occur
-
- arguments for each section
-
- Each Section
ctype
otype
mtype
itype
etype
options
defs
values
needs
.needs('Proc')
.needs('util.Proc')
.needs(['Proc'])
.needs(['util.Proc'])
.needs(['util.Proc', 'util.Proc2', 'Proc3'])
What is the reason we use an array? This may seem easier for our implementations but not necessarily easier for someone using it.
Having something like a comma-delimited single-string-literal seems easier to type and read.
.needs('util.Proc, util.Proc2, Proc3')
needsLib
inherits
satisfies
requires
expects
mixin
mixinProps
props
protos
inits
endType
Namespace
proper names such as a.b.c.Type
uniqueness – can’t have package a.b.C and a type a.b.C
types must be unique at each package level
Modifiers
-
- abstract
Only ctypes can be abstract
Only instance methods can be defined abstract and only in an abstract ctype
-
- final
ctypes but not abstract ctypes
methods
not constructors
members
arguments
-
- transient (not in use yet)
Error Messages
Misc
Arrays
Object Literals
Type References
Function References
Operators
-
- special
arguments
This is the built in variable for all function invocations.
doit: function(a, b) { //< void doit(int, boolean) {
var avalue = arguments[0] ; //< int
var bvalue = arguments[1] ; //<
}
new
objectName = new objectType(param1 [,param2] ...[,paramN])
Parameters
objectName
Name of the new object instance.
objectType
Object type. It must be a function that defines an object type.
param1...paramN
Property values for the object. These properties are parameters defined for the objectType function.
instanceof
typeof
forms:
- typeof operand
- typeof (operand)
operand can really be any value or reference
This table summarizes the possible return values of typeof:
Type | Result |
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Host object (provided by the JS environment) | Implementation-dependent |
Function object (implements [[Call]] in ECMA-262 terms) | "function" |
Any other object | "object" |
delete
righthand has to be property or function.
We have issues is whether or not delete should even be allowed on VjO types since those types are based on full typespace consistency.
Dynamic objects created outside of VjO typespace should be ok.
We don’t have the notion of sealed types or sealed objects yet.
-
- Arithmetic
+
-
*
/
%
++
--
-
- Assignment
=
+=
-=
*=
/=
%=
-
- Comparison
==
!=
>
<
>=
<=
-
- Logical
&&
||
!
-
- Conditional (?:)
Statements
-
- if-else
-
- switch
-
- for loop
-
- while loop
-
- break loops
-
- for … in
for (variable in obj) { … }
The variable name becomes a new scoped name.
-
- try … catch
-
- throw
-
- onerror
-
- with
This is a tricky one as it creates a new scope for target object in the with(…)
function foo(){
with(document.forms[0]) {
var x = elements[0].value;
var y = elements[1].value;
with(elements[2]) {
var z = options[selectedIndex].text
}
}
}
To be figured out
JavaScript has built in values such as NaN, null and undefined that need to be thought out in terms of how they fit with our overall typing scheme.
For example an if or while etc… is based on a Boolean expression. However an if (somethingThatIsUndefined) is a common check in JavaScript.
Type Check
|
|
|
|
|
1 | validity of assignment; rhs value is assignable to lhs value; | AssignExpr | TypeCheckUtil#isAssignable | DONE/ON |
2 | type is allowed for the operations; | PostfixExpr, PrefixExpr, InfixExpr | TypeCheckUtil#isAssignable | DONE/ON |
3 | array accessing index must be string/int | ArrayAccessExpr | DONE/ON | |
5 | items' type are compatible with array def | ArrayCreationExpr, JstArrayInitializer, ArrayLiteral | DONE/ON | |
6 | id is array type | ArrayCreationExpr | Yet DONE/OFF | |
8 | cast to is assignable to cast from (Only used for Java2JS, skip this one) | CastExpr | revised | DONE/OFF |
9 | then and else are compatible type | ConditionalExpr | DONE/OFF | |
10 | argument type satifies the parameter definition of the JstMethod (overloading method included) | MtdInvocationExpr, ObjCreationExpr | DONE/ON | |
11 | generics, JstTypeWithArgs satisfies JstType#getParamTypes boundaries | MtdInvocationExpr, FieldAccessExpr | DONE/ON | |
12 | exception type in CatchStmt is defined in the functions used in the block (Need to revisit this one later, can turn it off or skip it) | TryStmt | revised | Yet DONE/OFF |
13 | switch expr type matches expr type in CaseStmt (Need to revisit this one later, can turn it off or skip it) | SwitchStmt | revised | Done/OFF |
14 | expr type matches function return type | RtnStmt | Done/ON |
Hierachy/Structure
|
|
|
|
|
1 | Override method should have wider visibility | JstMethod | DONE/ON | |
2 | Override method should not have ambiguous signature | JstMethod | DONE/ON | |
4 | Mixin method should not conflict | JstMethod | DONE/ON | |
5 | Mixin property should not conflict | JstProperty | DONE/ON | |
6 | Methods defined in interface must be implemented in concrete type (ctype/etype) | JstType | revised | DONE/ON |
7 | Abstract methods in super type must be implemented in concrete class | JstType | revised | DONE/ON |
8 | case cannot fall thru (nice to have) | JstSwitchStmt | revised | Yet DONE/OFF |
9 | override method cannot be called in constuctor (revisit this later, skip for now) | JstConstructor | revised | Yet DONE/OFF |
property/method cannot be both abstract and final | JstProperty, JstMethod | |||
10 | return should present in function with a return type | JstFunction | DONE/ON | |
11 | statement should be reachable | JstStatement | DONE/ON | |
super type must be ctype for ctype, itype for itype | JstType | new | DONE/ON | |
satifies type must be an interface | JstType | new | DONE/ON | |
mixin type must be mtype | JstType | new | DONE/ON | |
12 | mtype cannot have constructor | JstType | new | DONE/ON |
etype cannot be inherited | JstType | new | DONE/ON | |
otype cannot have none objLiteral property or none-abstract method | JstType | new | DONE/ON | |
otype cannot be nested as inner type or outer type | JstType | new | DONE/ON |
Uniqueness
|
|
|
|
|
1 | local variable id should be unique within its scope | JstBlock | For JstVar & JstVars statements, we need to look up the symbol table for existing variables|functions of the same id, jstMethod need to add its parameters to the symbol tables as well | DONE/ON |
2 | name should be unique | ObjLiteral | DONE/ON | |
3 | variable name conflict with reserved names in the scope, check Mr.P's document | JstBlock, JstType | revised | DONE/ON |
4 | Needs should not have ambiguous ref | JstType | .needs("a.b.c.D", ) is empty alias treated differently | DONE/ON |
5 | Method name should be unique | JstType | DONE/ON | |
6 | Property name should be unique | JstType | DONE/ON | |
7 | With scope's Property/Method name should not conflict with any local variables in the current scope (Need to revisit this later, can skip for now) | WithStmt | revised | DONE/ON |
8 | Redeclare any variable is NOT ok, even conflict with func parameters | same as no.1 | DONE/ON | |
9 | Func args should be unique | new | DONE/ON | |
10 | Global vars should be unique (Need to revisit this later) | Yet DONE/OFF |
Accessibility (var, func, scope)
|
|
|
|
|
1 | qualifier must be defined | FieldAccessExpr, MtdInvocationExpr | DONE/ON | |
2 | qualifier type must be initialized | FieldAccessExpr, MtdInvocationExpr, ObjCreationExpr, | DONE/ON | |
3 | field/method must be defined/unless dynamic qualifier type presents | FieldAccessExpr, MtdInvocationExp, ObjCreationExpr, | DONE/ON | |
4 | field/method must be visible | FieldAccessExpr, MtdInvocationExp, ObjCreationExp, | DONE/ON | |
5 | static field/method cannot be accessed from instance scope | FieldAccessExpr, MtdInvocationExp, ObjCreationExp, | DONE/ON | |
6 | field/func is defined | FieldAccessExpr, MtdInvocationExp, ObjCreationExp, | DONE/ON | |
7 | none-static field/method cannot be accessed from static scope | FieldAccessExpr, MtdInvocationExp, ObjCreationExp, | DONE/ON | |
8 | Ref types must be in Type space | JstType | DONE/ON | |
9 | Ref types must have a needs or honory needs (inherience, implements, etc) | JstVars, JstProperty, JstMethod | com.ebay.dsf.jst.ts.util.JstTypeDependencyCollector | DONE/ON |
Misc
|
|
|
|
|
1 | all final properties are initialized. | JstInitializer for static prop Constructor for instance prop | revised | DONE/ON |
2 | final variable should be assigned only in def or init (Can be turn off for now, revisite later) | JstType, JstInitializer | revised | DONE/OFF |
Vjo Syntax
|
|
|
|
|
1 | All the method (TODO: list all methods) in "Vjo" type should called resonable times only except utils method. | scope: global, JstBlock of Vjo Type Def Tree in IScriptUnit | revised | DONE/ON |
2 | The method call sequence need to be right. | scope: global, JstBlock of Vjo Type Def Tree in IScriptUnit | DONE/ON | |
3 | All the method (TODO: list all methods) in "xType" type should called resonable only except utils method. | CType, EType, ... | revised | DONE/ON |
4 | The method call sequence need to be right for "xType". | CType, EType, ... | DONE/ON |
Coding Style (NOT in this release)
|
|
|
|
1 | unused local variables (warning) | JstBlock | |
2 | empty block (warning) | JstBlock | |
3 | function params should not be assigned (warning) | JstBlock | |
4 | assignment has no effect (x=x) | AssignExpr | |
5 | possible accidental boolean assignment (if(a=b)) | IfStatment | |
6 |