Commit Graph

22 Commits

Author SHA1 Message Date
Agaricus
fbe56aec27 Add option to generate unrenamed symbols in mapping output 2013-01-28 22:42:01 -08:00
Agaricus
a64fb14abd Add inheritance map writing
New --write-inheritance/-H command-line option, iterates all classes
in mapping and writes inheritance (interfaces and superclasses) to file.

Example usage, generating inheritance map from MCPC+:

java -cp target/SpecialSource-1.3-SNAPSHOT-shaded.jar:mcpc-plus-1.4.7-R0.2-SNAPSHOT.jar net.md_5.specialsource.SpecialSource --srg-in ~/minecraft/1.4.x/jars/1.4.7/cb2obf.csrg --live --write-inheritance /tmp/h
2013-01-27 13:22:44 -08:00
Agaricus
25fcbb40fe Require explicit classloader for runtime inheritance
Previously, the runtime inheritance providers would always use the
system classloader. Now you have to explicitly pass the classloader
to use. Also add a 'verbose' flag for debugging.
2013-01-25 23:27:40 -08:00
Agaricus
b5b967b850 Fix NPE in log() when used in a library 2013-01-23 22:24:52 -08:00
Agaricus
769c398dd5 Add support for non-file jar mapping reading
The input is now a BufferedReader, so you can read from a file with
new BufferedReader(new FileReader(...)), or from an input stream with
new BufferedReader(new InputStreamReader(...)).
2013-01-23 21:27:45 -08:00
Agaricus
37ce7f0b37 Add remapped runtime inheritance provider
RemappedRuntimeInheritanceProvider is similar to RuntimeInheritanceProvider, providing
access to inheritance information at runtime, but class names are remapped before
looking up, and the inheritance is reverse-remapped before returning.

This allows the inheritance to be provided from an obfuscated jar, via the cb2obf
mappings. For example:

java -cp target/SpecialSource-1.2-SNAPSHOT-shaded.jar:mcpc-plus-1.4.7-R0.2-SNAPSHOT-023.jar net.md_5.specialsource.SpecialSource --shade-relocation net.minecraft.server=net.minecraft.server.v1_4_R1 --shade-relocation org.bouncycastle=net.minecraft.v1_4_R1.org.bouncycastle --srg-in ../jars/1.4.7/cb2obf.csrg --in-jar ../IncompatiblePlugin/IncompatiblePlugin-01.jar  --out-jar /tmp/sp/out.jar -L

-L enables remapped runtime inheritance, in order to use the obfuscated MCPC+ jar classes
to lookup the inherited classes for remapping. The same mappings are used as for remapping
the plugin (--srg-in and --shade-relocation take effect).

The original option, -l, in contrast does not remap on class lookup, and can be used to
lookup inheritance from a jar with CraftBukkit mappings, for example:

java -cp target/SpecialSource-1.2-SNAPSHOT-shaded.jar:craftbukkit-1.4.7-R0.1.jar net.md_5.specialsource.SpecialSource --shade-relocation net.minecraft.server=net.minecraft.server.v1_4_R1 --shade-relocation org.bouncycastle=net.minecraft.v1_4_R1.org.bouncycastle --srg-in ../jars/1.4.7/cb2obf.csrg --in-jar ../IncompatiblePlugin/IncompatiblePlugin-01.jar  --out-jar /tmp/sp/out.jar -l
2013-01-23 20:48:24 -08:00
Agaricus
b69a11cf5b Cleanup output (cosmetic changes only) 2013-01-23 19:47:15 -08:00
Agaricus
03fe7d426b Fix unchecked cast warning on shade-relocation parameter 2013-01-23 19:40:26 -08:00
Agaricus
03a418d4b3 Expose individual class remapping in JarRemapper
The JarRemapper constructor is now public; you can create a remapper
with a JarMapping and list of IInheritanceProviders, and then use it
to remap an entire jar with remapJar(), or individual classes using
remapClassFile().
2013-01-23 19:32:21 -08:00
md_5
b839f98de2 Formattng + a few nitpicks of previous patches. 2013-01-23 20:05:24 +11:00
Agaricus
297b9f5a33 Add runtime class inheritance remapping
If -l is specified, will now traverse the runtime class hierarchy in
tryClimb to determine the method/symbol from the parent to remap, in
addition to the classes in the jar.

This can be used to remap plugins that call into external classes.
For example, with a Bukkit plugin:

 java -cp ../jars/craftbukkit-1.4.7-R0.1.jar:target/SpecialSource-1.1-SNAPSHOT.jar net.md_5.specialsource.SpecialSource --shade-relocation net.minecraft.server=net.minecraft.server.v1_4_R1 --shade-relocation org.bouncycastle=net.minecraft.v1_4_R1.org.bouncycastle --srg-in ../jars/1.4.7/cb2obf.csrg  --in ../IncompatiblePlugin/IncompatiblePlugin-01.jar --out /tmp/bp/out.jar

using:
 https://bitbucket.org/agaricusb/incompatibleplugin/downloads/IncompatiblePlugin-01.jar
 6d75d94496

agaricus/plugins/IncompatiblePlugin/SamplePosCommand.java will be remapped:

  worldServer.q(...)

from worldServer.getTileEntity(). World provides getTileEntity and is remapped in cb2obf;
but WorldServer subclasses World and overrides getTileEntiy.. this information is not
available in the plugin itself and would not be remapped alone. By adding the CB jar to
the classpath and enabling runtime inheritance, the call is correctly remapped.
2013-01-23 00:23:38 -08:00
Agaricus
97d8e80769 Add maven-shade-plugin relocation simulation on input mapping
The --shade-relocation/-R option causes the --srg-in mapping old class
names to be transformed with the pattern. Multiple patterns can be given,
though currently only exact prefix matches are supported.

Example:

--shade-relocation net.minecraft.server=net.minecraft.server.v1_4_R1
--shade-relocation org.bouncycastle=net.minecraft.v1_4_R1.org.bouncycastle

The mapping will be 'shaded' before being applied to the jar.

You can use these options with --srg-in 1.4.7/cb2obf.csrg to remap plugins
which depend on the version-shaded class names (aka 'vcb').
2013-01-22 20:53:05 -08:00
Agaricus
5437eb4c9e Add remapping from csrg input file 2013-01-22 00:17:48 -08:00
Agaricus
1b15d3b29f Add 'compact srg' output format
This is a simpler mapping format, somewhat easier to parse, and without
the redundant information in the original .srg file format.
2013-01-21 20:58:55 -08:00
Agaricus
b20840a65e Add -q option to suppress verbose output 2013-01-21 20:21:33 -08:00
Agaricus
ce4b890f87 Option parsing with joptsimple
Allow optionally writing srg to a file, or to stdout if unspecified.
2013-01-21 20:12:31 -08:00
Agaricus
8e0a4debad Move srg writing and symbol comparison into JarMapping 2013-01-21 19:18:54 -08:00
Agaricus
b004ebf919 Make jar renaming optional (only generate mappings if no 3rd argument given) 2012-12-26 23:34:32 -08:00
Agaricus
9fdbdedf3c Remove 1.4.5 check 2012-12-26 23:24:16 -08:00
md_5
03ae5d07c9 Java 6 support. 2012-12-09 10:29:04 +11:00
md_5
cb27511800 Fix license formatting. 2012-12-09 10:15:58 +11:00
md_5
e5af484c54 Initial commit. 2012-12-08 08:52:58 +11:00