private static SuggestedFix getFixForExtraRequire(JSError error, AbstractCompiler compiler) { Matcher regexMatcher = EXTRA_REQUIRE.matcher(error.description); Preconditions.checkState(regexMatcher.matches(), "Unexpected error description: %s", error.description); String namespace = regexMatcher.group(1); NodeMetadata metadata = new NodeMetadata(compiler); Match match = new Match(error.node, metadata); return new SuggestedFix.Builder() .setOriginalMatchedNode(error.node) .removeGoogRequire(match, namespace) .build(); }
/** * Removes a goog.require for the given namespace to the file if it * already exists. */ public Builder removeGoogRequire(Match m, String namespace) { Node googRequireNode = findGoogRequireNode(m.getNode(), m.getMetadata(), namespace); if (googRequireNode != null) { return deleteWithoutRemovingWhitespaceBefore(googRequireNode); } return this; }
@Override public List<SuggestedFix> processMatch(Match match) { SuggestedFix.Builder fix = new SuggestedFix.Builder(); Node newNode = transformNode( matchedTemplate.afterTemplate.getLastChild(), matchedTemplate.matcher.getTemplateNodeToMatchMap()); Node nodeToReplace = match.getNode(); fix.setOriginalMatchedNode(nodeToReplace); fix.replace(nodeToReplace, newNode, match.getMetadata().getCompiler()); // If the template is a multiline template, make sure to delete the same number of sibling nodes // as the template has. Node n = match.getNode().getNext(); for (int i = 1; i < matchedTemplate.beforeTemplate.getLastChild().getChildCount(); i++) { Preconditions.checkNotNull( n, "Found mismatched sibling count between before template and matched node.\n" + "Template: %s\nMatch: %s", matchedTemplate.beforeTemplate.getLastChild(), match.getNode()); fix.delete(n); n = n.getNext(); } // Add/remove any goog.requires for (String require : matchedTemplate.getGoogRequiresToAdd()) { fix.addGoogRequire(match, require); } for (String require : matchedTemplate.getGoogRequiresToRemove()) { fix.removeGoogRequire(match, require); } return ImmutableList.of(fix.build()); }
private static SuggestedFix getFixForMissingRequire(JSError error, AbstractCompiler compiler) { Matcher regexMatcher = MISSING_REQUIRE.matcher(error.description); Preconditions.checkState(regexMatcher.matches(), "Unexpected error description: %s", error.description); String namespaceToRequire = regexMatcher.group(1); NodeMetadata metadata = new NodeMetadata(compiler); Match match = new Match(error.node, metadata); return new SuggestedFix.Builder() .setOriginalMatchedNode(error.node) .addGoogRequire(match, namespaceToRequire) .build(); }
Node node = m.getNode(); NodeMetadata metadata = m.getMetadata(); Node existingNode = findGoogRequireNode(m.getNode(), metadata, namespace); if (existingNode != null) { return this; startPosition, 0, generateCode(m.getMetadata().getCompiler(), googRequireNode))); return this; } else { } else { replacements.put(script.getSourceFileName(), new CodeReplacement( 0, 0, generateCode(m.getMetadata().getCompiler(), googRequireNode))); return this; nodeToInsertBefore, googRequireNode, m.getMetadata().getCompiler(), namespace);
@Override public void visit(NodeTraversal t, Node n, Node parent) { NodeMetadata metadata = new NodeMetadata(t.getCompiler()); if (scanner.matches(n, metadata)) { Match match = new Match(n, metadata); fixes.addAll(scanner.processMatch(match)); matches.add(match); } } }