Skip to content

Commit c6e3cc3

Browse files
committed
Merge branch 'release-0.5.3'
2 parents 48a0422 + 3dc61e1 commit c6e3cc3

File tree

26 files changed

+708
-40
lines changed

26 files changed

+708
-40
lines changed

README.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ Lorenz is a library intended for creating and altering de-obfuscation mappings f
55
programs (compiled or otherwise), this is done independent of the format being used. Lorenz
66
supports a variety of mapping formats:
77

8-
- SRG
9-
- CSRG
10-
- TSRG
8+
- SRG and its variants (CSRG, TSRG, and XSRG)
119
- Enigma (through `lorenz-io-enigma`)
1210
- JAM (through `lorenz-io-jam`)
1311
- Kin (through `lorenz-io-kin`)
@@ -33,7 +31,7 @@ Lorenz releases can be obtained through Maven Central:
3331
### Gradle
3432

3533
```groovy
36-
implementation 'org.cadixdev:lorenz:0.5.1'
34+
implementation 'org.cadixdev:lorenz:0.5.3'
3735
```
3836

3937
### Maven
@@ -42,7 +40,7 @@ implementation 'org.cadixdev:lorenz:0.5.1'
4240
<dependency>
4341
<groupId>org.cadixdev</groupId>
4442
<artifactId>lorenz</artifactId>
45-
<version>0.5.1</version>
43+
<version>0.5.3</version>
4644
</dependency>
4745
```
4846

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ subprojects {
2020

2121
group = 'org.cadixdev'
2222
archivesBaseName = project.name.toLowerCase()
23-
version = '0.5.2'
23+
version = '0.5.3'
2424

2525
repositories {
2626
mavenCentral()

changelogs/0.5.3.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
Lorenz 0.5.3
2+
============
3+
4+
Lorenz 0.5.3 includes yet-another set of bug-fixes:
5+
6+
- [Mercury/GH-14]: Inheritance completion now considers elevated return types
7+
- [Bombe/GH-11]: Bump Bombe dependency to 0.3.2, including a fix for remapping
8+
manifests without a `Main-Class` attribute
9+
- [Lorenz/GH-30]: Don't wrap `Writer`s in `TextMappingsWriter`, allowing files
10+
larger than `BufferedWriter`s buffer to be written (thanks to @phase for this
11+
bug-fix)
12+
- [Lorenz/GH-32]: Support blank comments in IO readers (affects SRG formats, JAM,
13+
and Enigma)
14+
15+
Support for yet-another SRG variant, XSRG, has also been introduced with this
16+
release - the format is the same as the SRG format, though has field types
17+
([Lorenz/GH-33]).
18+
19+
Thanks to @phase and @DemonWav for their contributions towards this release.
20+
21+
### Registries
22+
23+
`Registry` has been expanded to expose more of the underlying `Map`'s data:
24+
25+
- `Registry#keys()`, returning a `Set` of `String`s which correspond to the
26+
identifier of registered values.
27+
- `Registry#entries()`, returning a `Set` of `Map.Entry`s.
28+
29+
### Imrpoved Mapping Merging
30+
31+
Mapping Merging, introduced with Lorenz 0.5.0, has always been a fairly
32+
lacklustre implementation - dropping mappings present on the b mapping set, if
33+
there wasn't a mapping in the a mapping set.
34+
35+
Thanks to @DemonWav, that has now been resolved (see [Lorenz/GH-36]).
36+
37+
[Mercury/GH-14]: https://github.com/CadixDev/Mercury/issues/14
38+
[Bombe/GH-11]: https://github.com/CadixDev/Bombe/issues/11
39+
[Lorenz/GH-30]: https://github.com/CadixDev/Lorenz/pull/30
40+
[Lorenz/GH-32]: https://github.com/CadixDev/Lorenz/issues/32
41+
[Lorenz/GH-33]: https://github.com/CadixDev/Lorenz/issues/33
42+
[Lorenz/GH-36]: https://github.com/CadixDev/Lorenz/pull/36

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ url = https://www.jamiemansfield.me/projects/lorenz
44
inceptionYear = 2016
55

66
# Build Settings
7-
bombeVersion = 0.3.0
7+
bombeVersion = 0.3.2

