diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index 67726fce930..22d08543abb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -22,6 +22,8 @@ import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; +import org.jetbrains.jet.lang.descriptors.annotations.Annotated; +import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.calls.CallResolverUtil; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -269,6 +271,13 @@ public class DescriptorRendererImpl implements DescriptorRenderer { } } + private void renderAnnotations(Annotated annotated, StringBuilder builder) { + if (!modifiers) return; + for (AnnotationDescriptor annotation : annotated.getAnnotations()) { + builder.append(renderType(annotation.getType())).append(" "); + } + } + private void renderVisibility(Visibility visibility, StringBuilder builder) { if (!modifiers) return; if ("package".equals(visibility.toString())) { @@ -364,6 +373,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { /* FUNCTIONS */ private void renderFunction(FunctionDescriptor descriptor, StringBuilder builder) { if (!startFromName) { + renderAnnotations(descriptor, builder); renderVisibility(descriptor.getVisibility(), builder); renderModality(descriptor.getModality(), builder); builder.append(renderKeyword("fun")).append(" "); @@ -384,6 +394,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { } private void renderConstructor(ConstructorDescriptor constructorDescriptor, StringBuilder builder) { + renderAnnotations(constructorDescriptor, builder); renderVisibility(constructorDescriptor.getVisibility(), builder); builder.append(renderKeyword("ctor")).append(" "); @@ -471,6 +482,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { private void renderProperty(PropertyDescriptor descriptor, StringBuilder builder) { if (!startFromName) { + renderAnnotations(descriptor, builder); renderVisibility(descriptor.getVisibility(), builder); renderModality(descriptor.getModality(), builder); renderValVarPrefix(descriptor, builder); @@ -492,6 +504,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { boolean isNotClassObject = descriptor.getKind() != ClassKind.CLASS_OBJECT; if (!startFromName) { if (isNotClassObject) { + renderAnnotations(descriptor, builder); renderVisibility(descriptor.getVisibility(), builder); if (descriptor.getKind() != ClassKind.TRAIT && descriptor.getKind() != ClassKind.OBJECT) { renderModality(descriptor.getModality(), builder); diff --git a/compiler/testData/renderer/Classes.kt b/compiler/testData/renderer/Classes.kt index 90667a8bb18..7ba2c42ad79 100644 --- a/compiler/testData/renderer/Classes.kt +++ b/compiler/testData/renderer/Classes.kt @@ -26,7 +26,7 @@ trait TheTrait { //package rendererTest defined in root package //internal final annotation class TheAnnotation : jet.Annotation defined in rendererTest -//public open class TheClass defined in rendererTest +//rendererTest.TheAnnotation public open class TheClass defined in rendererTest // defined in rendererTest.TheClass // defined in rendererTest.TheClass //private final val privateVal : jet.Int defined in rendererTest.TheClass diff --git a/compiler/testData/renderer/GlobalFunctions.kt b/compiler/testData/renderer/GlobalFunctions.kt index a7ee3176280..f5acaf2503d 100644 --- a/compiler/testData/renderer/GlobalFunctions.kt +++ b/compiler/testData/renderer/GlobalFunctions.kt @@ -17,6 +17,8 @@ trait Bar fun

funTypeParameterWithTwoUpperBounds() where P : Foo, P : Bar = 17 +deprecated("") fun deprecatedFun() + //package rendererTest defined in root package //public final fun pub() : Unit defined in rendererTest //internal final fun int() : jet.String defined in rendererTest @@ -33,3 +35,4 @@ fun

funTypeParameterWithTwoUpperBounds() where P : Foo, P : Bar = 17 //internal trait Bar defined in rendererTest //internal final fun

funTypeParameterWithTwoUpperBounds() : jet.Int where P : rendererTest.Foo, P : rendererTest.Bar defined in rendererTest //

defined in rendererTest.funTypeParameterWithTwoUpperBounds +//jet.deprecated internal final fun deprecatedFun() : Unit defined in rendererTest diff --git a/compiler/testData/renderer/GlobalProperties.kt b/compiler/testData/renderer/GlobalProperties.kt index 27daff1e950..4446fdadd77 100644 --- a/compiler/testData/renderer/GlobalProperties.kt +++ b/compiler/testData/renderer/GlobalProperties.kt @@ -11,6 +11,8 @@ private var private = 5 public val Int.ext : Int get() {} +deprecated("") val deprecatedVal = 5 + //package rendererTest defined in root package //public final val pub : jet.String defined in rendererTest //internal final var int : jet.String defined in rendererTest @@ -18,3 +20,4 @@ get() {} //private final var private : jet.Int defined in rendererTest //public final val jet.Int.ext : jet.Int defined in rendererTest //public final fun jet.Int.() : jet.Int defined in rendererTest +//jet.deprecated internal final val deprecatedVal : jet.Int defined in rendererTest diff --git a/compiler/testData/renderer/KeywordsInNames.kt b/compiler/testData/renderer/KeywordsInNames.kt index 9f72fd68c8f..5aa7de0dd4b 100644 --- a/compiler/testData/renderer/KeywordsInNames.kt +++ b/compiler/testData/renderer/KeywordsInNames.kt @@ -1,6 +1,8 @@ +annotation class `true` + val `val` = 5 -trait `trait` +`true` trait `trait` class `class`<`in`>(p: `in`?) { class `class` @@ -11,8 +13,9 @@ val `in` = `class`<`trait`>(null) fun `trait`.`fun`(`false`: `trait`): `trait` +//internal final annotation class `true` : jet.Annotation defined in root package //internal final val `val` : jet.Int defined in root package -//internal trait `trait` defined in root package +//`true` internal trait `trait` defined in root package //internal final class `class`<`in`> defined in root package //<`in`> defined in `class` //value-parameter val p : `in`? defined in `class`.