001 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
002 // for details. All rights reserved. Use of this source code is governed by a
003 // BSD-style license that can be found in the LICENSE file.
004
005 package com.google.dart.compiler.backend.js.ast;
006
007 import com.google.dart.compiler.common.Symbol;
008 import org.jetbrains.annotations.NotNull;
009
010 /**
011 * An abstract base class for named JavaScript objects.
012 */
013 public class JsName implements Symbol {
014 private final JsScope enclosing;
015 private final String ident;
016
017 /**
018 * @param ident the unmangled ident to use for this name
019 */
020 JsName(JsScope enclosing, String ident) {
021 this.enclosing = enclosing;
022 this.ident = ident;
023 }
024
025 public String getIdent() {
026 return ident;
027 }
028
029 @NotNull
030 public JsNameRef makeRef() {
031 return new JsNameRef(this);
032 }
033
034 @Override
035 public String toString() {
036 return ident;
037 }
038
039 @Override
040 public int hashCode() {
041 return ident.hashCode();
042 }
043
044 @Override
045 public boolean equals(Object obj) {
046 if (this == obj) {
047 return true;
048 }
049 if (!(obj instanceof JsName)) {
050 return false;
051 }
052 JsName other = (JsName) obj;
053 return ident.equals(other.ident) && enclosing == other.enclosing;
054 }
055 }