Skip to content

Commit 266a681

Browse files
Merge branch 'develop/2.7' into print-stats-gen-params
2 parents 67e87e7 + d375d15 commit 266a681

File tree

15 files changed

+132
-146
lines changed

15 files changed

+132
-146
lines changed

buildSrc/src/main/java/quilt/internal/task/PrintColorKeyGroupsMapCodeTask.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,17 @@
88
import org.jetbrains.annotations.NotNull;
99
import org.jetbrains.annotations.Nullable;
1010

11-
import javax.swing.*;
12-
import java.awt.*;
13-
import java.util.*;
11+
import javax.swing.LookAndFeel;
12+
import java.awt.Color;
13+
import java.util.ArrayList;
14+
import java.util.HashMap;
15+
import java.util.LinkedHashMap;
16+
import java.util.LinkedHashSet;
17+
import java.util.LinkedList;
1418
import java.util.List;
19+
import java.util.Map;
20+
import java.util.Optional;
21+
import java.util.Set;
1522
import java.util.stream.Collectors;
1623
import java.util.stream.Stream;
1724

buildSrc/src/main/java/quilt/internal/task/ProGuardExecTask.java

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

enigma-cli/src/main/java/org/quiltmc/enigma/command/Argument.java

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -85,20 +85,28 @@ static Argument<String> ofLenientEnum(String name, Class<? extends Enum<?>> type
8585
return ofString(name, alternativesOf(type), explanation);
8686
}
8787

88+
/**
89+
* Creates an enum argument that is case-insensitive.<br>
90+
* Assumes enum values have conventional {@code SCREAMING_SNAKE_CASE} names.
91+
*/
8892
static <E extends Enum<E>> Argument<E> ofEnum(String name, Class<E> type, String explanation) {
89-
return new Argument<>(name, alternativesOf(type), string -> parseEnum(type, string), explanation);
93+
return new Argument<>(name, alternativesOf(type), string -> parseCaseInsensitiveEnum(type, string), explanation);
94+
}
95+
96+
static <E extends Enum<E>> Argument<E> ofStrictEnum(String name, Class<E> type, String explanation) {
97+
return new Argument<>(name, alternativesOf(type), string -> Enum.valueOf(type, string), explanation);
9098
}
9199

92100
static Argument<Boolean> ofBool(String name, String explanation) {
93-
return new Argument<>(name, BOOL_TYPE, Argument::parseBool, explanation);
101+
return new Argument<>(name, BOOL_TYPE, Boolean::parseBoolean, explanation);
94102
}
95103

96104
static Argument<Integer> ofInt(String name, String explanation) {
97105
return new Argument<>(name, INT_TYPE, Argument::parseInt, explanation);
98106
}
99107

100108
static Argument<String> ofString(String name, String typeDescription, String explanation) {
101-
return new Argument<>(name, typeDescription, Function.identity(), explanation);
109+
return new Argument<>(name, typeDescription, Argument::parseString, explanation);
102110
}
103111

