diff --git a/build.gradle b/build.gradle index b2225bfb..38e140c6 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,9 @@ apply plugin: 'maven-publish' apply plugin: 'com.jfrog.bintray' dependencies { + compileOnly 'org.projectlombok:lombok:1.18.12' + annotationProcessor 'org.projectlombok:lombok:1.18.12' + testCompile 'commons-codec:commons-codec:1.13' testCompile 'org.apache.commons:commons-collections4:4.1' testCompile 'org.apache.commons:commons-imaging:1.0-alpha1' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9a6bf73b..92a78da3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-bin.zip +# distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/src/main/java/org/jd/core/v1/ClassFileToJavaSourceDecompiler.java b/src/main/java/org/jd/core/v1/ClassFileToJavaSourceDecompiler.java index be378347..1717a4a2 100644 --- a/src/main/java/org/jd/core/v1/ClassFileToJavaSourceDecompiler.java +++ b/src/main/java/org/jd/core/v1/ClassFileToJavaSourceDecompiler.java @@ -10,18 +10,22 @@ import org.jd.core.v1.api.Decompiler; import org.jd.core.v1.api.loader.Loader; import org.jd.core.v1.api.printer.Printer; -import org.jd.core.v1.model.message.Message; +import org.jd.core.v1.model.classfile.ClassFile; +import org.jd.core.v1.model.javasyntax.CompilationUnit; +import org.jd.core.v1.model.message.DecompileContext; +import org.jd.core.v1.model.token.Token; import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; +import org.jd.core.v1.service.deserializer.classfile.ClassFileDeserializer; import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; import org.jd.core.v1.service.writer.WriteTokenProcessor; +import org.jd.core.v1.util.DefaultList; import java.util.Map; public class ClassFileToJavaSourceDecompiler implements Decompiler { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); + protected ClassFileDeserializer deserializer = new ClassFileDeserializer(); protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); @@ -29,32 +33,36 @@ public class ClassFileToJavaSourceDecompiler implements Decompiler { protected WriteTokenProcessor writer = new WriteTokenProcessor(); public void decompile(Loader loader, Printer printer, String internalName) throws Exception { - Message message = new Message(); + DecompileContext decompileContext = new DecompileContext(); - message.setHeader("mainInternalTypeName", internalName); - message.setHeader("loader", loader); - message.setHeader("printer", printer); + decompileContext.setMainInternalTypeName(internalName); + decompileContext.setLoader(loader); + decompileContext.setPrinter(printer); - decompile(message); + decompile(decompileContext); } public void decompile(Loader loader, Printer printer, String internalName, Map configuration) throws Exception { - Message message = new Message(); + DecompileContext decompileContext = new DecompileContext(); - message.setHeader("mainInternalTypeName", internalName); - message.setHeader("configuration", configuration); - message.setHeader("loader", loader); - message.setHeader("printer", printer); + decompileContext.setMainInternalTypeName(internalName); + decompileContext.setConfiguration(configuration); + decompileContext.setLoader(loader); + decompileContext.setPrinter(printer); - decompile(message); + decompile(decompileContext); } - protected void decompile(Message message) throws Exception { - this.deserializer.process(message); - this.converter.process(message); - this.fragmenter.process(message); - this.layouter.process(message); - this.tokenizer.process(message); - this.writer.process(message); + protected void decompile(DecompileContext decompileContext) throws Exception { + ClassFile classFile = this.deserializer.loadClassFile(decompileContext.getLoader(), + decompileContext.getMainInternalTypeName()); + decompileContext.setClassFile(classFile); + + CompilationUnit compilationUnit = this.converter.process(decompileContext); + this.fragmenter.process(compilationUnit, decompileContext); + this.layouter.process(decompileContext); + DefaultList tokens = this.tokenizer.process(decompileContext.getBody()); + decompileContext.setTokens(tokens); + this.writer.process(decompileContext); } } diff --git a/src/main/java/org/jd/core/v1/model/javafragment/JavaFragment.java b/src/main/java/org/jd/core/v1/model/javafragment/JavaFragment.java index 25be9c98..4a395f89 100644 --- a/src/main/java/org/jd/core/v1/model/javafragment/JavaFragment.java +++ b/src/main/java/org/jd/core/v1/model/javafragment/JavaFragment.java @@ -7,6 +7,8 @@ package org.jd.core.v1.model.javafragment; -public interface JavaFragment { +import org.jd.core.v1.model.fragment.Fragment; + +public interface JavaFragment extends Fragment { void accept(JavaFragmentVisitor visitor); } diff --git a/src/main/java/org/jd/core/v1/model/message/DecompileContext.java b/src/main/java/org/jd/core/v1/model/message/DecompileContext.java new file mode 100644 index 00000000..9eb2ee14 --- /dev/null +++ b/src/main/java/org/jd/core/v1/model/message/DecompileContext.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2008-2019 Emmanuel Dupuy. + * This project is distributed under the GPLv3 license. + * This is a Copyleft license that gives the user the right to use, + * copy and modify the code freely for non-commercial purposes. + */ + +package org.jd.core.v1.model.message; + +import lombok.Getter; +import lombok.Setter; +import org.jd.core.v1.api.loader.Loader; +import org.jd.core.v1.api.printer.Printer; +import org.jd.core.v1.model.classfile.ClassFile; +import org.jd.core.v1.model.fragment.Fragment; +import org.jd.core.v1.model.javasyntax.CompilationUnit; +import org.jd.core.v1.model.token.Token; +import org.jd.core.v1.service.converter.classfiletojavasyntax.util.TypeMaker; +import org.jd.core.v1.util.DefaultList; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@Setter +public class DecompileContext { + protected String mainInternalTypeName; + protected Map configuration = new HashMap<>(); + protected Loader loader; + protected Printer printer; + + protected TypeMaker typeMaker; + protected int majorVersion; + protected int minorVersion; + protected int maxLineNumber = Printer.UNKNOWN_LINE_NUMBER; + protected boolean containsByteCode; + protected boolean showBridgeAndSynthetic; + + protected ClassFile classFile; + protected CompilationUnit compilationUnit; + protected DefaultList tokens; + + @Deprecated + protected Object body; + + public DecompileContext() {} + + @Deprecated + public DecompileContext(DefaultList fragments) { + this.body = fragments; + } + + @SuppressWarnings("unchecked") + @Deprecated + public T getBody() { + return (T)body; + } + + @Deprecated + public void setBody(Object body) { + this.body = body; + } +} diff --git a/src/main/java/org/jd/core/v1/model/message/Message.java b/src/main/java/org/jd/core/v1/model/message/Message.java deleted file mode 100644 index 0b407287..00000000 --- a/src/main/java/org/jd/core/v1/model/message/Message.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2008-2019 Emmanuel Dupuy. - * This project is distributed under the GPLv3 license. - * This is a Copyleft license that gives the user the right to use, - * copy and modify the code freely for non-commercial purposes. - */ - -package org.jd.core.v1.model.message; - -import java.util.HashMap; - -public class Message { - protected HashMap headers = new HashMap<>(); - protected Object body; - - public Message() {} - - public Message(Object body) { - this.body = body; - } - - @SuppressWarnings("unchecked") - public T getHeader(String name) { - return (T)headers.get(name); - } - - @SuppressWarnings("unchecked") - public T getHeader(String name, T defaultValue) { - Object value = headers.get(name); - - if (value == null) { - return defaultValue; - } else { - return (T)value; - } - } - - public void setHeader(String name, Object value) { - headers.put(name, value); - } - - public Object removeHeader(String name) { - return headers.remove(name); - } - - @SuppressWarnings("unchecked") - public T getBody() { - return (T)body; - } - - public void setBody(Object body) { - this.body = body; - } -} diff --git a/src/main/java/org/jd/core/v1/model/processor/Processor.java b/src/main/java/org/jd/core/v1/model/processor/Processor.java deleted file mode 100644 index ad888b6c..00000000 --- a/src/main/java/org/jd/core/v1/model/processor/Processor.java +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (c) 2008-2019 Emmanuel Dupuy. - * This project is distributed under the GPLv3 license. - * This is a Copyleft license that gives the user the right to use, - * copy and modify the code freely for non-commercial purposes. - */ - -package org.jd.core.v1.model.processor; - -import org.jd.core.v1.model.message.Message; - -public interface Processor { - void process(Message message) throws Exception; -} diff --git a/src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/ClassFileToJavaSyntaxProcessor.java b/src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/ClassFileToJavaSyntaxProcessor.java index d166c679..b9daaf9b 100644 --- a/src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/ClassFileToJavaSyntaxProcessor.java +++ b/src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/ClassFileToJavaSyntaxProcessor.java @@ -8,14 +8,12 @@ package org.jd.core.v1.service.converter.classfiletojavasyntax; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.model.message.Message; -import org.jd.core.v1.model.processor.Processor; +import org.jd.core.v1.model.javasyntax.CompilationUnit; +import org.jd.core.v1.model.message.DecompileContext; import org.jd.core.v1.service.converter.classfiletojavasyntax.processor.ConvertClassFileProcessor; import org.jd.core.v1.service.converter.classfiletojavasyntax.processor.UpdateJavaSyntaxTreeProcessor; import org.jd.core.v1.service.converter.classfiletojavasyntax.util.TypeMaker; -import java.util.Map; - /** * Convert ClassFile model to Java syntax model.

* @@ -24,36 +22,23 @@ * * @see ConvertClassFileProcessor */ -public class ClassFileToJavaSyntaxProcessor implements Processor { +public class ClassFileToJavaSyntaxProcessor { protected static final ConvertClassFileProcessor CONVERT_CLASS_FILE_PROCESSOR = new ConvertClassFileProcessor(); protected static final UpdateJavaSyntaxTreeProcessor UPDATE_JAVA_SYNTAX_TREE_PROCESSOR = new UpdateJavaSyntaxTreeProcessor(); - public void process(Message message) throws Exception { - Loader loader = message.getHeader("loader"); - Map configuration = message.getHeader("configuration"); - - if (configuration == null) { - message.setHeader("typeMaker", new TypeMaker(loader)); - } else { - TypeMaker typeMaker = null; - - try { - typeMaker = (TypeMaker)configuration.get("typeMaker"); + public CompilationUnit process(DecompileContext decompileContext) throws Exception { + Loader loader = decompileContext.getLoader(); - if (typeMaker == null) { - // Store the heavy weight object 'typeMaker' in 'configuration' to reuse it - configuration.put("typeMaker", typeMaker=new TypeMaker(loader)); - } - } catch (Exception e) { - if (typeMaker == null) { - typeMaker = new TypeMaker(loader); - } - } - - message.setHeader("typeMaker", typeMaker); + TypeMaker typeMaker = decompileContext.getTypeMaker(); + if (typeMaker == null) { + typeMaker = new TypeMaker(loader); + decompileContext.setTypeMaker(typeMaker); } - CONVERT_CLASS_FILE_PROCESSOR.process(message); - UPDATE_JAVA_SYNTAX_TREE_PROCESSOR.process(message); + CompilationUnit compilationUnit = CONVERT_CLASS_FILE_PROCESSOR.process(decompileContext.getClassFile(), typeMaker, decompileContext); + decompileContext.setCompilationUnit(compilationUnit); + + UPDATE_JAVA_SYNTAX_TREE_PROCESSOR.process(compilationUnit, typeMaker); + return compilationUnit; } } diff --git a/src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/processor/ConvertClassFileProcessor.java b/src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/processor/ConvertClassFileProcessor.java index 2d424108..2cb790d2 100644 --- a/src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/processor/ConvertClassFileProcessor.java +++ b/src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/processor/ConvertClassFileProcessor.java @@ -11,17 +11,55 @@ import org.jd.core.v1.model.classfile.Constants; import org.jd.core.v1.model.classfile.Field; import org.jd.core.v1.model.classfile.Method; -import org.jd.core.v1.model.classfile.attribute.*; -import org.jd.core.v1.model.classfile.constant.*; +import org.jd.core.v1.model.classfile.attribute.Annotations; +import org.jd.core.v1.model.classfile.attribute.AttributeAnnotationDefault; +import org.jd.core.v1.model.classfile.attribute.AttributeCode; +import org.jd.core.v1.model.classfile.attribute.AttributeConstantValue; +import org.jd.core.v1.model.classfile.attribute.AttributeLineNumberTable; +import org.jd.core.v1.model.classfile.attribute.AttributeModule; +import org.jd.core.v1.model.classfile.attribute.ModuleInfo; +import org.jd.core.v1.model.classfile.attribute.PackageInfo; +import org.jd.core.v1.model.classfile.attribute.ServiceInfo; +import org.jd.core.v1.model.classfile.constant.Constant; +import org.jd.core.v1.model.classfile.constant.ConstantDouble; +import org.jd.core.v1.model.classfile.constant.ConstantFloat; +import org.jd.core.v1.model.classfile.constant.ConstantInteger; +import org.jd.core.v1.model.classfile.constant.ConstantLong; +import org.jd.core.v1.model.classfile.constant.ConstantUtf8; +import org.jd.core.v1.model.classfile.constant.ConstantValue; import org.jd.core.v1.model.javasyntax.CompilationUnit; -import org.jd.core.v1.model.javasyntax.declaration.*; -import org.jd.core.v1.model.javasyntax.expression.*; +import org.jd.core.v1.model.javasyntax.declaration.Declaration; +import org.jd.core.v1.model.javasyntax.declaration.ExpressionVariableInitializer; +import org.jd.core.v1.model.javasyntax.declaration.FieldDeclarator; +import org.jd.core.v1.model.javasyntax.declaration.ModuleDeclaration; +import org.jd.core.v1.model.javasyntax.declaration.TypeDeclaration; +import org.jd.core.v1.model.javasyntax.expression.DoubleConstantExpression; +import org.jd.core.v1.model.javasyntax.expression.Expression; +import org.jd.core.v1.model.javasyntax.expression.FloatConstantExpression; +import org.jd.core.v1.model.javasyntax.expression.IntegerConstantExpression; +import org.jd.core.v1.model.javasyntax.expression.LongConstantExpression; +import org.jd.core.v1.model.javasyntax.expression.StringConstantExpression; import org.jd.core.v1.model.javasyntax.reference.BaseAnnotationReference; import org.jd.core.v1.model.javasyntax.reference.ElementValue; -import org.jd.core.v1.model.javasyntax.type.*; -import org.jd.core.v1.model.message.Message; -import org.jd.core.v1.model.processor.Processor; -import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.*; +import org.jd.core.v1.model.javasyntax.type.BaseType; +import org.jd.core.v1.model.javasyntax.type.BaseTypeParameter; +import org.jd.core.v1.model.javasyntax.type.GenericType; +import org.jd.core.v1.model.javasyntax.type.Type; +import org.jd.core.v1.model.javasyntax.type.TypeArgument; +import org.jd.core.v1.model.javasyntax.type.TypeParameter; +import org.jd.core.v1.model.javasyntax.type.TypeParameterWithTypeBounds; +import org.jd.core.v1.model.message.DecompileContext; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileAnnotationDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileBodyDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileClassDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileConstructorDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileConstructorOrMethodDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileEnumDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileFieldDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileInterfaceDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileMethodDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileStaticInitializerDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileTypeDeclaration; import org.jd.core.v1.service.converter.classfiletojavasyntax.util.AnnotationConverter; import org.jd.core.v1.service.converter.classfiletojavasyntax.util.TypeMaker; import org.jd.core.v1.service.converter.classfiletojavasyntax.visitor.PopulateBindingsWithTypeParameterVisitor; @@ -32,7 +70,7 @@ import java.util.List; import java.util.Map; -import static org.jd.core.v1.model.classfile.Constants.*; +import static org.jd.core.v1.model.classfile.Constants.ACC_STATIC; /** * Convert ClassFile model to Java syntax model.

@@ -40,7 +78,7 @@ * Input: {@link org.jd.core.v1.model.classfile.ClassFile}
* Output: {@link org.jd.core.v1.model.javasyntax.CompilationUnit}
*/ -public class ConvertClassFileProcessor implements Processor { +public class ConvertClassFileProcessor { protected PopulateBindingsWithTypeParameterVisitor populateBindingsWithTypeParameterVisitor = new PopulateBindingsWithTypeParameterVisitor() { @Override public void visit(TypeParameter parameter) { @@ -53,11 +91,7 @@ public void visit(TypeParameterWithTypeBounds parameter) { } }; - @Override - public void process(Message message) throws Exception { - TypeMaker typeMaker = message.getHeader("typeMaker"); - ClassFile classFile = message.getBody(); - + public CompilationUnit process(ClassFile classFile, TypeMaker typeMaker, DecompileContext decompileContext) throws Exception { AnnotationConverter annotationConverter = new AnnotationConverter(typeMaker); TypeDeclaration typeDeclaration; @@ -74,9 +108,9 @@ public void process(Message message) throws Exception { typeDeclaration = convertClassDeclaration(typeMaker, annotationConverter, classFile, null); } - message.setHeader("majorVersion", classFile.getMajorVersion()); - message.setHeader("minorVersion", classFile.getMinorVersion()); - message.setBody(new CompilationUnit(typeDeclaration)); + decompileContext.setMajorVersion(classFile.getMajorVersion()); + decompileContext.setMinorVersion(classFile.getMinorVersion()); + return new CompilationUnit(typeDeclaration); } protected ClassFileInterfaceDeclaration convertInterfaceDeclaration(TypeMaker parser, AnnotationConverter converter, ClassFile classFile, ClassFileBodyDeclaration outerClassFileBodyDeclaration) { diff --git a/src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/processor/UpdateJavaSyntaxTreeProcessor.java b/src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/processor/UpdateJavaSyntaxTreeProcessor.java index 13000862..d279bc06 100644 --- a/src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/processor/UpdateJavaSyntaxTreeProcessor.java +++ b/src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/processor/UpdateJavaSyntaxTreeProcessor.java @@ -8,8 +8,7 @@ package org.jd.core.v1.service.converter.classfiletojavasyntax.processor; import org.jd.core.v1.model.javasyntax.CompilationUnit; -import org.jd.core.v1.model.message.Message; -import org.jd.core.v1.model.processor.Processor; +import org.jd.core.v1.model.message.DecompileContext; import org.jd.core.v1.service.converter.classfiletojavasyntax.util.TypeMaker; import org.jd.core.v1.service.converter.classfiletojavasyntax.visitor.UpdateJavaSyntaxTreeStep0Visitor; import org.jd.core.v1.service.converter.classfiletojavasyntax.visitor.UpdateJavaSyntaxTreeStep1Visitor; @@ -21,13 +20,9 @@ * Input: {@link CompilationUnit}
* Output: {@link CompilationUnit}
*/ -public class UpdateJavaSyntaxTreeProcessor implements Processor { - - @Override - public void process(Message message) throws Exception { - TypeMaker typeMaker = message.getHeader("typeMaker"); - CompilationUnit compilationUnit = message.getBody(); +public class UpdateJavaSyntaxTreeProcessor { + public void process(CompilationUnit compilationUnit, TypeMaker typeMaker) throws Exception { new UpdateJavaSyntaxTreeStep0Visitor(typeMaker).visit(compilationUnit); new UpdateJavaSyntaxTreeStep1Visitor(typeMaker).visit(compilationUnit); new UpdateJavaSyntaxTreeStep2Visitor(typeMaker).visit(compilationUnit); diff --git a/src/main/java/org/jd/core/v1/service/deserializer/classfile/DeserializeClassFileProcessor.java b/src/main/java/org/jd/core/v1/service/deserializer/classfile/DeserializeClassFileProcessor.java deleted file mode 100644 index 3c608cb4..00000000 --- a/src/main/java/org/jd/core/v1/service/deserializer/classfile/DeserializeClassFileProcessor.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2008-2019 Emmanuel Dupuy. - * This project is distributed under the GPLv3 license. - * This is a Copyleft license that gives the user the right to use, - * copy and modify the code freely for non-commercial purposes. - */ - -package org.jd.core.v1.service.deserializer.classfile; - -import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.model.classfile.ClassFile; -import org.jd.core.v1.model.message.Message; -import org.jd.core.v1.model.processor.Processor; - -/** - * Create a ClassFile model from a loader and a internal type name.

- * - * Input: -
- * Output: {@link org.jd.core.v1.model.classfile.ClassFile}
- */ -public class DeserializeClassFileProcessor extends ClassFileDeserializer implements Processor { - - @Override - public void process(Message message) throws Exception { - Loader loader = message.getHeader("loader"); - String internalTypeName = message.getHeader("mainInternalTypeName"); - ClassFile classFile = loadClassFile(loader, internalTypeName); - - message.setBody(classFile); - } -} diff --git a/src/main/java/org/jd/core/v1/service/fragmenter/javasyntaxtojavafragment/JavaSyntaxToJavaFragmentProcessor.java b/src/main/java/org/jd/core/v1/service/fragmenter/javasyntaxtojavafragment/JavaSyntaxToJavaFragmentProcessor.java index caa15c87..b542842f 100644 --- a/src/main/java/org/jd/core/v1/service/fragmenter/javasyntaxtojavafragment/JavaSyntaxToJavaFragmentProcessor.java +++ b/src/main/java/org/jd/core/v1/service/fragmenter/javasyntaxtojavafragment/JavaSyntaxToJavaFragmentProcessor.java @@ -10,8 +10,7 @@ import org.jd.core.v1.api.loader.Loader; import org.jd.core.v1.model.javafragment.ImportsFragment; import org.jd.core.v1.model.javasyntax.CompilationUnit; -import org.jd.core.v1.model.message.Message; -import org.jd.core.v1.model.processor.Processor; +import org.jd.core.v1.model.message.DecompileContext; import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.visitor.CompilationUnitVisitor; import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.visitor.SearchImportsVisitor; @@ -21,21 +20,20 @@ * Input: {@link org.jd.core.v1.model.javasyntax.CompilationUnit}
* Output: List<{@link org.jd.core.v1.model.fragment.Fragment}>
*/ -public class JavaSyntaxToJavaFragmentProcessor implements Processor { +public class JavaSyntaxToJavaFragmentProcessor { - public void process(Message message) throws Exception { - Loader loader = message.getHeader("loader"); - String mainInternalTypeName = message.getHeader("mainInternalTypeName"); - int majorVersion = message.getHeader("majorVersion"); - CompilationUnit compilationUnit = message.getBody(); + public void process(CompilationUnit compilationUnit, DecompileContext decompileContext) throws Exception { + Loader loader = decompileContext.getLoader(); + String mainInternalTypeName = decompileContext.getMainInternalTypeName(); + int majorVersion = decompileContext.getMajorVersion(); SearchImportsVisitor importsVisitor = new SearchImportsVisitor(loader, mainInternalTypeName); importsVisitor.visit(compilationUnit); ImportsFragment importsFragment = importsVisitor.getImportsFragment(); - message.setHeader("maxLineNumber", importsVisitor.getMaxLineNumber()); + decompileContext.setMaxLineNumber(importsVisitor.getMaxLineNumber()); CompilationUnitVisitor visitor = new CompilationUnitVisitor(loader, mainInternalTypeName, majorVersion, importsFragment); visitor.visit(compilationUnit); - message.setBody(visitor.getFragments()); + decompileContext.setBody(visitor.getFragments()); } } diff --git a/src/main/java/org/jd/core/v1/service/layouter/LayoutFragmentProcessor.java b/src/main/java/org/jd/core/v1/service/layouter/LayoutFragmentProcessor.java index a0726505..e2c9ca0f 100644 --- a/src/main/java/org/jd/core/v1/service/layouter/LayoutFragmentProcessor.java +++ b/src/main/java/org/jd/core/v1/service/layouter/LayoutFragmentProcessor.java @@ -10,8 +10,7 @@ import org.jd.core.v1.model.fragment.FixedFragment; import org.jd.core.v1.model.fragment.FlexibleFragment; import org.jd.core.v1.model.fragment.Fragment; -import org.jd.core.v1.model.message.Message; -import org.jd.core.v1.model.processor.Processor; +import org.jd.core.v1.model.message.DecompileContext; import org.jd.core.v1.service.layouter.model.Section; import org.jd.core.v1.service.layouter.util.VisitorsHolder; import org.jd.core.v1.service.layouter.visitor.BuildSectionsVisitor; @@ -29,18 +28,17 @@ * Input: List<{@link Fragment}>
* Output: List<{@link Fragment}>
*/ -public class LayoutFragmentProcessor implements Processor { - - @Override - public void process(Message message) throws Exception { - int maxLineNumber = message.getHeader("maxLineNumber", UNKNOWN_LINE_NUMBER); - boolean containsByteCode = message.getHeader("containsByteCode", Boolean.FALSE); - boolean showBridgeAndSynthetic = message.getHeader("showBridgeAndSynthetic", Boolean.FALSE); - Map configuration = message.getHeader("configuration"); +public class LayoutFragmentProcessor { + + public void process(DecompileContext decompileContext) throws Exception { + int maxLineNumber = decompileContext.getMaxLineNumber(); + boolean containsByteCode = decompileContext.isContainsByteCode(); + boolean showBridgeAndSynthetic = decompileContext.isShowBridgeAndSynthetic(); + Map configuration = decompileContext.getConfiguration(); Object realignLineNumbersConfiguration = (configuration == null) ? "false" : configuration.get("realignLineNumbers"); boolean realignLineNumbers = (realignLineNumbersConfiguration == null) ? false : "true".equals(realignLineNumbersConfiguration.toString()); - List fragments = message.getBody(); + List fragments = decompileContext.getBody(); if ((maxLineNumber != UNKNOWN_LINE_NUMBER) && !containsByteCode && !showBridgeAndSynthetic && realignLineNumbers) { BuildSectionsVisitor buildSectionsVisitor = new BuildSectionsVisitor(); diff --git a/src/main/java/org/jd/core/v1/service/tokenizer/javafragmenttotoken/JavaFragmentToTokenProcessor.java b/src/main/java/org/jd/core/v1/service/tokenizer/javafragmenttotoken/JavaFragmentToTokenProcessor.java index 9d77e5a0..f0173007 100644 --- a/src/main/java/org/jd/core/v1/service/tokenizer/javafragmenttotoken/JavaFragmentToTokenProcessor.java +++ b/src/main/java/org/jd/core/v1/service/tokenizer/javafragmenttotoken/JavaFragmentToTokenProcessor.java @@ -8,9 +8,9 @@ package org.jd.core.v1.service.tokenizer.javafragmenttotoken; import org.jd.core.v1.model.javafragment.JavaFragment; -import org.jd.core.v1.model.message.Message; -import org.jd.core.v1.model.processor.Processor; +import org.jd.core.v1.model.token.Token; import org.jd.core.v1.service.tokenizer.javafragmenttotoken.visitor.TokenizeJavaFragmentVisitor; +import org.jd.core.v1.util.DefaultList; import java.util.List; @@ -20,11 +20,9 @@ * Input: List<{@link org.jd.core.v1.model.fragment.Fragment}>
* Output: List<{@link org.jd.core.v1.model.token.Token}>
*/ -public class JavaFragmentToTokenProcessor implements Processor { +public class JavaFragmentToTokenProcessor { - @Override - public void process(Message message) throws Exception { - List fragments = message.getBody(); + public DefaultList process(List fragments) throws Exception { TokenizeJavaFragmentVisitor visitor = new TokenizeJavaFragmentVisitor(fragments.size() * 3); // Create tokens @@ -32,6 +30,6 @@ public void process(Message message) throws Exception { fragment.accept(visitor); } - message.setBody(visitor.getTokens()); + return visitor.getTokens(); } } diff --git a/src/main/java/org/jd/core/v1/service/writer/WriteTokenProcessor.java b/src/main/java/org/jd/core/v1/service/writer/WriteTokenProcessor.java index 2c90ab66..4d4db0f1 100644 --- a/src/main/java/org/jd/core/v1/service/writer/WriteTokenProcessor.java +++ b/src/main/java/org/jd/core/v1/service/writer/WriteTokenProcessor.java @@ -8,8 +8,7 @@ package org.jd.core.v1.service.writer; import org.jd.core.v1.api.printer.Printer; -import org.jd.core.v1.model.message.Message; -import org.jd.core.v1.model.processor.Processor; +import org.jd.core.v1.model.message.DecompileContext; import org.jd.core.v1.model.token.Token; import org.jd.core.v1.service.writer.visitor.PrintTokenVisitor; @@ -21,16 +20,15 @@ * Input: List<{@link org.jd.core.v1.model.token.Token}>
* Output: -
*/ -public class WriteTokenProcessor implements Processor { +public class WriteTokenProcessor { - @Override - public void process(Message message) throws Exception { - Printer printer = message.getHeader("printer"); - List tokens = message.getBody(); + public void process(DecompileContext decompileContext) throws Exception { + Printer printer = decompileContext.getPrinter(); + List tokens = decompileContext.getTokens(); PrintTokenVisitor visitor = new PrintTokenVisitor(); - int maxLineNumber = message.getHeader("maxLineNumber"); - int majorVersion = message.getHeader("majorVersion"); - int minorVersion = message.getHeader("minorVersion"); + int maxLineNumber = decompileContext.getMaxLineNumber(); + int majorVersion = decompileContext.getMajorVersion(); + int minorVersion = decompileContext.getMinorVersion(); printer.start(maxLineNumber, majorVersion, minorVersion); visitor.start(printer, tokens); diff --git a/src/test/java/org/jd/core/v1/AbstractJdTest.java b/src/test/java/org/jd/core/v1/AbstractJdTest.java new file mode 100644 index 00000000..21c6a227 --- /dev/null +++ b/src/test/java/org/jd/core/v1/AbstractJdTest.java @@ -0,0 +1,72 @@ +package org.jd.core.v1; + +import junit.framework.TestCase; +import org.jd.core.v1.api.loader.Loader; +import org.jd.core.v1.api.printer.Printer; +import org.jd.core.v1.model.classfile.ClassFile; +import org.jd.core.v1.model.javasyntax.CompilationUnit; +import org.jd.core.v1.model.message.DecompileContext; +import org.jd.core.v1.model.token.Token; +import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; +import org.jd.core.v1.service.deserializer.classfile.ClassFileDeserializer; +import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; +import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; +import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; +import org.jd.core.v1.service.writer.WriteTokenProcessor; +import org.jd.core.v1.util.DefaultList; + +import java.util.Collections; +import java.util.Map; + +public abstract class AbstractJdTest extends TestCase { + protected ClassFileDeserializer deserializer = new ClassFileDeserializer(); + protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); + protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); + protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); + protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); + protected WriteTokenProcessor writer = new WriteTokenProcessor(); + + protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setLoader(loader); + decompileContext.setPrinter(printer); + decompileContext.setMainInternalTypeName(internalTypeName); + decompileContext.setConfiguration(configuration); + + ClassFile classFile = deserializer.loadClassFile(loader, internalTypeName); + decompileContext.setClassFile(classFile); + + CompilationUnit compilationUnit = converter.process(decompileContext); + fragmenter.process(compilationUnit, decompileContext); + layouter.process(decompileContext); + DefaultList tokens = tokenizer.process(decompileContext.getBody()); + decompileContext.setTokens(tokens); + writer.process(decompileContext); + + String source = printer.toString(); + + printSource(source); + + return source; + } + + protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { + return decompile(loader, printer, internalTypeName, Collections.emptyMap()); + } + + protected String decompileSuccess(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { + String source = decompile(loader, printer, internalTypeName, configuration); + assertTrue(source.indexOf("// Byte code:") == -1); + return source; + } + + protected String decompileSuccess(Loader loader, Printer printer, String internalTypeName) throws Exception { + return decompileSuccess(loader, printer, internalTypeName, Collections.emptyMap()); + } + + protected void printSource(String source) { + System.out.println("- - - - - - - - "); + System.out.println(source); + System.out.println("- - - - - - - - "); + } +} diff --git a/src/test/java/org/jd/core/v1/AnnotationConverterTest.java b/src/test/java/org/jd/core/v1/AnnotationConverterTest.java index e0c943b4..9f94566d 100644 --- a/src/test/java/org/jd/core/v1/AnnotationConverterTest.java +++ b/src/test/java/org/jd/core/v1/AnnotationConverterTest.java @@ -11,11 +11,14 @@ import org.jd.core.v1.loader.ZipLoader; import org.jd.core.v1.model.classfile.ClassFile; import org.jd.core.v1.model.classfile.attribute.Annotations; -import org.jd.core.v1.model.javasyntax.reference.*; -import org.jd.core.v1.model.message.Message; +import org.jd.core.v1.model.javasyntax.reference.AnnotationReference; +import org.jd.core.v1.model.javasyntax.reference.AnnotationReferences; +import org.jd.core.v1.model.javasyntax.reference.BaseAnnotationReference; +import org.jd.core.v1.model.javasyntax.reference.ElementValuePairs; +import org.jd.core.v1.model.message.DecompileContext; import org.jd.core.v1.service.converter.classfiletojavasyntax.util.AnnotationConverter; import org.jd.core.v1.service.converter.classfiletojavasyntax.util.TypeMaker; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; +import org.jd.core.v1.service.deserializer.classfile.ClassFileDeserializer; import org.junit.Test; import java.io.InputStream; @@ -29,15 +32,14 @@ public void test() throws Exception { ZipLoader loader = new ZipLoader(is); TypeMaker typeMaker = new TypeMaker(loader); AnnotationConverter converter = new AnnotationConverter(typeMaker); - DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); + ClassFileDeserializer deserializer = new ClassFileDeserializer(); - Message message = new Message(); - message.setHeader("mainInternalTypeName", "org/jd/core/test/AnnotatedClass"); - message.setHeader("loader", loader); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setMainInternalTypeName("org/jd/core/test/AnnotatedClass"); + decompileContext.setLoader(loader); - deserializer.process(message); - - ClassFile classFile = message.getBody(); + ClassFile classFile = deserializer.loadClassFile(loader, decompileContext.getMainInternalTypeName()); + decompileContext.setClassFile(classFile); // Check class assertNotNull(classFile); diff --git a/src/test/java/org/jd/core/v1/CfrTest.java b/src/test/java/org/jd/core/v1/CfrTest.java index 6140bd2c..6cf2f3ba 100644 --- a/src/test/java/org/jd/core/v1/CfrTest.java +++ b/src/test/java/org/jd/core/v1/CfrTest.java @@ -7,102 +7,31 @@ package org.jd.core.v1; -import junit.framework.TestCase; -import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; import org.jd.core.v1.loader.ClassPathLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; +import org.jd.core.v1.stub.FloatingPointCasting; import org.junit.Test; import java.util.Collections; -import java.util.Map; -public class CfrTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class CfrTest extends AbstractJdTest { @Test // https://github.com/java-decompiler/jd-core/issues/34 public void testFloatingPointCasting() throws Exception { - class FloatingPointCasting { - private final long l = 9223372036854775806L; - private final Long L = 9223372036854775806L; - - long getLong() { - return 9223372036854775806L; - } - - void test1() { - long b = (long) (double) getLong(); - System.out.println(b == getLong()); // Prints "false" - } - void test2() { - long b = (long) (double) l; - System.out.println(b == l); // Prints "false" - } - void test3() { - long b = (long) (double) L; - System.out.println(b == L); // Prints "false" - } - } - String internalClassName = FloatingPointCasting.class.getName().replace('.', '/'); - String source = decompile(new ClassPathLoader(), new PlainTextPrinter(), internalClassName); + String source = decompile(new ClassPathLoader(), new PlainTextPrinter(), internalClassName, Collections.emptyMap()); + assertTrue(source.indexOf("// Byte code:") == -1); // Check decompiled source code - assertTrue(source.matches(PatternMaker.make(": 51 */", "long b = (long)(double)"))); - assertTrue(source.matches(PatternMaker.make(": 55 */", "long b = Long.MAX_VALUE"))); - assertTrue(source.matches(PatternMaker.make(": 59 */", "long b = (long)(double)"))); + assertTrue(source.matches(PatternMaker.make(": 12 */", "long b = (long)(double)"))); + assertTrue(source.matches(PatternMaker.make(": 16 */", "long b = Long.MAX_VALUE"))); + assertTrue(source.matches(PatternMaker.make(": 20 */", "long b = (long)(double)"))); // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.8", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/ClassFileDeserializerTest.java b/src/test/java/org/jd/core/v1/ClassFileDeserializerTest.java index c8aa3fcf..cc12f566 100644 --- a/src/test/java/org/jd/core/v1/ClassFileDeserializerTest.java +++ b/src/test/java/org/jd/core/v1/ClassFileDeserializerTest.java @@ -8,7 +8,6 @@ package org.jd.core.v1; import junit.framework.TestCase; - import org.jd.core.v1.api.loader.Loader; import org.jd.core.v1.api.loader.LoaderException; import org.jd.core.v1.loader.ZipLoader; @@ -19,9 +18,8 @@ import org.jd.core.v1.model.classfile.attribute.ElementValuePrimitiveType; import org.jd.core.v1.model.classfile.constant.ConstantInteger; import org.jd.core.v1.model.classfile.constant.ConstantUtf8; -import org.jd.core.v1.model.message.Message; +import org.jd.core.v1.model.message.DecompileContext; import org.jd.core.v1.service.deserializer.classfile.ClassFileDeserializer; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; import org.junit.Test; import java.io.InputStream; @@ -55,15 +53,14 @@ public byte[] load(String internalName) throws LoaderException { public void testAnnotatedClass() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); ZipLoader loader = new ZipLoader(is); - DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - - Message message = new Message(); - message.setHeader("mainInternalTypeName", "org/jd/core/test/AnnotatedClass"); - message.setHeader("loader", loader); + ClassFileDeserializer deserializer = new ClassFileDeserializer(); - deserializer.process(message); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setMainInternalTypeName("org/jd/core/test/AnnotatedClass"); + decompileContext.setLoader(loader); - ClassFile classFile = message.getBody(); + ClassFile classFile = deserializer.loadClassFile(loader, decompileContext.getMainInternalTypeName()); + decompileContext.setClassFile(classFile); // Check class assertNotNull(classFile); diff --git a/src/test/java/org/jd/core/v1/ControlFlowGraphTest.java b/src/test/java/org/jd/core/v1/ControlFlowGraphTest.java index 6740b6d2..53305a46 100644 --- a/src/test/java/org/jd/core/v1/ControlFlowGraphTest.java +++ b/src/test/java/org/jd/core/v1/ControlFlowGraphTest.java @@ -9,20 +9,34 @@ import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; +import org.jd.core.v1.cfg.ControlFlowGraphPlantUMLWriter; import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; +import org.jd.core.v1.model.classfile.ClassFile; import org.jd.core.v1.model.classfile.Method; import org.jd.core.v1.model.javasyntax.CompilationUnit; -import org.jd.core.v1.model.javasyntax.declaration.*; -import org.jd.core.v1.model.message.Message; +import org.jd.core.v1.model.javasyntax.declaration.AnnotationDeclaration; +import org.jd.core.v1.model.javasyntax.declaration.BaseTypeDeclaration; +import org.jd.core.v1.model.javasyntax.declaration.BodyDeclaration; +import org.jd.core.v1.model.javasyntax.declaration.EnumDeclaration; +import org.jd.core.v1.model.javasyntax.declaration.InterfaceDeclaration; +import org.jd.core.v1.model.message.DecompileContext; import org.jd.core.v1.service.converter.classfiletojavasyntax.model.cfg.BasicBlock; import org.jd.core.v1.service.converter.classfiletojavasyntax.model.cfg.ControlFlowGraph; import org.jd.core.v1.service.converter.classfiletojavasyntax.model.cfg.Loop; -import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.*; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileBodyDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileConstructorDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileMemberDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileMethodDeclaration; +import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileStaticInitializerDeclaration; import org.jd.core.v1.service.converter.classfiletojavasyntax.processor.ConvertClassFileProcessor; -import org.jd.core.v1.service.converter.classfiletojavasyntax.util.*; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.cfg.ControlFlowGraphPlantUMLWriter; +import org.jd.core.v1.service.converter.classfiletojavasyntax.util.ControlFlowGraphGotoReducer; +import org.jd.core.v1.service.converter.classfiletojavasyntax.util.ControlFlowGraphLoopReducer; +import org.jd.core.v1.service.converter.classfiletojavasyntax.util.ControlFlowGraphMaker; +import org.jd.core.v1.service.converter.classfiletojavasyntax.util.ControlFlowGraphReducer; +import org.jd.core.v1.service.converter.classfiletojavasyntax.util.TypeMaker; +import org.jd.core.v1.service.converter.classfiletojavasyntax.util.WatchDog; +import org.jd.core.v1.service.deserializer.classfile.ClassFileDeserializer; import org.junit.Test; import java.io.FileInputStream; @@ -35,7 +49,7 @@ import static org.jd.core.v1.service.converter.classfiletojavasyntax.model.cfg.BasicBlock.*; public class ControlFlowGraphTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); + protected ClassFileDeserializer deserializer = new ClassFileDeserializer(); protected ConvertClassFileProcessor converter = new ConvertClassFileProcessor(); protected ClassPathLoader loader = new ClassPathLoader(); protected TypeMaker typeMaker = new TypeMaker(loader); @@ -2651,15 +2665,15 @@ protected Method searchMethod(InputStream is, String internalTypeName, String me } protected Method searchMethod(Loader loader, TypeMaker typeMaker, String internalTypeName, String methodName, String methodDescriptor) throws Exception { - Message message = new Message(); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("loader", loader); - message.setHeader("typeMaker", typeMaker); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setMainInternalTypeName(internalTypeName); + decompileContext.setLoader(loader); + decompileContext.setTypeMaker(typeMaker); - deserializer.process(message); - converter.process(message); + ClassFile classFile = deserializer.loadClassFile(loader, internalTypeName); + decompileContext.setClassFile(classFile); - CompilationUnit compilationUnit = message.getBody(); + CompilationUnit compilationUnit = converter.process(classFile, typeMaker, decompileContext); assertNotNull(compilationUnit); diff --git a/src/test/java/org/jd/core/v1/JarFileToJavaSourceTest.java b/src/test/java/org/jd/core/v1/JarFileToJavaSourceTest.java index 0e76de9c..e3ff0a8e 100644 --- a/src/test/java/org/jd/core/v1/JarFileToJavaSourceTest.java +++ b/src/test/java/org/jd/core/v1/JarFileToJavaSourceTest.java @@ -7,34 +7,24 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; +import org.jd.core.v1.model.classfile.ClassFile; +import org.jd.core.v1.model.javasyntax.CompilationUnit; +import org.jd.core.v1.model.message.DecompileContext; +import org.jd.core.v1.model.token.Token; import org.jd.core.v1.printer.PlainTextPrinter; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.jd.core.v1.util.DefaultList; import org.junit.Test; import java.io.FileInputStream; import java.io.InputStream; import java.nio.file.Paths; -import java.util.*; +import java.util.HashMap; +import java.util.Map; -public class JarFileToJavaSourceTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JarFileToJavaSourceTest extends AbstractJdTest { @Test public void testCommonsCodec() throws Exception { @@ -146,10 +136,10 @@ protected void test(InputStream inputStream) throws Exception { configuration.put("realignLineNumbers", Boolean.TRUE); - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setLoader(loader); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); long time0 = System.currentTimeMillis(); @@ -160,19 +150,22 @@ protected void test(InputStream inputStream) throws Exception { // TODO DEBUG if (!internalTypeName.endsWith("/Debug")) continue; //if (!internalTypeName.endsWith("/MapUtils")) continue; - message.setHeader("mainInternalTypeName", internalTypeName); + decompileContext.setMainInternalTypeName(internalTypeName); printer.init(); fileCounter++; try { // Decompile class - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + ClassFile classFile = deserializer.loadClassFile(loader, internalTypeName); + decompileContext.setClassFile(classFile); + + CompilationUnit compilationUnit = converter.process(decompileContext); + fragmenter.process(compilationUnit, decompileContext); + layouter.process(decompileContext); + DefaultList tokens = tokenizer.process(decompileContext.getBody()); + decompileContext.setTokens(tokens); + writer.process(decompileContext); } catch (AssertionError e) { String msg = (e.getMessage() == null) ? "" : e.getMessage(); Integer counter = statistics.get(msg); diff --git a/src/test/java/org/jd/core/v1/Java9InterfaceTest.java b/src/test/java/org/jd/core/v1/Java9InterfaceTest.java index bbfd1766..780b583f 100644 --- a/src/test/java/org/jd/core/v1/Java9InterfaceTest.java +++ b/src/test/java/org/jd/core/v1/Java9InterfaceTest.java @@ -7,43 +7,24 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; import java.io.InputStream; -import java.util.Collections; -import java.util.Map; -public class Java9InterfaceTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class Java9InterfaceTest extends AbstractJdTest { @Test public void testJdk901InterfaceWithDefaultMethods() throws Exception { String internalClassName = "org/jd/core/test/InterfaceWithDefaultMethods"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-9.0.1.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make("public interface InterfaceWithDefaultMethods"))); @@ -71,37 +52,4 @@ public void testJdk901InterfaceWithDefaultMethods() throws Exception { } } } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaAnnotationTest.java b/src/test/java/org/jd/core/v1/JavaAnnotationTest.java index d2b76ed1..5fd109dc 100644 --- a/src/test/java/org/jd/core/v1/JavaAnnotationTest.java +++ b/src/test/java/org/jd/core/v1/JavaAnnotationTest.java @@ -7,43 +7,23 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; import java.io.InputStream; -import java.util.Collections; -import java.util.Map; - -public class JavaAnnotationTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JavaAnnotationTest extends AbstractJdTest { @Test public void testJdk170AnnotatedClass() throws Exception { String internalClassName = "org/jd/core/test/AnnotatedClass"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.indexOf("@Quality(Quality.Level.HIGH)") != -1); @@ -76,7 +56,7 @@ public void testJdk170AnnotationAuthor() throws Exception { String internalClassName = "org/jd/core/test/annotation/Author"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make("/* 3: 0 */", "public @interface Author"))); @@ -96,7 +76,7 @@ public void testJdk170AnnotationValue() throws Exception { String internalClassName = "org/jd/core/test/annotation/Value"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make("/* 8: 0 */", "@Retention(RetentionPolicy.RUNTIME)"))); @@ -110,37 +90,4 @@ public void testJdk170AnnotationValue() throws Exception { // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.7", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaAnonymousClassTest.java b/src/test/java/org/jd/core/v1/JavaAnonymousClassTest.java index c6d2a2fa..df3df21c 100644 --- a/src/test/java/org/jd/core/v1/JavaAnonymousClassTest.java +++ b/src/test/java/org/jd/core/v1/JavaAnonymousClassTest.java @@ -7,44 +7,26 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; import java.io.InputStream; import java.util.Collections; import java.util.Map; -public class JavaAnonymousClassTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); - +public class JavaAnonymousClassTest extends AbstractJdTest { @Test public void testJdk150AnonymousClass() throws Exception { String internalClassName = "org/jd/core/test/AnonymousClass"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.5.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 21 */", "Object object = new Object()"))); @@ -82,7 +64,7 @@ public void testJdk170AnonymousClass() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 21 */", "Object obj = new Object()"))); @@ -118,37 +100,4 @@ public void testJdk170AnonymousClass() throws Exception { new JavaSourceFileObject("org/jd/core/test/annotation/Name", "package org.jd.core.test.annotation; public @interface Name {String value();}") )); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaArrayTest.java b/src/test/java/org/jd/core/v1/JavaArrayTest.java index 565302da..2fefa771 100644 --- a/src/test/java/org/jd/core/v1/JavaArrayTest.java +++ b/src/test/java/org/jd/core/v1/JavaArrayTest.java @@ -7,39 +7,21 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; +import org.jd.core.v1.stub.InitializedArrayInTernaryOperator; import org.junit.Test; -import java.io.FileInputStream; import java.io.InputStream; -import java.nio.file.Paths; import java.util.Collections; -import java.util.Map; - -public class JavaArrayTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JavaArrayTest extends AbstractJdTest { @Test public void testJdk150Array() throws Exception { String internalClassName = "org/jd/core/test/Array"; @@ -90,76 +72,25 @@ public void testJdk170Array() throws Exception { @Test public void testInitializedArrayInTernaryOperator() throws Exception { - class InitializedArrayInTernaryOperator { - Class[] test0(int i) { - return (i == 0) ? new Class[] { Object.class } : null; - } - Class[] test2(int i) { - return (i == 0) ? new Class[] { Object.class, String.class, Number.class } : null; - } - Class[][] test3(int i) { - return (i == 0) ? new Class[][] { { Object.class }, { String.class, Number.class} } : null; - } - Class[] test4(int i) { - return (i == 0) ? null : new Class[] { Object.class }; - } - Class[] test5(int i) { - return (i == 0) ? null : new Class[] { Object.class, String.class, Number.class }; - } - Class[][] test6(int i) { - return (i == 0) ? null : new Class[][] { { Object.class }, { String.class, Number.class} }; - } - Class[] test7(int i) { - return (i == 0) ? new Class[] { Object.class } : new Class[] { String.class, Number.class }; - } - } - String internalClassName = InitializedArrayInTernaryOperator.class.getName().replace('.', '/'); String source = decompile(new ClassPathLoader(), new PlainTextPrinter(), internalClassName); // Check decompiled source code - assertTrue(source.matches(PatternMaker.make(": 95 */", "return (i == 0) ? new Class[] { Object.class } : null;"))); - assertTrue(source.matches(PatternMaker.make(": 98 */", "return (i == 0) ? new Class[] { Object.class, String.class, Number.class } : null;"))); - assertTrue(source.matches(PatternMaker.make(": 101 */", "return (i == 0) ? new Class[][] { { Object.class }, { String.class, Number.class} } : null;"))); - assertTrue(source.matches(PatternMaker.make(": 104 */", "return (i == 0) ? null : new Class[] { Object.class };"))); - assertTrue(source.matches(PatternMaker.make(": 107 */", "return (i == 0) ? null : new Class[] { Object.class, String.class, Number.class };"))); - assertTrue(source.matches(PatternMaker.make(": 110 */", "return (i == 0) ? null : new Class[][] { { Object.class }, { String.class, Number.class} };"))); - assertTrue(source.matches(PatternMaker.make(": 113 */", "return (i == 0) ? new Class[] { Object.class } : new Class[] { String.class, Number.class };"))); + assertTrue(source.matches(PatternMaker.make(": 5 */", "return (i == 0) ? new Class[] { Object.class } : null;"))); + assertTrue(source.matches(PatternMaker.make(": 8 */", "return (i == 0) ? new Class[] { Object.class, String.class, Number.class } : null;"))); + assertTrue(source.matches(PatternMaker.make(": 11 */", "return (i == 0) ? new Class[][] { { Object.class }, { String.class, Number.class } } : null;"))); + assertTrue(source.matches(PatternMaker.make(": 14 */", "return (i == 0) ? null : new Class[] { Object.class };"))); + assertTrue(source.matches(PatternMaker.make(": 17 */", "return (i == 0) ? null : new Class[] { Object.class, String.class, Number.class };"))); + assertTrue(source.matches(PatternMaker.make(": 20 */", "return (i == 0) ? null : new Class[][] { { Object.class }, { String.class, Number.class} };"))); + assertTrue(source.matches(PatternMaker.make(": 23 */", "return (i == 0) ? new Class[] { Object.class } : new Class[] { String.class, Number.class };"))); // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.8", new JavaSourceFileObject(internalClassName, source))); } protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - + String source = decompile(loader, printer, internalTypeName, Collections.emptyMap()); assertTrue(source.indexOf("// Byte code:") == -1); - return source; } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaAssertTest.java b/src/test/java/org/jd/core/v1/JavaAssertTest.java index fbffee1f..f6bca1a6 100644 --- a/src/test/java/org/jd/core/v1/JavaAssertTest.java +++ b/src/test/java/org/jd/core/v1/JavaAssertTest.java @@ -7,36 +7,19 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; import java.io.InputStream; import java.util.Collections; import java.util.Map; -public class JavaAssertTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JavaAssertTest extends AbstractJdTest { @Test public void testJdk170Assert() throws Exception { @@ -44,7 +27,7 @@ public void testJdk170Assert() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make("/* 16: 16 */", "assert false : \"false\";"))); @@ -65,7 +48,7 @@ public void testJdk150Assert() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.5.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make("/* 16: 16 */", "assert false : \"false\";"))); @@ -79,37 +62,4 @@ public void testJdk150Assert() throws Exception { // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.5", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaAutoboxingTest.java b/src/test/java/org/jd/core/v1/JavaAutoboxingTest.java index b05ab2db..56940927 100644 --- a/src/test/java/org/jd/core/v1/JavaAutoboxingTest.java +++ b/src/test/java/org/jd/core/v1/JavaAutoboxingTest.java @@ -7,86 +7,29 @@ package org.jd.core.v1; -import junit.framework.TestCase; -import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; import org.jd.core.v1.loader.ClassPathLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; +import org.jd.core.v1.stub.AutoboxingAndUnboxing; import org.junit.Test; import java.util.Collections; -import java.util.Map; - -public class JavaAutoboxingTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JavaAutoboxingTest extends AbstractJdTest { @Test // https://github.com/java-decompiler/jd-core/issues/14 public void testAutoboxing() throws Exception { - class AutoboxingAndUnboxing { - void test() { - Integer intObj = 10; - int i = intObj; - } - } - String internalClassName = AutoboxingAndUnboxing.class.getName().replace('.', '/'); - String source = decompile(new ClassPathLoader(), new PlainTextPrinter(), internalClassName); + String source = decompile(new ClassPathLoader(), new PlainTextPrinter(), internalClassName, Collections.emptyMap()); + assertTrue(source.indexOf("// Byte code:") == -1); // Check decompiled source code - assertTrue(source.matches(PatternMaker.make(": 44 */", "Integer intObj = 10;"))); - assertTrue(source.matches(PatternMaker.make(": 45 */", "int i = intObj;"))); + assertTrue(source.matches(PatternMaker.make(": 5 */", "Integer intObj = 10;"))); + assertTrue(source.matches(PatternMaker.make(": 6 */", "int i = intObj;"))); // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.8", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaBasicTest.java b/src/test/java/org/jd/core/v1/JavaBasicTest.java index 6221955b..757db51b 100644 --- a/src/test/java/org/jd/core/v1/JavaBasicTest.java +++ b/src/test/java/org/jd/core/v1/JavaBasicTest.java @@ -7,21 +7,12 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.jd.core.v1.regex.PatternMaker; import org.junit.Test; @@ -29,14 +20,7 @@ import java.util.Collections; import java.util.Map; -public class JavaBasicTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JavaBasicTest extends AbstractJdTest { @Test public void testJdk170Basic() throws Exception { @@ -44,7 +28,7 @@ public void testJdk170Basic() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.indexOf("serialVersionUID = 9506606333927794L;") != -1); @@ -111,7 +95,7 @@ public void testJdk170NoDebugInfoBasic() throws Exception { String internalClassName = "org/jd/core/test/Basic"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0-no-debug-info.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make("System.out.println(\"hello\");"))); @@ -143,7 +127,7 @@ public void testJdk170Constructors() throws Exception { String internalClassName = "org/jd/core/test/Constructors"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 28 */", "this.short123 = 1;"))); @@ -164,7 +148,7 @@ public void testJdk170Interface() throws Exception { String internalClassName = "org/jd/core/test/Interface"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make("public interface Interface", "extends Serializable"))); @@ -179,7 +163,7 @@ public void testJdk118Basic() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.1.8.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 43 */", "Class class3 = String.class, class2 = class3, class1 = class2;"))); @@ -199,7 +183,7 @@ public void testJdk142Basic() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.4.2.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 18 */", "protected short short56 = 56;"))); @@ -222,7 +206,7 @@ public void testJdk901Basic() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-9.0.1.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 18 */", "protected short short56 = 56;"))); @@ -245,7 +229,7 @@ public void testJdk1002Basic() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-10.0.2.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 18 */", "protected short short56 = 56;"))); @@ -267,7 +251,7 @@ public void testJdk1002Basic() throws Exception { public void testAnnotationUtils() throws Exception { String internalClassName = "org/apache/commons/lang3/AnnotationUtils"; Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(new ClassPathLoader(), new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(new ClassPathLoader(), new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.indexOf("setDefaultFullDetail(true);") != -1); @@ -275,37 +259,4 @@ public void testAnnotationUtils() throws Exception { // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.8", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaEnumTest.java b/src/test/java/org/jd/core/v1/JavaEnumTest.java index 24a7b26f..36cbd0f1 100644 --- a/src/test/java/org/jd/core/v1/JavaEnumTest.java +++ b/src/test/java/org/jd/core/v1/JavaEnumTest.java @@ -7,38 +7,19 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; -import java.io.FileInputStream; import java.io.InputStream; -import java.nio.file.Paths; import java.util.Collections; import java.util.Map; -public class JavaEnumTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JavaEnumTest extends AbstractJdTest { @Test public void testJdk170Enum() throws Exception { @@ -46,7 +27,7 @@ public void testJdk170Enum() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 5 */", "SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;"))); @@ -76,7 +57,7 @@ public void testJdk901Enum() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-9.0.1.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 5 */", "SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;"))); @@ -106,7 +87,7 @@ public void testJdk1002Enum() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-10.0.2.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 5 */", "SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;"))); @@ -129,37 +110,4 @@ public void testJdk1002Enum() throws Exception { // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.8", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaFragmentToTokenTest.java b/src/test/java/org/jd/core/v1/JavaFragmentToTokenTest.java index ff185694..fa6ecd8e 100644 --- a/src/test/java/org/jd/core/v1/JavaFragmentToTokenTest.java +++ b/src/test/java/org/jd/core/v1/JavaFragmentToTokenTest.java @@ -10,7 +10,7 @@ import junit.framework.TestCase; import org.jd.core.v1.model.fragment.Fragment; import org.jd.core.v1.model.javafragment.*; -import org.jd.core.v1.model.message.Message; +import org.jd.core.v1.model.message.DecompileContext; import org.jd.core.v1.model.token.*; import org.jd.core.v1.printer.PlainTextMetaPrinter; import org.jd.core.v1.printer.PlainTextPrinter; @@ -54,17 +54,17 @@ public class JavaFragmentToTokenTest extends TestCase { @Test public void testIfReturn_0() throws Exception { - Message message = createMessageToTestIfReturn(0, 0); + DecompileContext decompileContext = createMessageToTestIfReturn(0, 0); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 0); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(0); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -75,19 +75,19 @@ public void testIfReturn_0() throws Exception { @Test public void testIfReturn_1_3() throws Exception { - Message message = createMessageToTestIfReturn(1, 3); + DecompileContext decompileContext = createMessageToTestIfReturn(1, 3); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 3); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(3); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -100,19 +100,19 @@ public void testIfReturn_1_3() throws Exception { @Test public void testIfReturn_1_4() throws Exception { - Message message = createMessageToTestIfReturn(1, 4); + DecompileContext decompileContext = createMessageToTestIfReturn(1, 4); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 4); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(4); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -125,17 +125,17 @@ public void testIfReturn_1_4() throws Exception { @Test public void testIfAssignation_0() throws Exception { - Message message = createMessageToTestIfAssignation(0, 0, 0); + DecompileContext decompileContext = createMessageToTestIfAssignation(0, 0, 0); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 0); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(0); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -146,19 +146,19 @@ public void testIfAssignation_0() throws Exception { @Test public void testIfAssignation_1_2_3() throws Exception { - Message message = createMessageToTestIfAssignation(1, 2, 3); + DecompileContext decompileContext = createMessageToTestIfAssignation(1, 2, 3); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 3); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(3); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -172,19 +172,19 @@ public void testIfAssignation_1_2_3() throws Exception { @Test public void testIfAssignation_1_3_5() throws Exception { - Message message = createMessageToTestIfAssignation(1, 3, 5); + DecompileContext decompileContext = createMessageToTestIfAssignation(1, 3, 5); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 5); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(5); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -198,17 +198,17 @@ public void testIfAssignation_1_3_5() throws Exception { @Test public void testClassAndFieldDeclarationWithoutImports_0() throws Exception { - Message message = createMessageToTestClassDeclarationWithoutImports(0); + DecompileContext decompileContext = createMessageToTestClassDeclarationWithoutImports(0); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 0); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(0); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -219,17 +219,17 @@ public void testClassAndFieldDeclarationWithoutImports_0() throws Exception { @Test public void testClassAndFieldDeclaration_0() throws Exception { - Message message = createMessageToTestClassDeclaration(0); + DecompileContext decompileContext = createMessageToTestClassDeclaration(0); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 0); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(0); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -240,19 +240,19 @@ public void testClassAndFieldDeclaration_0() throws Exception { @Test public void testClassAndFieldDeclaration_1() throws Exception { - Message message = createMessageToTestClassDeclaration(1); + DecompileContext decompileContext = createMessageToTestClassDeclaration(1); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 1); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(1); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -264,19 +264,19 @@ public void testClassAndFieldDeclaration_1() throws Exception { @Test public void testClassAndFieldDeclaration_2() throws Exception { - Message message = createMessageToTestClassDeclaration(2); + DecompileContext decompileContext = createMessageToTestClassDeclaration(2); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 2); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(2); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -288,19 +288,19 @@ public void testClassAndFieldDeclaration_2() throws Exception { @Test public void testClassAndFieldDeclaration_3() throws Exception { - Message message = createMessageToTestClassDeclaration(3); + DecompileContext decompileContext = createMessageToTestClassDeclaration(3); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 3); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(3); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -314,19 +314,19 @@ public void testClassAndFieldDeclaration_3() throws Exception { @Test public void testClassAndFieldDeclaration_4() throws Exception { - Message message = createMessageToTestClassDeclaration(4); + DecompileContext decompileContext = createMessageToTestClassDeclaration(4); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 4); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(4); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -340,19 +340,19 @@ public void testClassAndFieldDeclaration_4() throws Exception { @Test public void testClassAndFieldDeclaration_5() throws Exception { - Message message = createMessageToTestClassDeclaration(5); + DecompileContext decompileContext = createMessageToTestClassDeclaration(5); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 5); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(5); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -365,19 +365,19 @@ public void testClassAndFieldDeclaration_5() throws Exception { @Test public void testClassAndFieldDeclaration_6() throws Exception { - Message message = createMessageToTestClassDeclaration(6); + DecompileContext decompileContext = createMessageToTestClassDeclaration(6); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 6); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(6); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -391,17 +391,17 @@ public void testClassAndFieldDeclaration_6() throws Exception { @Test public void testClassAndFieldDeclaration_7() throws Exception { - Message message = createMessageToTestClassDeclaration(7); + DecompileContext decompileContext = createMessageToTestClassDeclaration(7); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 7); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(7); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -416,19 +416,19 @@ public void testClassAndFieldDeclaration_7() throws Exception { @Test public void testClassAndFieldDeclaration_8() throws Exception { - Message message = createMessageToTestClassDeclaration(8); + DecompileContext decompileContext = createMessageToTestClassDeclaration(8); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 8); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(8); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -443,19 +443,19 @@ public void testClassAndFieldDeclaration_8() throws Exception { @Test public void testClassAndFieldDeclaration_9() throws Exception { - Message message = createMessageToTestClassDeclaration(9); + DecompileContext decompileContext = createMessageToTestClassDeclaration(9); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 9); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(9); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -470,20 +470,20 @@ public void testClassAndFieldDeclaration_9() throws Exception { @Test public void testClassAndFieldDeclaration_10() throws Exception { - Message message = createMessageToTestClassDeclaration(10); + DecompileContext decompileContext = createMessageToTestClassDeclaration(10); //PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); PlainTextPrinter printer = new PlainTextPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 10); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(10); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -498,19 +498,19 @@ public void testClassAndFieldDeclaration_10() throws Exception { @Test public void testClassAndMethodDeclaration_3() throws Exception { - Message message = createMessageToTestClassAndMethodDeclaration(3); + DecompileContext decompileContext = createMessageToTestClassAndMethodDeclaration(3); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 3); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(3); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -523,19 +523,19 @@ public void testClassAndMethodDeclaration_3() throws Exception { @Test public void testClassAndMethodDeclaration_4() throws Exception { - Message message = createMessageToTestClassAndMethodDeclaration(4); + DecompileContext decompileContext = createMessageToTestClassAndMethodDeclaration(4); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 4); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(4); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -548,17 +548,17 @@ public void testClassAndMethodDeclaration_4() throws Exception { @Test public void testClassAndMethodDeclaration_8() throws Exception { - Message message = createMessageToTestClassAndMethodDeclaration(8); + DecompileContext decompileContext = createMessageToTestClassAndMethodDeclaration(8); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 8); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(8); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -573,19 +573,19 @@ public void testClassAndMethodDeclaration_8() throws Exception { @Test public void testClassAndMethodDeclaration_9() throws Exception { - Message message = createMessageToTestClassAndMethodDeclaration(9); + DecompileContext decompileContext = createMessageToTestClassAndMethodDeclaration(9); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 9); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(9); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -600,20 +600,20 @@ public void testClassAndMethodDeclaration_9() throws Exception { @Test public void testClassAndMethodDeclaration_10() throws Exception { - Message message = createMessageToTestClassAndMethodDeclaration(10); + DecompileContext decompileContext = createMessageToTestClassAndMethodDeclaration(10); //PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); PlainTextPrinter printer = new PlainTextPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 10); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(10); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -631,20 +631,20 @@ public void testClassAndMethodDeclaration_10() throws Exception { @Test public void testClassAndMethodDeclaration_11() throws Exception { - Message message = createMessageToTestClassAndMethodDeclaration(11); + DecompileContext decompileContext = createMessageToTestClassAndMethodDeclaration(11); //PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); PlainTextPrinter printer = new PlainTextPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 11); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(11); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -662,20 +662,20 @@ public void testClassAndMethodDeclaration_11() throws Exception { @Test public void testClassAndMethodDeclaration_12() throws Exception { - Message message = createMessageToTestClassAndMethodDeclaration(12); + DecompileContext decompileContext = createMessageToTestClassAndMethodDeclaration(12); //PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); PlainTextPrinter printer = new PlainTextPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 12); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(12); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -693,20 +693,20 @@ public void testClassAndMethodDeclaration_12() throws Exception { @Test public void testClassAndMethodDeclaration_14() throws Exception { - Message message = createMessageToTestClassAndMethodDeclaration(14); + DecompileContext decompileContext = createMessageToTestClassAndMethodDeclaration(14); //PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); PlainTextPrinter printer = new PlainTextPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 14); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(14); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -724,17 +724,17 @@ public void testClassAndMethodDeclaration_14() throws Exception { @Test public void testLayout() throws Exception { - Message message = createSimpleMessage(1); + DecompileContext decompileContext = createSimpleMessage(1); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 22); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(22); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -745,17 +745,17 @@ public void testLayout() throws Exception { @Test public void testLayoutWithoutLineNumber() throws Exception { - Message message = createSimpleMessage(0); + DecompileContext decompileContext = createSimpleMessage(0); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 0); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(0); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -766,19 +766,19 @@ public void testLayoutWithoutLineNumber() throws Exception { @Test public void testLayoutWithStretchedfFragments_2() throws Exception { - Message message = createSimpleMessage(2); + DecompileContext decompileContext = createSimpleMessage(2); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 44); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(44); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -789,19 +789,19 @@ public void testLayoutWithStretchedfFragments_2() throws Exception { @Test public void testLayoutWithStretchedfFragments_3() throws Exception { - Message message = createSimpleMessage(3); + DecompileContext decompileContext = createSimpleMessage(3); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 66); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(66); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -812,19 +812,19 @@ public void testLayoutWithStretchedfFragments_3() throws Exception { @Test public void testMoveDown() throws Exception { - Message message = createMessageToTestMoveDown(); + DecompileContext decompileContext = createMessageToTestMoveDown(); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 8); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(8); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -835,19 +835,19 @@ public void testMoveDown() throws Exception { @Test public void testLinkedBlocks_16() throws Exception { - Message message = createMessageToTestLinkedBlocks(6, 9, 11, 13, 16); + DecompileContext decompileContext = createMessageToTestLinkedBlocks(6, 9, 11, 13, 16); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 16); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(16); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -858,19 +858,19 @@ public void testLinkedBlocks_16() throws Exception { @Test public void testLinkedBlocks_22() throws Exception { - Message message = createMessageToTestLinkedBlocks(7, 11, 15, 19, 22); + DecompileContext decompileContext = createMessageToTestLinkedBlocks(7, 11, 15, 19, 22); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 22); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(22); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + layouter.process(decompileContext); + tokenizer.process(decompileContext); + writer.process(decompileContext); String source = printer.toString(); @@ -892,7 +892,7 @@ public void testLinkedBlocks_22() throws Exception { * @return A message * @throws Exception */ - public Message createMessageToTestIfReturn(int lineNumber1, int lineNumber2) throws Exception { + public DecompileContext createMessageToTestIfReturn(int lineNumber1, int lineNumber2) throws Exception { DefaultList fragments = new DefaultList<>(); JavaFragmentFactory.addSpacerBetweenStatements(fragments); @@ -938,10 +938,11 @@ public Message createMessageToTestIfReturn(int lineNumber1, int lineNumber2) thr JavaFragmentFactory.addSpacerBetweenStatements(fragments); - Message message = new Message(fragments); - message.setHeader("maxLineNumber", Integer.valueOf(lineNumber2)); + DecompileContext decompileContext = new DecompileContext(fragments); + decompileContext.setBody(fragments); + decompileContext.setMaxLineNumber(Integer.valueOf(lineNumber2)); - return message; + return decompileContext; } /** @@ -958,7 +959,7 @@ public Message createMessageToTestIfReturn(int lineNumber1, int lineNumber2) thr * @return A message * @throws Exception */ - public Message createMessageToTestIfAssignation(int lineNumber1, int lineNumber2, int lineNumber3) throws Exception { + public DecompileContext createMessageToTestIfAssignation(int lineNumber1, int lineNumber2, int lineNumber3) throws Exception { DefaultList fragments = new DefaultList<>(); JavaFragmentFactory.addSpacerBetweenStatements(fragments); @@ -1009,13 +1010,13 @@ public Message createMessageToTestIfAssignation(int lineNumber1, int lineNumber2 JavaFragmentFactory.addSpacerBetweenStatements(fragments); - Message message = new Message(fragments); - message.setHeader("maxLineNumber", Integer.valueOf(lineNumber3)); + DecompileContext decompileContext = new DecompileContext(fragments); + decompileContext.setMaxLineNumber(Integer.valueOf(lineNumber3)); - return message; + return decompileContext; } - public Message createMessageToTestClassDeclaration(int lineNumber) throws Exception { + public DecompileContext createMessageToTestClassDeclaration(int lineNumber) throws Exception { DefaultList fragments = new DefaultList<>(); // package org.jd.core.v1.service.writer;\n\n @@ -1099,13 +1100,13 @@ public Message createMessageToTestClassDeclaration(int lineNumber) throws Except JavaFragmentFactory.addEndTypeBody(fragments, classStart); - Message message = new Message(fragments); - message.setHeader("maxLineNumber", Integer.valueOf(lineNumber)); + DecompileContext decompileContext = new DecompileContext(fragments); + decompileContext.setMaxLineNumber(Integer.valueOf(lineNumber)); - return message; + return decompileContext; } - public Message createMessageToTestClassDeclarationWithoutImports(int lineNumber) throws Exception { + public DecompileContext createMessageToTestClassDeclarationWithoutImports(int lineNumber) throws Exception { DefaultList fragments = new DefaultList<>(); // package org.jd.core.v1.service.writer;\n\n @@ -1178,10 +1179,10 @@ public Message createMessageToTestClassDeclarationWithoutImports(int lineNumber) JavaFragmentFactory.addEndTypeBody(fragments, classStart); - Message message = new Message(fragments); - message.setHeader("maxLineNumber", Integer.valueOf(lineNumber)); + DecompileContext decompileContext = new DecompileContext(fragments); + decompileContext.setMaxLineNumber(Integer.valueOf(lineNumber)); - return message; + return decompileContext; } /* @@ -1196,7 +1197,7 @@ public Message createMessageToTestClassDeclarationWithoutImports(int lineNumber) * } * } */ - public Message createMessageToTestClassAndMethodDeclaration(int lineNumber) throws Exception { + public DecompileContext createMessageToTestClassAndMethodDeclaration(int lineNumber) throws Exception { DefaultList fragments = new DefaultList<>(); // package org.jd.core.v1.service.writer;\n\n @@ -1282,10 +1283,10 @@ public Message createMessageToTestClassAndMethodDeclaration(int lineNumber) thro JavaFragmentFactory.addEndMethodBody(fragments, startConstructor); JavaFragmentFactory.addEndTypeBody(fragments, startMainClass); - Message message = new Message(fragments); - message.setHeader("maxLineNumber", Integer.valueOf(lineNumber)); + DecompileContext decompileContext = new DecompileContext(fragments); + decompileContext.setMaxLineNumber(Integer.valueOf(lineNumber)); - return message; + return decompileContext; } /* @@ -1316,7 +1317,7 @@ public Message createMessageToTestClassAndMethodDeclaration(int lineNumber) thro * } 0,2,7 --><-- * } 0,2,2 --> */ - public Message createSimpleMessage(int factor) { + public DecompileContext createSimpleMessage(int factor) { DefaultList fragments = new DefaultList<>(); // package org.jd.core.v1.service.writer;\n\n @@ -1530,14 +1531,14 @@ public Message createSimpleMessage(int factor) { JavaFragmentFactory.addEndTypeBody(fragments, startMainClass); fragments.add(EndMovableJavaBlockFragment.END_MOVABLE_BLOCK); - Message message = new Message(fragments); + DecompileContext decompileContext = new DecompileContext(fragments); if (factor != 0) - message.setHeader("maxLineNumber", Integer.valueOf(22 * factor)); + decompileContext.setMaxLineNumber(Integer.valueOf(22 * factor)); - return message; + return decompileContext; } - public Message createMessageToTestMoveDown() { + public DecompileContext createMessageToTestMoveDown() { DefaultList fragments = new DefaultList<>(); // package org.jd.core.v1.service.writer;\n\n @@ -1666,11 +1667,11 @@ public Message createMessageToTestMoveDown() { JavaFragmentFactory.addEndTypeBody(fragments, startMainClass); fragments.add(EndMovableJavaBlockFragment.END_MOVABLE_BLOCK); - Message message = new Message(fragments); - message.setHeader("maxLineNumber", Integer.valueOf(8)); + DecompileContext decompileContext = new DecompileContext(fragments); + decompileContext.setMaxLineNumber(Integer.valueOf(8)); //message.setStart("containsByteCode", Boolean.TRUE); - return message; + return decompileContext; } /** @@ -1701,7 +1702,7 @@ public Message createMessageToTestMoveDown() { * @param lineNumber5 * @return */ - public Message createMessageToTestLinkedBlocks(int lineNumber1, int lineNumber2, int lineNumber3, int lineNumber4, int lineNumber5) { + public DecompileContext createMessageToTestLinkedBlocks(int lineNumber1, int lineNumber2, int lineNumber3, int lineNumber4, int lineNumber5) { DefaultList fragments = new DefaultList<>(); // package org.jd.core.v1.service.writer;\n\n @@ -1811,11 +1812,11 @@ public Message createMessageToTestLinkedBlocks(int lineNumber1, int lineNumber2, JavaFragmentFactory.addEndTypeBody(fragments, startMainClass); fragments.add(EndMovableJavaBlockFragment.END_MOVABLE_BLOCK); - Message message = new Message(fragments); - message.setHeader("maxLineNumber", Integer.valueOf(8)); + DecompileContext decompileContext = new DecompileContext(fragments); + decompileContext.setMaxLineNumber(Integer.valueOf(8)); //message.setStart("containsByteCode", Boolean.TRUE); - return message; + return decompileContext; } protected void printSource(String source) { diff --git a/src/test/java/org/jd/core/v1/JavaGenericTest.java b/src/test/java/org/jd/core/v1/JavaGenericTest.java index 75ceb195..38025e93 100644 --- a/src/test/java/org/jd/core/v1/JavaGenericTest.java +++ b/src/test/java/org/jd/core/v1/JavaGenericTest.java @@ -7,36 +7,19 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; import java.io.InputStream; import java.util.Collections; import java.util.Map; -public class JavaGenericTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JavaGenericTest extends AbstractJdTest { @Test public void testJdk170GenericClass() throws Exception { @@ -44,7 +27,7 @@ public void testJdk170GenericClass() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.indexOf("public class GenericClass, T7 extends Map, T8 extends Map, T9 extends T8>") != -1); @@ -72,37 +55,4 @@ public void testJdk170GenericClass() throws Exception { new JavaSourceFileObject("org/jd/core/test/AnnotatedClass", "package org.jd.core.test; public class AnnotatedClass {}") )); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaIfElseTest.java b/src/test/java/org/jd/core/v1/JavaIfElseTest.java index 9ac28215..9d25be55 100644 --- a/src/test/java/org/jd/core/v1/JavaIfElseTest.java +++ b/src/test/java/org/jd/core/v1/JavaIfElseTest.java @@ -7,44 +7,26 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; import java.io.InputStream; import java.util.Collections; import java.util.Map; -public class JavaIfElseTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); - +public class JavaIfElseTest extends AbstractJdTest { @Test public void testJdk170IfElse() throws Exception { String internalClassName = "org/jd/core/test/IfElse"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make("/* 12: 12 */", "if (this == null)"))); @@ -79,37 +61,4 @@ public void testJdk170IfElse() throws Exception { // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.7", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaInnerOuterClassTest.java b/src/test/java/org/jd/core/v1/JavaInnerOuterClassTest.java index eb8905de..b0913d82 100644 --- a/src/test/java/org/jd/core/v1/JavaInnerOuterClassTest.java +++ b/src/test/java/org/jd/core/v1/JavaInnerOuterClassTest.java @@ -7,36 +7,19 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; import java.io.InputStream; import java.util.Collections; import java.util.Map; -public class JavaInnerOuterClassTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JavaInnerOuterClassTest extends AbstractJdTest { @Test public void testJdk170InnerOuterClass() throws Exception { @@ -44,7 +27,7 @@ public void testJdk170InnerOuterClass() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 10 */", "protected int outerField1 = 0;"))); @@ -102,37 +85,4 @@ public void testJdk170InnerOuterClass() throws Exception { // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.7", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaLambdaTest.java b/src/test/java/org/jd/core/v1/JavaLambdaTest.java index 52763630..45165566 100644 --- a/src/test/java/org/jd/core/v1/JavaLambdaTest.java +++ b/src/test/java/org/jd/core/v1/JavaLambdaTest.java @@ -7,43 +7,24 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; import java.io.InputStream; -import java.util.Collections; -import java.util.Map; -public class JavaLambdaTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JavaLambdaTest extends AbstractJdTest { @Test public void testJdk180Lambda() throws Exception { String internalClassName = "org/jd/core/test/Lambda"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.8.0.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 16 */", "list.forEach(System.out::println);"))); @@ -66,37 +47,4 @@ public void testJdk180Lambda() throws Exception { // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.8", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaLoopTest.java b/src/test/java/org/jd/core/v1/JavaLoopTest.java index 3409f99f..f74be0bf 100644 --- a/src/test/java/org/jd/core/v1/JavaLoopTest.java +++ b/src/test/java/org/jd/core/v1/JavaLoopTest.java @@ -7,38 +7,19 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; -import java.io.FileInputStream; import java.io.InputStream; -import java.nio.file.Paths; import java.util.Collections; import java.util.Map; -public class JavaLoopTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JavaLoopTest extends AbstractJdTest { @Test public void testJdk170While() throws Exception { @@ -46,7 +27,7 @@ public void testJdk170While() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 15 */", "while (i-- > 0)"))); @@ -74,7 +55,7 @@ public void testJdk901While() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-9.0.1.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 15 */", "while (i-- > 0)"))); @@ -102,7 +83,7 @@ public void testJdk1002While() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-10.0.2.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 15 */", "while (i-- > 0)"))); @@ -129,7 +110,7 @@ public void testJdk170DoWhile() throws Exception { String internalClassName = "org/jd/core/test/DoWhile"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 24 */", "} while (i < 10);"))); @@ -153,7 +134,7 @@ public void testJdk901DoWhile() throws Exception { String internalClassName = "org/jd/core/test/DoWhile"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-9.0.1.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 24 */", "} while (i < 10);"))); @@ -177,7 +158,7 @@ public void testJdk1002DoWhile() throws Exception { String internalClassName = "org/jd/core/test/DoWhile"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-10.0.2.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 24 */", "} while (i < 10);"))); @@ -202,7 +183,7 @@ public void testJdk170BreakContinue() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make("/* 15: 15 */", "if (i == 1)"))); @@ -244,7 +225,7 @@ public void testJdk170For() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 20 */", "for (int i = 0; i < 10; i++)"))); @@ -305,7 +286,7 @@ public void testJdk170NoDebugInfoFor() throws Exception { String internalClassName = "org/jd/core/test/For"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0-no-debug-info.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make("for (int i = 0; i < 10; i++)"))); @@ -326,7 +307,7 @@ public void testJdk150For() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.5.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 20 */", "for (int i = 0; i < 10; i++)"))); @@ -350,7 +331,7 @@ public void testJdk160For() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.6.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 20 */", "for (int i = 0; i < 10; i++)"))); @@ -374,7 +355,7 @@ public void testIbmJ9For() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-ibm-j9_vm.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 88 */", "while (i < 10)"))); @@ -390,37 +371,4 @@ public void testIbmJ9For() throws Exception { // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.5", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaMethodOverloadingTest.java b/src/test/java/org/jd/core/v1/JavaMethodOverloadingTest.java index 59c4aad7..801f540e 100644 --- a/src/test/java/org/jd/core/v1/JavaMethodOverloadingTest.java +++ b/src/test/java/org/jd/core/v1/JavaMethodOverloadingTest.java @@ -7,70 +7,33 @@ package org.jd.core.v1; -import junit.framework.TestCase; -import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; import org.jd.core.v1.loader.ClassPathLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; +import org.jd.core.v1.stub.ArrayMethodOverloading; import org.junit.Test; -import java.util.Collections; -import java.util.Map; - -public class JavaMethodOverloadingTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); - +public class JavaMethodOverloadingTest extends AbstractJdTest { @Test // https://github.com/java-decompiler/jd-core/issues/33 public void testArrayMethodOverloading() throws Exception { - class ArrayMethodOverloading { - void use(Object[] o) { } - void use(Object o) { } - - void test1() { - use("string"); - } - void test2() { - use((Object) new Object[] {""}); - } - void test3() { - use(null); - } - void test4() { - use((Object)null); - } - } - String internalClassName = ArrayMethodOverloading.class.getName().replace('.', '/'); - String source = decompile(new ClassPathLoader(), new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(new ClassPathLoader(), new PlainTextPrinter(), internalClassName); // Check decompiled source code - assertTrue(source.matches(PatternMaker.make(": 47 */", "use(\"string\");"))); - assertTrue(source.matches(PatternMaker.make(": 50 */", "use((Object)new Object[] { \"\" });"))); - assertTrue(source.matches(PatternMaker.make(": 53 */", "use((Object[])null);"))); - assertTrue(source.matches(PatternMaker.make(": 56 */", "use((Object)null);"))); + assertTrue(source.matches(PatternMaker.make(": 11 */", "use(\"string\");"))); + assertTrue(source.matches(PatternMaker.make(": 15 */", "use((Object)new Object[] { \"\" });"))); + assertTrue(source.matches(PatternMaker.make(": 19 */", "use((Object[])null);"))); + assertTrue(source.matches(PatternMaker.make(": 23 */", "use((Object)null);"))); // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.8", new JavaSourceFileObject(internalClassName, source))); } - @Test + // TODO: bug should be fix +// @Test // https://github.com/java-decompiler/jd-core/issues/32 // public void testGenericParameterMethod() throws Exception { // class GenericParameterMethod { @@ -98,36 +61,4 @@ void test4() { // assertTrue(CompilerUtil.compile("1.8", new JavaSourceFileObject(internalClassName, source))); // } - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaOperatorPrecedenceTest.java b/src/test/java/org/jd/core/v1/JavaOperatorPrecedenceTest.java index e0f08ba3..076e2632 100644 --- a/src/test/java/org/jd/core/v1/JavaOperatorPrecedenceTest.java +++ b/src/test/java/org/jd/core/v1/JavaOperatorPrecedenceTest.java @@ -7,84 +7,24 @@ package org.jd.core.v1; -import junit.framework.TestCase; -import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; import org.jd.core.v1.loader.ClassPathLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; +import org.jd.core.v1.stub.NewOperatorPrecedence; import org.junit.Test; -import java.util.Collections; -import java.util.Map; - -public class JavaOperatorPrecedenceTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); - +public class JavaOperatorPrecedenceTest extends AbstractJdTest { @Test public void testNewOperatorPrecedence() throws Exception { - class NewOperatorPrecedence { - void test() {} - public /* static */ void main(String ... args) { - new NewOperatorPrecedence().test(); - } - } - String internalClassName = NewOperatorPrecedence.class.getName().replace('.', '/'); - String source = decompile(new ClassPathLoader(), new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(new ClassPathLoader(), new PlainTextPrinter(), internalClassName); // Check decompiled source code - assertTrue(source.matches(PatternMaker.make(": 44 */", "new NewOperatorPrecedence().test();"))); + assertTrue(source.matches(PatternMaker.make(": 8 */", "new NewOperatorPrecedence().test();"))); // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.8", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaSwitchTest.java b/src/test/java/org/jd/core/v1/JavaSwitchTest.java index f2fa604a..b1af0370 100644 --- a/src/test/java/org/jd/core/v1/JavaSwitchTest.java +++ b/src/test/java/org/jd/core/v1/JavaSwitchTest.java @@ -7,22 +7,12 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; import java.io.FileInputStream; @@ -31,14 +21,7 @@ import java.util.Collections; import java.util.Map; -public class JavaSwitchTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JavaSwitchTest extends AbstractJdTest { @Test public void testJdk170Switch() throws Exception { @@ -46,7 +29,7 @@ public void testJdk170Switch() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make("/* 15: 15 */", "switch (i)"))); @@ -92,7 +75,7 @@ public void testJdk170AdvancedSwitch() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make("/* 13: 13 */", "A,", "B,", "C;"))); @@ -124,7 +107,7 @@ public void testEclipseJavaCompiler321Switch() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-eclipse-java-compiler-3.2.1.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.indexOf("/* 239: 239 */") != -1); @@ -139,7 +122,7 @@ public void testEclipseJavaCompiler3130Switch() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-eclipse-java-compiler-3.13.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.indexOf("/* 239: 239 */") != -1); @@ -156,7 +139,7 @@ public void testBstMutationResult() throws Exception { InputStream is = new FileInputStream(Paths.get(mainClass.getProtectionDomain().getCodeSource().getLocation().toURI()).toFile()); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.indexOf("N resultLeft, resultRight;") != -1); @@ -167,37 +150,4 @@ public void testBstMutationResult() throws Exception { // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.8", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaSynchronizedBlockTest.java b/src/test/java/org/jd/core/v1/JavaSynchronizedBlockTest.java index 52cba281..14d04f4d 100644 --- a/src/test/java/org/jd/core/v1/JavaSynchronizedBlockTest.java +++ b/src/test/java/org/jd/core/v1/JavaSynchronizedBlockTest.java @@ -7,43 +7,24 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; import java.io.InputStream; -import java.util.Collections; -import java.util.Map; -public class JavaSynchronizedBlockTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JavaSynchronizedBlockTest extends AbstractJdTest { @Test public void testJdk170Synchronised() throws Exception { String internalClassName = "org/jd/core/test/Synchronized"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 11 */", "synchronized (paramStringBuilder)"))); @@ -68,37 +49,4 @@ public void testJdk170Synchronised() throws Exception { // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.7", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaSyntaxToJavaSourceTest.java b/src/test/java/org/jd/core/v1/JavaSyntaxToJavaSourceTest.java index 0a2d9e1d..07a4eba0 100644 --- a/src/test/java/org/jd/core/v1/JavaSyntaxToJavaSourceTest.java +++ b/src/test/java/org/jd/core/v1/JavaSyntaxToJavaSourceTest.java @@ -17,12 +17,14 @@ import org.jd.core.v1.model.javasyntax.type.PrimitiveType; import org.jd.core.v1.model.javasyntax.type.Type; import org.jd.core.v1.model.javasyntax.type.Types; -import org.jd.core.v1.model.message.Message; +import org.jd.core.v1.model.message.DecompileContext; +import org.jd.core.v1.model.token.Token; import org.jd.core.v1.printer.PlainTextMetaPrinter; import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; import org.jd.core.v1.service.writer.WriteTokenProcessor; +import org.jd.core.v1.util.DefaultList; import org.junit.Assert; import org.junit.Test; @@ -140,20 +142,22 @@ public void testClassDeclaration() throws Exception { PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - Message message = new Message(compilationUnit); - - message.setHeader("mainInternalTypeName", "org/jd/core/v1/service/test/TokenWriterTest"); - message.setHeader("loader", new NopLoader()); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - message.setHeader("maxLineNumber", 22); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); - - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setCompilationUnit(compilationUnit); + + decompileContext.setMainInternalTypeName("org/jd/core/v1/service/test/TokenWriterTest"); + decompileContext.setLoader(new NopLoader()); + decompileContext.setPrinter(printer); + decompileContext.setConfiguration(configuration); + decompileContext.setMaxLineNumber(22); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); + + fragmenter.process(compilationUnit, decompileContext); + layouter.process(decompileContext); + DefaultList tokens = tokenizer.process(decompileContext.getBody()); + decompileContext.setTokens(tokens); + writer.process(decompileContext); String source = printer.toString(); @@ -181,19 +185,22 @@ public void testInterfaceDeclaration() throws Exception { ); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); - Message message = new Message(compilationUnit); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setCompilationUnit(compilationUnit); + + decompileContext.setMainInternalTypeName("org/jd/core/v1/service/test/InterfaceTest"); + decompileContext.setLoader(new NopLoader()); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(0); + decompileContext.setMajorVersion(49); + decompileContext.setMinorVersion(0); - message.setHeader("mainInternalTypeName", "org/jd/core/v1/service/test/InterfaceTest"); - message.setHeader("loader", new NopLoader()); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 0); - message.setHeader("majorVersion", 49); - message.setHeader("minorVersion", 0); + fragmenter.process(compilationUnit, decompileContext); + layouter.process(decompileContext); + DefaultList tokens = tokenizer.process(decompileContext.getBody()); + decompileContext.setTokens(tokens); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + writer.process(decompileContext); String source = printer.toString(); @@ -231,19 +238,22 @@ public void testEnumDayDeclaration() throws Exception { ); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); - Message message = new Message(compilationUnit); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setCompilationUnit(compilationUnit); - message.setHeader("mainInternalTypeName", "org/jd/core/v1/service/test/Day"); - message.setHeader("loader", new NopLoader()); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 0); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + decompileContext.setMainInternalTypeName("org/jd/core/v1/service/test/Day"); + decompileContext.setLoader(new NopLoader()); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(0); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + fragmenter.process(compilationUnit, decompileContext); + layouter.process(decompileContext); + DefaultList tokens = tokenizer.process(decompileContext.getBody()); + decompileContext.setTokens(tokens); + + writer.process(decompileContext); String source = printer.toString(); @@ -515,20 +525,23 @@ public void testEnumPlanetDeclaration() throws Exception { ); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); - Message message = new Message(compilationUnit); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setCompilationUnit(compilationUnit); + + decompileContext.setMainInternalTypeName("org/jd/core/v1/service/test/Planet"); + decompileContext.setLoader(new NopLoader()); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(0); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - message.setHeader("mainInternalTypeName", "org/jd/core/v1/service/test/Planet"); - message.setHeader("loader", new NopLoader()); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 0); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + fragmenter.process(compilationUnit, decompileContext); + DefaultList tokens = tokenizer.process(decompileContext.getBody()); + decompileContext.setTokens(tokens); - fragmenter.process(message); - layouter.process(message); //tokenizer.process(message); - new JavaFragmentToTokenProcessor().process(message); - writer.process(message); + tokens = new JavaFragmentToTokenProcessor().process(decompileContext.getBody()); + writer.process(decompileContext); String source = printer.toString(); @@ -584,19 +597,22 @@ public void testSwitch() throws Exception { ); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); - Message message = new Message(compilationUnit); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setCompilationUnit(compilationUnit); + + decompileContext.setMainInternalTypeName("org/jd/core/v1/service/test/SwitchTest"); + decompileContext.setLoader(new NopLoader()); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(0); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - message.setHeader("mainInternalTypeName", "org/jd/core/v1/service/test/SwitchTest"); - message.setHeader("loader", new NopLoader()); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 0); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + fragmenter.process(compilationUnit, decompileContext); + layouter.process(decompileContext); + DefaultList tokens = tokenizer.process(decompileContext.getBody()); + decompileContext.setTokens(tokens); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + writer.process(decompileContext); String source = printer.toString(); @@ -640,19 +656,22 @@ public void testBridgeAndSyntheticAttributes() throws Exception { ); PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); - Message message = new Message(compilationUnit); - - message.setHeader("mainInternalTypeName", "org/jd/core/v1/service/test/SyntheticAttributeTest"); - message.setHeader("loader", new NopLoader()); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 0); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); - - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setCompilationUnit(compilationUnit); + + decompileContext.setMainInternalTypeName("org/jd/core/v1/service/test/SyntheticAttributeTest"); + decompileContext.setLoader(new NopLoader()); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(0); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); + + fragmenter.process(compilationUnit, decompileContext); + layouter.process(decompileContext); + DefaultList tokens = tokenizer.process(decompileContext.getBody()); + decompileContext.setTokens(tokens); + + writer.process(decompileContext); String source = printer.toString(); diff --git a/src/test/java/org/jd/core/v1/JavaTernaryOperatorTest.java b/src/test/java/org/jd/core/v1/JavaTernaryOperatorTest.java index 22b0dced..fdd43709 100644 --- a/src/test/java/org/jd/core/v1/JavaTernaryOperatorTest.java +++ b/src/test/java/org/jd/core/v1/JavaTernaryOperatorTest.java @@ -7,43 +7,24 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; import java.io.InputStream; -import java.util.Collections; -import java.util.Map; -public class JavaTernaryOperatorTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class JavaTernaryOperatorTest extends AbstractJdTest { @Test public void testJdk118TernaryOperator() throws Exception { String internalClassName = "org/jd/core/test/TernaryOperator"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.1.8.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 13 */", "this.str ="))); @@ -70,7 +51,7 @@ public void testJdk170TernaryOperator() throws Exception { String internalClassName = "org/jd/core/test/TernaryOperator"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); - String source = decompile(loader, new PlainTextPrinter(), internalClassName); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 13 */", "this.str = (s == null) ? \"1\" : \"2\";"))); @@ -88,37 +69,4 @@ public void testJdk170TernaryOperator() throws Exception { // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.7", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/JavaTryCatchFinallyTest.java b/src/test/java/org/jd/core/v1/JavaTryCatchFinallyTest.java index 76130389..86917137 100644 --- a/src/test/java/org/jd/core/v1/JavaTryCatchFinallyTest.java +++ b/src/test/java/org/jd/core/v1/JavaTryCatchFinallyTest.java @@ -7,44 +7,26 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.api.loader.Loader; -import org.jd.core.v1.api.printer.Printer; import org.jd.core.v1.compiler.CompilerUtil; import org.jd.core.v1.compiler.JavaSourceFileObject; -import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; import org.jd.core.v1.regex.PatternMaker; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; import org.junit.Test; import java.io.InputStream; import java.util.Collections; import java.util.Map; -public class JavaTryCatchFinallyTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); - +public class JavaTryCatchFinallyTest extends AbstractJdTest { @Test public void testJdk170TryWithResources() throws Exception { String internalClassName = "org/jd/core/test/TryWithResources"; InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 12 */", "try (FileInputStream input = new FileInputStream(path))"))); @@ -79,7 +61,7 @@ public void testJdk180TryWithResources() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.8.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.matches(PatternMaker.make(": 12 */", "try (FileInputStream input = new FileInputStream(path))"))); @@ -114,7 +96,7 @@ public void testEclipseJavaCompiler321TryCatchFinally() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-eclipse-java-compiler-3.2.1.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.indexOf("catch (RuntimeException runtimeexception)") != -1); @@ -146,7 +128,7 @@ public void testEclipseJavaCompiler370TryCatchFinally() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-eclipse-java-compiler-3.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.indexOf("catch (RuntimeException runtimeException)") != -1); @@ -187,7 +169,7 @@ public void testEclipseJavaCompiler3130TryCatchFinally() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-eclipse-java-compiler-3.13.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.indexOf("catch (RuntimeException runtimeException)") != -1); @@ -227,7 +209,7 @@ public void testJdk118TryCatchFinally() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.1.8.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.indexOf("catch (RuntimeException runtimeexception)") != -1); @@ -267,7 +249,7 @@ public void testJdk131TryCatchFinally() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.3.1.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.indexOf("catch (RuntimeException runtimeexception)") != -1); @@ -303,7 +285,7 @@ public void testJdk170TryCatchFinally() throws Exception { InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip"); Loader loader = new ZipLoader(is); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - String source = decompile(loader, new PlainTextPrinter(), internalClassName, configuration); + String source = decompileSuccess(loader, new PlainTextPrinter(), internalClassName, configuration); // Check decompiled source code assertTrue(source.indexOf("catch (RuntimeException runtimeexception)") != -1); @@ -339,37 +321,4 @@ public void testJdk170TryCatchFinally() throws Exception { // Recompile decompiled source code and check errors assertTrue(CompilerUtil.compile("1.7", new JavaSourceFileObject(internalClassName, source))); } - - protected String decompile(Loader loader, Printer printer, String internalTypeName) throws Exception { - return decompile(loader, printer, internalTypeName, Collections.emptyMap()); - } - - protected String decompile(Loader loader, Printer printer, String internalTypeName, Map configuration) throws Exception { - Message message = new Message(); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("mainInternalTypeName", internalTypeName); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); - - assertTrue(source.indexOf("// Byte code:") == -1); - - return source; - } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/LayoutFragmentProcessorTest.java b/src/test/java/org/jd/core/v1/LayoutFragmentProcessorTest.java index ca8bcc05..74e28e9e 100644 --- a/src/test/java/org/jd/core/v1/LayoutFragmentProcessorTest.java +++ b/src/test/java/org/jd/core/v1/LayoutFragmentProcessorTest.java @@ -7,18 +7,10 @@ package org.jd.core.v1; -import junit.framework.TestCase; import org.jd.core.v1.loader.ZipLoader; -import org.jd.core.v1.model.message.Message; import org.jd.core.v1.printer.PlainTextPrinter; -import org.jd.core.v1.service.converter.classfiletojavasyntax.ClassFileToJavaSyntaxProcessor; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; -import org.jd.core.v1.service.fragmenter.javasyntaxtojavafragment.JavaSyntaxToJavaFragmentProcessor; -import org.jd.core.v1.service.layouter.LayoutFragmentProcessor; -import org.jd.core.v1.service.tokenizer.javafragmenttotoken.JavaFragmentToTokenProcessor; -import org.jd.core.v1.service.writer.WriteTokenProcessor; -import org.jd.core.v1.services.tokenizer.javafragmenttotoken.TestTokenizeJavaFragmentProcessor; import org.jd.core.v1.regex.PatternMaker; +import org.jd.core.v1.services.tokenizer.javafragmenttotoken.TestTokenizeJavaFragmentProcessor; import org.junit.Assert; import org.junit.Test; @@ -26,14 +18,7 @@ import java.util.Collections; import java.util.Map; -public class LayoutFragmentProcessorTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); - protected ClassFileToJavaSyntaxProcessor converter = new ClassFileToJavaSyntaxProcessor(); - protected JavaSyntaxToJavaFragmentProcessor fragmenter = new JavaSyntaxToJavaFragmentProcessor(); - protected LayoutFragmentProcessor layouter = new LayoutFragmentProcessor(); - //protected TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - protected JavaFragmentToTokenProcessor tokenizer = new JavaFragmentToTokenProcessor(); - protected WriteTokenProcessor writer = new WriteTokenProcessor(); +public class LayoutFragmentProcessorTest extends AbstractJdTest { @Test public void testJdk118Basic() throws Exception { @@ -43,22 +28,7 @@ public void testJdk118Basic() throws Exception { PlainTextPrinter printer = new PlainTextPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - Message message = new Message(); - message.setHeader("mainInternalTypeName", "org/jd/core/test/Basic"); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); + String source = this.decompileSuccess(loader, printer, "org/jd/core/test/Basic", configuration); assertTrue(source.indexOf("/* 188: 188 */") != -1); } @@ -71,22 +41,7 @@ public void testJdk131TryCatchFinally() throws Exception { PlainTextPrinter printer = new PlainTextPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - Message message = new Message(); - message.setHeader("mainInternalTypeName", "org/jd/core/test/TryCatchFinally"); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); + String source = this.decompileSuccess(loader, printer, "org/jd/core/test/TryCatchFinally", configuration); assertTrue(source.indexOf("/* 902: 902 */") != -1); } @@ -98,23 +53,7 @@ public void testTryCatchFinally() throws Exception { //PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); PlainTextPrinter printer = new PlainTextPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - - Message message = new Message(); - message.setHeader("mainInternalTypeName", "org/jd/core/test/TryCatchFinally"); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); + String source = this.decompileSuccess(loader, printer, "org/jd/core/test/TryCatchFinally", configuration); assertTrue(source.indexOf("/* 902: 902 */") != -1); } @@ -127,22 +66,7 @@ public void testAnonymousClass() throws Exception { PlainTextPrinter printer = new PlainTextPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - Message message = new Message(); - message.setHeader("mainInternalTypeName", "org/jd/core/test/AnonymousClass"); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); + String source = this.decompileSuccess(loader, printer, "org/jd/core/test/AnonymousClass", configuration); assertTrue(source.indexOf("/* 111: 111 */") != -1); @@ -157,22 +81,7 @@ public void testOuterClass() throws Exception { PlainTextPrinter printer = new PlainTextPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - Message message = new Message(); - message.setHeader("mainInternalTypeName", "org/jd/core/test/OuterClass"); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); + String source = this.decompileSuccess(loader, printer, "org/jd/core/test/OuterClass", configuration); assertTrue(source.indexOf("/* 182: 182 */") != -1); } @@ -186,21 +95,7 @@ public void testEnumClass() throws Exception { TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - Message message = new Message(); - message.setHeader("mainInternalTypeName", "org/jd/core/test/Enum"); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); + String source = this.decompileSuccess(loader, printer, "org/jd/core/test/Enum"); assertTrue(source.indexOf("NEPTUNE(1.024E26D, 2.4746E7D);") != -1); assertTrue(source.indexOf("public static final double G = 6.673E-11D;") != -1); @@ -213,25 +108,7 @@ public void testAnnotationQuality() throws Exception { //PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); PlainTextPrinter printer = new PlainTextPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - - TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - - Message message = new Message(); - message.setHeader("mainInternalTypeName", "org/jd/core/test/annotation/Quality"); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); + String source = this.decompileSuccess(loader, printer, "org/jd/core/test/annotation/Quality", configuration); assertTrue(source.indexOf("/* 9: 0 */ }") != -1); } @@ -243,34 +120,10 @@ public void testJdk170Array() throws Exception { //PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); PlainTextPrinter printer = new PlainTextPrinter(); Map configuration = Collections.singletonMap("realignLineNumbers", Boolean.TRUE); - - TestTokenizeJavaFragmentProcessor tokenizer = new TestTokenizeJavaFragmentProcessor(); - - Message message = new Message(); - message.setHeader("mainInternalTypeName", "org/jd/core/test/Array"); - message.setHeader("loader", loader); - message.setHeader("printer", printer); - message.setHeader("configuration", configuration); - - deserializer.process(message); - converter.process(message); - fragmenter.process(message); - layouter.process(message); - tokenizer.process(message); - writer.process(message); - - String source = printer.toString(); - - printSource(source); + String source = this.decompileSuccess(loader, printer, "org/jd/core/test/Array", configuration); Assert.assertTrue(source.matches(PatternMaker.make("/* 30: 30 */", "int[][] ia", "0, 1, 2"))); assertTrue(source.indexOf("/* 75: 75 */") != -1); } - - protected void printSource(String source) { - System.out.println("- - - - - - - - "); - System.out.println(source); - System.out.println("- - - - - - - - "); - } } diff --git a/src/test/java/org/jd/core/v1/SignatureParserTest.java b/src/test/java/org/jd/core/v1/SignatureParserTest.java index 5d0fbb0d..f53112c4 100644 --- a/src/test/java/org/jd/core/v1/SignatureParserTest.java +++ b/src/test/java/org/jd/core/v1/SignatureParserTest.java @@ -11,10 +11,15 @@ import org.jd.core.v1.loader.ClassPathLoader; import org.jd.core.v1.loader.ZipLoader; import org.jd.core.v1.model.classfile.ClassFile; -import org.jd.core.v1.model.javasyntax.type.*; -import org.jd.core.v1.model.message.Message; +import org.jd.core.v1.model.javasyntax.type.BaseType; +import org.jd.core.v1.model.javasyntax.type.InnerObjectType; +import org.jd.core.v1.model.javasyntax.type.ObjectType; +import org.jd.core.v1.model.javasyntax.type.PrimitiveType; +import org.jd.core.v1.model.javasyntax.type.Type; +import org.jd.core.v1.model.javasyntax.type.TypeArguments; +import org.jd.core.v1.model.message.DecompileContext; import org.jd.core.v1.service.converter.classfiletojavasyntax.util.TypeMaker; -import org.jd.core.v1.service.deserializer.classfile.DeserializeClassFileProcessor; +import org.jd.core.v1.service.deserializer.classfile.ClassFileDeserializer; import org.jd.core.v1.services.javasyntax.type.visitor.PrintTypeVisitor; import org.junit.Assert; import org.junit.Test; @@ -22,7 +27,7 @@ import java.io.InputStream; public class SignatureParserTest extends TestCase { - protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor(); + protected ClassFileDeserializer deserializer = new ClassFileDeserializer(); @Test public void testAnnotatedClass() throws Exception { @@ -31,13 +36,12 @@ public void testAnnotatedClass() throws Exception { ZipLoader loader = new ZipLoader(is); TypeMaker typeMaker = new TypeMaker(loader); - Message message = new Message(); - message.setHeader("mainInternalTypeName", "org/jd/core/test/AnnotatedClass"); - message.setHeader("loader", loader); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setMainInternalTypeName("org/jd/core/test/AnnotatedClass"); + decompileContext.setLoader(loader); - deserializer.process(message); - - ClassFile classFile = message.getBody(); + ClassFile classFile = deserializer.loadClassFile(loader, decompileContext.getMainInternalTypeName()); + decompileContext.setClassFile(classFile); // Check type TypeMaker.TypeTypes typeTypes = typeMaker.parseClassFileSignature(classFile); @@ -149,13 +153,12 @@ public void testGenericClass() throws Exception { ZipLoader loader = new ZipLoader(is); TypeMaker typeMaker = new TypeMaker(loader); - Message message = new Message(); - message.setHeader("mainInternalTypeName", "org/jd/core/test/GenericClass"); - message.setHeader("loader", loader); - - deserializer.process(message); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setMainInternalTypeName("org/jd/core/test/GenericClass"); + decompileContext.setLoader(loader); - ClassFile classFile = message.getBody(); + ClassFile classFile = deserializer.loadClassFile(loader, decompileContext.getMainInternalTypeName()); + decompileContext.setClassFile(classFile); // Check type TypeMaker.TypeTypes typeTypes = typeMaker.parseClassFileSignature(classFile); @@ -363,4 +366,4 @@ public void testGenericInnerClass() throws Exception { Assert.assertEquals(typeArguments.getFirst().toString(), "GenericType{K}"); Assert.assertEquals(typeArguments.getLast().toString(), "GenericType{V}"); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jd/core/v1/WriteTokenTest.java b/src/test/java/org/jd/core/v1/WriteTokenTest.java index d098a158..e2dc3478 100644 --- a/src/test/java/org/jd/core/v1/WriteTokenTest.java +++ b/src/test/java/org/jd/core/v1/WriteTokenTest.java @@ -7,7 +7,7 @@ package org.jd.core.v1; -import org.jd.core.v1.model.message.Message; +import org.jd.core.v1.model.message.DecompileContext; import org.jd.core.v1.model.token.*; import org.jd.core.v1.printer.PlainTextMetaPrinter; import org.jd.core.v1.service.writer.WriteTokenProcessor; @@ -198,13 +198,14 @@ public void writeClassDeclaration() throws Exception { PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); WriteTokenProcessor writer = new WriteTokenProcessor(); - Message message = new Message(tokens); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 22); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setTokens(tokens); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(22); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - writer.process(message); + writer.process(decompileContext); String source = printer.toString(); @@ -279,13 +280,14 @@ public void testComments() throws Exception { PlainTextMetaPrinter printer = new PlainTextMetaPrinter(); WriteTokenProcessor writer = new WriteTokenProcessor(); - Message message = new Message(tokens); - message.setHeader("printer", printer); - message.setHeader("maxLineNumber", 0); - message.setHeader("majorVersion", 0); - message.setHeader("minorVersion", 0); + DecompileContext decompileContext = new DecompileContext(); + decompileContext.setTokens(tokens); + decompileContext.setPrinter(printer); + decompileContext.setMaxLineNumber(0); + decompileContext.setMajorVersion(0); + decompileContext.setMinorVersion(0); - writer.process(message); + writer.process(decompileContext); String source = printer.toString(); diff --git a/src/test/java/org/jd/core/v1/services/tokenizer/javafragmenttotoken/TestTokenizeJavaFragmentProcessor.java b/src/test/java/org/jd/core/v1/services/tokenizer/javafragmenttotoken/TestTokenizeJavaFragmentProcessor.java index 7f0ea8e8..f72d2251 100644 --- a/src/test/java/org/jd/core/v1/services/tokenizer/javafragmenttotoken/TestTokenizeJavaFragmentProcessor.java +++ b/src/test/java/org/jd/core/v1/services/tokenizer/javafragmenttotoken/TestTokenizeJavaFragmentProcessor.java @@ -8,17 +8,15 @@ package org.jd.core.v1.services.tokenizer.javafragmenttotoken; import org.jd.core.v1.model.javafragment.JavaFragment; -import org.jd.core.v1.model.message.Message; -import org.jd.core.v1.model.processor.Processor; +import org.jd.core.v1.model.message.DecompileContext; import org.jd.core.v1.services.tokenizer.javafragmenttotoken.visitor.TokenizeJavaFragmentTestVisitor; import java.util.List; -public class TestTokenizeJavaFragmentProcessor implements Processor { +public class TestTokenizeJavaFragmentProcessor { - @Override - public void process(Message message) throws Exception { - List fragments = message.getBody(); + public void process(DecompileContext decompileContext) throws Exception { + List fragments = decompileContext.getBody(); TokenizeJavaFragmentTestVisitor visitor = new TokenizeJavaFragmentTestVisitor(fragments.size() * 3); // Create tokens @@ -26,6 +24,6 @@ public void process(Message message) throws Exception { fragment.accept(visitor); } - message.setBody(visitor.getTokens()); + decompileContext.setTokens(visitor.getTokens()); } } diff --git a/src/test/java/org/jd/core/v1/stub/ArrayMethodOverloading.java b/src/test/java/org/jd/core/v1/stub/ArrayMethodOverloading.java new file mode 100644 index 00000000..89f5e941 --- /dev/null +++ b/src/test/java/org/jd/core/v1/stub/ArrayMethodOverloading.java @@ -0,0 +1,25 @@ +package org.jd.core.v1.stub; + +public class ArrayMethodOverloading { + void use(Object[] o) { + } + + void use(Object o) { + } + + void test1() { + use("string"); + } + + void test2() { + use((Object) new Object[]{""}); + } + + void test3() { + use(null); + } + + void test4() { + use((Object) null); + } +} diff --git a/src/test/java/org/jd/core/v1/stub/AutoboxingAndUnboxing.java b/src/test/java/org/jd/core/v1/stub/AutoboxingAndUnboxing.java new file mode 100644 index 00000000..f926ac9c --- /dev/null +++ b/src/test/java/org/jd/core/v1/stub/AutoboxingAndUnboxing.java @@ -0,0 +1,8 @@ +package org.jd.core.v1.stub; + +public class AutoboxingAndUnboxing { + void test() { + Integer intObj = 10; + int i = intObj; + } +} diff --git a/src/test/java/org/jd/core/v1/stub/FloatingPointCasting.java b/src/test/java/org/jd/core/v1/stub/FloatingPointCasting.java new file mode 100644 index 00000000..12643bfd --- /dev/null +++ b/src/test/java/org/jd/core/v1/stub/FloatingPointCasting.java @@ -0,0 +1,23 @@ +package org.jd.core.v1.stub; + +public class FloatingPointCasting { + private final long l = 9223372036854775806L; + private final Long L = 9223372036854775806L; + + long getLong() { + return 9223372036854775806L; + } + + void test1() { + long b = (long) (double) getLong(); + System.out.println(b == getLong()); // Prints "false" + } + void test2() { + long b = (long) (double) l; + System.out.println(b == l); // Prints "false" + } + void test3() { + long b = (long) (double) L; + System.out.println(b == L); // Prints "false" + } +} diff --git a/src/test/java/org/jd/core/v1/stub/InitializedArrayInTernaryOperator.java b/src/test/java/org/jd/core/v1/stub/InitializedArrayInTernaryOperator.java new file mode 100644 index 00000000..8fbea88f --- /dev/null +++ b/src/test/java/org/jd/core/v1/stub/InitializedArrayInTernaryOperator.java @@ -0,0 +1,25 @@ +package org.jd.core.v1.stub; + +public class InitializedArrayInTernaryOperator { + Class[] test0(int i) { + return (i == 0) ? new Class[] { Object.class } : null; + } + Class[] test2(int i) { + return (i == 0) ? new Class[] { Object.class, String.class, Number.class } : null; + } + Class[][] test3(int i) { + return (i == 0) ? new Class[][] { { Object.class }, { String.class, Number.class} } : null; + } + Class[] test4(int i) { + return (i == 0) ? null : new Class[] { Object.class }; + } + Class[] test5(int i) { + return (i == 0) ? null : new Class[] { Object.class, String.class, Number.class }; + } + Class[][] test6(int i) { + return (i == 0) ? null : new Class[][] { { Object.class }, { String.class, Number.class} }; + } + Class[] test7(int i) { + return (i == 0) ? new Class[] { Object.class } : new Class[] { String.class, Number.class }; + } +} diff --git a/src/test/java/org/jd/core/v1/stub/NewOperatorPrecedence.java b/src/test/java/org/jd/core/v1/stub/NewOperatorPrecedence.java new file mode 100644 index 00000000..7e59f3e6 --- /dev/null +++ b/src/test/java/org/jd/core/v1/stub/NewOperatorPrecedence.java @@ -0,0 +1,10 @@ +package org.jd.core.v1.stub; + +public class NewOperatorPrecedence { + void test() { + } + + public /* static */ void main(String... args) { + new NewOperatorPrecedence().test(); + } +}