По старой традиции использовал для этих целей всегда JAD. Но он уже достаточно давно заброшен и не справляется с некоторыми фишками. Нашёл хорошую альтернативу, так прям и называется Java Decompiler. Работает как отдельное приложение, так и как плагин к эклипсу.
Больше всего не давали жить две штуки (исходники, которые мне нужны, были просто напичканы ими): ассерты и дженерики. Вот на составил небольшой демонстрационный примерчик:
Исходный текст:
- public class Example {
- public class Doing<T extends Some> extends Base<T> {
- @Override
- public T doSomething(T param) {
- assert(param == null);
- return param;
- }
- }
- public abstract class Base<T extends Some> {
- public abstract T doSomething(T param);
- }
- public class Some {
- public Some doing() {
- return this;
- }
- }
- }
- // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
- // Jad home page: http://www.kpdus.com/jad.html
- // Decompiler options: packimports(3)
- // Source File Name: Example.java
- public class Example {
- public abstract class Base {
- public abstract Some doSomething(Some some);
- final Example this$0;
- public Base() {
- this$0 = Example.this;
- super();
- }
- }
- public class Doing extends Base {
- public Some doSomething(Some param) {
- if (!$assertionsDisabled && param != null)
- throw new AssertionError();
- else
- return param;
- }
- final Example this$0;
- static final boolean $assertionsDisabled = !Example
- .desiredAssertionStatus();
- public Doing() {
- this$0 = Example.this;
- super();
- }
- }
- public class Some {
- public Some doing() {
- return this;
- }
- final Example this$0;
- public Some() {
- this$0 = Example.this;
- super();
- }
- }
- public Example() {
- }
- }
- public class Example {
- public abstract class Base<T extends Example.Some> {
- public Base() {
- }
- public abstract T doSomething(T paramT);
- }
- public class Doing<T extends Example.Some> extends Example.Base<T> {
- public Doing() {
- super(Example.this);
- }
- public T doSomething(T param) {
- assert (param == null);
- return param;
- }
- }
- public class Some {
- public Some() {
- }
- public Some doing() {
- return this;
- }
- }
- }
Комментариев нет:
Отправить комментарий