Skip to content

Commit cae1b96

Browse files
committed
Revert "graaaah"
This reverts commit 4a1a27c.
1 parent 4a1a27c commit cae1b96

File tree

16 files changed

+86
-139
lines changed

16 files changed

+86
-139
lines changed

enigma/src/main/java/org/quiltmc/enigma/api/Enigma.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import org.quiltmc.enigma.api.analysis.index.jar.LibrariesJarIndex;
66
import org.quiltmc.enigma.api.analysis.index.jar.MainJarIndex;
77
import org.quiltmc.enigma.api.analysis.index.mapping.MappingsIndex;
8-
import org.quiltmc.enigma.api.class_provider.ProjectClassProvider;
98
import org.quiltmc.enigma.impl.analysis.ClassLoaderClassProvider;
109
import org.quiltmc.enigma.api.service.EnigmaService;
1110
import org.quiltmc.enigma.api.service.EnigmaServiceContext;
@@ -44,11 +43,13 @@
4443
import java.sql.DriverManager;
4544
import java.util.ArrayList;
4645
import java.util.Collections;
46+
import java.util.HashSet;
4747
import java.util.List;
4848
import java.util.Map;
4949
import java.util.Optional;
5050
import java.util.Properties;
5151
import java.util.ServiceLoader;
52+
import java.util.Set;
5253
import java.util.concurrent.atomic.AtomicReference;
5354

