KT-2589 fix: putting some order on bytecode flags
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.jet.codegen;
|
||||
|
||||
import org.jetbrains.asm4.Opcodes;
|
||||
import org.jetbrains.jet.ConfigurationKind;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
@@ -81,7 +82,7 @@ public class PropertyGenTest extends CodegenTestCase {
|
||||
final Field field = fields[0];
|
||||
field.setAccessible(true);
|
||||
assertEquals("x", field.getName());
|
||||
assertEquals(Modifier.PROTECTED | Modifier.STATIC | Modifier.FINAL, field.getModifiers());
|
||||
assertEquals(Modifier.STATIC | Modifier.FINAL, field.getModifiers());
|
||||
assertEquals(239, field.get(null));
|
||||
}
|
||||
|
||||
@@ -279,4 +280,32 @@ public class PropertyGenTest extends CodegenTestCase {
|
||||
blackBoxFile("regressions/kt2509.kt");
|
||||
}
|
||||
|
||||
public void testKt2589() throws Exception {
|
||||
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
|
||||
loadFile("regressions/kt2589.kt");
|
||||
final Class aClass = loadImplementationClass(generateClassesInFile(), "Foo");
|
||||
assertTrue((aClass.getModifiers() & Opcodes.ACC_FINAL) == 0);
|
||||
|
||||
try {
|
||||
Field foo = aClass.getDeclaredField("foo");
|
||||
assertTrue((foo.getModifiers() & Opcodes.ACC_PRIVATE) != 0);
|
||||
assertTrue((foo.getModifiers() & Opcodes.ACC_FINAL) == 0);
|
||||
|
||||
Field bar = aClass.getDeclaredField("bar");
|
||||
assertTrue((bar.getModifiers() & Opcodes.ACC_PRIVATE) != 0);
|
||||
assertTrue((bar.getModifiers() & Opcodes.ACC_FINAL) != 0);
|
||||
|
||||
Method getFoo = aClass.getDeclaredMethod("getFoo");
|
||||
assertTrue((getFoo.getModifiers() & Opcodes.ACC_PUBLIC) != 0);
|
||||
assertTrue((getFoo.getModifiers() & Opcodes.ACC_FINAL) != 0);
|
||||
|
||||
Method getBar = aClass.getDeclaredMethod("getBar");
|
||||
assertTrue((getBar.getModifiers() & Opcodes.ACC_PROTECTED) != 0);
|
||||
assertTrue((getBar.getModifiers() & Opcodes.ACC_FINAL) == 0);
|
||||
}
|
||||
catch (Throwable e) {
|
||||
System.out.println(generateToText());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.jet.codegen;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import org.jetbrains.asm4.Opcodes;
|
||||
import org.jetbrains.jet.ConfigurationKind;
|
||||
import org.jetbrains.jet.lang.parsing.JetParserDefinition;
|
||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinition;
|
||||
@@ -106,7 +107,8 @@ public class ScriptGenTest extends CodegenTestCase {
|
||||
final Class aClass = loadClass("Fib", generateClassesInFile());
|
||||
try {
|
||||
Constructor constructor = aClass.getConstructor(int.class);
|
||||
Field result = aClass.getField("result");
|
||||
Field result = aClass.getDeclaredField("result");
|
||||
result.setAccessible(true);
|
||||
Object script = constructor.newInstance(5);
|
||||
assertEquals(8,result.get(script));
|
||||
}
|
||||
@@ -121,7 +123,8 @@ public class ScriptGenTest extends CodegenTestCase {
|
||||
final Class aClass = loadClass("test.Fibwp", generateClassesInFile());
|
||||
try {
|
||||
Constructor constructor = aClass.getConstructor(int.class);
|
||||
Field result = aClass.getField("result");
|
||||
Field result = aClass.getDeclaredField("result");
|
||||
result.setAccessible(true);
|
||||
Object script = constructor.newInstance(5);
|
||||
assertEquals(8,result.get(script));
|
||||
}
|
||||
@@ -136,11 +139,17 @@ public class ScriptGenTest extends CodegenTestCase {
|
||||
final Class aClass = loadClass("Fibwprunner", generateClassesInFile());
|
||||
try {
|
||||
Constructor constructor = aClass.getConstructor();
|
||||
Field result = aClass.getField("result");
|
||||
Field result = aClass.getDeclaredField("result");
|
||||
result.setAccessible(true);
|
||||
Method resultMethod = aClass.getDeclaredMethod("getResult");
|
||||
assertTrue((resultMethod.getModifiers() & Opcodes.ACC_FINAL) != 0);
|
||||
assertTrue((resultMethod.getModifiers() & Opcodes.ACC_PUBLIC) != 0);
|
||||
Field rv = aClass.getField("rv");
|
||||
assertTrue((result.getModifiers() & Opcodes.ACC_PRIVATE) != 0);
|
||||
Object script = constructor.newInstance();
|
||||
assertEquals(12,rv.get(script));
|
||||
assertEquals(8,result.get(script));
|
||||
assertEquals(8,resultMethod.invoke(script));
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
|
||||
Reference in New Issue
Block a user