Class JarTypeSolver

java.lang.Object
com.github.javaparser.symbolsolver.resolution.typesolvers.JarTypeSolver
All Implemented Interfaces:
TypeSolver

public class JarTypeSolver extends Object implements TypeSolver
Will let the symbol solver look inside a jar file while solving types.
  • Field Details

  • Constructor Details

    • JarTypeSolver

      public JarTypeSolver(Path pathToJarOrClassFileHierarchy) throws IOException
      Create a JarTypeSolver from a Path.
      Parameters:
      pathToJarOrClassFileHierarchy - The path where the jar or class file hierarchy is located.
      Throws:
      IOException - If an I/O exception occurs while reading the Jar or class file hierarchy.
    • JarTypeSolver

      public JarTypeSolver(File pathToJarOrClassFileHierarchy) throws IOException
      Create a JarTypeSolver from a File.
      Parameters:
      pathToJarOrClassFileHierarchy - The file pointing to the jar or class file hierarchy is located.
      Throws:
      IOException - If an I/O exception occurs while reading the Jar or class file hierarchy.
    • JarTypeSolver

      public JarTypeSolver(String pathToJarOrClassFileHierarchy) throws IOException
      Create a JarTypeSolver from a path in a String format.
      Parameters:
      pathToJarOrClassFileHierarchy - The path pointing to the jar or class file hierarchy.
      Throws:
      IOException - If an I/O exception occurs while reading the Jar or class file hierarchy.
    • JarTypeSolver

      public JarTypeSolver(InputStream jarInputStream) throws IOException
      Create a JarTypeSolver from a InputStream. The content will be dumped into a temporary file to be used in the type solver.
      Parameters:
      jarInputStream - The input stream to be used.
      Throws:
      IOException - If an I/O exception occurs while creating the temporary file.
  • Method Details

    • getJarTypeSolver

      @Deprecated public static JarTypeSolver getJarTypeSolver(String pathToJar) throws IOException
      Deprecated.
      Use of this static method (previously following singleton pattern) is strongly discouraged and will be removed in a future version. For now, it has been modified to return a new instance to prevent the IllegalStateException being thrown (as reported in #2547), allowing it to be called multiple times.
      Throws:
      IOException
    • convertEntryPathToClassName

      private static String convertEntryPathToClassName(String entryPath)
      Convert the entry path into a qualified name. The entries in Jar files follows the format com/github/javaparser/ASTParser$JJCalls.class while in the type solver we need to work with com.github.javaparser.ASTParser.JJCalls.
      Parameters:
      entryPath - The entryPath to be converted.
      Returns:
      The qualified name for the entryPath.
    • convertEntryPathToClassPoolName

      private static String convertEntryPathToClassPoolName(String entryPath)
      Convert the entry path into a qualified name to be used in ClassPool. The entries in Jar files follows the format com/github/javaparser/ASTParser$JJCalls.class while in the class pool we need to work with com.github.javaparser.ASTParser$JJCalls.
      Parameters:
      entryPath - The entryPath to be converted.
      Returns:
      The qualified name to be used in the class pool.
    • dumpToTempFile

      private File dumpToTempFile(InputStream inputStream) throws IOException
      Utility function to dump the input stream into a temporary file. This file will be deleted when the virtual machine terminates.
      Parameters:
      inputStream - The input to be dumped.
      Returns:
      The created file with the dumped information.
      Throws:
      IOException - If an I/O exception occurs while creating the temporary file.
    • addPathToJar

      private void addPathToJar(String pathToJarOrClassFileHierarchy) throws IOException
      Utility method to register a new class path.
      Parameters:
      pathToJarOrClassFileHierarchy - The path pointing to the jar file or class file hierarchy.
      Throws:
      IOException - If an I/O error occurs while reading the JarFile or class file hierarchy.
    • registerModuleInfo

      private void registerModuleInfo()
    • registerKnownClassesFor

      private void registerKnownClassesFor(String pathToJarOrClassFileHierarchy) throws IOException
      Register the list of known classes. When we create a new JarTypeSolver we should store the list of solvable types.
      Parameters:
      pathToJarOrClassFileHierarchy - The path to the jar file or .class file hierarchy.
      Throws:
      IOException - If an I/O error occurs while reading the JarFile or .class file hierarchy.
    • convertPathToPackagePrefix

      private static String convertPathToPackagePrefix(Path pathToClassFileHierarchy, Path pathToClassFile)
      Given a path to a class file inside a class file hierarchy, extract the package name from the path.
      Parameters:
      pathToClassFileHierarchy - the root of the class file hierarchy
      pathToClassFile - the path to the class file, inside the hierarchy
      Returns:
      the package name of the class file
    • getKnownClasses

      public Set<String> getKnownClasses()
      Get the set of classes that can be resolved in the current type solver.
      Returns:
      The set of known classes.
    • getParent

      public TypeSolver getParent()
      Description copied from interface: TypeSolver
      Parent of the this TypeSolver. This can return null.
      Specified by:
      getParent in interface TypeSolver
    • setParent

      public void setParent(TypeSolver parent)
      Description copied from interface: TypeSolver
      Set the parent of this TypeSolver.
      Specified by:
      setParent in interface TypeSolver
    • tryToSolveType

      Description copied from interface: TypeSolver
      Try to solve the type with the given name. It always return a SymbolReference which can be solved or unsolved.
      Specified by:
      tryToSolveType in interface TypeSolver
    • solveType

      Description copied from interface: TypeSolver
      Solve the given type. Either the type is found and returned or an UnsolvedSymbolException is thrown.
      Specified by:
      solveType in interface TypeSolver
      Throws:
      UnsolvedSymbolException
    • getClassFromPool

      private javassist.CtClass getClassFromPool(String className)
    • tryToSolveTypeInModule

      public SymbolReference<ResolvedReferenceTypeDeclaration> tryToSolveTypeInModule(String qualifiedModuleName, String simpleTypeName)
      https://docs.oracle.com/javase/specs/jvms/se25/html/jvms-4.html#jvms-4.7.25
      Specified by:
      tryToSolveTypeInModule in interface TypeSolver
      Parameters:
      qualifiedModuleName -
      simpleTypeName -
      Returns: