diff options
-rw-r--r-- | src/core/lombok/bytecode/PoolConstantsApp.java | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/core/lombok/bytecode/PoolConstantsApp.java b/src/core/lombok/bytecode/PoolConstantsApp.java new file mode 100644 index 00000000..59c51a37 --- /dev/null +++ b/src/core/lombok/bytecode/PoolConstantsApp.java @@ -0,0 +1,81 @@ +package lombok.bytecode; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import lombok.core.LombokApp; + +import org.mangosdk.spi.ProviderFor; + +import com.zwitserloot.cmdreader.CmdReader; +import com.zwitserloot.cmdreader.Description; +import com.zwitserloot.cmdreader.InvalidCommandLineException; +import com.zwitserloot.cmdreader.Mandatory; +import com.zwitserloot.cmdreader.Sequential; +import com.zwitserloot.cmdreader.Shorthand; + +@ProviderFor(LombokApp.class) +public class PoolConstantsApp extends LombokApp { + + @Override public String getAppName() { + return "Xprintpool"; + } + + @Override public List<String> getAppAliases() { + return Arrays.asList("Xprintpool"); + } + + @Override public String getAppDescription() { + return "Prints the content of the constant pool to standard out."; + } + + @Override public boolean isDebugTool() { + return true; + } + + public static class CmdArgs { + @Sequential + @Mandatory + @Description("paths to class files to be printed. If a directory is named, all files (recursively) in that directory will be printed.") + private List<String> classFiles = new ArrayList<String>(); + + @Shorthand({"h", "?"}) + @Description("Shows this help text") + boolean help = false; + } + + @Override public int runApp(List<String> raw) throws Exception { + CmdReader<CmdArgs> reader = CmdReader.of(CmdArgs.class); + CmdArgs args; + try { + args = reader.make(raw.toArray(new String[0])); + if (args.help) { + System.out.println(reader.generateCommandLineHelp("java -jar lombok.jar -printpool")); + return 0; + } + } catch (InvalidCommandLineException e) { + System.err.println(e.getMessage()); + System.err.println(reader.generateCommandLineHelp("java -jar lombok.jar -printpool")); + return 1; + } + + List<File> filesToProcess = PostCompilerApp.cmdArgsToFiles(args.classFiles); + int filesVisited = 0; + boolean moreThanOne = filesToProcess.size() > 1; + for (File file : filesToProcess) { + if (!file.exists() || !file.isFile()) { + System.out.printf("Cannot find file '%s'\n", file.getAbsolutePath()); + continue; + } + filesVisited++; + if (moreThanOne) System.out.printf("Processing '%s'\n", file.getAbsolutePath()); + System.out.println(new ClassFileMetaData(PostCompilerApp.readFile(file)).poolContent()); + } + + if (moreThanOne) System.out.printf("Total files visited: %d\n", filesVisited); + + return filesVisited == 0 ? 1 : 0; + } +} |