Class PackageMapNode

java.lang.Object
org.fife.rsta.ac.java.PackageMapNode

public class PackageMapNode extends Object
A data structure modeling all classes in a jar or directory, or on a classpath. It's a recursive mapping of Strings to either Maps or ClassFiles (which are lazily created and may be null). At each level of the nested map, the string key is a package name iff its corresponding value is a Map. Examine that Map's contents to explore the contents of that package. If the corresponding value is a ClassFile, then the string key's value is the name of that class. Finally, if the corresponding value is null, then the string key's value is the name of a class, but its contents have not yet been loaded for use by the code completion library (ClassFiles are lazily loaded to conserve memory).
  • Field Details

    • subpackages

      private SortedMap<String,PackageMapNode> subpackages
      A mapping of sub-package name to the sub-packages and classes under it.
    • classFiles

      private SortedMap<String,ClassFile> classFiles
      A mapping of class file names to class files in this package. The actual ClassFile values are lazily instantiated, so any map entry with a value of null simply has not been created yet.
  • Constructor Details

    • PackageMapNode

      public PackageMapNode()
  • Method Details

    • add

      public void add(String className)
      Adds entries for a fully-qualified class name, of the form "org/fife/util/DynamicIntArray.class". This method should only be called on the "root" node of a package map.
      Parameters:
      className - A fully-qualified class name of the form described above.
    • addCompletions

      public void addCompletions(LibraryInfo info, org.fife.ui.autocomplete.CompletionProvider provider, String[] pkgNames, Set<org.fife.ui.autocomplete.Completion> addTo)
      Gets the completions in this package map that match a given string.
      Parameters:
      info - The library info.
      provider - The parent completion provider.
      pkgNames - The text to match, split into tokens around the '.' character. This should be (the start of) a fully-qualified class, interface, or enum name.
      addTo - The list to add completion choices to.
    • clearClassFiles

      public int clearClassFiles()
      Removes the cache of all ClassFiles from this package map.
      Returns:
      The number of class file entries removed.
    • clearClassFilesImpl

      private int clearClassFilesImpl(PackageMapNode pmn)
    • containsClass

      public boolean containsClass(String className)
      Returns whether this package map node contains a class.
      Parameters:
      className - The class name to check.
      Returns:
      Whether it is contained.
    • containsPackage

      public boolean containsPackage(String pkgName)
      Returns whether this package map node contains a package.
      Parameters:
      pkgName - The package to check.
      Returns:
      Whether it is contained.
    • getClassEntry

      public ClassFile getClassEntry(LibraryInfo info, String[] items)
      Returns a class entry.
      Parameters:
      info - The library info.
      items - The set of items (?).
      Returns:
      The class file entry.
    • getClassesInPackage

      public void getClassesInPackage(LibraryInfo info, List<ClassFile> addTo, String[] pkgs, boolean inPkg)
      Returns the classes in a package.
      Parameters:
      info - The library info.
      addTo - The collection to add to.
      pkgs - The current set of packages.
      inPkg - Whether to be in the package (?).
    • getClassesWithNamesStartingWith

      void getClassesWithNamesStartingWith(LibraryInfo info, String prefix, String currentPkg, List<ClassFile> addTo)
      Method used to recursively scan our package map for classes whose names start with a given prefix, ignoring case.
      Parameters:
      prefix - The prefix that the unqualified class names must match (ignoring case).
      currentPkg - The package that map belongs to (i.e. all levels of packages scanned before this one), separated by '/'.
      addTo - The list to add any matching ClassFiles to.
    • possiblyAddTo

      private static void possiblyAddTo(Collection<ClassFile> addTo, ClassFile cf, boolean inPkg)