summaryrefslogtreecommitdiff
path: root/plugins/java-decompiler/test/org/jetbrains/java/decompiler/IdeaDecompilerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/java-decompiler/test/org/jetbrains/java/decompiler/IdeaDecompilerTest.java')
-rw-r--r--plugins/java-decompiler/test/org/jetbrains/java/decompiler/IdeaDecompilerTest.java113
1 files changed, 16 insertions, 97 deletions
diff --git a/plugins/java-decompiler/test/org/jetbrains/java/decompiler/IdeaDecompilerTest.java b/plugins/java-decompiler/test/org/jetbrains/java/decompiler/IdeaDecompilerTest.java
index 060b269789e3..941f677d618b 100644
--- a/plugins/java-decompiler/test/org/jetbrains/java/decompiler/IdeaDecompilerTest.java
+++ b/plugins/java-decompiler/test/org/jetbrains/java/decompiler/IdeaDecompilerTest.java
@@ -15,32 +15,32 @@
*/
package org.jetbrains.java.decompiler;
-import com.intellij.openapi.application.PathManager;
-import com.intellij.openapi.application.PluginPathManager;
import com.intellij.openapi.fileTypes.StdFileTypes;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.StandardFileSystems;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileVisitor;
-import com.intellij.psi.*;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.compiled.ClsFileImpl;
import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.File;
-import java.io.IOException;
public class IdeaDecompilerTest extends LightCodeInsightFixtureTestCase {
+ private static final String BANNER =
+ "//\n" +
+ "// Source code recreated from a .class file by IntelliJ IDEA\n" +
+ "// (powered by Fernflower decompiler)\n" +
+ "//\n\n";
+
public void testSimple() {
String path = PlatformTestUtil.getRtJarPath() + "!/java/lang/String.class";
VirtualFile file = StandardFileSystems.jar().findFileByPath(path);
assertNotNull(path, file);
String decompiled = new IdeaDecompiler().getText(file).toString();
+ assertTrue(decompiled.startsWith(BANNER + "package java.lang;\n"));
assertTrue(decompiled, decompiled.contains("public final class String"));
assertTrue(decompiled, decompiled.contains("@deprecated"));
assertTrue(decompiled, decompiled.contains("private static class CaseInsensitiveComparator"));
@@ -48,110 +48,29 @@ public class IdeaDecompilerTest extends LightCodeInsightFixtureTestCase {
assertFalse(decompiled, decompiled.contains("synthetic"));
}
- public void testEnum() { doTestDecompiler(); }
- public void testDeprecations() { doTestDecompiler(); }
- public void testExtendsList() { doTestDecompiler(); }
- public void testParameters() { doTestDecompiler(); }
- public void testConstants() { doTestDecompiler(); }
- public void testAnonymous() { doTestDecompiler(); }
- public void testCodeConstructs() { doTestDecompiler(); }
-
- private void doTestDecompiler() {
- String name = PluginPathManager.getPluginHomePath("java-decompiler") + "/testData/" + getName().substring(4);
- String path = name + ".class";
- VirtualFile file = StandardFileSystems.local().findFileByPath(path);
- assertNotNull(path, file);
- file.getParent().getChildren();
- file.getParent().refresh(false, true);
-
- try {
- CharSequence text = new IdeaDecompiler().getText(file);
- assertNotNull(text);
- String expected = FileUtil.loadFile(new File(name + ".txt"), "UTF-8");
- assertEquals(StringUtil.convertLineSeparators(expected), text.toString());
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- public void testStubCompatibilityRt() {
- String path = PlatformTestUtil.getRtJarPath() + "!/";
+ public void testStubCompatibility() {
+ String path = PlatformTestUtil.getRtJarPath() + "!/java";
VirtualFile dir = StandardFileSystems.jar().findFileByPath(path);
assertNotNull(path, dir);
doTestStubCompatibility(dir);
}
- public void testStubCompatibilityIdea() {
- String path = PathManager.getHomePath() + "/out/production";
- if (!new File(path).exists()) path = PathManager.getHomePath() + "/out/classes/production";
- VirtualFile dir = StandardFileSystems.local().refreshAndFindFileByPath(path);
- assertNotNull(path, dir);
- doTestStubCompatibility(dir);
- }
-
private void doTestStubCompatibility(VirtualFile root) {
- doTestStubCompatibility(root, null);
- }
-
- private void doTestStubCompatibility(VirtualFile root, @Nullable final String textPath) {
- final int pathStart = root.getPath().length();
- final boolean compare = textPath != null && new File(textPath).exists();
-
VfsUtilCore.visitChildrenRecursively(root, new VirtualFileVisitor() {
@Override
public boolean visitFile(@NotNull VirtualFile file) {
- if (!file.isDirectory() && file.getFileType() == StdFileTypes.CLASS && !file.getName().contains("$")) {
+ if (file.isDirectory()) {
+ System.out.println(file.getPath());
+ }
+ else if (file.getFileType() == StdFileTypes.CLASS && !file.getName().contains("$")) {
PsiFile clsFile = getPsiManager().findFile(file);
assertNotNull(file.getPath(), clsFile);
-
- PsiElement mirror = ((ClsFileImpl)clsFile).getMirror().copy();
- if (textPath != null) {
- collapseCodeBlocks(mirror);
- }
+ PsiElement mirror = ((ClsFileImpl)clsFile).getMirror();
String decompiled = mirror.getText();
assertTrue(file.getPath(), decompiled.contains(file.getNameWithoutExtension()));
-
- if (textPath != null) {
- try {
- File txtFile = new File(textPath, file.getPath().substring(pathStart));
- if (!compare) {
- FileUtil.writeToFile(txtFile, decompiled.getBytes("UTF-8"));
- }
- else {
- String expected = FileUtil.loadFile(txtFile, "UTF-8");
- assertEquals(file.getPath(), expected, decompiled);
- }
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
}
return true;
}
});
}
-
- private static void collapseCodeBlocks(PsiElement original) {
- final PsiElementFactory factory = PsiElementFactory.SERVICE.getInstance(original.getProject());
- original.accept(new JavaRecursiveElementWalkingVisitor() {
- @Override
- public void visitMethod(PsiMethod method) {
- PsiCodeBlock body = method.getBody();
- if (body != null) {
- body.replace(factory.createCodeBlockFromText("{ /* collapsed */}", null));
- }
- }
-
- @Override
- public void visitClass(PsiClass aClass) {
- for (PsiClassInitializer initializer : aClass.getInitializers()) {
- PsiCodeBlock body = initializer.getBody();
- body.replace(factory.createCodeBlockFromText("{ /* collapsed */}", null));
- }
- super.visitClass(aClass);
- }
- });
- }
}