Skip to content

Commit

Permalink
Store extendsMap as plain text instead of using ObjectOutputStream
Browse files Browse the repository at this point in the history
  • Loading branch information
LunNova committed May 6, 2017
1 parent 3691e3a commit 187b509
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 22 deletions.
7 changes: 1 addition & 6 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -93,16 +93,13 @@ if (System.env.GRADLE_USER_HOME) {
ext.homeDir = System.properties['user.home'] + '/.gradle/'
}
ext.mappingsPath = homeDir + 'caches/minecraft/de/oceanlabs/mcp/mcp_' + mappings_channel + '/' + mappings_version + '/'
ext.srgPath = mappingsPath + 'srgs/notch-srg.srg'
ext.altSrgPath = mappingsPath + "$mcVersion/srgs/notch-srg.srg"

jar.doFirst {
if (
!file(mappingsPath + 'fields.csv').exists() ||
!file(mappingsPath + 'methods.csv').exists() ||
!file('./generated/extendsMap.obj.lzma').exists() ||
!file('./generated/minecraft_stubs.jar.lzma').exists() ||
(!file(srgPath).exists() && !file(altSrgPath).exists())
!file('./generated/minecraft_stubs.jar.lzma').exists()
)
throw new Error("Can't find mappings at $mappingsPath and/or $srgPath and/or $altSrgPath and/or extendsMap")
}
Expand All @@ -114,8 +111,6 @@ jar {
}) {
exclude "META-INF/**"
}
from srgPath
from altSrgPath
from mappingsPath + 'methods.csv'
from mappingsPath + 'fields.csv'
from './generated/extendsMap.obj.lzma'
Expand Down
45 changes: 30 additions & 15 deletions src/main/java/me/nallar/modpatcher/MCPMappings.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
import LZMA.LzmaInputStream;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import lombok.SneakyThrows;
import lombok.val;
import me.nallar.javapatcher.mappings.ClassDescription;
import me.nallar.javapatcher.mappings.FieldDescription;
import me.nallar.javapatcher.mappings.Mappings;
import me.nallar.javapatcher.mappings.MethodDescription;
import net.minecraftforge.fml.relauncher.FMLInjectionData;

import java.io.*;
import java.util.*;
Expand All @@ -24,15 +27,21 @@ class MCPMappings extends Mappings {
private final Map<FieldDescription, FieldDescription> fieldSrgMappings = new HashMap<>();
private final Map<String, MethodDescription> parameterlessSrgMethodMappings = new HashMap<>();
private final Map<String, String> shortClassNameToFullName = new HashMap<>();
private final Map<String, List<String>> extendsMap;
private final Map<String, List<String>> extendsMap = new HashMap<>();

MCPMappings(boolean loadDefault) {
if (loadDefault)
loadDefault();
}

@SneakyThrows
@SuppressWarnings("IOResourceOpenedButNotSafelyClosed")
public MCPMappings() throws IOException {
extendsMap = loadExtends(new LzmaInputStream(Mappings.class.getResourceAsStream("/extendsMap.obj.lzma")));
private void loadDefault() {
try {
extendsMap.putAll(loadExtends(new LzmaInputStream(Mappings.class.getResourceAsStream("/extendsMap.obj.lzma"))));
loadCsv(Mappings.class.getResourceAsStream("/methods.csv"), methodSeargeMappings);
loadCsv(Mappings.class.getResourceAsStream("/fields.csv"), fieldSeargeMappings);
loadSrg(Mappings.class.getResourceAsStream("/notch-srg.srg"));
loadSrg(new LzmaInputStream(FMLInjectionData.class.getResourceAsStream("/deobfuscation_data-" + FMLInjectionData.data()[4] + ".lzma")));
} catch (Exception e) {
PatcherLog.error("Failed to load MCP mappings", e);
}
Expand All @@ -56,20 +65,26 @@ private static void loadCsv(InputStream mappingsCsv, Map<String, String> seargeM
mappingsCsv.close();
}

private Map<String, List<String>> loadExtends(InputStream resourceAsStream) throws IOException {
try (ObjectInputStream objectInputStream = new ObjectInputStream(resourceAsStream)) {
@SuppressWarnings("unchecked")
Map<String, String> reversed = (Map<String, String>) objectInputStream.readObject();
Map<String, List<String>> extendsMap = new HashMap<>();
for (Map.Entry<String, String> e : reversed.entrySet()) {
List<String> l = extendsMap.computeIfAbsent(e.getValue(), k -> new ArrayList<>());
l.add(e.getKey());
Map<String, List<String>> loadExtends(InputStream resourceAsStream) throws IOException {
try (val reader = new BufferedReader(new InputStreamReader(resourceAsStream))) {
while (true) {
val line = reader.readLine();
if (line == null)
break;
if (line.isEmpty())
continue;

val split = line.indexOf('^');
if (split == -1)
continue;

val a = line.substring(0, split);
val b = line.substring(split + 1);

extendsMap.computeIfAbsent(b, k -> new ArrayList<>()).add(a);
}
return extendsMap;
} catch (ClassNotFoundException e) {
PatcherLog.error("Failed to read extends mapping", e);
}
return null;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class ModPatcherTransformer {
checkForMultipleClassLoads();

try {
patcher = new Patcher(pool = new ClassLoaderPool(), Patches.class, new MCPMappings());
patcher = new Patcher(pool = new ClassLoaderPool(), Patches.class, new MCPMappings(true));

// TODO - issue #2. Determine layout/config file structure
recursivelyAddXmlFiles(new File(MOD_PATCHES_DIRECTORY), patcher);
Expand Down
10 changes: 10 additions & 0 deletions src/test/java/me/nallar/modpatcher/ModPatcherTest.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package me.nallar.modpatcher;

import LZMA.LzmaInputStream;
import lombok.SneakyThrows;
import me.nallar.modpatcher.ModPatcher.Version;
import org.junit.Assert;
import org.junit.Test;

import java.io.*;

public class ModPatcherTest {
@Test
public void testGetSetupClass() {
Expand All @@ -19,4 +23,10 @@ public void testVersions() {

Assert.assertFalse(ModPatcherLoadHook.isOutdated(Version.of("1.8.9-SNAPSHOT"), Version.of("1.8.9.81")));
}

@SneakyThrows
@Test
public void testMappings() {
new MCPMappings(false).loadExtends(new LzmaInputStream(new FileInputStream("./generated/extendsMap.obj.lzma")));
}
}

0 comments on commit 187b509

Please sign in to comment.