Small refactor for creating unobfuscatable JsNames.
Change-Id: I408ecc48d0cb997f219bd138924fcf8083cc5eb7
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java
index f9ad04a..c40f4d5 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java
@@ -47,7 +47,6 @@
import com.google.gwt.dev.js.ast.JsContext;
import com.google.gwt.dev.js.ast.JsFunction;
import com.google.gwt.dev.js.ast.JsModVisitor;
-import com.google.gwt.dev.js.ast.JsName;
import com.google.gwt.dev.js.ast.JsProgram;
import com.google.gwt.dev.js.ast.JsScope;
import com.google.gwt.dev.resource.ResourceOracle;
@@ -436,8 +435,7 @@
Reader r = new StringReader(program);
JsProgram jsProgram = new JsProgram();
JsScope topScope = jsProgram.getScope();
- JsName funcName = topScope.declareName(getModuleFunctionName());
- funcName.setObfuscatable(false);
+ topScope.declareUnobfuscatableName(getModuleFunctionName());
try {
SourceInfo sourceInfo = jsProgram.createSourceInfo(1,
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
index d24ae56..0da095f 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
@@ -440,8 +440,7 @@
} else {
JsName jsName;
if (x.isJsProperty()) {
- jsName = scopeStack.peek().declareName(name, name);
- jsName.setObfuscatable(false);
+ jsName = scopeStack.peek().declareUnobfuscatableName(name);
} else {
jsName = scopeStack.peek().declareName(mangleName, name);
}
@@ -719,24 +718,17 @@
private final Map<String, Object> exportedMembersByExportName = new TreeMap<String, Object>();
- private final JsName arrayLength = objectScope.declareName("length");
-
private final Map<JClassType, JsFunction> clinitMap = Maps.newHashMap();
private JMethod currentMethod = null;
- private final JsName globalTemp = topScope.declareName("_");
+ private final JsName arrayLength = objectScope.declareUnobfuscatableName("length");
- private final JsName prototype = objectScope.declareName("prototype");
+ private final JsName globalTemp = topScope.declareUnobfuscatableName("_");
- private final JsName call = objectScope.declareName("call");
+ private final JsName prototype = objectScope.declareUnobfuscatableName("prototype");
- {
- globalTemp.setObfuscatable(false);
- prototype.setObfuscatable(false);
- call.setObfuscatable(false);
- arrayLength.setObfuscatable(false);
- }
+ private final JsName call = objectScope.declareUnobfuscatableName("call");
/**
* Holds any local variable declarations which must be inserted into the current JS function
@@ -2575,8 +2567,7 @@
private void generateToStringAlias(JClassType x, List<JsStatement> globalStmts) {
JMethod toStringMethod = program.getIndexedMethod("Object.toString");
if (x.getMethods().contains(toStringMethod)) {
- JsName toStringName = objectScope.declareName("toString");
- toStringName.setObfuscatable(false);
+ JsName toStringName = objectScope.declareUnobfuscatableName("toString");
generateVTableAlias(globalStmts, toStringMethod, toStringName);
}
}
@@ -2651,8 +2642,7 @@
if (method.exposesJsMethod()) {
String jsName = method.getJsName();
- JsName exportedName = interfaceScope.declareName(jsName, jsName);
- exportedName.setObfuscatable(false);
+ JsName exportedName = interfaceScope.declareUnobfuscatableName(jsName);
generateVTableAlias(globalStmts, method, exportedName);
}
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/JjsUtils.java b/dev/core/src/com/google/gwt/dev/jjs/impl/JjsUtils.java
index 6860e88..184ef75 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/JjsUtils.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/JjsUtils.java
@@ -444,7 +444,7 @@
names = new JsName[stringNames.length];
for (int i = 0; i < stringNames.length; i++) {
names[i] = new JsName(null, stringNames[i], stringNames[i]);
- names[i].setObfuscatable(false);
+ names[i].setUnobfuscatable();
}
}
diff --git a/dev/core/src/com/google/gwt/dev/js/JsSymbolResolver.java b/dev/core/src/com/google/gwt/dev/js/JsSymbolResolver.java
index beeb750..67d4970 100644
--- a/dev/core/src/com/google/gwt/dev/js/JsSymbolResolver.java
+++ b/dev/core/src/com/google/gwt/dev/js/JsSymbolResolver.java
@@ -37,15 +37,13 @@
name = getScope().findExistingName(ident);
if (name == null) {
// No clue what this is; create a new unobfuscatable name
- name = program.getScope().declareName(ident);
- name.setObfuscatable(false);
+ name = program.getScope().declareUnobfuscatableName(ident);
}
} else {
name = program.getObjectScope().findExistingName(ident);
if (name == null) {
// No clue what this is; create a new unobfuscatable name
- name = program.getObjectScope().declareName(ident);
- name.setObfuscatable(false);
+ name = program.getObjectScope().declareUnobfuscatableName(ident);
}
}
x.resolve(name);
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsName.java b/dev/core/src/com/google/gwt/dev/js/ast/JsName.java
index b0eb6a7..3b85f27 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsName.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsName.java
@@ -76,8 +76,8 @@
return ref;
}
- public void setObfuscatable(boolean isObfuscatable) {
- this.isObfuscatable = isObfuscatable;
+ public void setUnobfuscatable() {
+ this.isObfuscatable = false;
}
public void setShortIdent(String shortIdent) {
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsRootName.java b/dev/core/src/com/google/gwt/dev/js/ast/JsRootName.java
index ef7411f..4b76591 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsRootName.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsRootName.java
@@ -34,11 +34,11 @@
JsRootName(JsRootScope rootScope, String ident) {
super(rootScope, ident, ident);
- super.setObfuscatable(false);
+ super.setUnobfuscatable();
}
@Override
- public void setObfuscatable(boolean isObfuscatable) {
+ public void setUnobfuscatable() {
throw new UnsupportedOperationException("Root names are immutable");
}
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsScope.java b/dev/core/src/com/google/gwt/dev/js/ast/JsScope.java
index 45ee198..9c4072f 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsScope.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsScope.java
@@ -82,6 +82,18 @@
}
/**
+ * Gets a name object associated with the specified ident in this scope, creating it if necessary,
+ * and makes it non obfuscatable.
+ *
+ * @param ident An identifier that is unique within this scope.
+ */
+ public final JsName declareUnobfuscatableName(String ident) {
+ JsName name = declareName(ident);
+ name.setUnobfuscatable();
+ return name;
+ }
+
+ /**
* Attempts to find the name object for the specified ident, searching in this scope, and if not
* found, in the parent scopes.
*
diff --git a/dev/core/test/com/google/gwt/dev/js/JsNamerTest.java b/dev/core/test/com/google/gwt/dev/js/JsNamerTest.java
index c81399b..bb24cfa 100644
--- a/dev/core/test/com/google/gwt/dev/js/JsNamerTest.java
+++ b/dev/core/test/com/google/gwt/dev/js/JsNamerTest.java
@@ -146,7 +146,7 @@
String functionName = "foo" + JsIncrementalNamer.RESERVED_IDENT_SUFFIX;
JsProgram jsProgram = parseJs(
"function " + functionName + "() { return 42; }");
- jsProgram.getScope().findExistingName(functionName).setObfuscatable(false);
+ jsProgram.getScope().findExistingName(functionName).setUnobfuscatable();
rename(jsProgram, JsOutputOption.OBFUSCATED, true);
fail("Naming an unobfuscatable identifier containing the reserved suffix should have "
+ "thrown an exception in JsIncrementalNamer.");