104112
static Argument<Pattern> ofPattern(String name, String explanation) {
@@ -209,14 +217,22 @@ static Optional<Path> parseParentedPath(String path) {
209217
}
210218

211219
static Optional<Path> parsePath(String path) {
212-
return Optional.ofNullable(path)
220+
return Optional.of(path)
213221
.filter(string -> !string.isEmpty())
214222
.map(Paths::get)
215223
.map(Path::toAbsolutePath);
216224
}
217225

226+
static String parseString(String string) {
227+
return string.isEmpty() ? null : string;
228+
}
229+
230+
static <E extends Enum<E>> E parseCaseInsensitiveEnum(Class<E> type, String string) {
231+
return Enum.valueOf(type, string.toUpperCase());
232+
}
233+
218234
static Pattern parsePattern(String regex) {
219-
if (regex == null || regex.isEmpty()) {
235+
if (regex.isEmpty()) {
220236
return null;
221237
}
222238

@@ -227,16 +243,8 @@ static Pattern parsePattern(String regex) {
227243
}
228244
}
229245

230-
static <E extends Enum<E>> E parseEnum(Class<E> type, String name) {
231-
return name == null ? null : Enum.valueOf(type, name);
232-
}
233-
234-
static Boolean parseBool(String value) {
235-
return value == null ? null : Boolean.parseBoolean(value);
236-
}
237-
238246
static Integer parseInt(String integer) {
239-
if (integer == null || integer.isEmpty()) {
247+
if (integer.isEmpty()) {
240248
return null;
241249
} else {
242250
try {
@@ -298,7 +306,8 @@ public String getDisplayForm() {
298306

299307
@Nullable
300308
T from(Map<String, String> args) {
301-
return this.fromString.apply(args.get(this.name));
309+
final String string = args.get(this.name);
310+
return string == null ? null : this.fromString.apply(string);
302311
}
303312

304313
T requireFrom(Map<String, String> values) {

enigma-cli/src/main/java/org/quiltmc/enigma/command/PrintStatsCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public final class PrintStatsCommand extends Command<Required, Optional> {
2727
"included-types", Argument.alternativesOf(StatType.class, "&|"),
2828
"""
2929
The stat types to include.""",
30-
string -> Argument.parseEnum(StatType.class, string),
30+
string -> Argument.parseCaseInsensitiveEnum(StatType.class, string),
3131
Collectors.toUnmodifiableSet()
3232
);
3333

enigma-cli/src/main/java/org/quiltmc/enigma/command/SearchMappingsCommand.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ static String runImpl(
275275
message.append(':').append(delim).append(String.join(delim, lines));
276276

277277
if (limited) {
278-
final int excess = lines.size() - limit;
278+
final int excess = totalResults - limit;
279279
message.append(delim).append("... and ").append(excess).append(" more ")
280280
.append(type.getNameForCount(excess)).append('.');
281281
}
@@ -540,7 +540,8 @@ private static boolean isMapped(EntryRemapper remapper, Entry<?> entry) {
540540
private static <E extends Entry<?>> boolean typeMatches(
541541
E entry, Pattern pattern, EntryRemapper remapper, Function<E, TypeDescriptor> descriptorGetter
542542
) {
543-
return pattern.matcher(getTypeName(descriptorGetter.apply(entry), remapper)).find();
543+
final TypeDescriptor desc = descriptorGetter.apply(entry);
544+
return pattern.matcher(desc.toString()).find() || pattern.matcher(getTypeName(desc, remapper)).find();
544545
}
545546

546547
private static boolean accessMatches(

enigma-cli/src/test/java/org/quiltmc/enigma/command/SearchMappingsTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,8 @@ void findsPrimitiveParams() {
349349
null, null,
350350
null, null, null,
351351
null, null, null,
352-
null, Pattern.compile("^int$"), null
352+
// test matching raw primitive descriptor, too
353+
null, Pattern.compile("^I$"), null
353354
);
354355

355356
assertOnlyResults(found, ResultType.PARAM, INT_PARAM, CONSTRUCTOR_INT_PARAM);
@@ -385,7 +386,8 @@ void findsTypeFilteredParamNames() {
385386
null, null,
386387
null, null, null,
387388
null, null, null,
388-
Pattern.compile("^constructor"), Pattern.compile("^java\\.lang\\.String$"), null
389+
// test matching raw type descriptor, too
390+
Pattern.compile("^constructor"), Pattern.compile("^Ljava/lang/String;$"), null
389391
);
390392

391393
assertOnlyResults(found, ResultType.PARAM, CONSTRUCTOR_PARAM_STRING);
@@ -409,7 +411,7 @@ void findsFullyFilteredParamNames() {
409411
null, null,
410412
null, null, null,
411413
null, null, null,
412-
Pattern.compile("st"), Pattern.compile("^.*(?<!String)$"), access -> !access.isStatic()
414+
Pattern.compile("st"), Pattern.compile("^((?!String).)*$"), access -> !access.isStatic()
413415
);
414416

415417
assertOnlyResults(found, ResultType.PARAM, CONSTRUCTOR_INT_PARAM);

enigma-server/build.gradle

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import quilt.internal.task.ProGuardExecTask
1+
import proguard.gradle.ProGuardTask
22

33
plugins {
44
id 'application'
@@ -19,12 +19,7 @@ application {
1919
}
2020

2121
tasks.named('test') {
22-
inputs.files(
23-
project(':enigma').tasks
24-
.withType(ProGuardExecTask)
25-
.named('completeTestObf')
26-
.get().outJar
27-
)
22+
inputs.files(project(':enigma').tasks.named('completeTestObf', ProGuardTask).map { it.outJarFileCollection })
2823
}
2924

3025
publishing {

enigma-swing/src/main/java/org/quiltmc/enigma/gui/docker/AbstractInheritanceTreeDocker.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import javax.annotation.Nullable;
1212
import javax.swing.JLabel;
1313
import javax.swing.JPanel;
14+
import javax.swing.JScrollPane;
1415
import javax.swing.JTree;
1516
import javax.swing.tree.DefaultMutableTreeNode;
1617
import javax.swing.tree.DefaultTreeModel;
@@ -26,17 +27,22 @@ public abstract class AbstractInheritanceTreeDocker extends Docker {
2627
private final JLabel inactiveLabel = new JLabel();
2728
private final JLabel notFoundLabel = new JLabel();
2829
private final JPanel textPanel;
30+
private final JPanel treePanel;
2931
private final String inactiveTextKey;
3032
private final String notFoundKey;
3133

3234
protected AbstractInheritanceTreeDocker(Gui gui, TreeCellRenderer cellRenderer, String inactiveTextKey, String notFoundKey) {
3335
super(gui);
3436

3537
this.textPanel = new JPanel(new BorderLayout());
38+
this.textPanel.add(this.inactiveLabel, BorderLayout.NORTH);
39+
40+
this.treePanel = new JPanel(new BorderLayout());
41+
this.treePanel.add(new JScrollPane(this.tree));
42+
3643
this.inactiveTextKey = inactiveTextKey;
3744
this.notFoundKey = notFoundKey;
3845
this.retranslateUi();
39-
this.textPanel.add(this.inactiveLabel, BorderLayout.NORTH);
4046
this.add(this.textPanel);
4147

4248
this.tree.setModel(null);
@@ -67,7 +73,7 @@ private void setupTree(@Nullable TreeModel model) {
6773
this.tree.setModel(model);
6874
if (model != null) {
6975
this.remove(this.textPanel);
70-
this.add(this.tree);
76+
this.add(this.treePanel);
7177
} else {
7278
this.textPanel.remove(this.inactiveLabel);
7379
this.textPanel.add(this.notFoundLabel, BorderLayout.NORTH);
@@ -82,9 +88,14 @@ public void display(Entry<?> entry) {
8288
if (node != null) {
8389
// show the tree at the root
8490
TreePath path = GuiUtil.getPathToRoot(node);
85-
this.setupTree(new DefaultTreeModel((TreeNode) path.getPathComponent(0)));
86-
this.tree.expandPath(path);
87-
this.tree.setSelectionRow(this.tree.getRowForPath(path));
91+
TreeNode root = (TreeNode) path.getPathComponent(0);
92+
if (root.children().hasMoreElements()) { // do not display a tree with no inheritance (only a root entry)
93+
this.setupTree(new DefaultTreeModel(root));
94+
this.tree.expandPath(path);
95+
this.tree.setSelectionRow(this.tree.getRowForPath(path));
96+
} else {
97+
this.setupTree(null);
98+
}
8899
} else {
89100
this.setupTree(null);
90101
}

enigma-swing/src/main/java/org/quiltmc/enigma/gui/element/ClassSelectorPopupMenu.java

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

33
import org.quiltmc.enigma.api.source.TokenType;
44
import org.quiltmc.enigma.gui.ClassSelector;
5+
import org.quiltmc.enigma.gui.EditableType;
56
import org.quiltmc.enigma.gui.Gui;
67
import org.quiltmc.enigma.gui.docker.ClassesDocker;
78
import org.quiltmc.enigma.gui.util.PackageRenamer;
@@ -32,10 +33,12 @@ public ClassSelectorPopupMenu(Gui gui, ClassesDocker docker) {
3233
this.gui = gui;
3334
this.selector = docker.getClassSelector();
3435
this.ui = new JPopupMenu();
36+
if (gui.isEditable(EditableType.CLASS)) {
37+
this.ui.add(this.renamePackage);
38+
this.ui.add(this.movePackage);
39+
this.ui.add(this.renameClass);
40+
}
3541

36-
this.ui.add(this.renamePackage);
37-
this.ui.add(this.movePackage);
38-
this.ui.add(this.renameClass);
3942
this.ui.add(this.regenerateStats);
4043
this.ui.add(this.toggleMapping);
4144
this.ui.addSeparator();

enigma-swing/src/main/java/org/quiltmc/enigma/gui/element/EditorPopupMenu.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,8 @@ public void retranslateUi() {
208208
this.showImplementationsItem.setText(I18n.translate("popup_menu.implementations"));
209209
this.showCallsItem.setText(I18n.translate("popup_menu.calls"));
210210
this.showCallsSpecificItem.setText(I18n.translate("popup_menu.calls.specific"));
211+
this.showStructureItem.setText(I18n.translate("popup_menu.structure"));
212+
this.searchStructureItem.setText(I18n.translate("popup_menu.search_structure"));
211213
this.openEntryItem.setText(I18n.translate("popup_menu.declaration"));
212214
this.openPreviousItem.setText(I18n.translate("popup_menu.back"));
213215
this.openNextItem.setText(I18n.translate("popup_menu.forward"));

0 commit comments

Comments
 (0)