From e33b4003a5c423894e7aef575faff359dd1d33b1 Mon Sep 17 00:00:00 2001 From: jeff Date: Wed, 11 Mar 2015 11:03:16 -0400 Subject: generalized field matching added method matching --- src/cuchaz/enigma/convert/MatchesReader.java | 46 ++++++++++++++++++---------- 1 file changed, 30 insertions(+), 16 deletions(-) (limited to 'src/cuchaz/enigma/convert/MatchesReader.java') diff --git a/src/cuchaz/enigma/convert/MatchesReader.java b/src/cuchaz/enigma/convert/MatchesReader.java index 921ab1d..dac2f05 100644 --- a/src/cuchaz/enigma/convert/MatchesReader.java +++ b/src/cuchaz/enigma/convert/MatchesReader.java @@ -10,6 +10,8 @@ import java.util.List; import com.beust.jcommander.internal.Lists; import cuchaz.enigma.mapping.ClassEntry; +import cuchaz.enigma.mapping.Entry; +import cuchaz.enigma.mapping.EntryFactory; import cuchaz.enigma.mapping.FieldEntry; import cuchaz.enigma.mapping.Type; @@ -45,45 +47,57 @@ public class MatchesReader { return entries; } - public static FieldMatches readFields(File file) + public static MemberMatches readMembers(File file) throws IOException { try (BufferedReader in = new BufferedReader(new FileReader(file))) { - FieldMatches matches = new FieldMatches(); + MemberMatches matches = new MemberMatches(); String line = null; while ((line = in.readLine()) != null) { - readFieldMatch(matches, line); + readMemberMatch(matches, line); } return matches; } } - private static void readFieldMatch(FieldMatches matches, String line) { + private static void readMemberMatch(MemberMatches matches, String line) { if (line.startsWith("!")) { - matches.addUnmatchableSourceField(readField(line.substring(1))); + T source = readEntry(line.substring(1)); + matches.addUnmatchableSourceEntry(source); } else { String[] parts = line.split(":", 2); - FieldEntry source = readField(parts[0]); - FieldEntry dest = readField(parts[1]); + T source = readEntry(parts[0]); + T dest = readEntry(parts[1]); if (source != null && dest != null) { matches.addMatch(source, dest); } else if (source != null) { - matches.addUnmatchedSourceField(source); + matches.addUnmatchedSourceEntry(source); } else if (dest != null) { - matches.addUnmatchedDestField(dest); + matches.addUnmatchedDestEntry(dest); } } } - private static FieldEntry readField(String in) { + @SuppressWarnings("unchecked") + private static T readEntry(String in) { if (in.length() <= 0) { return null; } String[] parts = in.split(" "); - assert(parts.length == 3); - return new FieldEntry( - new ClassEntry(parts[0]), - parts[1], - new Type(parts[2]) - ); + if (parts.length == 3 && parts[2].indexOf('(') < 0) { + return (T)new FieldEntry( + new ClassEntry(parts[0]), + parts[1], + new Type(parts[2]) + ); + } else { + assert(parts.length == 2 || parts.length == 3); + if (parts.length == 2) { + return (T)EntryFactory.getBehaviorEntry(parts[0], parts[1]); + } else if (parts.length == 3) { + return (T)EntryFactory.getBehaviorEntry(parts[0], parts[1], parts[2]); + } else { + throw new Error("Malformed behavior entry: " + in); + } + } } } -- cgit v1.2.3