Skip to content

Commit 76b8994

Browse files
committed
Revert "Merge pull request #67"
This reverts commit 72f8d15.
1 parent 72f8d15 commit 76b8994

File tree

5 files changed

+137
-48
lines changed

5 files changed

+137
-48
lines changed

src/main/java/cpw/mods/jarhandling/JarMetadata.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.lang.module.ModuleDescriptor;
88
import java.nio.file.Path;
99
import java.util.List;
10+
import java.util.Set;
1011
import java.util.regex.Pattern;
1112

1213
public interface JarMetadata {
@@ -156,4 +157,35 @@ private static String cleanModuleName(String mn) {
156157

157158
return mn;
158159
}
160+
161+
/**
162+
* @deprecated Build from jar contents directly using {@link #from(JarContents)}.
163+
*/
164+
@Deprecated(forRemoval = true, since = "2.1.23")
165+
static SimpleJarMetadata fromFileName(final Path path, final Set<String> pkgs, final List<SecureJar.Provider> providers) {
166+
var nav = computeNameAndVersion(path);
167+
return new SimpleJarMetadata(nav.name(), nav.version(), () -> pkgs, providers);
168+
}
169+
170+
/**
171+
* @deprecated Use {@link #from(JarContents)} instead.
172+
*/
173+
@Deprecated(forRemoval = true, since = "2.1.16")
174+
static JarMetadata from(final SecureJar jar, final Path... path) {
175+
if (path.length==0) throw new IllegalArgumentException("Need at least one path");
176+
final var pkgs = jar.getPackages();
177+
var mi = jar.moduleDataProvider().findFile("module-info.class");
178+
if (mi.isPresent()) {
179+
return new ModuleJarMetadata(mi.get(), jar::getPackages);
180+
} else {
181+
var providers = jar.getProviders();
182+
var fileCandidate = fromFileName(path[0], pkgs, providers);
183+
var aname = jar.moduleDataProvider().getManifest().getMainAttributes().getValue("Automatic-Module-Name");
184+
if (aname != null) {
185+
return new SimpleJarMetadata(aname, fileCandidate.version(), () -> pkgs, providers);
186+
} else {
187+
return fileCandidate;
188+
}
189+
}
190+
}
159191
}