5455
public class Enigma {
@@ -84,10 +85,14 @@ public EnigmaProject openJar(Path path, ClassProvider libraryClassProvider, Prog
8485
ClassLoaderClassProvider jreProvider = new ClassLoaderClassProvider(DriverManager.class.getClassLoader());
8586
CombiningClassProvider librariesProvider = new CombiningClassProvider(jreProvider, libraryClassProvider);
8687
ClassProvider mainProjectProvider = new ObfuscationFixClassProvider(new CachingClassProvider(jarClassProvider), index);
87-
ProjectClassProvider projectClassProvider = new ProjectClassProvider(mainProjectProvider, librariesProvider);
88+
89+
Set<String> mainScope = new HashSet<>(mainProjectProvider.getClassNames());
90+
Set<String> librariesScope = new HashSet<>(librariesProvider.getClassNames());
8891

8992
// main index
90-
this.index(index, projectClassProvider, progress);
93+
this.index(index, mainProjectProvider, mainScope, progress, false);
94+
// lib index
95+
this.index(libIndex, librariesProvider, librariesScope, progress, true);
9196

9297
// name proposal
9398
var nameProposalServices = this.getNameProposalServices();
@@ -119,19 +124,22 @@ public EnigmaProject openJar(Path path, ClassProvider libraryClassProvider, Prog
119124
return new EnigmaProject(this, path, mainProjectProvider, index, libIndex, mappingsIndex, proposedNames, Utils.zipSha1(path));
120125
}
121126

122-
private void index(JarIndex index, ProjectClassProvider classProvider, ProgressListener progress) {
123-
index.indexJar(classProvider, progress);
127+
private void index(JarIndex index, ClassProvider classProvider, Set<String> scope, ProgressListener progress, boolean libraries) {
128+
String progressKey = libraries ? "libs" : "jar";
129+
index.indexJar(scope, classProvider, progress);
124130

125131
List<JarIndexerService> indexers = this.services.get(JarIndexerService.TYPE);
126-
progress.init(indexers.size(), I18n.translate("progress.jar.custom_indexing"));
132+
progress.init(indexers.size(), I18n.translate("progress." + progressKey + ".custom_indexing"));
127133

128134
int i = 1;
129135
for (var service : indexers) {
130-
progress.step(i++, I18n.translateFormatted("progress.jar.custom_indexing.indexer", service.getId()));
131-
service.acceptJar(classProvider, index);
136+
if (!(libraries && !service.shouldIndexLibraries())) {
137+
progress.step(i++, I18n.translateFormatted("progress." + progressKey + ".custom_indexing.indexer", service.getId()));
138+
service.acceptJar(scope, classProvider, index);
139+
}
132140
}
133141

134-
progress.step(i, I18n.translate("progress.jar.custom_indexing.finished"));
142+
progress.step(i, I18n.translate("progress." + progressKey + ".custom_indexing.finished"));
135143
}
136144

137145
public EnigmaProfile getProfile() {

enigma/src/main/java/org/quiltmc/enigma/api/analysis/index/jar/JarIndex.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
import com.google.common.collect.ListMultimap;
44
import org.quiltmc.enigma.api.ProgressListener;
5-
import org.quiltmc.enigma.api.class_provider.ProjectClassProvider;
5+
import org.quiltmc.enigma.api.class_provider.ClassProvider;
66
import org.quiltmc.enigma.api.translation.mapping.EntryResolver;
77
import org.quiltmc.enigma.api.translation.representation.entry.ClassEntry;
88
import org.quiltmc.enigma.api.translation.representation.entry.ParentedEntry;
99

10+
import java.util.Set;
11+
1012
public interface JarIndex extends JarIndexer {
1113
/**
1214
* Gets the index associated with the provided class.
@@ -17,10 +19,11 @@ public interface JarIndex extends JarIndexer {
1719

1820
/**
1921
* Runs every configured indexer over the provided jar.
20-
* @param classProvider a class provider containing all classes in the jar and libraries
22+
* @param classNames the obfuscated names of each class in the jar
23+
* @param classProvider a class provider containing all classes in the jar
2124
* @param progress a progress listener to track index completion
2225
*/
23-
void indexJar(ProjectClassProvider classProvider, ProgressListener progress);
26+
void indexJar(Set<String> classNames, ClassProvider classProvider, ProgressListener progress);
2427

2528
/**
2629
* {@return an entry resolver with this index's contents as context}

enigma/src/main/java/org/quiltmc/enigma/api/analysis/index/jar/LibrariesJarIndex.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.quiltmc.enigma.api.analysis.index.jar;
22

3-
import org.quiltmc.enigma.api.ProgressListener;
4-
import org.quiltmc.enigma.api.class_provider.ProjectClassProvider;
53
import org.quiltmc.enigma.impl.analysis.index.AbstractJarIndex;
64

75
public class LibrariesJarIndex extends AbstractJarIndex {
@@ -24,9 +22,4 @@ public static JarIndex empty() {
2422
public String getTranslationKey() {
2523
return "progress.jar.indexing.libraries";
2624
}
27-
28-
@Override
29-
public void indexJar(ProjectClassProvider classProvider, ProgressListener progress) {
30-
this.indexJar(classProvider.getLibraryClassNames(), classProvider, progress);
31-
}
3225
}

enigma/src/main/java/org/quiltmc/enigma/api/analysis/index/jar/MainJarIndex.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.quiltmc.enigma.api.analysis.index.jar;
22

3-
import org.quiltmc.enigma.api.ProgressListener;
4-
import org.quiltmc.enigma.api.class_provider.ProjectClassProvider;
53
import org.quiltmc.enigma.impl.analysis.index.AbstractJarIndex;
64

75
public class MainJarIndex extends AbstractJarIndex {
@@ -28,9 +26,4 @@ public static JarIndex empty() {
2826
public String getTranslationKey() {
2927
return "progress.jar.indexing.jar";
3028
}
31-
32-
@Override
33-
public void indexJar(ProjectClassProvider classProvider, ProgressListener progress) {
34-
this.indexJar(classProvider.getMainClassNames(), classProvider, progress);
35-
}
3629
}

enigma/src/main/java/org/quiltmc/enigma/api/class_provider/ObfuscationFixClassProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public ObfuscationFixClassProvider(ClassProvider classProvider, JarIndex jarInde
4545
public ClassNode get(String name) {
4646
ClassNode node = this.classProvider.get(name);
4747

48-
if (!this.jarIndex.isIndexed(name) || node == null) {
48+
if (!this.jarIndex.isIndexed(name)) {
4949
return node;
5050
}
5151

enigma/src/main/java/org/quiltmc/enigma/api/class_provider/ProjectClassProvider.java

Lines changed: 0 additions & 88 deletions
This file was deleted.

enigma/src/main/java/org/quiltmc/enigma/api/service/JarIndexerService.java

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import org.objectweb.asm.tree.ClassNode;
44
import org.quiltmc.enigma.api.analysis.index.jar.JarIndex;
5+
import org.quiltmc.enigma.api.class_provider.ClassProvider;
56
import org.objectweb.asm.ClassVisitor;
6-
import org.quiltmc.enigma.api.class_provider.ProjectClassProvider;
7+
8+
import javax.annotation.Nullable;
9+
import java.util.Set;
710

811
/**
912
* Jar indexer services analyse jar files as they're opened to collect information about their contents.
@@ -13,12 +16,35 @@
1316
public interface JarIndexerService extends EnigmaService {
1417
EnigmaServiceType<JarIndexerService> TYPE = EnigmaServiceType.create("jar_indexer");
1518

19+
/**
20+
* Checks the {@code index_libraries} argument in the context to determine if libraries should be indexed.
21+
* @param context the context for this service
22+
* @return whether libraries should be indexed
23+
*/
24+
static boolean shouldIndexLibraries(@Nullable EnigmaServiceContext<JarIndexerService> context) {
25+
if (context == null) {
26+
return false;
27+
}
28+
29+
return context.getSingleArgument("index_libraries").map(Boolean::parseBoolean).orElse(false);
30+
}
31+
1632
/**
1733
* Indexes a collection of classes.
18-
* @param classProvider a provider to translate class names into {@link ClassNode class nodes}.
34+
* @param scope a list of class names to be indexed
35+
* @param classProvider a provider to translate class names into {@link ClassNode class nodes}
1936
* @param jarIndex the current jar index
2037
*/
21-
void acceptJar(ProjectClassProvider classProvider, JarIndex jarIndex);
38+
void acceptJar(Set<String> scope, ClassProvider classProvider, JarIndex jarIndex);
39+
40+
/**
41+
* Whether this indexer should be run on libraries in addition to the main project being indexed.
42+
* @implNote implementations should use {@link #shouldIndexLibraries(EnigmaServiceContext)} to allow changing this setting via the {@link org.quiltmc.enigma.api.EnigmaProfile profile}
43+
* @return whether this indexer should target libraries
44+
*/
45+
default boolean shouldIndexLibraries() {
46+
return false;
47+
}
2248

2349
/**
2450
* Creates an indexer service that runs all {@link ClassNode class nodes} through the provided {@link ClassVisitor visitor}.
@@ -27,10 +53,24 @@ public interface JarIndexerService extends EnigmaService {
2753
* @return the indexer service
2854
*/
2955
static JarIndexerService fromVisitor(ClassVisitor visitor, String id) {
56+
return fromVisitor(null, visitor, id);
57+
}
58+
59+
/**
60+
* Creates an indexer service that runs all {@link ClassNode class nodes} through the provided {@link ClassVisitor visitor}.
61+
* Overrides {@link #shouldIndexLibraries()} according to the profile argument described in {@link #shouldIndexLibraries(EnigmaServiceContext)}.
62+
* @param context the profile context for the service
63+
* @param visitor the visitor to pass classes through
64+
* @param id the service's ID
65+
* @return the indexer service
66+
*/
67+
static JarIndexerService fromVisitor(@Nullable EnigmaServiceContext<JarIndexerService> context, ClassVisitor visitor, String id) {
68+
boolean indexLibs = shouldIndexLibraries(context);
69+
3070
return new JarIndexerService() {
3171
@Override
32-
public void acceptJar(ProjectClassProvider classProvider, JarIndex jarIndex) {
33-
for (String className : classProvider.getClassNames()) {
72+
public void acceptJar(Set<String> scope, ClassProvider classProvider, JarIndex jarIndex) {
73+
for (String className : scope) {
3474
ClassNode node = classProvider.get(className);
3575
if (node != null) {
3676
node.accept(visitor);
@@ -42,6 +82,11 @@ public void acceptJar(ProjectClassProvider classProvider, JarIndex jarIndex) {
4282
public String getId() {
4383
return id;
4484
}
85+
86+
@Override
87+
public boolean shouldIndexLibraries() {
88+
return indexLibs;
89+
}
4590
};
4691
}
4792
}

enigma/src/main/java/org/quiltmc/enigma/impl/analysis/index/AbstractJarIndex.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.quiltmc.enigma.api.translation.representation.entry.ParentedEntry;
2626
import org.quiltmc.enigma.util.I18n;
2727

28-
import java.util.Collection;
2928
import java.util.HashSet;
3029
import java.util.LinkedHashMap;
3130
import java.util.Map;
@@ -73,10 +72,11 @@ public <T extends JarIndexer> T getIndex(Class<T> clazz) {
7372

7473
/**
7574
* Runs every configured indexer over the provided jar.
75+
* @param classNames the obfuscated names of each class in the jar
7676
* @param classProvider a class provider containing all classes in the jar
7777
* @param progress a progress listener to track index completion
7878
*/
79-
public void indexJar(Collection<String> classNames, ClassProvider classProvider, ProgressListener progress) {
79+
public void indexJar(Set<String> classNames, ClassProvider classProvider, ProgressListener progress) {
8080
// for use in processIndex
8181
this.progress = progress;
8282

enigma/src/main/java/org/quiltmc/enigma/impl/plugin/BuiltinPlugin.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ private static void registerEnumNamingService(EnigmaPluginContext ctx) {
3434
final Map<Entry<?>, String> names = new HashMap<>();
3535
final EnumFieldNameFindingVisitor visitor = new EnumFieldNameFindingVisitor(names);
3636

37-
ctx.registerService(JarIndexerService.TYPE, ctx1 -> JarIndexerService.fromVisitor(visitor, "enigma:enum_initializer_indexer"));
37+
ctx.registerService(JarIndexerService.TYPE, ctx1 -> JarIndexerService.fromVisitor(ctx1, visitor, "enigma:enum_initializer_indexer"));
3838

3939
ctx.registerService(NameProposalService.TYPE, ctx1 -> new NameProposalService() {
4040
@Override
@@ -66,7 +66,7 @@ private static void registerRecordNamingService(EnigmaPluginContext ctx) {
6666
final Map<FieldEntry, MethodEntry> fieldToGetter = new HashMap<>();
6767
final RecordGetterFindingVisitor visitor = new RecordGetterFindingVisitor(fieldToGetter);
6868

69-
ctx.registerService(JarIndexerService.TYPE, ctx1 -> JarIndexerService.fromVisitor(visitor, "enigma:record_component_indexer"));
69+
ctx.registerService(JarIndexerService.TYPE, ctx1 -> JarIndexerService.fromVisitor(ctx1, visitor, "enigma:record_component_indexer"));
7070
ctx.registerService(NameProposalService.TYPE, ctx1 -> new RecordComponentProposalService(fieldToGetter));
7171
}
7272

enigma/src/test/java/org/quiltmc/enigma/PackageVisibilityIndexTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44
import org.quiltmc.enigma.api.analysis.index.jar.MainJarIndex;
55
import org.quiltmc.enigma.api.analysis.index.jar.PackageVisibilityIndex;
66
import org.quiltmc.enigma.api.ProgressListener;
7-
import org.quiltmc.enigma.api.class_provider.CachingClassProvider;
87
import org.quiltmc.enigma.api.class_provider.JarClassProvider;
9-
import org.quiltmc.enigma.api.class_provider.ProjectClassProvider;
108
import org.quiltmc.enigma.api.translation.representation.entry.ClassEntry;
119
import org.junit.jupiter.api.Test;
1210

@@ -29,7 +27,7 @@ public class PackageVisibilityIndexTest {
2927
public PackageVisibilityIndexTest() throws Exception {
3028
JarClassProvider jcp = new JarClassProvider(JAR);
3129
this.jarIndex = MainJarIndex.empty();
32-
this.jarIndex.indexJar(new ProjectClassProvider(new CachingClassProvider(jcp), null), ProgressListener.createEmpty());
30+
this.jarIndex.indexJar(jcp.getClassNames(), jcp, ProgressListener.createEmpty());
3331
}
3432

3533
@Test

0 commit comments

Comments
 (0)