17
17
18
18
import static com .google .common .base .Preconditions .checkArgument ;
19
19
import static com .google .common .base .Preconditions .checkState ;
20
- import static com .google .common .collect .ImmutableSet .toImmutableSet ;
21
20
22
21
import com .google .common .collect .ImmutableSet ;
23
- import com .google .common .collect .MultimapBuilder ;
24
- import com .google .common .collect .SetMultimap ;
25
22
import com .google .javascript .jscomp .parsing .parser .FeatureSet ;
26
23
import com .google .javascript .jscomp .parsing .parser .FeatureSet .Feature ;
27
24
import com .google .javascript .rhino .Node ;
@@ -99,19 +96,6 @@ public boolean shouldTraverse(NodeTraversal t, Node n, Node parent) {
99
96
checkState (!classStack .isEmpty ());
100
97
classStack .peek ().recordStaticBlock (n );
101
98
break ;
102
- case NAME :
103
- for (ClassRecord record : classStack ) {
104
- // For now, we are just processing these names as strings, and so we will also give
105
- // CANNOT_CONVERT_YET errors for patterns that technically can be simply inlined, such as:
106
- // class C {
107
- // y = (x) => x;
108
- // constructor(x) {}
109
- // }
110
- // Either using scopes to be more precise or just doing renaming for all conflicting
111
- // constructor declarations would address this issue.
112
- record .potentiallyRecordNameInRhs (n );
113
- }
114
- break ;
115
99
case COMPUTED_PROP :
116
100
checkState (!classStack .isEmpty ());
117
101
ClassRecord record = classStack .peek ();
@@ -143,10 +127,6 @@ public void visit(NodeTraversal t, Node n, Node parent) {
143
127
case CLASS :
144
128
visitClass (t );
145
129
return ;
146
- case COMPUTED_FIELD_DEF :
147
- case MEMBER_FIELD_DEF :
148
- classStack .peek ().exitField ();
149
- return ;
150
130
case THIS :
151
131
Node rootNode = t .getClosestScopeRootNodeBindingThisOrSuper ();
152
132
if (rootNode .isStaticMember ()
@@ -303,21 +283,12 @@ private void rewriteInstanceMembers(NodeTraversal t, ClassRecord record) {
303
283
Node ctor = NodeUtil .getEs6ClassConstructorMemberFunctionDef (record .classNode );
304
284
Node ctorBlock = ctor .getFirstChild ().getLastChild ();
305
285
Node insertionPoint = findInitialInstanceInsertionPoint (ctorBlock );
306
- ImmutableSet <String > ctorDefinedNames = record .getConstructorDefinedNames ();
307
286
308
287
while (!instanceMembers .isEmpty ()) {
309
288
Node instanceMember = instanceMembers .pop ();
310
289
checkState (
311
290
instanceMember .isMemberFieldDef () || instanceMember .isComputedFieldDef (), instanceMember );
312
291
313
- for (Node nameInRhs : record .referencedNamesByMember .get (instanceMember )) {
314
- String name = nameInRhs .getString ();
315
- checkState (
316
- !ctorDefinedNames .contains (name ),
317
- "Rhs of public field cannot use the same name as a constructor parameter: %s" ,
318
- name );
319
- }
320
-
321
292
Node thisNode = astFactory .createThisForEs6ClassMember (instanceMember );
322
293
if (instanceMember .isComputedFieldDef ()
323
294
&& NodeUtil .canBeSideEffected (instanceMember .getFirstChild ())) {
@@ -470,8 +441,6 @@ private Node findInitialInstanceInsertionPoint(Node ctorBlock) {
470
441
*/
471
442
private static final class ClassRecord {
472
443
473
- // During traversal, contains the current member being traversed. After traversal, always null
474
- @ Nullable Node currentMember ;
475
444
boolean cannotConvert ;
476
445
477
446
// Instance fields
@@ -481,9 +450,6 @@ private static final class ClassRecord {
481
450
// Computed fields with side effects after the most recent computed member function
482
451
final Deque <Node > computedFieldsWithSideEffectsToMove = new ArrayDeque <>();
483
452
484
- // Mapping from MEMBER_FIELD_DEF (& COMPUTED_FIELD_DEF) nodes to all name nodes in that RHS
485
- final SetMultimap <Node , Node > referencedNamesByMember =
486
- MultimapBuilder .linkedHashKeys ().hashSetValues ().build ();
487
453
// Set of all the Vars defined in the constructor arguments scope and constructor body scope
488
454
ImmutableSet <Var > constructorVars = ImmutableSet .of ();
489
455
@@ -510,28 +476,13 @@ void enterField(Node field) {
510
476
} else {
511
477
instanceMembers .push (field );
512
478
}
513
- currentMember = field ;
514
- }
515
-
516
- void exitField () {
517
- currentMember = null ;
518
479
}
519
480
520
481
void recordStaticBlock (Node block ) {
521
482
checkArgument (NodeUtil .isClassStaticBlock (block ));
522
483
staticMembers .push (block );
523
484
}
524
485
525
- void potentiallyRecordNameInRhs (Node nameNode ) {
526
- checkArgument (nameNode .isName ());
527
- if (currentMember == null ) {
528
- return ;
529
- }
530
- checkState (
531
- currentMember .isMemberFieldDef () || currentMember .isComputedFieldDef (), currentMember );
532
- referencedNamesByMember .put (currentMember , nameNode );
533
- }
534
-
535
486
void recordConstructorScope (Scope s ) {
536
487
checkArgument (s .isFunctionBlockScope (), s );
537
488
checkState (constructorVars .isEmpty (), constructorVars );
@@ -541,9 +492,5 @@ void recordConstructorScope(Scope s) {
541
492
builder .addAll (argsScope .getAllSymbols ());
542
493
constructorVars = builder .build ();
543
494
}
544
-
545
- ImmutableSet <String > getConstructorDefinedNames () {
546
- return constructorVars .stream ().map (Var ::getName ).collect (toImmutableSet ());
547
- }
548
495
}
549
496
}
0 commit comments