Repository navigation
v0.8.2
-
New rule
obsolete-custom-control(error). abap2UI5 marks eight of
its companion controls// OBSOLETE: replaced by …in
app/webapp/cc/*.js, and they must never be used:Timer
(client->follow_up_action( val = client->cs_event-start_timer … )),
Focus(cs_event-set_focus),Scrolling(cs_event-scroll_to/
cs_event-scroll_into_view),Title(cs_event-set_title),LPTitle
(cs_event-set_title_launchpad),Favicon(cs_event-set_favicon),
Info(client->get( )-s_device/-s_ui5) andHistory
(client->hash_set( )/client->app_state_set_active( )). The finding
names the replacement. Three spellings are read: the builder tag
(tag( n = `Timer` ns = `z2ui5` )), an XML view or fragment
(<z2ui5:Timer/>) - both judged by the namespace the prefix is bound to,
so any prefix bound toz2ui5.ccis reported andsap.m.Titleor
core:Titlenever is - and the frozen builder's helpers
(_z2ui5( )->timer( ),->focus( ),->scrolling( ),->title( ),
->lp_title( ),->favicon( ),->info_frontend( ),->history( ),
also through a handle assigned from_z2ui5( )), which a class on
z2ui5_cl_xml_viewnow gets besidefrozen-view-builder. The live
companion controls (Storage,MessageManager,MultiInputExt,Dirty,
Geolocation,CameraPicture, …) are not reported. No--fix: the
replacement moves the job from the view into the class. An error by
project decision - the view still renders. A consumer that assembles the
frozen-builder branch itself (the VS Code extension's gate) reaches the
helper half asobsoleteCcHelperFindings( )from./abap-rules.Rollout: measured on origin/main, 0 findings on samples, samples-stack,
popups, sql-console, table-maintenance, config-management and app-template;
1 on samples-controls (src/04/z2ui5_cl_smpc_demo_004, the carousel Timer
its open branch replaces withcs_event-start_timer- its
abap2ui5lint-apps.jsoncgate turns red on a bump that lands before that
branch; the view-gates corpus job does not judgesrc/04and stays green);
on abap2UI5, 1 insrc/99/02/z2ui5_cl_pop_file_dlwithout its config and
0 with it, since itsabap2ui5lint.jsoncdoes not collect the frozen
src/99at all. -
The render gate mirrors the eight obsolete companion controls. A view
naming<z2ui5:Timer>failed view CREATION with a module 404 - a
render-errorthat read like a broken view (samples-controls' demo_004
had it excused by file) for a control every installation still ships.
The harness boots a mirror of each now, so the rule above is the one
message.lib/cc-controls.mjscarries the list as anobsoleteblock per
entry, andscripts/check-upstream.mjsgates it three ways: the marked set
against the// OBSOLETE:headers of everyapp/webapp/cc/*.js, each
header's API names against the replacement the finding writes, and each
helper name againstsrc/99/z2ui5_cl_xml_view_cc. -
data/compat.json:framework.mirroredis 1.145.0, the release every
mirror was checked against in this change (check-upstream --local, all in
sync). -
No polynomial backtracking left in the ABAP scanners. The 27 regexes
CodeQL still flagged (js/polynomial-redos) - the structure, field,
METHODS-signature and DATA-block reads and theclient->and own-method
call scans among them - are linear scans now; the findings over the
abap2UI5 corpora are unchanged byte for byte. -
No polynomial backtracking left outside them either. The last 11
js/polynomial-redos alerts on main are linear scans too: the raw XML view
parser (parseXml's tag and attribute reads - a tag that never closes was
searched to the end of the view again from every<inside it), the
property walk's binding reads (a simple{/X}path, thepath: '/X'and
${/X}paths of a binding info or an expression, an aggregation binding's
path, thecore:requirealiases, the run summary's binding count), the
ABAP Doc tag scan behindabapdoc-html-tag, the version parse of the
property gate and the icon rules, and where a directive's comment ends.
The output is unchanged byte for byte over the abap2UI5 corpora and over
1,490 raw XML views, and CodeQL 2.27.1 run locally reports no
js/polynomial-redos and nothing new. -
The render gate mirrors InputExt, UploadSetExt and SmartMultiInputExt,
and the property walk judges every mirrored companion control. They were
the three live companion controls with no mirror, so a view naming one
failed view CREATION with a module 404 (abap2UI5/samples apps 516, 517 and
530 and samples-stack app 319 excused it by file). InputExt is mirrored as
what upstream makes it - asap.m.Inputwith aninputModeproperty,
rendered byInputRenderer- and the other two as the invisible Controls
they are, which find their UploadSet / SmartMultiInput by id. The property
walk used to look away from everyz2ui5.cctag; a companion control the
linter mirrors is now judged like any control, its mirror layered over its
real base class:<z2ui5:InputExt inputmode="none">is an
unknown-propertywith theinputModedid-you-mean and fix, and an Input
member newer than the floor on it ismember-too-new, as on a
sap.m.Input. Az2ui5.cccontrol nobody mirrors (a customer's own) is
still not judged.scripts/check-upstream.mjsnow also compares each
mirror's events and base class withapp/webapp/cc/*.js, and fails on a
control upstream ships that is not mirrored at all - the one drift it could
not see, and the reason these three stayed out. Measured: the
property-gate output over eleven corpora is unchanged byte for byte;
samples 516, 517 and 530 render clean, so theirrender-errorexclusion
now draws the stale-waiver note; samples-stack 319 still fails, now on the
SAPUI5-onlysap.ui.compSmartMultiInput it pairs its companion with,
which the OpenUI5 harness cannot serve, so its/src/02/exclusion stays.