+
+ def GetFixedRequireString(self, token):
+ """Get fixed/sorted order of goog.require statements.
+
+ Args:
+ token: The first token in the token stream.
+
+ Returns:
+ A string for correct sorted order of goog.require.
+ """
+ return self._GetFixedRequireOrProvideString(
+ self._GetRequireOrProvideTokens(token, 'goog.require'))
+
+ def GetFixedProvideString(self, token):
+ """Get fixed/sorted order of goog.provide statements.
+
+ Args:
+ token: The first token in the token stream.
+
+ Returns:
+ A string for correct sorted order of goog.provide.
+ """
+ return self._GetFixedRequireOrProvideString(
+ self._GetRequireOrProvideTokens(token, 'goog.provide'))
+
+ def _GetFixedRequireOrProvideString(self, tokens):
+ """Sorts goog.provide or goog.require statements.
+
+ Args:
+ tokens: A list of goog.provide or goog.require tokens in the order they
+ appear in the token stream. i.e. the first token in this list must
+ be the first goog.provide or goog.require token.
+
+ Returns:
+ A string for sorted goog.require or goog.provide statements
+ """
+
+ # A map from required/provided object name to tokens that make up the line
+ # it was on, including any comments immediately before it or after it on the
+ # same line.
+ tokens_map = self._GetTokensMap(tokens)
+ sorted_strings = sorted(tokens_map.keys())
+
+ new_order = ''
+ for string in sorted_strings:
+ for i in tokens_map[string]:
+ new_order += i.string
+ if i.IsLastInLine():
+ new_order += '\n'
+
+ return new_order