public static void decompile( final String internalName, final ITextOutput output, final DecompilerSettings settings) { VerifyArgument.notNull(internalName, "internalName"); VerifyArgument.notNull(settings, "settings"); final ITypeLoader typeLoader = settings.getTypeLoader() != null ? settings.getTypeLoader() : new InputTypeLoader(); final MetadataSystem metadataSystem = new MetadataSystem(typeLoader); final TypeReference type; if (internalName.length() == 1) { // // Hack to get around classes whose descriptors clash with primitive types. // final MetadataParser parser = new MetadataParser(IMetadataResolver.EMPTY); final TypeReference reference = parser.parseTypeDescriptor(internalName); type = metadataSystem.resolve(reference); } else { type = metadataSystem.lookupType(internalName); } final TypeDefinition resolvedType; if (type == null || (resolvedType = type.resolve()) == null) { output.writeLine("!!! ERROR: Failed to load class %s.", internalName); return; } DeobfuscationUtilities.processType(resolvedType); final DecompilationOptions options = new DecompilationOptions(); options.setSettings(settings); options.setFullDecompilation(true); if (settings.getJavaFormattingOptions() == null) { settings.setJavaFormattingOptions(JavaFormattingOptions.createDefault()); } settings.getLanguage().decompileType(resolvedType, output, options); }