Class ImportManager


  • class ImportManager
    extends java.lang.Object
    Adds imports and applies scope visibility rules to a compilation unit.

    To ensure we never import common names like 'Builder', nested classes must have at least one non-lowercase letter (apart from the first) in their name.

    • Field Detail

      • CONFLICT

        private static final QualifiedName CONFLICT
        Impossible typename, to use instead of null (which toMap goes odd over).
      • todo

        private final java.util.Deque<TypeUsage> todo
        Type usages to process.
      • namespace

        private final java.util.Map<java.lang.String,​QualifiedName> namespace
        Simple name → type, or CONFLICT if multiple types conflicted for that name.
      • imports

        private final com.google.common.collect.Multimap<QualifiedName,​TypeUsage> imports
        Types to import, and for which usages.
      • resolutions

        private final java.util.Map<TypeUsage,​QualifiedName> resolutions
        Which type, imported or in scope, to use to shorten each type usage.
      • pkg

        private final java.lang.String pkg
    • Constructor Detail

      • ImportManager

        private ImportManager​(java.util.List<TypeUsage> usages,
                              ScopeHandler scopeHandler,
                              java.lang.String pkg)
    • Method Detail

      • shortenReferences

        static java.lang.String shortenReferences​(java.lang.CharSequence codeWithQualifiedNames,
                                                  java.lang.String pkg,
                                                  int importsIndex,
                                                  java.util.List<TypeUsage> typeUsages,
                                                  ScopeHandler scopeHandler)
      • selectImports

        private void selectImports()
      • appendImports

        private void appendImports​(java.lang.StringBuilder result)
      • appendUsage

        private void appendUsage​(java.lang.StringBuilder result,
                                 TypeUsage usage)
      • reserveName

        private boolean reserveName​(QualifiedName name)
      • resolveUsage

        private void resolveUsage​(TypeUsage usage)
      • isSensibleImport

        private static boolean isSensibleImport​(QualifiedName name)