@@ -260,10 +260,38 @@ public static void main(String[] args) {
260260
261261 /**
262262 * If one file defines a name and another uses it as a namespace, we have the
263- * Constants.COLLDING_PROVIDE_ALIAS_POSTFIX workaround. In partial mode, Clutz can't see all
263+ * Constants.COLLIDING_PROVIDE_ALIAS_POSTFIX workaround. In partial mode, Clutz can't see all
264264 * definitions of a name, so the list of names that require aliases must be passed as an input.
265+ * Also Closure Library uses some names as both classes and namespases. For example,
266+ * `goog.ui.Component` is not only a class but also a namespace in `goog.ui.Component.EventType`.
267+ * See https://github.com/google/closure-library/blob/master/closure/goog/ui/component.js
265268 */
266- private Set <String > collidingProvides = new LinkedHashSet <>();
269+ private Set <String > collidingProvides =
270+ Sets .newHashSet (
271+ "goog.ui.AdvancedTooltip" ,
272+ "goog.ui.AnimatedZippy" ,
273+ "goog.ui.Checkbox" ,
274+ "goog.ui.ColorPicker" ,
275+ "goog.ui.Component" ,
276+ "goog.ui.Container" ,
277+ "goog.ui.Control" ,
278+ "goog.ui.Dialog" ,
279+ "goog.ui.FilteredMenu" ,
280+ "goog.ui.HoverCard" ,
281+ "goog.ui.Menu" ,
282+ "goog.ui.MenuItem" ,
283+ "goog.ui.ModalPopup" ,
284+ "goog.ui.Ratings" ,
285+ "goog.ui.ScrollFloater" ,
286+ "goog.ui.SliderBase" ,
287+ "goog.ui.SplitPane" ,
288+ "goog.ui.TableSorter" ,
289+ "goog.ui.Textarea" ,
290+ "goog.ui.TriStateMenuItem" ,
291+ "goog.ui.Zippy" ,
292+ "goog.ui.editor.AbstractDialog" ,
293+ "goog.ui.editor.LinkDialog" ,
294+ "goog.ui.tree.BaseNode" );
267295
268296 DeclarationGenerator (Options opts ) {
269297 this .opts = opts ;
@@ -416,7 +444,7 @@ String generateDeclarations(
416444 legacyNamespaceReexportMap =
417445 new LegacyNamespaceReexportMapBuilder ()
418446 .build (compiler .getParsedInputs (), opts .depgraph .getGoogProvides ());
419- collidingProvides = opts .collidingProvides ;
447+ collidingProvides . addAll ( opts .collidingProvides ) ;
420448 }
421449
422450 unknownType = compiler .getTypeRegistry ().getNativeType (JSTypeNative .UNKNOWN_TYPE );
@@ -512,7 +540,7 @@ String produceDts(Depgraph depgraph) {
512540 rewrittenProvides .add (rewritenProvide );
513541 }
514542 if (needsAlias (shadowedProvides , provide , symbol )) {
515- emitName += Constants .COLLDING_PROVIDE_ALIAS_POSTFIX ;
543+ emitName += Constants .COLLIDING_PROVIDE_ALIAS_POSTFIX ;
516544 }
517545 if (symbol == null ) {
518546 // Sometimes goog.provide statements are used as pure markers for dependency management, or
@@ -858,7 +886,7 @@ private void processExternSymbols() {
858886 boolean isDefault = isDefaultExport (symbol );
859887 String emitName = symbol .getName ();
860888 if (needsAlias (shadowedSymbols , symbol .getName (), symbol )) {
861- emitName += Constants .COLLDING_PROVIDE_ALIAS_POSTFIX ;
889+ emitName += Constants .COLLIDING_PROVIDE_ALIAS_POSTFIX ;
862890 }
863891
864892 // There is nothing to emit for a namespace, because all its symbols will be visited later,
@@ -1485,6 +1513,9 @@ private TreeWalker(
14851513
14861514 private String getAbsoluteName (ObjectType objectType ) {
14871515 String name = objectType .getDisplayName ();
1516+ if (collidingProvides .contains (name )) {
1517+ name += Constants .COLLIDING_PROVIDE_ALIAS_POSTFIX ;
1518+ }
14881519 // Names that do not have a namespace '.' are either platform names in the top level
14891520 // namespace like `Object` or `Element`, or they are unqualified `goog.provide`s, e.g.
14901521 // `goog.provide('Toplevel')`. In both cases they will be found with the naked name.
@@ -1513,7 +1544,7 @@ private void walk(TypedVar symbol, String emitName) {
15131544 // Since closure inlines all aliases before this step, check against
15141545 // the type name.
15151546 if (!isAliasedClassOrInterface (symbol , ftype )) {
1516- visitClassOrInterface (getUnqualifiedName (symbol ), ftype );
1547+ visitClassOrInterface (getUnqualifiedName (emitName ), ftype );
15171548 } else {
15181549 if (KNOWN_CLASS_ALIASES .containsKey (symbol .getName ())) {
15191550 visitKnownTypeValueAlias (
0 commit comments