diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java index b0444ab8b4b..20ffd89f7c8 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java @@ -45,6 +45,7 @@ import java.util.Map; import java.util.Set; import static org.jetbrains.asm4.Opcodes.*; +import static org.jetbrains.jet.codegen.CodegenUtil.isDeprecated; import static org.jetbrains.jet.codegen.CodegenUtil.isInterface; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isClassObject; import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.JAVA_STRING_TYPE; @@ -152,6 +153,18 @@ public class AsmUtil { } } + public static int getDeprecatedAccessFlag(@NotNull MemberDescriptor descriptor) { + if (descriptor instanceof PropertyAccessorDescriptor) { + return isDeprecated(descriptor) + ? ACC_DEPRECATED + : getDeprecatedAccessFlag(((PropertyAccessorDescriptor) descriptor).getCorrespondingProperty()); + } + else if (isDeprecated(descriptor)) { + return ACC_DEPRECATED; + } + return 0; + } + @Nullable private static Integer specialCaseVisibility(@NotNull MemberDescriptor memberDescriptor) { DeclarationDescriptor containingDeclaration = memberDescriptor.getContainingDeclaration(); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java index 21cd79676e2..888e14cb925 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -385,6 +385,10 @@ public class FunctionCodegen extends GenerationStateAware { } if (isAbstract) flags |= ACC_ABSTRACT; + + if (CodegenUtil.isDeprecated(functionDescriptor)) { + flags |= ACC_DEPRECATED; + } return flags; } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index fd7f00db6d1..3b0e7adbbc0 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -149,6 +149,9 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { if (isAnnotation) { access |= ACC_ANNOTATION; } + if (CodegenUtil.isDeprecated(descriptor)) { + access |= ACC_DEPRECATED; + } if (isEnum) { for (JetDeclaration declaration : myClass.getDeclarations()) { if (declaration instanceof JetEnumEntry) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java index 16d6742071d..b2a5f9369e3 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java @@ -81,7 +81,7 @@ public class PropertyCodegen extends GenerationStateAware { public void generatePrimaryConstructorProperty(JetParameter p, PropertyDescriptor descriptor) { generateBackingField(p, descriptor); - int accessFlags = getVisibilityAccessFlag(descriptor) | getModalityAccessFlag(descriptor); + int accessFlags = getVisibilityAccessFlag(descriptor) | getModalityAccessFlag(descriptor) | getDeprecatedAccessFlag(descriptor); generateDefaultGetter(descriptor, accessFlags, p); if (descriptor.isVar()) { generateDefaultSetter(descriptor, accessFlags, p); @@ -114,6 +114,7 @@ public class PropertyCodegen extends GenerationStateAware { if (!propertyDescriptor.isVar()) { modifiers |= ACC_FINAL; } + modifiers |= getDeprecatedAccessFlag(propertyDescriptor); if (JetStandardLibrary.getInstance().isVolatile(propertyDescriptor)) { modifiers |= ACC_VOLATILE; } @@ -125,14 +126,16 @@ public class PropertyCodegen extends GenerationStateAware { private void generateGetter(JetProperty p, PropertyDescriptor propertyDescriptor) { JetPropertyAccessor getter = p.getGetter(); + PropertyGetterDescriptor getterDescriptor = propertyDescriptor.getGetter(); if (getter != null && getter.getBodyExpression() != null) { JvmPropertyAccessorSignature signature = typeMapper.mapGetterSignature(propertyDescriptor, kind); functionCodegen.generateMethod(getter, signature.getJvmMethodSignature(), true, signature.getPropertyTypeKotlinSignature(), - propertyDescriptor.getGetter()); + getterDescriptor); } else if (isExternallyAccessible(propertyDescriptor)) { int flags = getVisibilityAccessFlag(propertyDescriptor); flags |= getModalityAccessFlag(propertyDescriptor); + flags |= getterDescriptor == null ? getDeprecatedAccessFlag(propertyDescriptor): getDeprecatedAccessFlag(getterDescriptor); generateDefaultGetter(propertyDescriptor, flags, p); } } @@ -151,8 +154,15 @@ public class PropertyCodegen extends GenerationStateAware { } else if (isExternallyAccessible(propertyDescriptor) && propertyDescriptor.isVar()) { PropertySetterDescriptor setterDescriptor = propertyDescriptor.getSetter(); - int flags = setterDescriptor == null ? getVisibilityAccessFlag(propertyDescriptor) : getVisibilityAccessFlag(setterDescriptor); - flags |= getModalityAccessFlag(propertyDescriptor); + int flags = getModalityAccessFlag(propertyDescriptor); + if (setterDescriptor == null) { + flags |= getVisibilityAccessFlag(propertyDescriptor); + flags |= getDeprecatedAccessFlag(propertyDescriptor); + } + else { + flags |= getVisibilityAccessFlag(setterDescriptor); + flags |= getDeprecatedAccessFlag(setterDescriptor); + } generateDefaultSetter(propertyDescriptor, flags, p); } }