src/main/java/cpw/mods/jarhandling/SecureJar.java

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public static Provider fromPath(final Path path, final BiPredicate<String, Strin
140140
try {
141141
var entries = Files.readAllLines(path).stream()
142142
.map(String::trim)
143-
.filter(l-> !l.isEmpty() && !l.startsWith("#")) // We support comments :)
143+
.filter(l->l.length() > 0 && !l.startsWith("#")) // We support comments :)
144144
.filter(p-> pkgFilter == null || pkgFilter.test(p.replace('.','/'), ""))
145145
.toList();
146146
return new Provider(sname, entries);
@@ -153,4 +153,62 @@ public static Provider fromPath(final Path path, final BiPredicate<String, Strin
153153
enum Status {
154154
NONE, INVALID, UNVERIFIED, VERIFIED
155155
}
156+
157+
/**
158+
* @deprecated Obtain via the {@link ModuleDescriptor} of the jar if you really need this.
159+
*/
160+
@Deprecated(forRemoval = true, since = "2.1.16")
161+
default Set<String> getPackages() {
162+
return moduleDataProvider().descriptor().packages();
163+
}
164+
165+
/**
166+
* @deprecated Obtain via the {@link ModuleDescriptor} of the jar if you really need this.
167+
*/
168+
@Deprecated(forRemoval = true, since = "2.1.16")
169+
default List<Provider> getProviders() {
170+
return moduleDataProvider().descriptor().provides().stream()
171+
.map(p -> new Provider(p.service(), p.providers()))
172+
.toList();
173+
}
174+
175+
/**
176+
* @deprecated Use {@link JarContentsBuilder} and {@link #from(JarContents)} instead.
177+
*/
178+
@Deprecated(forRemoval = true, since = "2.1.16")
179+
static SecureJar from(BiPredicate<String, String> filter, final Path... paths) {
180+
return from(jar->JarMetadata.from(jar, paths), filter, paths);
181+
}
182+
183+
/**
184+
* @deprecated Use {@link JarContentsBuilder} and {@link #from(JarContents)} instead.
185+
*/
186+
@Deprecated(forRemoval = true, since = "2.1.16")
187+
static SecureJar from(Function<SecureJar, JarMetadata> metadataSupplier, final Path... paths) {
188+
return from(Manifest::new, metadataSupplier, paths);
189+
}
190+
191+
/**
192+
* @deprecated Use {@link JarContentsBuilder} and {@link #from(JarContents)} instead.
193+
*/
194+
@Deprecated(forRemoval = true, since = "2.1.16")
195+
static SecureJar from(Function<SecureJar, JarMetadata> metadataSupplier, BiPredicate<String, String> filter, final Path... paths) {
196+
return from(Manifest::new, metadataSupplier, filter, paths);
197+
}
198+
199+
/**
200+
* @deprecated Use {@link JarContentsBuilder} and {@link #from(JarContents)} instead.
201+
*/
202+
@Deprecated(forRemoval = true, since = "2.1.16")
203+
static SecureJar from(Supplier<Manifest> defaultManifest, Function<SecureJar, JarMetadata> metadataSupplier, final Path... paths) {
204+
return from(defaultManifest, metadataSupplier, null, paths);
205+
}
206+
207+
/**
208+
* @deprecated Use {@link JarContentsBuilder} and {@link #from(JarContents)} instead.
209+
*/
210+
@Deprecated(forRemoval = true, since = "2.1.16")
211+
static SecureJar from(Supplier<Manifest> defaultManifest, Function<SecureJar, JarMetadata> metadataSupplier, BiPredicate<String, String> filter, final Path... paths) {
212+
return new Jar(defaultManifest, metadataSupplier, filter, paths);
213+
}
156214
}

src/main/java/cpw/mods/jarhandling/impl/Jar.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@
1313
import java.nio.file.Path;
1414
import java.nio.file.Paths;
1515
import java.security.CodeSigner;
16-
import java.util.Optional;
16+
import java.util.*;
17+
import java.util.function.BiPredicate;
18+
import java.util.function.Function;
19+
import java.util.function.Supplier;
1720
import java.util.jar.Attributes;
1821
import java.util.jar.Manifest;
1922

@@ -27,6 +30,17 @@ public class Jar implements SecureJar {
2730

2831
private final JarMetadata metadata;
2932

33+
@Deprecated(forRemoval = true, since = "2.1.16")
34+
public Jar(final Supplier<Manifest> defaultManifest, final Function<SecureJar, JarMetadata> metadataFunction, final BiPredicate<String, String> pathfilter, final Path... paths) {
35+
this.contents = new JarContentsImpl(paths, defaultManifest, pathfilter);
36+
this.manifest = contents.getManifest();
37+
this.signingData = contents.signingData;
38+
this.filesystem = contents.filesystem;
39+
40+
this.moduleDataProvider = new JarModuleDataProvider(this);
41+
this.metadata = metadataFunction.apply(this);
42+
}
43+
3044
public Jar(JarContentsImpl contents, JarMetadata metadata) {
3145
this.contents = contents;
3246
this.manifest = contents.getManifest();
@@ -93,6 +107,16 @@ public String name() {
93107
return metadata.name();
94108
}
95109

110+
@Override
111+
public Set<String> getPackages() {
112+
return contents.getPackages();
113+
}
114+
115+
@Override
116+
public List<Provider> getProviders() {
117+
return contents.getMetaInfServices();
118+
}
119+
96120
@Override
97121
public Path getPath(String first, String... rest) {
98122
return filesystem.getPath(first, rest);

src/test/java/cpw/mods/jarhandling/impl/TestDummyJarProvider.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,16 @@ public boolean hasSecurityData() {
119119
return false;
120120
}
121121

122+
@Override
123+
public Set<String> getPackages() {
124+
return null;
125+
}
126+
127+
@Override
128+
public List<Provider> getProviders() {
129+
return null;
130+
}
131+
122132
@Override
123133
public String name() {
124134
return null;
Lines changed: 11 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,39 @@
11
package cpw.mods.jarhandling.impl;
22

3-
import cpw.mods.jarhandling.JarContents;
43
import cpw.mods.jarhandling.JarMetadata;
5-
import cpw.mods.jarhandling.SecureJar;
64
import org.junit.jupiter.api.Assertions;
75
import org.junit.jupiter.api.Test;
86

9-
import java.net.URI;
10-
import java.nio.file.Path;
117
import java.nio.file.Paths;
12-
import java.util.List;
13-
import java.util.Optional;
14-
import java.util.Set;
15-
import java.util.jar.Manifest;
8+
import java.util.ArrayList;
9+
import java.util.HashSet;
1610

1711
public class TestMetadata
1812
{
1913
@Test
20-
void testMavenJar() {
14+
void testMavenJar()
15+
{
2116
var path = Paths.get("startofthepathchain/new-protected-class-1.16.5/1.1_mapped_official_1.17.1/new-protected-class-1.16.5-1.1_mapped_official_1.17.1-api.jar");
22-
var meta = JarMetadata.from(new FakeJarContent(path));
17+
var meta = JarMetadata.fromFileName(path, new HashSet<>(), new ArrayList<>());
2318
Assertions.assertEquals("_new._protected._class._1._16._5", meta.name());
2419
Assertions.assertEquals("1.1_mapped_official_1.17.1", meta.version());
2520
}
2621

2722
@Test
28-
void testRootStart() {
23+
void testRootStart()
24+
{
2925
var path = Paths.get("/instance/mods/1life-1.5.jar");
30-
var meta = JarMetadata.from(new FakeJarContent(path));
26+
var meta = JarMetadata.fromFileName(path, new HashSet<>(), new ArrayList<>());
3127
Assertions.assertEquals("_1life", meta.name());
3228
Assertions.assertEquals("1.5", meta.version());
3329
}
3430

3531
@Test
36-
void testNumberStart() {
32+
void testNumberStart()
33+
{
3734
var path = Paths.get("mods/1life-1.5.jar");
38-
var meta = JarMetadata.from(new FakeJarContent(path));
35+
var meta = JarMetadata.fromFileName(path, new HashSet<>(), new ArrayList<>());
3936
Assertions.assertEquals("_1life", meta.name());
4037
Assertions.assertEquals("1.5", meta.version());
4138
}
42-
43-
record FakeJarContent(Path primaryPath) implements JarContents {
44-
@Override
45-
public Path getPrimaryPath() {
46-
return primaryPath;
47-
}
48-
49-
@Override
50-
public Optional<URI> findFile(String name) {
51-
return Optional.empty();
52-
}
53-
54-
@Override
55-
public Manifest getManifest() {
56-
return new Manifest();
57-
}
58-
59-
@Override
60-
public Set<String> getPackages() {
61-
return Set.of();
62-
}
63-
64-
@Override
65-
public Set<String> getPackagesExcluding(String... excludedRootPackages) {
66-
return Set.of();
67-
}
68-
69-
@Override
70-
public List<SecureJar.Provider> getMetaInfServices() {
71-
return List.of();
72-
}
73-
}
7439
}

0 commit comments

Comments
 (0)