[java] module stub, module name index, module-info.class files reading

This commit is contained in:
Roman Shevchenko
2016-07-12 18:30:57 +02:00
parent fa9e98cd84
commit 25610a8713
29 changed files with 595 additions and 76 deletions
@@ -0,0 +1,5 @@
// IntelliJ API Decompiler stub source generated from a class file
// Implementation of methods is not available
module M.N { /* compiled code */ }
@@ -0,0 +1,2 @@
PsiJavaFileStub []
PsiJavaModuleStub:M.N
@@ -175,6 +175,11 @@ public class ClsMirrorBuildingTest extends LightIdeaTestCase {
assertFalse(isInner("weird/ToStringStyle"));
}
public void testModuleInfo() {
String testDir = getTestDataDir();
doTest(testDir + "../stubBuilder/module-info.class", testDir + "module-info.txt");
}
private static String getTestDataDir() {
return JavaTestUtil.getJavaTestDataPath() + "/psi/cls/mirror/";
}
@@ -412,6 +412,18 @@ public class ClsPsiTest extends LightIdeaTestCase {
assertEquals("@pkg.TypeAnnotations.TA(\"parameter\") int", p1.getType().getCanonicalText(true));
}
public void testModuleInfo() {
PsiJavaFile file = getFile("../../stubBuilder/module-info");
assertEquals(LanguageLevel.JDK_1_9, file.getLanguageLevel());
PsiJavaModule module = file.getModuleDeclaration();
assertNotNull(module);
assertEquals("M.N", module.getModuleName());
assertNull(file.getPackageStatement());
assertEquals(0, file.getClasses().length);
}
private PsiJavaFile getFile() {
return getFile(getTestName(false));
}
@@ -51,6 +51,13 @@ public class ClsStubBuilderTest extends LightIdeaTestCase {
doTest(clsFile, getTestName(false) + ".txt");
}
public void testModuleInfo() {
String clsFilePath = JavaTestUtil.getJavaTestDataPath() + "/psi/cls/stubBuilder/module-info.class";
VirtualFile clsFile = LocalFileSystem.getInstance().findFileByPath(clsFilePath);
assertNotNull(clsFile);
doTest(clsFile, "module-info.txt");
}
private void doTest(String className) {
VirtualFile clsFile = findFile(className);
assertNotNull(clsFile);
@@ -79,7 +86,7 @@ public class ClsStubBuilderTest extends LightIdeaTestCase {
try {
PsiFileStub stub = ClsFileImpl.buildFileStub(clsFile, clsFile.contentsToByteArray());
assertNotNull(stub);
String actual = ((StubBase)stub).printTree();
String actual = ((StubBase)stub).printTree().trim();
File resultFile = new File(JavaTestUtil.getJavaTestDataPath() + "/psi/cls/stubBuilder/" + resultFileName);
if (!resultFile.exists()) {
@@ -88,7 +95,7 @@ public class ClsStubBuilderTest extends LightIdeaTestCase {
fail("No test data found. Created one");
}
String expected = StringUtil.convertLineSeparators(FileUtil.loadFile(resultFile));
String expected = StringUtil.convertLineSeparators(FileUtil.loadFile(resultFile)).trim();
assertEquals(expected, actual);
}
@@ -486,6 +486,15 @@ public class JavaStubBuilderTest extends LightIdeaTestCase {
" IMPLEMENTS_LIST:PsiRefListStub[IMPLEMENTS_LIST:]\n");
}
public void testModuleInfo() {
doTest("module M. /*ignore me*/ N {\n" +
" requires A.B;\n" +
"}",
"PsiJavaFileStub []\n" +
" MODULE:PsiJavaModuleStub:M.N\n");
}
public void testSOEProof() {
StringBuilder sb = new StringBuilder();
SecureRandom random = new SecureRandom();