Index: third_party/closure_compiler/runner/src/com/google/javascript/jscomp/ChromePass.java |
diff --git a/third_party/closure_compiler/runner/src/com/google/javascript/jscomp/ChromePass.java b/third_party/closure_compiler/runner/src/com/google/javascript/jscomp/ChromePass.java |
index be8da2eaa45fe5f55389941158795b06da76a36e..c7f3c12daccb071f705a6a6a9c896653b3045a37 100644 |
--- a/third_party/closure_compiler/runner/src/com/google/javascript/jscomp/ChromePass.java |
+++ b/third_party/closure_compiler/runner/src/com/google/javascript/jscomp/ChromePass.java |
@@ -37,7 +37,6 @@ |
private static final String CR_EXPORT_PATH = "cr.exportPath"; |
private static final String OBJECT_DEFINE_PROPERTY = "Object.defineProperty"; |
private static final String CR_DEFINE_PROPERTY = "cr.defineProperty"; |
- private static final String CR_MAKE_PUBLIC = "cr.makePublic"; |
private static final String CR_DEFINE_COMMON_EXPLANATION = "It should be called like this:" |
+ " cr.define('name.space', function() '{ ... return {Export: Internal}; }');"; |
@@ -67,19 +66,6 @@ |
DiagnosticType.error("JSC_CR_DEFINE_PROPERTY_INVALID_PROPERTY_KIND", |
"Invalid cr.PropertyKind passed to cr.defineProperty(): expected ATTR," |
+ " BOOL_ATTR or JS, found \"{0}\"."); |
- |
- static final DiagnosticType CR_MAKE_PUBLIC_HAS_NO_JSDOC = |
- DiagnosticType.error("JSC_CR_MAKE_PUBLIC_HAS_NO_JSDOC", |
- "Private method exported by cr.makePublic() has no JSDoc."); |
- |
- static final DiagnosticType CR_MAKE_PUBLIC_MISSED_DECLARATION = |
- DiagnosticType.error("JSC_CR_MAKE_PUBLIC_MISSED_DECLARATION", |
- "Method \"{1}_\" exported by cr.makePublic() on \"{0}\" has no declaration."); |
- |
- static final DiagnosticType CR_MAKE_PUBLIC_INVALID_SECOND_ARGUMENT = |
- DiagnosticType.error("JSC_CR_MAKE_PUBLIC_INVALID_SECOND_ARGUMENT", |
- "Invalid second argument passed to cr.makePublic(): should be array of " + |
- "strings."); |
public ChromePass(AbstractCompiler compiler) { |
this.compiler = compiler; |
@@ -106,10 +92,6 @@ |
callee.matchesQualifiedName(CR_DEFINE_PROPERTY)) { |
visitPropertyDefinition(node, parent); |
compiler.reportCodeChange(); |
- } else if (callee.matchesQualifiedName(CR_MAKE_PUBLIC)) { |
- if (visitMakePublic(node, parent)) { |
- compiler.reportCodeChange(); |
- } |
} |
} |
} |
@@ -156,98 +138,6 @@ |
JSDocInfoBuilder builder = new JSDocInfoBuilder(false); |
builder.recordType(new JSTypeExpression(type, "")); |
target.setJSDocInfo(builder.build(target)); |
- } |
- |
- private boolean visitMakePublic(Node call, Node exprResult) { |
- boolean changesMade = false; |
- Node scope = exprResult.getParent(); |
- String className = call.getChildAtIndex(1).getQualifiedName(); |
- String prototype = className + ".prototype"; |
- Node methods = call.getChildAtIndex(2); |
- |
- if (methods == null || !methods.isArrayLit()) { |
- compiler.report(JSError.make(exprResult, CR_MAKE_PUBLIC_INVALID_SECOND_ARGUMENT)); |
- return changesMade; |
- } |
- |
- Set<String> methodNames = new HashSet<>(); |
- for (Node methodName: methods.children()) { |
- if (!methodName.isString()) { |
- compiler.report(JSError.make(methodName, CR_MAKE_PUBLIC_INVALID_SECOND_ARGUMENT)); |
- return changesMade; |
- } |
- methodNames.add(methodName.getString()); |
- } |
- |
- for (Node child: scope.children()) { |
- if (isAssignmentToPrototype(child, prototype)) { |
- Node objectLit = child.getFirstChild().getChildAtIndex(1); |
- for (Node stringKey : objectLit.children()) { |
- String field = stringKey.getString(); |
- changesMade |= maybeAddPublicDeclaration(field, methodNames, className, |
- stringKey, scope, exprResult); |
- } |
- } else if (isAssignmentToPrototypeMethod(child, prototype)) { |
- Node assignNode = child.getFirstChild(); |
- String qualifiedName = assignNode.getFirstChild().getQualifiedName(); |
- String field = qualifiedName.substring(qualifiedName.lastIndexOf('.') + 1); |
- changesMade |= maybeAddPublicDeclaration(field, methodNames, className, |
- assignNode, scope, exprResult); |
- } else if (isDummyPrototypeMethodDeclaration(child, prototype)) { |
- String qualifiedName = child.getFirstChild().getQualifiedName(); |
- String field = qualifiedName.substring(qualifiedName.lastIndexOf('.') + 1); |
- changesMade |= maybeAddPublicDeclaration(field, methodNames, className, |
- child.getFirstChild(), scope, exprResult); |
- } |
- } |
- |
- for (String missedDeclaration : methodNames) { |
- compiler.report(JSError.make(exprResult, CR_MAKE_PUBLIC_MISSED_DECLARATION, className, |
- missedDeclaration)); |
- } |
- |
- return changesMade; |
- } |
- |
- private boolean isAssignmentToPrototype(Node node, String prototype) { |
- Node assignNode; |
- return node.isExprResult() && (assignNode = node.getFirstChild()).isAssign() && |
- assignNode.getFirstChild().getQualifiedName().equals(prototype); |
- } |
- |
- private boolean isAssignmentToPrototypeMethod(Node node, String prototype) { |
- Node assignNode; |
- return node.isExprResult() && (assignNode = node.getFirstChild()).isAssign() && |
- assignNode.getFirstChild().getQualifiedName().startsWith(prototype + "."); |
- } |
- |
- private boolean isDummyPrototypeMethodDeclaration(Node node, String prototype) { |
- Node getPropNode; |
- return node.isExprResult() && (getPropNode = node.getFirstChild()).isGetProp() && |
- getPropNode.getQualifiedName().startsWith(prototype + "."); |
- } |
- |
- private boolean maybeAddPublicDeclaration(String field, Set<String> publicAPIStrings, |
- String className, Node jsDocSourceNode, Node scope, Node exprResult) { |
- boolean changesMade = false; |
- if (field.endsWith("_")) { |
- String publicName = field.substring(0, field.length() - 1); |
- if (publicAPIStrings.contains(publicName)) { |
- Node methodDeclaration = NodeUtil.newQualifiedNameNode( |
- compiler.getCodingConvention(), className + "." + publicName); |
- if (jsDocSourceNode.getJSDocInfo() != null) { |
- methodDeclaration.setJSDocInfo(jsDocSourceNode.getJSDocInfo()); |
- scope.addChildBefore( |
- IR.exprResult(methodDeclaration).srcrefTree(exprResult), |
- exprResult); |
- changesMade = true; |
- } else { |
- compiler.report(JSError.make(jsDocSourceNode, CR_MAKE_PUBLIC_HAS_NO_JSDOC)); |
- } |
- publicAPIStrings.remove(publicName); |
- } |
- } |
- return changesMade; |
} |
private void visitExportPath(Node crExportPathNode, Node parent) { |
@@ -452,4 +342,5 @@ |
this.namespaceName + "." + externalName).srcrefTree(internalName); |
} |
} |
+ |
} |