Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions core/src/main/scala/com/eed3si9n/jarjar/JJProcessor.scala
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,10 @@ class JJProcessor(
System.err.println(s"Skipped $name without processing because $name == ${struct.name}")
}
}
} else {
if (verbose) {
System.err.println(s"Removed $name due to chain rejection")
}
}
keepIt
}
Expand Down
6 changes: 4 additions & 2 deletions jarjar/src/main/java/com/eed3si9n/jarjar/DepFind.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ public void run(String from, String to, DepHandler handler) throws IOException {
header.read(in);
classes.put(header.getClassName(), entry.getSource());
} catch (Exception e) {
System.err.println("Error reading " + entry.getName() + ": " + e.getMessage());
System.err.println("[DepFind] Error reading " + entry.getName() + ": " + e.getMessage());
e.printStackTrace(System.err);
} finally {
in.close();
}
Expand All @@ -64,7 +65,8 @@ public void run(String from, String to, DepHandler handler) throws IOException {
new DepFindVisitor(classes, entry.getSource(), handler),
ClassReader.SKIP_DEBUG);
} catch (Exception e) {
System.err.println("Error reading " + entry.getName() + ": " + e.getMessage());
System.err.println("[DepFind] Error reading " + entry.getName() + ": " + e.getMessage());
e.printStackTrace(System.err);
} finally {
in.close();
}
Expand Down
23 changes: 17 additions & 6 deletions jarjar/src/main/java/com/eed3si9n/jarjar/KeepProcessor.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,35 +56,46 @@ private void recursiveProcessDependencies(Set<String> result, Collection<String>
}
}

private final Object csdMutex = new Object();
private Set<String> currentDependenciesSet;

public boolean process(EntryStruct struct) throws IOException {
if (struct.name.endsWith(".class")) {
String name = struct.name.substring(0, struct.name.length() - 6);
depend.put(name, currentDependenciesSet = new HashSet<String>());

synchronized (csdMutex) {
currentDependenciesSet = new HashSet<String>();
depend.put(name, currentDependenciesSet);
}

try {
new ClassReader(new ByteArrayInputStream(struct.data)).accept(cv,
ClassReader.EXPAND_FRAMES);
currentDependenciesSet.remove(name);

synchronized (csdMutex) {
currentDependenciesSet.remove(name);
}
} catch (Exception e) {
System.err.println("Error reading " + struct.name + ": " + e.getMessage());
System.err.println("[KeepProcessor] Error reading " + struct.name + ": " + e.getMessage());
e.printStackTrace(System.err);
}

for (Wildcard wildcard : wildcards) {
if (wildcard.matches(name)) {
roots.add(name);
return true;
break;
}
}
return false;
}
return true;
}

public String map(String key) {
if (key.startsWith("java/") || key.startsWith("javax/"))
return null;
currentDependenciesSet.add(key);
synchronized (csdMutex) {
currentDependenciesSet.add(key);
}
return null;
}

Expand Down
3 changes: 2 additions & 1 deletion jarjar/src/main/java/com/eed3si9n/jarjar/StringDumper.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ public void run(String classPath, PrintWriter pw) throws IOException {
try {
new ClassReader(in).accept(stringReader, 0);
} catch (Exception e) {
System.err.println("Error reading " + entry.getName() + ": " + e.getMessage());
System.err.println("[StringDumper] Error reading " + entry.getName() + ": " + e.getMessage());
e.printStackTrace(System.err);
} finally {
in.close();
}
Expand Down
10 changes: 8 additions & 2 deletions jarjar/src/test/java/com/eed3si9n/jarjar/KeepProcessorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@ public void testKeep() throws IOException {
assertTrue(keepProcessor.process(entryStruct));

entryStruct.name = "com/example/Object.class";
assertFalse(keepProcessor.process(entryStruct));
assertTrue(keepProcessor.process(entryStruct));

assertFalse(keepProcessor.getExcludes().contains("org/example/Object"));
assertTrue(keepProcessor.getExcludes().contains("com/example/Object"));
}

@Test
Expand All @@ -35,6 +38,9 @@ public void testMetaInfKeep() throws IOException {
assertTrue(keepProcessor.process(entryStruct));

entryStruct.name = "META-INF/versions/8/com/example/Object.class";
assertFalse(keepProcessor.process(entryStruct));
assertTrue(keepProcessor.process(entryStruct));

assertFalse(keepProcessor.getExcludes().contains("META-INF/versions/9/org/example/Object"));
assertTrue(keepProcessor.getExcludes().contains("META-INF/versions/8/com/example/Object"));
}
}