Back-end: write correct visibility flags for private inner classes

This commit is contained in:
Natalia.Ukhorskaya
2012-12-05 21:14:34 +04:00
parent 17fa105116
commit a739964c74
38 changed files with 531 additions and 9 deletions
@@ -96,7 +96,7 @@ public class FunctionGenTest extends CodegenTestCase {
final Method f = foo.getMethod("f");
final Object closure = f.invoke(obj);
final Class<? extends Object> aClass = closure.getClass();
final Field[] fields = aClass.getFields();
final Field[] fields = aClass.getDeclaredFields();
assertEquals(1, fields.length);
assertEquals("$s", fields[0].getName());
}
@@ -78,7 +78,7 @@ public abstract class AbstractWriteFlagsTest extends UsefulTestCase {
classVisitor = getClassVisitor(testedObject.kind, testedObject.name);
cr.accept(classVisitor, ClassReader.SKIP_CODE);
int expectedAccess = getExpectedFlags(fileText);
assertEquals("Wrong access flag", expectedAccess, classVisitor.getAccess());
assertEquals("Wrong access flag \n" + factory.asText(filename), expectedAccess, classVisitor.getAccess());
}
}
@@ -126,6 +126,9 @@ public abstract class AbstractWriteFlagsTest extends UsefulTestCase {
else if (visitorKind.equals("property")) {
return new PropertyFlagsVisitor(testedObjectName);
}
else if (visitorKind.equals("innerClass")) {
return new InnerClassFlagsVisitor(testedObjectName);
}
throw new IllegalArgumentException("Value of TESTED_OBJECT_KIND is incorrect: " + visitorKind);
}
@@ -213,4 +216,25 @@ public abstract class AbstractWriteFlagsTest extends UsefulTestCase {
return access;
}
}
private static class InnerClassFlagsVisitor extends TestClassVisitor {
private int access = 0;
private final String innerClassName;
public InnerClassFlagsVisitor(String name) {
innerClassName = name;
}
@Override
public void visitInnerClass(String innerClassInternalName, String outerClassInternalName, String name, int access) {
if (name.equals(innerClassName)) {
this.access = access;
}
}
@Override
public int getAccess() {
return access;
}
}
}
@@ -28,14 +28,14 @@ import org.jetbrains.jet.codegen.flags.AbstractWriteFlagsTest;
/** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */
@TestMetadata("compiler/testData/writeFlags")
@InnerTestClasses({WriteFlagsTestGenerated.Class.class, WriteFlagsTestGenerated.Function.class, WriteFlagsTestGenerated.Property.class})
@InnerTestClasses({WriteFlagsTestGenerated.Class.class, WriteFlagsTestGenerated.Function.class, WriteFlagsTestGenerated.InnerClass.class, WriteFlagsTestGenerated.Property.class})
public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest {
public void testAllFilesPresentInWriteFlags() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/writeFlags"), "kt", true);
}
@TestMetadata("compiler/testData/writeFlags/class")
@InnerTestClasses({Class.AccessFlags.class, Class.DeprecatedFlag.class})
@InnerTestClasses({Class.AccessFlags.class, Class.DeprecatedFlag.class, Class.Visibility.class})
public static class Class extends AbstractWriteFlagsTest {
public void testAllFilesPresentInClass() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/writeFlags/class"), "kt", true);
@@ -102,11 +102,173 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest {
}
@TestMetadata("compiler/testData/writeFlags/class/visibility")
@InnerTestClasses({Visibility.Internal.class, Visibility.Private.class, Visibility.Public.class})
public static class Visibility extends AbstractWriteFlagsTest {
public void testAllFilesPresentInVisibility() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/writeFlags/class/visibility"), "kt", true);
}
@TestMetadata("compiler/testData/writeFlags/class/visibility/internal")
public static class Internal extends AbstractWriteFlagsTest {
public void testAllFilesPresentInInternal() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/writeFlags/class/visibility/internal"), "kt", true);
}
@TestMetadata("class.kt")
public void testClass() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/internal/class.kt");
}
@TestMetadata("enum.kt")
public void testEnum() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/internal/enum.kt");
}
@TestMetadata("innerClass.kt")
public void testInnerClass() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/internal/innerClass.kt");
}
@TestMetadata("innerEnum.kt")
public void testInnerEnum() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/internal/innerEnum.kt");
}
@TestMetadata("innerObject.kt")
public void testInnerObject() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/internal/innerObject.kt");
}
@TestMetadata("innerTrait.kt")
public void testInnerTrait() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/internal/innerTrait.kt");
}
@TestMetadata("object.kt")
public void testObject() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/internal/object.kt");
}
@TestMetadata("trait.kt")
public void testTrait() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/internal/trait.kt");
}
}
@TestMetadata("compiler/testData/writeFlags/class/visibility/private")
public static class Private extends AbstractWriteFlagsTest {
public void testAllFilesPresentInPrivate() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/writeFlags/class/visibility/private"), "kt", true);
}
@TestMetadata("class.kt")
public void testClass() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/private/class.kt");
}
@TestMetadata("enum.kt")
public void testEnum() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/private/enum.kt");
}
@TestMetadata("innerClass.kt")
public void testInnerClass() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/private/innerClass.kt");
}
@TestMetadata("innerEnum.kt")
public void testInnerEnum() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/private/innerEnum.kt");
}
@TestMetadata("innerObject.kt")
public void testInnerObject() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/private/innerObject.kt");
}
@TestMetadata("innerTrait.kt")
public void testInnerTrait() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/private/innerTrait.kt");
}
@TestMetadata("object.kt")
public void testObject() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/private/object.kt");
}
@TestMetadata("trait.kt")
public void testTrait() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/private/trait.kt");
}
}
@TestMetadata("compiler/testData/writeFlags/class/visibility/public")
public static class Public extends AbstractWriteFlagsTest {
public void testAllFilesPresentInPublic() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/writeFlags/class/visibility/public"), "kt", true);
}
@TestMetadata("class.kt")
public void testClass() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/public/class.kt");
}
@TestMetadata("enum.kt")
public void testEnum() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/public/enum.kt");
}
@TestMetadata("innerClass.kt")
public void testInnerClass() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/public/innerClass.kt");
}
@TestMetadata("innerEnum.kt")
public void testInnerEnum() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/public/innerEnum.kt");
}
@TestMetadata("innerObject.kt")
public void testInnerObject() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/public/innerObject.kt");
}
@TestMetadata("innerTrait.kt")
public void testInnerTrait() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/public/innerTrait.kt");
}
@TestMetadata("object.kt")
public void testObject() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/public/object.kt");
}
@TestMetadata("trait.kt")
public void testTrait() throws Exception {
doTest("compiler/testData/writeFlags/class/visibility/public/trait.kt");
}
}
public static Test innerSuite() {
TestSuite suite = new TestSuite("Visibility");
suite.addTestSuite(Visibility.class);
suite.addTestSuite(Internal.class);
suite.addTestSuite(Private.class);
suite.addTestSuite(Public.class);
return suite;
}
}
public static Test innerSuite() {
TestSuite suite = new TestSuite("Class");
suite.addTestSuite(Class.class);
suite.addTestSuite(AccessFlags.class);
suite.addTestSuite(DeprecatedFlag.class);
suite.addTest(Visibility.innerSuite());
return suite;
}
}
@@ -194,8 +356,61 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest {
}
}
@TestMetadata("compiler/testData/writeFlags/innerClass")
@InnerTestClasses({InnerClass.Visibility.class})
public static class InnerClass extends AbstractWriteFlagsTest {
public void testAllFilesPresentInInnerClass() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/writeFlags/innerClass"), "kt", true);
}
@TestMetadata("compiler/testData/writeFlags/innerClass/visibility")
public static class Visibility extends AbstractWriteFlagsTest {
public void testAllFilesPresentInVisibility() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/writeFlags/innerClass/visibility"), "kt", true);
}
@TestMetadata("internal.kt")
public void testInternal() throws Exception {
doTest("compiler/testData/writeFlags/innerClass/visibility/internal.kt");
}
@TestMetadata("internalClassObject.kt")
public void testInternalClassObject() throws Exception {
doTest("compiler/testData/writeFlags/innerClass/visibility/internalClassObject.kt");
}
@TestMetadata("private.kt")
public void testPrivate() throws Exception {
doTest("compiler/testData/writeFlags/innerClass/visibility/private.kt");
}
@TestMetadata("privateClassObject.kt")
public void testPrivateClassObject() throws Exception {
doTest("compiler/testData/writeFlags/innerClass/visibility/privateClassObject.kt");
}
@TestMetadata("public.kt")
public void testPublic() throws Exception {
doTest("compiler/testData/writeFlags/innerClass/visibility/public.kt");
}
@TestMetadata("publicClassObject.kt")
public void testPublicClassObject() throws Exception {
doTest("compiler/testData/writeFlags/innerClass/visibility/publicClassObject.kt");
}
}
public static Test innerSuite() {
TestSuite suite = new TestSuite("InnerClass");
suite.addTestSuite(InnerClass.class);
suite.addTestSuite(Visibility.class);
return suite;
}
}
@TestMetadata("compiler/testData/writeFlags/property")
@InnerTestClasses({Property.DeprecatedFlag.class})
@InnerTestClasses({Property.DeprecatedFlag.class, Property.Visibility.class})
public static class Property extends AbstractWriteFlagsTest {
public void testAllFilesPresentInProperty() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/writeFlags/property"), "kt", true);
@@ -219,10 +434,34 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest {
}
@TestMetadata("compiler/testData/writeFlags/property/visibility")
public static class Visibility extends AbstractWriteFlagsTest {
public void testAllFilesPresentInVisibility() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/writeFlags/property/visibility"), "kt", true);
}
@TestMetadata("internal.kt")
public void testInternal() throws Exception {
doTest("compiler/testData/writeFlags/property/visibility/internal.kt");
}
@TestMetadata("private.kt")
public void testPrivate() throws Exception {
doTest("compiler/testData/writeFlags/property/visibility/private.kt");
}
@TestMetadata("public.kt")
public void testPublic() throws Exception {
doTest("compiler/testData/writeFlags/property/visibility/public.kt");
}
}
public static Test innerSuite() {
TestSuite suite = new TestSuite("Property");
suite.addTestSuite(Property.class);
suite.addTestSuite(DeprecatedFlag.class);
suite.addTestSuite(Visibility.class);
return suite;
}
}
@@ -232,6 +471,7 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest {
suite.addTestSuite(WriteFlagsTestGenerated.class);
suite.addTest(Class.innerSuite());
suite.addTest(Function.innerSuite());
suite.addTest(InnerClass.innerSuite());
suite.addTest(Property.innerSuite());
return suite;
}