Skip to content
Snippets Groups Projects
Commit 2f757175 authored by Greg DiCristofaro's avatar Greg DiCristofaro
Browse files

additions

parent 3911b60c
No related branches found
No related tags found
No related merge requests found
......@@ -7,6 +7,7 @@
import japicmp.cmp.JApiCmpArchive;
import japicmp.cmp.JarArchiveComparator;
import japicmp.cmp.JarArchiveComparatorOptions;
import japicmp.config.Options;
import japicmp.model.JApiClass;
import java.io.File;
import java.io.FileFilter;
......@@ -44,7 +45,7 @@ private static Set<String> getJars(File dir) {
.collect(Collectors.toSet());
}
static Set<String> getPublicPackages(File jarFile) throws IOException, IllegalStateException {
private static Set<String> getPublicPackages(File jarFile) throws IOException, IllegalStateException {
String publicPackageStr = ManifestLoader.loadFromJar(jarFile).getValue("OpenIDE-Module-Public-Packages");
if (publicPackageStr == null) {
throw new IllegalStateException(MessageFormat.format("Manifest for {0} does not have key of 'OpenIDE-Module-Public-Packages'", jarFile.getAbsolutePath()));
......@@ -56,15 +57,107 @@ static Set<String> getPublicPackages(File jarFile) throws IOException, IllegalSt
}
}
private static void getComparison(String prevVersion, String curVersion, File prevJar, File curJar) {
static void getComparison(String prevVersion, String curVersion, File prevJar, File curJar) throws IOException {
JarArchiveComparatorOptions comparatorOptions = new JarArchiveComparatorOptions();
//comparatorOptions.setAccessModifier(AccessModifier.);
comparatorOptions.getIgnoreMissingClasses().setIgnoreAllMissingClasses(true);
JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(comparatorOptions);
List<JApiClass> jApiClasses = jarArchiveComparator.compare(
new JApiCmpArchive(prevJar, prevVersion),
new JApiCmpArchive(curJar, curVersion)
);
Set<String> prevPublicApiPackages = getPublicPackages(prevJar);
Set<String> curPublicApiPackages = getPublicPackages(curJar);
// TODO handle diff in this list
Set<String> allPublicApiPackages = new HashSet<>();
allPublicApiPackages.addAll(prevPublicApiPackages);
allPublicApiPackages.addAll(curPublicApiPackages);
jApiClasses = jApiClasses.stream()
.filter(cls -> allPublicApiPackages.contains(cls.getNewClass().or(cls.getOldClass()).get().getPackageName()))
.collect(Collectors.toList());
Options options = Options.newDefault();
options.setOutputOnlyModifications(true);
System.out.println("Comparing " + prevJar.getName());
System.out.println(jApiClasses);
ChangeOutputGenerator stdoutOutputGenerator = new ChangeOutputGenerator(options, jApiClasses);
String output = stdoutOutputGenerator.generate();
System.out.println(output);
}
private static void generateOutput(Options options, List<JApiClass> jApiClasses, JarArchiveComparator jarArchiveComparator) {
// for (JApiClass cls: jApiClasses) {
// cls.is
// }
//
// if (options.isSemanticVersioning()) {
// SemverOut semverOut = new SemverOut(options, jApiClasses);
// String output = semverOut.generate();
// System.out.println(output);
// return;
// }
// if (options.getXmlOutputFile().isPresent() || options.getHtmlOutputFile().isPresent()) {
// SemverOut semverOut = new SemverOut(options, jApiClasses);
// XmlOutputGeneratorOptions xmlOutputGeneratorOptions = new XmlOutputGeneratorOptions();
// xmlOutputGeneratorOptions.setCreateSchemaFile(true);
// xmlOutputGeneratorOptions.setSemanticVersioningInformation(semverOut.generate());
// XmlOutputGenerator xmlGenerator = new XmlOutputGenerator(jApiClasses, options, xmlOutputGeneratorOptions);
// try (XmlOutput xmlOutput = xmlGenerator.generate()) {
// XmlOutputGenerator.writeToFiles(options, xmlOutput);
// } catch (Exception e) {
// throw new JApiCmpException(JApiCmpException.Reason.IoException, "Could not close output streams: " + e.getMessage(), e);
// }
// }
// StdoutOutputGenerator stdoutOutputGenerator = new StdoutOutputGenerator(options, jApiClasses);
// String output = stdoutOutputGenerator.generate();
// System.out.println(output);
// if (options.isErrorOnBinaryIncompatibility()
// || options.isErrorOnSourceIncompatibility()
// || options.isErrorOnExclusionIncompatibility()
// || options.isErrorOnModifications()
// || options.isErrorOnSemanticIncompatibility()) {
// IncompatibleErrorOutput errorOutput = new IncompatibleErrorOutput(options, jApiClasses, jarArchiveComparator);
// errorOutput.generate();
// }
}
// enum ChangeType { CHANGE, ADD, REMOVE }
//
// public class ClassChangeDTO {
// private final String packageStr;
// private final String fullyQualifiedClassName;
// private final ChangeType changeType;
//
// private final ClassDataDTO prevClassRecord;
// private final ClassDataDTO currClassRecord;
//
//
// }
//
// public class ClassDataDTO {
// private final String packageStr;
// private final String fullyQualifiedClassName;
// private final AccessModifier accessModifier;
// }
//
}
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package org.sleuthkit.autopsy.apiupdate;
import japicmp.model.JApiChangeStatus;
import java.util.Optional;
/**
*
* @author gregd
*/
public class ApiChangeDTO {
//NEW, REMOVED, UNCHANGED, MODIFIED
public interface PublicApiChangeable {
PublicApiChangeType getChangeType();
}
public static class ClassChangeDTO {
private final JApiChangeStatus changeStatus;
private final Optional<String> oldDeclaration;
private final Optional<Long> oldSerialId;
private final Optional<String> newDeclaration;
private final Optional<Long> newSerialId;
public ClassChangeDTO(JApiChangeStatus changeStatus, Optional<String> oldDeclaration, Optional<Long> oldSerialId, Optional<String> newDeclaration, Optional<Long> newSerialId) {
this.changeStatus = changeStatus;
this.oldDeclaration = oldDeclaration;
this.oldSerialId = oldSerialId;
this.newDeclaration = newDeclaration;
this.newSerialId = newSerialId;
}
public JApiChangeStatus getChangeStatus() {
return changeStatus;
}
public Optional<String> getOldDeclaration() {
return oldDeclaration;
}
public Optional<Long> getOldSerialId() {
return oldSerialId;
}
public Optional<String> getNewDeclaration() {
return newDeclaration;
}
public Optional<Long> getNewSerialId() {
return newSerialId;
}
}
// public static class SuperclassChangeDTO {
//
// private final Optional<String> oldFullyQualifiedClassName;
// private final Optional<String> newFullyQualifiedClassName;
//
// public SuperclassChangeDTO(Optional<String> oldFullyQualifiedClassName, Optional<String> newFullyQualifiedClassName) {
// this.oldFullyQualifiedClassName = oldFullyQualifiedClassName;
// this.newFullyQualifiedClassName = newFullyQualifiedClassName;
// }
//
// public Optional<String> getOldFullyQualifiedClassName() {
// return oldFullyQualifiedClassName;
// }
//
// public Optional<String> getNewFullyQualifiedClassName() {
// return newFullyQualifiedClassName;
// }
//
// }
//
// public static class InterfaceChangeDTO {
//
// private final JApiChangeStatus changeStatus;
// private final String fullyQualifiedName;
//
// public InterfaceChangeDTO(JApiChangeStatus changeStatus, String fullyQualifiedName) {
// this.changeStatus = changeStatus;
// this.fullyQualifiedName = fullyQualifiedName;
// }
//
// public JApiChangeStatus getChangeStatus() {
// return changeStatus;
// }
//
// public String getFullyQualifiedName() {
// return fullyQualifiedName;
// }
//
// }
public static class MethodChangeDTO {
private final JApiChangeStatus changeStatus;
private final Optional<String> oldMethodDeclaration;
private final Optional<String> newMethodDeclaration;
public MethodChangeDTO(JApiChangeStatus changeStatus, Optional<String> oldMethodDeclaration, Optional<String> newMethodDeclaration) {
this.changeStatus = changeStatus;
this.oldMethodDeclaration = oldMethodDeclaration;
this.newMethodDeclaration = newMethodDeclaration;
}
public JApiChangeStatus getChangeStatus() {
return changeStatus;
}
public Optional<String> getOldMethodDeclaration() {
return oldMethodDeclaration;
}
public Optional<String> getNewMethodDeclaration() {
return newMethodDeclaration;
}
}
public static class FieldChangeDTO {
private final JApiChangeStatus changeStatus;
private final Optional<String> oldFieldDeclaration;
private final Optional<String> newFieldDeclaration;
public FieldChangeDTO(JApiChangeStatus changeStatus, Optional<String> oldFieldDeclaration, Optional<String> newFieldDeclaration) {
this.changeStatus = changeStatus;
this.oldFieldDeclaration = oldFieldDeclaration;
this.newFieldDeclaration = newFieldDeclaration;
}
public JApiChangeStatus getChangeStatus() {
return changeStatus;
}
public Optional<String> getOldFieldDeclaration() {
return oldFieldDeclaration;
}
public Optional<String> getNewFieldDeclaration() {
return newFieldDeclaration;
}
}
}
......@@ -3,14 +3,11 @@
*/
package org.sleuthkit.autopsy.apiupdate;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.cli.ParseException;
import org.sleuthkit.autopsy.apiupdate.CLIProcessor.CLIArgs;
import org.sleuthkit.autopsy.apiupdate.ModuleUpdates.ModuleVersionNumbers;
import org.sleuthkit.autopsy.apiupdate.ModuleUpdates.ReleaseVal;
/**
*
......@@ -19,7 +16,7 @@
public class Main {
public static void main(String[] args) {
args = "-c C:\\Users\\gregd\\Documents\\Source\\autopsy\\build\\cluster\\modules -p C:\\Users\\gregd\\Desktop\\prevVers -cv 4.21.0 -pv 4.20.0 -s C:\\Users\\gregd\\Documents\\Source\\autopsy".split(" ");
args = "-c C:\\Users\\gregd\\Desktop\\apidiff\\new -p C:\\Users\\gregd\\Desktop\\apidiff\\old -cv 4.21.0 -pv 4.20.0 -s C:\\Users\\gregd\\Documents\\Source\\autopsy".split(" ");
CLIArgs cliArgs;
try {
cliArgs = CLIProcessor.parseCli(args);
......@@ -33,31 +30,35 @@ public static void main(String[] args) {
return;
}
Map<String, ModuleVersionNumbers> versNums = Stream.of(
new ModuleVersionNumbers(
"org.sleuthkit.autopsy.core",
new ModuleUpdates.SemVer(1,2,3),
4,
new ReleaseVal("org.sleuthkit.autopsy.core", 5)),
new ModuleVersionNumbers(
"org.sleuthkit.autopsy.corelibs",
new ModuleUpdates.SemVer(6,7,8),
9,
new ReleaseVal("org.sleuthkit.autopsy.corelibs", 10)))
.collect(Collectors.toMap(v -> v.getModuleName(), v -> v, (v1, v2) -> v1));
ModuleUpdates.setVersions(cliArgs.getSrcPath(), versNums);
// Map<String, ModuleVersionNumbers> versNums = Stream.of(
// new ModuleVersionNumbers(
// "org.sleuthkit.autopsy.core",
// new ModuleUpdates.SemVer(1,2,3),
// 4,
// new ReleaseVal("org.sleuthkit.autopsy.core", 5)),
// new ModuleVersionNumbers(
// "org.sleuthkit.autopsy.corelibs",
// new ModuleUpdates.SemVer(6,7,8),
// 9,
// new ReleaseVal("org.sleuthkit.autopsy.corelibs", 10)))
// .collect(Collectors.toMap(v -> v.getModuleName(), v -> v, (v1, v2) -> v1));
//
// ModuleUpdates.setVersions(cliArgs.getSrcPath(), versNums);
// for (String commonJarFileName : APIDiff.getCommonJars(cliArgs.getPreviousVersPath(), cliArgs.getCurrentVersPath())) {
// try {
for (String commonJarFileName : APIDiff.getCommonJars(cliArgs.getPreviousVersPath(), cliArgs.getCurrentVersPath())) {
try {
// ModuleVersionNumbers m = ModuleUpdates.getVersionsFromJar(cliArgs.getPreviousVersPath().toPath().resolve(commonJarFileName).toFile());
// System.out.println(MessageFormat.format("release: {0}, spec: {1}, implementation: {2}", m.getRelease().getFullReleaseStr(), m.getSpec().getSemVerStr(), m.getImplementation()));
//
// } catch (IOException ex) {
// Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
// }
//
// }
APIDiff.getComparison(
cliArgs.getPreviousVersion(),
cliArgs.getCurrentVersion(),
cliArgs.getPreviousVersPath().toPath().resolve(commonJarFileName).toFile(),
cliArgs.getCurrentVersPath().toPath().resolve(commonJarFileName).toFile());
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
......
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package org.sleuthkit.autopsy.apiupdate;
/**
*
* @author gregd
*/
public enum PublicApiChangeType {
NONE, COMPATIBLE_CHANGE, INCOMPATIBLE_CHANGE;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment