Package japicmp.cmp

Class JarArchiveComparator

java.lang.Object
japicmp.cmp.JarArchiveComparator

public class JarArchiveComparator extends Object
This class provides the basic methods to compare the classes within to jar archives.
  • Field Details

    • LOGGER

      private static final Logger LOGGER
    • commonClassPool

      private javassist.ClassPool commonClassPool
    • oldClassPool

      private javassist.ClassPool oldClassPool
    • newClassPool

      private javassist.ClassPool newClassPool
    • commonClassPathAsString

      private String commonClassPathAsString
    • oldClassPathAsString

      private String oldClassPathAsString
    • newClassPathAsString

      private String newClassPathAsString
    • options

      private final JarArchiveComparatorOptions options
  • Constructor Details

    • JarArchiveComparator

      public JarArchiveComparator(JarArchiveComparatorOptions options)
      Constructs an instance of this class and performs a setup of the classpath
      Parameters:
      options - the options used in the further processing
  • Method Details

    • setupCompatibilityChanges

      private void setupCompatibilityChanges(JarArchiveComparatorOptions options)
    • compare

      public List<JApiClass> compare(JApiCmpArchive oldArchive, JApiCmpArchive newArchive)
      Compares the two given archives.
      Parameters:
      oldArchive - the old version of the archive
      newArchive - the new version of the archive
      Returns:
      a list which contains one instance of JApiClass for each class found in one of the two archives
      Throws:
      JApiCmpException - if the comparison fails
    • compare

      public List<JApiClass> compare(List<JApiCmpArchive> oldArchives, List<JApiCmpArchive> newArchives)
      Compares the two given lists of archives.
      Parameters:
      oldArchives - the old versions of the archives
      newArchives - the new versions of the archives
      Returns:
      a list which contains one instance of JApiClass for each class found in one of the archives
      Throws:
      JApiCmpException - if the comparison fails
    • checkJavaObjectSerializationCompatibility

      private void checkJavaObjectSerializationCompatibility(List<JApiClass> jApiClasses)
    • setupClasspaths

      private void setupClasspaths()
    • setupClasspath

      private String setupClasspath(javassist.ClassPool classPool, List<String> classPathEntries)
    • appendSystemClassPath

      private String appendSystemClassPath(javassist.ClassPool classPool, String classPathAsString)
    • appendUserDefinedClassPathEntries

      private String appendUserDefinedClassPathEntries(javassist.ClassPool classPool, List<String> classPathEntries)
    • getCommonClasspathAsString

      public String getCommonClasspathAsString()
      Returns the common classpath used by JarArchiveComparator
      Returns:
      the common classpath as String
    • getOldClassPathAsString

      public String getOldClassPathAsString()
      Returns the classpath for the old version as String.
      Returns:
      the classpath for the old version
    • getNewClassPathAsString

      public String getNewClassPathAsString()
      Returns the classpath for the new version as String.
      Returns:
      the classpath for the new version
    • checkBinaryCompatibility

      private void checkBinaryCompatibility(List<JApiClass> classList)
    • createAndCompareClassLists

      private List<JApiClass> createAndCompareClassLists(List<File> oldArchives, List<File> newArchives)
    • compareClassLists

      List<JApiClass> compareClassLists(JarArchiveComparatorOptions options, List<javassist.CtClass> oldClasses, List<javassist.CtClass> newClasses)
      Compares the two lists with CtClass objects using the provided options instance.
      Parameters:
      options - the options to use
      oldClasses - a list of CtClasses that represent the old version
      newClasses - a list of CtClasses that represent the new version
      Returns:
      a list of JApiClass that represent the changes
    • applyFilter

      private List<javassist.CtClass> applyFilter(JarArchiveComparatorOptions options, List<javassist.CtClass> ctClasses)
    • createListOfCtClasses

      private List<javassist.CtClass> createListOfCtClasses(List<File> archives, javassist.ClassPool classPool)
    • updatePackageFilter

      private void updatePackageFilter(javassist.CtClass ctClass)
    • getJarArchiveComparatorOptions

      public JarArchiveComparatorOptions getJarArchiveComparatorOptions()
      Returns the instance of JarArchiveComparatorOptions that is used.
      Returns:
      an instance of JarArchiveComparatorOptions
    • getCommonClassPool

      public javassist.ClassPool getCommonClassPool()
      Returns the javassist ClassPool instance that is used by this instance. This can be used in unit tests to define artificial CtClass instances for the same ClassPool.
      Returns:
      an instance of ClassPool
    • getOldClassPool

      public javassist.ClassPool getOldClassPool()
      Returns the javassist ClassPool that is used for the old version.
      Returns:
      an instance of ClassPool
    • getNewClassPool

      public javassist.ClassPool getNewClassPool()
      Returns the javassist ClassPool that is used for the new version.
      Returns:
      an instance of ClassPool
    • loadClass

      public Optional<javassist.CtClass> loadClass(JarArchiveComparator.ArchiveType archiveType, String name)
      Loads a class either from the old, new or common classpath.
      Parameters:
      archiveType - specify if this class should be loaded from the old or new class path
      name - the name of the class (FQN)
      Returns:
      the loaded class (if options are not set to ignore missing classes)
      Throws:
      JApiCmpException - if loading the class fails