lorenz-io-enigma/src/main/java/org/cadixdev/lorenz/io/enigma/EnigmaConstants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public final class EnigmaConstants {
3939
/**
4040
* A regex expression used to remove comments from lines.
4141
*/
42-
private static final Pattern HASH_COMMENT = Pattern.compile("#.+");
42+
private static final Pattern HASH_COMMENT = Pattern.compile("#.*");
4343

4444
/**
4545
* The standard file extension used with the Enigma format.

lorenz-io-enigma/src/test/java/org/cadixdev/lorenz/io/enigma/test/EnigmaReaderTest.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
import static org.junit.jupiter.api.Assertions.assertFalse;
3030
import static org.junit.jupiter.api.Assertions.assertTrue;
3131

32+
import org.cadixdev.bombe.type.MethodDescriptor;
33+
import org.cadixdev.bombe.type.signature.FieldSignature;
34+
import org.cadixdev.bombe.type.signature.MethodSignature;
3235
import org.cadixdev.lorenz.MappingSet;
3336
import org.cadixdev.lorenz.io.MappingFormats;
3437
import org.cadixdev.lorenz.io.MappingsReader;
@@ -38,9 +41,6 @@
3841
import org.cadixdev.lorenz.model.MethodMapping;
3942
import org.cadixdev.lorenz.model.MethodParameterMapping;
4043
import org.cadixdev.lorenz.model.TopLevelClassMapping;
41-
import org.cadixdev.bombe.type.MethodDescriptor;
42-
import org.cadixdev.bombe.type.signature.FieldSignature;
43-
import org.cadixdev.bombe.type.signature.MethodSignature;
4444
import org.junit.jupiter.api.Test;
4545

4646
import java.io.IOException;
@@ -58,12 +58,24 @@ public EnigmaReaderTest() throws IOException {
5858
@Test
5959
public void commentRemoval() {
6060
// 1. Check an all comments line
61-
final String emptyLine = "# This is a comment";
62-
assertEquals("", EnigmaConstants.removeComments(emptyLine).trim());
61+
assertEquals(
62+
"",
63+
EnigmaConstants.removeComments("#").trim()
64+
);
65+
assertEquals(
66+
"",
67+
EnigmaConstants.removeComments("# This is a comment").trim()
68+
);
6369

6470
// 2. Check a mixed line
65-
final String mixedLine = "blah blah blah # This is a comment";
66-
assertEquals("blah blah blah", EnigmaConstants.removeComments(mixedLine).trim());
71+
assertEquals(
72+
"blah blah blah",
73+
EnigmaConstants.removeComments("blah blah blah #").trim()
74+
);
75+
assertEquals(
76+
"blah blah blah",
77+
EnigmaConstants.removeComments("blah blah blah # This is a comment").trim()
78+
);
6779

6880
// 3. Check that SrgParser#processLine(String) won't accept comments
6981
assertFalse(this.mappings.hasTopLevelClassMapping("yu"));

lorenz-io-jam/src/main/java/org/cadixdev/lorenz/io/jam/JamConstants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public final class JamConstants {
3939
/**
4040
* A regex expression used to remove comments from lines.
4141
*/
42-
private static final Pattern HASH_COMMENT = Pattern.compile("#.+");
42+
private static final Pattern HASH_COMMENT = Pattern.compile("#.*");
4343

4444
/**
4545
* The standard file extension used with the JAM format.

lorenz-io-jam/src/test/java/org/cadixdev/lorenz/io/jam/test/JamReaderTest.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
import static org.junit.jupiter.api.Assertions.assertFalse;
3030
import static org.junit.jupiter.api.Assertions.assertTrue;
3131

32+
import org.cadixdev.bombe.type.MethodDescriptor;
33+
import org.cadixdev.bombe.type.signature.FieldSignature;
34+
import org.cadixdev.bombe.type.signature.MethodSignature;
3235
import org.cadixdev.lorenz.MappingSet;
3336
import org.cadixdev.lorenz.io.MappingFormats;
3437
import org.cadixdev.lorenz.io.MappingsReader;
@@ -38,10 +41,6 @@
3841
import org.cadixdev.lorenz.model.MethodMapping;
3942
import org.cadixdev.lorenz.model.MethodParameterMapping;
4043
import org.cadixdev.lorenz.model.TopLevelClassMapping;
41-
import org.cadixdev.bombe.type.MethodDescriptor;
42-
import org.cadixdev.bombe.type.signature.FieldSignature;
43-
import org.cadixdev.bombe.type.signature.MethodSignature;
44-
import org.junit.jupiter.api.Assertions;
4544
import org.junit.jupiter.api.Test;
4645

4746
import java.io.IOException;
@@ -59,12 +58,24 @@ public JamReaderTest() throws IOException {
5958
@Test
6059
public void commentRemoval() {
6160
// 1. Check an all comments line
62-
final String emptyLine = "# This is a comment";
63-
Assertions.assertEquals("", JamConstants.removeComments(emptyLine).trim());
61+
assertEquals(
62+
"",
63+
JamConstants.removeComments("#").trim()
64+
);
65+
assertEquals(
66+
"",
67+
JamConstants.removeComments("# This is a comment").trim()
68+
);
6469

6570
// 2. Check a mixed line
66-
final String mixedLine = "blah blah blah # This is a comment";
67-
assertEquals("blah blah blah", JamConstants.removeComments(mixedLine).trim());
71+
assertEquals(
72+
"blah blah blah",
73+
JamConstants.removeComments("blah blah blah #").trim()
74+
);
75+
assertEquals(
76+
"blah blah blah",
77+
JamConstants.removeComments("blah blah blah # This is a comment").trim()
78+
);
6879

6980
// 3. Check that SrgParser#processLine(String) won't accept comments
7081
assertFalse(this.mappings.hasTopLevelClassMapping("yu"));

lorenz/src/main/java/org/cadixdev/lorenz/impl/model/AbstractClassMappingImpl.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
package org.cadixdev.lorenz.impl.model;
2727

2828
import org.cadixdev.bombe.analysis.InheritanceProvider;
29+
import org.cadixdev.bombe.analysis.InheritanceType;
30+
import org.cadixdev.bombe.type.MethodDescriptor;
2931
import org.cadixdev.bombe.type.signature.FieldSignature;
3032
import org.cadixdev.bombe.type.signature.MethodSignature;
3133
import org.cadixdev.lorenz.MappingSet;
@@ -36,9 +38,12 @@
3638

3739
import java.util.Collection;
3840
import java.util.Collections;
41+
import java.util.HashMap;
42+
import java.util.HashSet;
3943
import java.util.Map;
4044
import java.util.Objects;
4145
import java.util.Optional;
46+
import java.util.Set;
4247
import java.util.StringJoiner;
4348
import java.util.concurrent.ConcurrentHashMap;
4449

@@ -210,6 +215,12 @@ public void complete(final InheritanceProvider provider, final InheritanceProvid
210215
return;
211216
}
212217

218+
final Map<String, Set<MethodSignature>> nameToMethods = new HashMap<>();
219+
for (final Map.Entry<MethodSignature, InheritanceType> method : info.getMethods().entrySet()) {
220+
final Set<MethodSignature> methods = nameToMethods.computeIfAbsent(method.getKey().getName(), name -> new HashSet<>());
221+
methods.add(method.getKey());
222+
}
223+
213224
for (final InheritanceProvider.ClassInfo parent : info.provideParents(provider)) {
214225
final ClassMapping<?, ?> parentMappings = this.getMappings().getOrCreateClassMapping(parent.getName());
215226
parentMappings.complete(provider, parent);
@@ -224,6 +235,25 @@ public void complete(final InheritanceProvider provider, final InheritanceProvid
224235
if (parent.canInherit(info, mapping.getSignature())) {
225236
this.methods.putIfAbsent(mapping.getSignature(), mapping);
226237
}
238+
239+
// Check if there are any methods here that override the return type of a parent
240+
// method.
241+
if (nameToMethods.containsKey(mapping.getObfuscatedName())) {
242+
for (final MethodSignature methodSignature : nameToMethods.get(mapping.getObfuscatedName())) {
243+
final MethodDescriptor methodDescriptor = methodSignature.getDescriptor();
244+
245+
final MethodSignature mappingSignature = mapping.getSignature();
246+
final MethodDescriptor mappingDescriptor = mappingSignature.getDescriptor();
247+
248+
// The method MUST have the same parameters
249+
// TODO: handle generic params
250+
if (!Objects.equals(methodDescriptor.getParamTypes(), mappingDescriptor.getParamTypes())) continue;
251+
252+
if (mappingDescriptor.getReturnType().isAssignableFrom(methodDescriptor.getReturnType(), provider)) {
253+
this.methods.putIfAbsent(methodSignature, mapping);
254+
}
255+
}
256+
}
227257
}
228258
}
229259

lorenz/src/main/java/org/cadixdev/lorenz/impl/model/AbstractMemberMappingImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public boolean equals(final Object obj) {
7575

7676
@Override
7777
public int hashCode() {
78-
return Objects.hash(super.hashCode(), this.parent);
78+
return Objects.hash(super.hashCode(), this.parent.getFullObfuscatedName(), this.parent.getFullDeobfuscatedName());
7979
}
8080

8181
}

0 commit comments

Comments
 (0)