case Token.CALL:
if (isDojoCall(node)) {
// We are looking for dojo.some_function(...) calls, this means first
// child of function call is property resolution of function in the
// dojo object.
Node propertyResolution = node.getFirstChild();
if (propertyResolution != null) {
// Find property label accessing object
String propertyName = functionPropertyName(propertyResolution);
// Single argument module functions, put out value and store in appropriate list.
if ("require".equals(propertyName) || "provide".equals(propertyName) || "declare".equals(propertyName)) {
String firstArg = functionCallArgument(propertyResolution, 0);
List<String> moduleList = moduleLists.get(propertyName);
if (!moduleList.contains(firstArg)) {
moduleList.add(firstArg);
}
} else if ("registerModulePath".equals(propertyName)) {
// Extract module identifier and module path, first two arguments to
// dojo.registerModulePath();
String modulePrefix = functionCallArgument(propertyResolution, 0);
String modulePath = functionCallArgument(propertyResolution, 1);
modulePaths.put(modulePrefix, modulePath);
}
}
}
break;
// Global identifier token, check for djConfig assignment, djConfig = {...}
case Token.SETNAME:
// LHS is global name binding.
Node bindName = node.getFirstChild();
// LHS should be djConfig global assignment.
if (bindName.getType() == Token.BINDNAME && "djConfig".equals(bindName.getString())) {
// RHS of statement should be literal assignment.
Node assignmentExpr = node.getLastChild();
parseModulePathsExpr(assignmentExpr);
}
break;
// Local identifier token, check for djConfig assignment, var djConfig = {...}
case Token.NAME:
// LHS is name token
if ("djConfig".equals(node.getString())) {
// Check for object literal assignment
Node assignmentExpr = node.getFirstChild();
parseModulePathsExpr(assignmentExpr);
}
break;
}