private void doSaveClassDecompiled(File inFile, File outFile) throws Exception { DecompilerSettings settings = cloneSettings(); LuytenTypeLoader typeLoader = new LuytenTypeLoader(); MetadataSystem metadataSystem = new MetadataSystem(typeLoader); TypeReference type = metadataSystem.lookupType(inFile.getCanonicalPath()); DecompilationOptions decompilationOptions = new DecompilationOptions(); decompilationOptions.setSettings(settings); decompilationOptions.setFullDecompilation(true); boolean isUnicodeEnabled = decompilationOptions.getSettings().isUnicodeOutputEnabled(); TypeDefinition resolvedType = null; if (type == null || ((resolvedType = type.resolve()) == null)) { throw new Exception("Unable to resolve type."); } StringWriter stringwriter = new StringWriter(); PlainTextOutput plainTextOutput = new PlainTextOutput(stringwriter); plainTextOutput.setUnicodeOutputEnabled(isUnicodeEnabled); settings.getLanguage().decompileType(resolvedType, plainTextOutput, decompilationOptions); String decompiledSource = stringwriter.toString(); System.out.println("[SaveAll]: " + inFile.getName() + " -> " + outFile.getName()); try (FileOutputStream fos = new FileOutputStream(outFile); OutputStreamWriter writer = isUnicodeEnabled ? new OutputStreamWriter(fos, "UTF-8") : new OutputStreamWriter(fos); BufferedWriter bw = new BufferedWriter(writer);) { bw.write(decompiledSource); bw.flush(); } }
private Language findLanguageByName(String languageName) { if (languageName != null) { if (languageName.equals(Languages.java().getName())) { return Languages.java(); } else if (languageName.equals(Languages.bytecode().getName())) { return Languages.bytecode(); } else if (languageName.equals(Languages.bytecodeAst().getName())) { return Languages.bytecodeAst(); } for (Language language : Languages.debug()) { if (languageName.equals(language.getName())) { return language; } } } return Languages.java(); }
public TypeDecompilationResults decompileType(final TypeDefinition type, final ITextOutput output, final DecompilationOptions options) { writeCommentLine(output, typeToString(type, true)); return new TypeDecompilationResults( null); }
public String getHint(final MemberReference member) { if (member instanceof TypeReference) { return typeToString((TypeReference) member, true); } return member.toString(); } }
public void decompilePackage( final String packageName, final Iterable<TypeDefinition> types, final ITextOutput output, final DecompilationOptions options) { writeCommentLine(output, packageName); }
Languages.bytecode().decompileMethod(method, bytecodeOutput, bytecodeOptions);
/** * Constructs the path from FQCN, validates writability, and creates a writer. */ private static synchronized FileOutputWriter createFileWriter(final TypeDefinition type, final DecompilerSettings settings) throws IOException { final String outputDirectory = settings.getOutputDirectory(); final String fileName = type.getName() + settings.getLanguage().getFileExtension(); final String packageName = type.getPackageName(); // foo.Bar -> foo/Bar.java final String subDir = StringUtils.defaultIfEmpty(packageName, "").replace('.', File.separatorChar); final String outputPath = PathHelper.combine(outputDirectory, subDir, fileName); final File outputFile = new File(outputPath); final File parentDir = outputFile.getParentFile(); if (parentDir != null && !parentDir.exists() && !parentDir.mkdirs()) { throw new IllegalStateException("Could not create directory:" + parentDir); } if (!outputFile.exists() && !outputFile.createNewFile()) { throw new IllegalStateException("Could not create output file: " + outputPath); } return new FileOutputWriter(outputFile, settings); }
public TypeDecompilationResults decompileType(final TypeDefinition type, final ITextOutput output, final DecompilationOptions options) { writeCommentLine(output, typeToString(type, true)); return new TypeDecompilationResults( null); }
public String getHint(final MemberReference member) { if (member instanceof TypeReference) { return typeToString((TypeReference) member, true); } return member.toString(); } }
public void decompilePackage( final String packageName, final Iterable<TypeDefinition> types, final ITextOutput output, final DecompilationOptions options) { writeCommentLine(output, packageName); }
Languages.bytecode().decompileMethod(method, bytecodeOutput, bytecodeOptions);
/** * Constructs the path from FQCN, validates writability, and creates a writer. */ private static synchronized FileOutputWriter createFileWriter(final TypeDefinition type, final DecompilerSettings settings) throws IOException { final String outputDirectory = settings.getOutputDirectory(); final String fileName = type.getName() + settings.getLanguage().getFileExtension(); final String packageName = type.getPackageName(); // foo.Bar -> foo/Bar.java final String subDir = StringUtils.defaultIfEmpty(packageName, "").replace('.', File.separatorChar); final String outputPath = PathHelper.combine(outputDirectory, subDir, fileName); final File outputFile = new File(outputPath); final File parentDir = outputFile.getParentFile(); if (parentDir != null && !parentDir.exists() && !parentDir.mkdirs()) { throw new IllegalStateException("Could not create directory:" + parentDir); } if (!outputFile.exists() && !outputFile.createNewFile()) { throw new IllegalStateException("Could not create output file: " + outputPath); } return new FileOutputWriter(outputFile, settings); }
public TypeDecompilationResults decompileType(final TypeDefinition type, final ITextOutput output, final DecompilationOptions options) { writeCommentLine(output, typeToString(type, true)); return new TypeDecompilationResults( null); }
private void decompileWithoutLinks() { this.invalidateContent(); isNavigationLinksValid = false; textArea.setHyperlinksEnabled(false); StringWriter stringwriter = new StringWriter(); PlainTextOutput plainTextOutput = new PlainTextOutput(stringwriter); plainTextOutput.setUnicodeOutputEnabled(decompilationOptions.getSettings().isUnicodeOutputEnabled()); settings.getLanguage().decompileType(type, plainTextOutput, decompilationOptions); setContentPreserveLastScrollPosition(stringwriter.toString()); this.isContentValid = true; }
public String getHint(final MemberReference member) { if (member instanceof TypeReference) { return typeToString((TypeReference) member, true); } return member.toString(); } }
public void decompilePackage( final String packageName, final Iterable<TypeDefinition> types, final ITextOutput output, final DecompilationOptions options) { writeCommentLine(output, packageName); }
Languages.bytecode().decompileMethod(method, bytecodeOutput, bytecodeOptions);
public void decompile() { this.invalidateContent(); // synchronized: do not accept changes from menu while running synchronized (settings) { if (Languages.java().getName().equals(settings.getLanguage().getName())) { decompileWithNavigationLinks(); } else { decompileWithoutLinks(); } } }
public void decompileField(final FieldDefinition field, final ITextOutput output, final DecompilationOptions options) { writeCommentLine(output, typeToString(field.getDeclaringType(), true) + "." + field.getName()); }
PlainTextOutput plainTextOutput = new PlainTextOutput(writer); plainTextOutput.setUnicodeOutputEnabled(isUnicodeEnabled); settings.getLanguage().decompileType(resolvedType, plainTextOutput, decompilationOptions); writer.flush(); } catch (Exception e) {