blob: 6d8dde5b0e202b5b1ce7bcbd00dfd2e6be0f22dd [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.dev.js.ast;
import com.google.gwt.dev.jjs.SourceInfo;
import com.google.gwt.dev.util.StringInterner;
import java.io.Serializable;
/**
* A named JavaScript object.
*/
public class JsName implements Serializable {
private final JsScope enclosing;
private final String ident;
private boolean isObfuscatable;
private String shortIdent;
/**
* A back-reference to the JsNode that the JsName refers to.
*/
private JsNode staticRef;
/**
* A reference to the namespace this name is in (if any).
* If the namespace is set, any reference should be a dotted reference.
*/
private JsName namespace;
/**
* @param ident the unmangled ident to use for this name
*/
public JsName(JsScope enclosing, String ident, String shortIdent) {
this.enclosing = enclosing;
this.ident = StringInterner.get().intern(ident);
this.shortIdent = StringInterner.get().intern(shortIdent);
this.isObfuscatable = true;
}
public JsScope getEnclosing() {
return enclosing;
}
public String getIdent() {
return ident;
}
public String getShortIdent() {
return shortIdent;
}
public JsNode getStaticRef() {
return staticRef;
}
public boolean isObfuscatable() {
return isObfuscatable;
}
public JsNameRef makeRef(SourceInfo sourceInfo) {
return makeQualifiedRef(sourceInfo, null);
}
public JsNameRef makeQualifiedRef(SourceInfo sourceInfo, JsExpression qualifier) {
JsNameRef ref = new JsNameRef(sourceInfo, this);
assert namespace == null || qualifier == null;
if (qualifier == null && namespace != null) {
qualifier = namespace.makeRef(sourceInfo);
}
if (qualifier != null) {
ref.setQualifier(qualifier);
}
return ref;
}
public void setUnobfuscatable() {
this.isObfuscatable = false;
}
public void setShortIdent(String shortIdent) {
this.shortIdent = StringInterner.get().intern(shortIdent);
}
public JsName getNamespace() {
return namespace;
}
public void setNamespace(JsName namespace) {
this.namespace = namespace;
}
/**
* Should never be called except on immutable stuff.
*/
public void setStaticRef(JsNode node) {
this.staticRef = node;
}
@Override
public String toString() {
return ident;
}
}