Write KotlinSyntheticClass annotation on when-by-enum mapping classes

This commit is contained in:
Alexander Udalov
2015-02-16 15:34:09 +03:00
parent 6ce8d6bd2e
commit e705ff2517
4 changed files with 15 additions and 0 deletions
@@ -30,6 +30,8 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static org.jetbrains.kotlin.codegen.AsmUtil.writeKotlinSyntheticClassAnnotation;
import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass.Kind.WHEN_ON_ENUM_MAPPINGS;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE;
import static org.jetbrains.org.objectweb.asm.Opcodes.*; import static org.jetbrains.org.objectweb.asm.Opcodes.*;
@@ -56,6 +58,8 @@ public class MappingClassesForWhenByEnumCodegen {
generateFields(cb, mappings); generateFields(cb, mappings);
generateInitialization(cb, mappings); generateInitialization(cb, mappings);
writeKotlinSyntheticClassAnnotation(cb, WHEN_ON_ENUM_MAPPINGS);
cb.done(); cb.done();
} }
@@ -143,6 +143,15 @@ public class KotlinSyntheticClassAnnotationTest extends CodegenTestCase {
); );
} }
public void testWhenMappings() {
doTestKotlinSyntheticClass(
"enum class E { A }\n" +
"val x = when (E.A) { E.A -> 1; else -> 0; }",
"WhenMappings",
WHEN_ON_ENUM_MAPPINGS
);
}
private void doTestKotlinSyntheticClass( private void doTestKotlinSyntheticClass(
@NotNull String code, @NotNull String code,
@NotNull String classFilePart, @NotNull String classFilePart,
@@ -78,6 +78,7 @@ public final class JvmAnnotationNames {
CALLABLE_REFERENCE_WRAPPER, CALLABLE_REFERENCE_WRAPPER,
LOCAL_FUNCTION, LOCAL_FUNCTION,
ANONYMOUS_FUNCTION, ANONYMOUS_FUNCTION,
WHEN_ON_ENUM_MAPPINGS,
; ;
} }
} }
@@ -34,5 +34,6 @@ public @interface KotlinSyntheticClass {
CALLABLE_REFERENCE_WRAPPER, CALLABLE_REFERENCE_WRAPPER,
LOCAL_FUNCTION, LOCAL_FUNCTION,
ANONYMOUS_FUNCTION, ANONYMOUS_FUNCTION,
WHEN_ON_ENUM_MAPPINGS,
} }
} }