diff --git a/src/com/google/javascript/jscomp/RewriteClassMembers.java b/src/com/google/javascript/jscomp/RewriteClassMembers.java index 2cf5a1d7f7e..a0605ba5930 100644 --- a/src/com/google/javascript/jscomp/RewriteClassMembers.java +++ b/src/com/google/javascript/jscomp/RewriteClassMembers.java @@ -17,11 +17,8 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; -import static com.google.common.collect.ImmutableSet.toImmutableSet; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.MultimapBuilder; -import com.google.common.collect.SetMultimap; import com.google.javascript.jscomp.parsing.parser.FeatureSet; import com.google.javascript.jscomp.parsing.parser.FeatureSet.Feature; import com.google.javascript.rhino.Node; @@ -99,19 +96,6 @@ public boolean shouldTraverse(NodeTraversal t, Node n, Node parent) { checkState(!classStack.isEmpty()); classStack.peek().recordStaticBlock(n); break; - case NAME: - for (ClassRecord record : classStack) { - // For now, we are just processing these names as strings, and so we will also give - // CANNOT_CONVERT_YET errors for patterns that technically can be simply inlined, such as: - // class C { - // y = (x) => x; - // constructor(x) {} - // } - // Either using scopes to be more precise or just doing renaming for all conflicting - // constructor declarations would address this issue. - record.potentiallyRecordNameInRhs(n); - } - break; case COMPUTED_PROP: checkState(!classStack.isEmpty()); ClassRecord record = classStack.peek(); @@ -143,10 +127,6 @@ public void visit(NodeTraversal t, Node n, Node parent) { case CLASS: visitClass(t); return; - case COMPUTED_FIELD_DEF: - case MEMBER_FIELD_DEF: - classStack.peek().exitField(); - return; case THIS: Node rootNode = t.getClosestScopeRootNodeBindingThisOrSuper(); if (rootNode.isStaticMember() @@ -303,21 +283,12 @@ private void rewriteInstanceMembers(NodeTraversal t, ClassRecord record) { Node ctor = NodeUtil.getEs6ClassConstructorMemberFunctionDef(record.classNode); Node ctorBlock = ctor.getFirstChild().getLastChild(); Node insertionPoint = findInitialInstanceInsertionPoint(ctorBlock); - ImmutableSet ctorDefinedNames = record.getConstructorDefinedNames(); while (!instanceMembers.isEmpty()) { Node instanceMember = instanceMembers.pop(); checkState( instanceMember.isMemberFieldDef() || instanceMember.isComputedFieldDef(), instanceMember); - for (Node nameInRhs : record.referencedNamesByMember.get(instanceMember)) { - String name = nameInRhs.getString(); - checkState( - !ctorDefinedNames.contains(name), - "Rhs of public field cannot use the same name as a constructor parameter: %s", - name); - } - Node thisNode = astFactory.createThisForEs6ClassMember(instanceMember); if (instanceMember.isComputedFieldDef() && NodeUtil.canBeSideEffected(instanceMember.getFirstChild())) { @@ -470,8 +441,6 @@ private Node findInitialInstanceInsertionPoint(Node ctorBlock) { */ private static final class ClassRecord { - // During traversal, contains the current member being traversed. After traversal, always null - @Nullable Node currentMember; boolean cannotConvert; // Instance fields @@ -481,9 +450,6 @@ private static final class ClassRecord { // Computed fields with side effects after the most recent computed member function final Deque computedFieldsWithSideEffectsToMove = new ArrayDeque<>(); - // Mapping from MEMBER_FIELD_DEF (& COMPUTED_FIELD_DEF) nodes to all name nodes in that RHS - final SetMultimap referencedNamesByMember = - MultimapBuilder.linkedHashKeys().hashSetValues().build(); // Set of all the Vars defined in the constructor arguments scope and constructor body scope ImmutableSet constructorVars = ImmutableSet.of(); @@ -510,11 +476,6 @@ void enterField(Node field) { } else { instanceMembers.push(field); } - currentMember = field; - } - - void exitField() { - currentMember = null; } void recordStaticBlock(Node block) { @@ -522,16 +483,6 @@ void recordStaticBlock(Node block) { staticMembers.push(block); } - void potentiallyRecordNameInRhs(Node nameNode) { - checkArgument(nameNode.isName()); - if (currentMember == null) { - return; - } - checkState( - currentMember.isMemberFieldDef() || currentMember.isComputedFieldDef(), currentMember); - referencedNamesByMember.put(currentMember, nameNode); - } - void recordConstructorScope(Scope s) { checkArgument(s.isFunctionBlockScope(), s); checkState(constructorVars.isEmpty(), constructorVars); @@ -541,9 +492,5 @@ void recordConstructorScope(Scope s) { builder.addAll(argsScope.getAllSymbols()); constructorVars = builder.build(); } - - ImmutableSet getConstructorDefinedNames() { - return constructorVars.stream().map(Var::getName).collect(toImmutableSet()); - } } }