From 12893cec546de6afc03f1c7b981b520f0c0f3b65 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 8 Jun 2012 18:42:42 +0400 Subject: [PATCH] Added JetMethod.flags() to replace kind(), with adding extra functionality (modality and visibility marking). --- .../jetbrains/jet/codegen/FunctionCodegen.java | 2 +- .../jetbrains/jet/codegen/PropertyCodegen.java | 2 +- .../kotlin/JetMethodAnnotationWriter.java | 6 +++--- .../resolve/java/JavaDescriptorResolver.java | 2 +- .../java/JavaDescriptorResolverHelper.java | 6 +++--- .../jet/lang/resolve/java/JvmStdlibNames.java | 9 +++++---- .../resolve/java/kt/JetMethodAnnotation.java | 18 +++++++++++------- .../src/jet/runtime/typeinfo/JetMethod.java | 16 ++++++++++++---- 8 files changed, 37 insertions(+), 24 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java index 52a29b50f44..a13eb684a54 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -136,7 +136,7 @@ public class FunctionCodegen { throw new IllegalStateException(); } JetMethodAnnotationWriter aw = JetMethodAnnotationWriter.visitAnnotation(mv); - aw.writeKind(JvmStdlibNames.JET_METHOD_KIND_REGULAR); + aw.writeFlags(JvmStdlibNames.JET_METHOD_FLAGS_DEFAULT); aw.writeNullableReturnType(functionDescriptor.getReturnType().isNullable()); aw.writeTypeParameters(jvmSignature.getKotlinTypeParameter()); aw.writeReturnType(jvmSignature.getKotlinReturnType()); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java index 98cc6601612..493b796a187 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java @@ -221,7 +221,7 @@ public class PropertyCodegen { public static void generateJetPropertyAnnotation(MethodVisitor mv, @NotNull String kotlinType, @NotNull String typeParameters) { JetMethodAnnotationWriter aw = JetMethodAnnotationWriter.visitAnnotation(mv); - aw.writeKind(JvmStdlibNames.JET_METHOD_KIND_PROPERTY); + aw.writeFlags(JvmStdlibNames.JET_METHOD_FLAG_PROPERTY); aw.writeTypeParameters(typeParameters); aw.writePropertyType(kotlinType); aw.visitEnd(); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/signature/kotlin/JetMethodAnnotationWriter.java b/compiler/backend/src/org/jetbrains/jet/codegen/signature/kotlin/JetMethodAnnotationWriter.java index 4263f530fe9..fd0eeea8577 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/signature/kotlin/JetMethodAnnotationWriter.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/signature/kotlin/JetMethodAnnotationWriter.java @@ -31,9 +31,9 @@ public class JetMethodAnnotationWriter { this.av = av; } - public void writeKind(int kind) { - if (kind != JvmStdlibNames.JET_METHOD_KIND_DEFAULT) { - av.visit(JvmStdlibNames.JET_METHOD_KIND_FIELD, kind); + public void writeFlags(int flags) { + if (flags != JvmStdlibNames.JET_METHOD_FLAGS_DEFAULT) { + av.visit(JvmStdlibNames.JET_METHOD_FLAGS_FIELD, flags); } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 6ee467955d9..81ad8730af0 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -1597,7 +1597,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes } // TODO: ugly - if (method.getJetMethod().kind() == JvmStdlibNames.JET_METHOD_KIND_PROPERTY) { + if ((method.getJetMethod().flags() & JvmStdlibNames.JET_METHOD_FLAG_PROPERTY) != 0) { return null; } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java index ed4c34caba1..f9606ef0396 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java @@ -125,7 +125,7 @@ class JavaDescriptorResolverHelper { NamedMembers members = getNamedMembers(Name.identifier(propertyName)); // TODO: some java properties too - if (method.getJetMethod().kind() == JvmStdlibNames.JET_METHOD_KIND_PROPERTY) { + if ((method.getJetMethod().flags() & JvmStdlibNames.JET_METHOD_FLAG_PROPERTY) != 0) { int i = 0; @@ -167,7 +167,7 @@ class JavaDescriptorResolverHelper { String propertyName = propertyParseResult.getPropertyName(); NamedMembers members = getNamedMembers(Name.identifier(propertyName)); - if (method.getJetMethod().kind() == JvmStdlibNames.JET_METHOD_KIND_PROPERTY) { + if ((method.getJetMethod().flags() & JvmStdlibNames.JET_METHOD_FLAG_PROPERTY) != 0) { if (method.getParameters().size() == 0) { // TODO: report error properly throw new IllegalStateException(); @@ -204,7 +204,7 @@ class JavaDescriptorResolverHelper { } } - if (method.getJetMethod().kind() != JvmStdlibNames.JET_METHOD_KIND_PROPERTY) { + if ((method.getJetMethod().flags() & JvmStdlibNames.JET_METHOD_FLAG_PROPERTY) == 0) { NamedMembers namedMembers = getNamedMembers(Name.identifier(method.getName())); namedMembers.addMethod(method); } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmStdlibNames.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmStdlibNames.java index d0ee5ce11e7..354be51f0ec 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmStdlibNames.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmStdlibNames.java @@ -40,15 +40,16 @@ public class JvmStdlibNames { public static final JvmClassName JET_METHOD = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.JetMethod"); + @Deprecated public static final String JET_METHOD_KIND_FIELD = "kind"; + public static final String JET_METHOD_FLAGS_FIELD = "flags"; public static final String JET_METHOD_NULLABLE_RETURN_TYPE_FIELD = "nullableReturnType"; public static final String JET_METHOD_RETURN_TYPE_FIELD = "returnType"; public static final String JET_METHOD_TYPE_PARAMETERS_FIELD = "typeParameters"; public static final String JET_METHOD_PROPERTY_TYPE_FIELD = "propertyType"; - - public static final int JET_METHOD_KIND_REGULAR = 0; - public static final int JET_METHOD_KIND_PROPERTY = 1; - public static final int JET_METHOD_KIND_DEFAULT = JET_METHOD_KIND_REGULAR; + + public static final int JET_METHOD_FLAGS_DEFAULT = 0; + public static final int JET_METHOD_FLAG_PROPERTY = 1; public static final JvmClassName JET_CONSTRUCTOR = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.JetConstructor"); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kt/JetMethodAnnotation.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kt/JetMethodAnnotation.java index 78aab02ac81..addce51be90 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kt/JetMethodAnnotation.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kt/JetMethodAnnotation.java @@ -31,14 +31,18 @@ public class JetMethodAnnotation extends PsiAnnotationWrapper { super(psiAnnotation); } - private int kind; - private boolean kindInitialized; - public int kind() { - if (!kindInitialized) { - kind = getIntAttribute(JvmStdlibNames.JET_METHOD_KIND_FIELD, JvmStdlibNames.JET_METHOD_KIND_DEFAULT); - kindInitialized = true; + private int flags; + private boolean flagsInitialized; + public int flags() { + if (!flagsInitialized) { + flags = getIntAttribute(JvmStdlibNames.JET_METHOD_FLAGS_FIELD, -1); + if (flags == -1) { + // for compatibility + flags = getIntAttribute(JvmStdlibNames.JET_METHOD_KIND_FIELD, JvmStdlibNames.JET_METHOD_FLAGS_DEFAULT); + } + flagsInitialized = true; } - return kind; + return flags; } private String typeParameters; diff --git a/runtime/src/jet/runtime/typeinfo/JetMethod.java b/runtime/src/jet/runtime/typeinfo/JetMethod.java index e3248836fda..c256832d14f 100644 --- a/runtime/src/jet/runtime/typeinfo/JetMethod.java +++ b/runtime/src/jet/runtime/typeinfo/JetMethod.java @@ -33,10 +33,18 @@ import java.lang.annotation.Target; @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface JetMethod { - int KIND_REGULAR = 0; - int KIND_PROPERTY = 1; - - int kind() default KIND_REGULAR; + /** + * @deprecated use flags instead + */ + @Deprecated + int kind() default 0; + + /** + * Bit 0 - property/not property + * + * @return flags for method + */ + int flags() default 0; /** * @return type projections or empty