rename platformName annotation to jvmName

This commit is contained in:
Dmitry Jemerov
2015-08-24 21:05:26 +02:00
parent 3465126bee
commit 4743a69d76
26 changed files with 249 additions and 249 deletions
@@ -668,7 +668,7 @@ public class JetTypeMapper {
@NotNull @NotNull
private String mapFunctionName(@NotNull FunctionDescriptor descriptor) { private String mapFunctionName(@NotNull FunctionDescriptor descriptor) {
if (!(descriptor instanceof JavaCallableMemberDescriptor)) { if (!(descriptor instanceof JavaCallableMemberDescriptor)) {
String platformName = getPlatformName(descriptor); String platformName = getJvmName(descriptor);
if (platformName != null) return platformName; if (platformName != null) return platformName;
} }
@@ -24,6 +24,8 @@ import org.jetbrains.kotlin.diagnostics.rendering.Renderers;
import org.jetbrains.kotlin.renderer.DescriptorRenderer; import org.jetbrains.kotlin.renderer.DescriptorRenderer;
import org.jetbrains.kotlin.renderer.Renderer; import org.jetbrains.kotlin.renderer.Renderer;
import static org.jetbrains.kotlin.diagnostics.rendering.Renderers.STRING;
public class DefaultErrorMessagesJvm implements DefaultErrorMessages.Extension { public class DefaultErrorMessagesJvm implements DefaultErrorMessages.Extension {
private static final Renderer<ConflictingJvmDeclarationsData> CONFLICTING_JVM_DECLARATIONS_DATA = new Renderer<ConflictingJvmDeclarationsData>() { private static final Renderer<ConflictingJvmDeclarationsData> CONFLICTING_JVM_DECLARATIONS_DATA = new Renderer<ConflictingJvmDeclarationsData>() {
@@ -50,6 +52,8 @@ public class DefaultErrorMessagesJvm implements DefaultErrorMessages.Extension {
MAP.put(ErrorsJvm.OVERLOADS_WITHOUT_DEFAULT_ARGUMENTS, "''jvmOverloads'' annotation has no effect for methods without default arguments"); MAP.put(ErrorsJvm.OVERLOADS_WITHOUT_DEFAULT_ARGUMENTS, "''jvmOverloads'' annotation has no effect for methods without default arguments");
MAP.put(ErrorsJvm.OVERLOADS_ABSTRACT, "''jvmOverloads'' annotation cannot be used on abstract methods"); MAP.put(ErrorsJvm.OVERLOADS_ABSTRACT, "''jvmOverloads'' annotation cannot be used on abstract methods");
MAP.put(ErrorsJvm.OVERLOADS_PRIVATE, "''jvmOverloads'' annotation has no effect on private and local declarations"); MAP.put(ErrorsJvm.OVERLOADS_PRIVATE, "''jvmOverloads'' annotation has no effect on private and local declarations");
MAP.put(ErrorsJvm.INAPPLICABLE_JVM_NAME, "''jvmName'' annotation is not applicable to this declaration");
MAP.put(ErrorsJvm.ILLEGAL_JVM_NAME, "Illegal JVM name: ''{0}''", STRING);
MAP.put(ErrorsJvm.NATIVE_DECLARATION_CANNOT_BE_ABSTRACT, "Native declaration can not be abstract"); MAP.put(ErrorsJvm.NATIVE_DECLARATION_CANNOT_BE_ABSTRACT, "Native declaration can not be abstract");
MAP.put(ErrorsJvm.NATIVE_DECLARATION_CANNOT_HAVE_BODY, "Native declaration can not have a body"); MAP.put(ErrorsJvm.NATIVE_DECLARATION_CANNOT_HAVE_BODY, "Native declaration can not have a body");
MAP.put(ErrorsJvm.NATIVE_DECLARATION_IN_TRAIT, "Members of interfaces can not be native"); MAP.put(ErrorsJvm.NATIVE_DECLARATION_IN_TRAIT, "Members of interfaces can not be native");
@@ -42,6 +42,9 @@ public interface ErrorsJvm {
DiagnosticFactory0<JetDeclaration> OVERRIDE_CANNOT_BE_STATIC = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE); DiagnosticFactory0<JetDeclaration> OVERRIDE_CANNOT_BE_STATIC = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
DiagnosticFactory0<JetDeclaration> JVM_STATIC_NOT_IN_OBJECT = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE); DiagnosticFactory0<JetDeclaration> JVM_STATIC_NOT_IN_OBJECT = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
DiagnosticFactory0<PsiElement> INAPPLICABLE_JVM_NAME = DiagnosticFactory0.create(ERROR);
DiagnosticFactory1<JetAnnotationEntry, String> ILLEGAL_JVM_NAME = DiagnosticFactory1.create(ERROR);
DiagnosticFactory0<JetDeclaration> OVERLOADS_WITHOUT_DEFAULT_ARGUMENTS = DiagnosticFactory0.create(WARNING, DECLARATION_SIGNATURE); DiagnosticFactory0<JetDeclaration> OVERLOADS_WITHOUT_DEFAULT_ARGUMENTS = DiagnosticFactory0.create(WARNING, DECLARATION_SIGNATURE);
DiagnosticFactory0<JetDeclaration> OVERLOADS_ABSTRACT = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE); DiagnosticFactory0<JetDeclaration> OVERLOADS_ABSTRACT = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
DiagnosticFactory0<JetDeclaration> OVERLOADS_PRIVATE = DiagnosticFactory0.create(WARNING, DECLARATION_SIGNATURE); DiagnosticFactory0<JetDeclaration> OVERLOADS_PRIVATE = DiagnosticFactory0.create(WARNING, DECLARATION_SIGNATURE);
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.cfg.WhenChecker
import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.StorageComponentContainer
import org.jetbrains.kotlin.container.useImpl import org.jetbrains.kotlin.container.useImpl
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.descriptors.annotations.KotlinRetention import org.jetbrains.kotlin.descriptors.annotations.KotlinRetention
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
import org.jetbrains.kotlin.diagnostics.DiagnosticSink import org.jetbrains.kotlin.diagnostics.DiagnosticSink
@@ -32,6 +33,7 @@ import org.jetbrains.kotlin.load.kotlin.JavaAnnotationCallChecker
import org.jetbrains.kotlin.load.kotlin.JavaAnnotationMethodCallChecker import org.jetbrains.kotlin.load.kotlin.JavaAnnotationMethodCallChecker
import org.jetbrains.kotlin.load.kotlin.nativeDeclarations.NativeFunChecker import org.jetbrains.kotlin.load.kotlin.nativeDeclarations.NativeFunChecker
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.annotations.findPublicFieldAnnotation import org.jetbrains.kotlin.resolve.annotations.findPublicFieldAnnotation
@@ -61,6 +63,7 @@ public object JvmPlatformConfigurator : PlatformConfigurator(
DynamicTypesSettings(), DynamicTypesSettings(),
additionalDeclarationCheckers = listOf( additionalDeclarationCheckers = listOf(
PlatformStaticAnnotationChecker(), PlatformStaticAnnotationChecker(),
JvmNameAnnotationChecker(),
LocalFunInlineChecker(), LocalFunInlineChecker(),
ReifiedTypeParameterAnnotationChecker(), ReifiedTypeParameterAnnotationChecker(),
NativeFunChecker(), NativeFunChecker(),
@@ -164,6 +167,44 @@ public class PlatformStaticAnnotationChecker : DeclarationChecker {
} }
} }
public class JvmNameAnnotationChecker : DeclarationChecker {
override fun check(declaration: JetDeclaration, descriptor: DeclarationDescriptor, diagnosticHolder: DiagnosticSink, bindingContext: BindingContext) {
val platformNameAnnotation = DescriptorUtils.getJvmNameAnnotation(descriptor)
if (platformNameAnnotation != null) {
checkDeclaration(descriptor, platformNameAnnotation, diagnosticHolder)
}
}
private fun checkDeclaration(descriptor: DeclarationDescriptor,
annotation: AnnotationDescriptor,
diagnosticHolder: DiagnosticSink) {
val annotationEntry = DescriptorToSourceUtils.getSourceFromAnnotation(annotation) ?: return
if (descriptor is FunctionDescriptor && !isRenamableFunction(descriptor)) {
diagnosticHolder.report(ErrorsJvm.INAPPLICABLE_JVM_NAME.on(annotationEntry))
}
val value = DescriptorUtils.getJvmName(descriptor)
if (value == null || !Name.isValidIdentifier(value)) {
diagnosticHolder.report(ErrorsJvm.ILLEGAL_JVM_NAME.on(annotationEntry, value))
}
if (descriptor is CallableMemberDescriptor) {
val callableMemberDescriptor = descriptor
if (DescriptorUtils.isOverride(callableMemberDescriptor) || callableMemberDescriptor.modality.isOverridable) {
diagnosticHolder.report(ErrorsJvm.INAPPLICABLE_JVM_NAME.on(annotationEntry))
}
}
}
private fun isRenamableFunction(descriptor: FunctionDescriptor): Boolean {
val containingDescriptor = descriptor.containingDeclaration
return containingDescriptor is PackageFragmentDescriptor || containingDescriptor is ClassDescriptor
}
}
public class OverloadsAnnotationChecker: DeclarationChecker { public class OverloadsAnnotationChecker: DeclarationChecker {
override fun check( override fun check(
declaration: JetDeclaration, declaration: JetDeclaration,
@@ -114,7 +114,6 @@ public interface Errors {
DiagnosticFactory2<PsiElement, JetModifierKeywordToken, String> WRONG_MODIFIER_TARGET = DiagnosticFactory2.create(ERROR); DiagnosticFactory2<PsiElement, JetModifierKeywordToken, String> WRONG_MODIFIER_TARGET = DiagnosticFactory2.create(ERROR);
DiagnosticFactory2<PsiElement, JetModifierKeywordToken, String> REDUNDANT_MODIFIER_FOR_TARGET = DiagnosticFactory2.create(WARNING); DiagnosticFactory2<PsiElement, JetModifierKeywordToken, String> REDUNDANT_MODIFIER_FOR_TARGET = DiagnosticFactory2.create(WARNING);
DiagnosticFactory2<PsiElement, JetModifierKeywordToken, String> WRONG_MODIFIER_CONTAINING_DECLARATION = DiagnosticFactory2.create(ERROR); DiagnosticFactory2<PsiElement, JetModifierKeywordToken, String> WRONG_MODIFIER_CONTAINING_DECLARATION = DiagnosticFactory2.create(ERROR);
DiagnosticFactory0<PsiElement> INAPPLICABLE_PLATFORM_NAME = DiagnosticFactory0.create(ERROR);
DiagnosticFactory1<JetAnnotationEntry, String> WRONG_ANNOTATION_TARGET = DiagnosticFactory1.create(ERROR); DiagnosticFactory1<JetAnnotationEntry, String> WRONG_ANNOTATION_TARGET = DiagnosticFactory1.create(ERROR);
DiagnosticFactory0<JetAnnotationEntry> REPEATED_ANNOTATION = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<JetAnnotationEntry> REPEATED_ANNOTATION = DiagnosticFactory0.create(ERROR);
@@ -243,8 +242,6 @@ public interface Errors {
DiagnosticFactory2<JetDeclaration, CallableMemberDescriptor, String> CONFLICTING_OVERLOADS = DiagnosticFactory2<JetDeclaration, CallableMemberDescriptor, String> CONFLICTING_OVERLOADS =
DiagnosticFactory2.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT); DiagnosticFactory2.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT);
DiagnosticFactory1<JetAnnotationEntry, String> ILLEGAL_PLATFORM_NAME = DiagnosticFactory1.create(ERROR);
DiagnosticFactory0<JetNamedDeclaration> NON_FINAL_MEMBER_IN_FINAL_CLASS = DiagnosticFactory0.create(WARNING, modifierSetPosition( DiagnosticFactory0<JetNamedDeclaration> NON_FINAL_MEMBER_IN_FINAL_CLASS = DiagnosticFactory0.create(WARNING, modifierSetPosition(
JetTokens.OPEN_KEYWORD)); JetTokens.OPEN_KEYWORD));
@@ -121,7 +121,6 @@ public class DefaultErrorMessages {
MAP.put(WRONG_MODIFIER_TARGET, "Modifier ''{0}'' is not applicable to ''{1}''", TO_STRING, TO_STRING); MAP.put(WRONG_MODIFIER_TARGET, "Modifier ''{0}'' is not applicable to ''{1}''", TO_STRING, TO_STRING);
MAP.put(REDUNDANT_MODIFIER_FOR_TARGET, "Modifier ''{0}'' is redundant for ''{1}''", TO_STRING, TO_STRING); MAP.put(REDUNDANT_MODIFIER_FOR_TARGET, "Modifier ''{0}'' is redundant for ''{1}''", TO_STRING, TO_STRING);
MAP.put(WRONG_MODIFIER_CONTAINING_DECLARATION, "Modifier ''{0}'' is not applicable inside ''{1}''", TO_STRING, TO_STRING); MAP.put(WRONG_MODIFIER_CONTAINING_DECLARATION, "Modifier ''{0}'' is not applicable inside ''{1}''", TO_STRING, TO_STRING);
MAP.put(INAPPLICABLE_PLATFORM_NAME, "platformName annotation is not applicable to this declaration");
MAP.put(WRONG_ANNOTATION_TARGET, "This annotation is not applicable to target ''{0}''", TO_STRING); MAP.put(WRONG_ANNOTATION_TARGET, "This annotation is not applicable to target ''{0}''", TO_STRING);
MAP.put(REPEATED_ANNOTATION, "This annotation is not repeatable"); MAP.put(REPEATED_ANNOTATION, "This annotation is not repeatable");
@@ -514,7 +513,6 @@ public class DefaultErrorMessages {
RENDER_CLASS_OR_OBJECT, FQ_NAMES_IN_TYPES); RENDER_CLASS_OR_OBJECT, FQ_NAMES_IN_TYPES);
MAP.put(CONFLICTING_OVERLOADS, "''{0}'' is already defined in {1}", COMPACT_WITH_MODIFIERS, STRING); MAP.put(CONFLICTING_OVERLOADS, "''{0}'' is already defined in {1}", COMPACT_WITH_MODIFIERS, STRING);
MAP.put(ILLEGAL_PLATFORM_NAME, "Illegal platform name: ''{0}''", STRING);
MAP.put(FUNCTION_EXPECTED, "Expression ''{0}''{1} cannot be invoked as a function. " + MAP.put(FUNCTION_EXPECTED, "Expression ''{0}''{1} cannot be invoked as a function. " +
"The function '" + OperatorConventions.INVOKE.asString() + "()' is not found", "The function '" + OperatorConventions.INVOKE.asString() + "()' is not found",
@@ -122,7 +122,7 @@ public class MainFunctionDetector {
@NotNull @NotNull
private static String getJVMFunctionName(FunctionDescriptor functionDescriptor) { private static String getJVMFunctionName(FunctionDescriptor functionDescriptor) {
String platformName = DescriptorUtils.getPlatformName(functionDescriptor); String platformName = DescriptorUtils.getJvmName(functionDescriptor);
if (platformName != null) { if (platformName != null) {
return platformName; return platformName;
} }
@@ -23,20 +23,15 @@ import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory1; import org.jetbrains.kotlin.diagnostics.DiagnosticFactory1;
import org.jetbrains.kotlin.lexer.JetKeywordToken; import org.jetbrains.kotlin.lexer.JetKeywordToken;
import org.jetbrains.kotlin.lexer.JetModifierKeywordToken; import org.jetbrains.kotlin.lexer.JetModifierKeywordToken;
import org.jetbrains.kotlin.lexer.JetTokens; import org.jetbrains.kotlin.lexer.JetTokens;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.constants.ConstantValue;
import org.jetbrains.kotlin.resolve.constants.StringValue;
import java.util.*; import java.util.*;
import static org.jetbrains.kotlin.diagnostics.Errors.*; import static org.jetbrains.kotlin.diagnostics.Errors.NESTED_CLASS_NOT_ALLOWED;
import static org.jetbrains.kotlin.lexer.JetTokens.*; import static org.jetbrains.kotlin.lexer.JetTokens.*;
import static org.jetbrains.kotlin.psi.JetStubbedPsiUtil.getContainingDeclaration; import static org.jetbrains.kotlin.psi.JetStubbedPsiUtil.getContainingDeclaration;
@@ -188,7 +183,6 @@ public class ModifiersChecker {
checkNestedClassAllowed(modifierListOwner, descriptor); checkNestedClassAllowed(modifierListOwner, descriptor);
ModifierCheckerCore.INSTANCE$.check(modifierListOwner, trace, descriptor); ModifierCheckerCore.INSTANCE$.check(modifierListOwner, trace, descriptor);
checkTypeParametersModifiers(modifierListOwner); checkTypeParametersModifiers(modifierListOwner);
checkPlatformNameApplicability(descriptor);
runDeclarationCheckers(modifierListOwner, descriptor); runDeclarationCheckers(modifierListOwner, descriptor);
ClassDescriptor classDescriptor = descriptor instanceof ClassDescriptor ? (ClassDescriptor) descriptor : null; ClassDescriptor classDescriptor = descriptor instanceof ClassDescriptor ? (ClassDescriptor) descriptor : null;
annotationChecker.check(modifierListOwner, trace, classDescriptor); annotationChecker.check(modifierListOwner, trace, classDescriptor);
@@ -198,7 +192,6 @@ public class ModifiersChecker {
@NotNull JetDeclaration modifierListOwner, @NotNull JetDeclaration modifierListOwner,
@NotNull DeclarationDescriptor descriptor @NotNull DeclarationDescriptor descriptor
) { ) {
checkPlatformNameApplicability(descriptor);
runDeclarationCheckers(modifierListOwner, descriptor); runDeclarationCheckers(modifierListOwner, descriptor);
annotationChecker.check(modifierListOwner, trace, annotationChecker.check(modifierListOwner, trace,
descriptor instanceof ClassDescriptor ? (ClassDescriptor) descriptor : null); descriptor instanceof ClassDescriptor ? (ClassDescriptor) descriptor : null);
@@ -216,44 +209,6 @@ public class ModifiersChecker {
} }
} }
private void checkPlatformNameApplicability(@NotNull DeclarationDescriptor descriptor) {
AnnotationDescriptor annotation = descriptor.getAnnotations().findAnnotation(new FqName("kotlin.platform.platformName"));
if (annotation == null) return;
JetAnnotationEntry annotationEntry = DescriptorToSourceUtils.getSourceFromAnnotation(annotation);
if (annotationEntry == null) return;
if (descriptor instanceof FunctionDescriptor && !isRenamableFunction((FunctionDescriptor) descriptor)) {
trace.report(INAPPLICABLE_PLATFORM_NAME.on(annotationEntry));
}
String value = null;
Collection<ConstantValue<?>> values = annotation.getAllValueArguments().values();
if (!values.isEmpty()) {
ConstantValue<?> name = values.iterator().next();
if (name instanceof StringValue) {
value = ((StringValue) name).getValue();
}
}
if (value == null || !Name.isValidIdentifier(value)) {
trace.report(ILLEGAL_PLATFORM_NAME.on(annotationEntry, String.valueOf(value)));
}
if (descriptor instanceof CallableMemberDescriptor) {
CallableMemberDescriptor callableMemberDescriptor = (CallableMemberDescriptor) descriptor;
if (DescriptorUtils.isOverride(callableMemberDescriptor) || callableMemberDescriptor.getModality().isOverridable()) {
trace.report(INAPPLICABLE_PLATFORM_NAME.on(annotationEntry));
}
}
}
private boolean isRenamableFunction(@NotNull FunctionDescriptor descriptor) {
DeclarationDescriptor containingDescriptor = descriptor.getContainingDeclaration();
return containingDescriptor instanceof PackageFragmentDescriptor || containingDescriptor instanceof ClassDescriptor;
}
@NotNull @NotNull
public Map<JetModifierKeywordToken, PsiElement> getTokensCorrespondingToModifiers( public Map<JetModifierKeywordToken, PsiElement> getTokensCorrespondingToModifiers(
@NotNull JetModifierList modifierList, @NotNull JetModifierList modifierList,
@@ -1,7 +1,7 @@
import kotlin.platform.platformName; import kotlin.jvm.jvmName;
public class FakePlatformName { public class FakePlatformName {
@platformName(name = "fake") @jvmName(name = "fake")
public String foo() { public String foo() {
return "foo"; return "foo";
} }
@@ -1,6 +1,4 @@
import kotlin.platform.platformName @jvmName("Fail")
@platformName("Fail")
fun OK() {} fun OK() {}
fun box() = ::OK.name fun box() = ::OK.name
@@ -1,6 +1,4 @@
package test package test
import kotlin.platform.* @jvmName("bar")
@platformName("bar")
fun foo() {} fun foo() {}
@@ -1,6 +1,6 @@
package test package test
kotlin.platform.platformName(name = "bar") internal fun foo(): kotlin.Unit kotlin.jvm.jvmName(name = "bar") internal fun foo(): kotlin.Unit
public open class PlatformName { public open class PlatformName {
public constructor PlatformName() public constructor PlatformName()
@@ -1,14 +1,12 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER // !DIAGNOSTICS: -UNUSED_PARAMETER
import kotlin.platform.* <!ILLEGAL_JVM_NAME!>@jvmName("")<!>
<!ILLEGAL_PLATFORM_NAME!>@platformName("")<!>
fun foo(a: Any) {} fun foo(a: Any) {}
<!ILLEGAL_PLATFORM_NAME!>@platformName(".")<!> <!ILLEGAL_JVM_NAME!>@jvmName(".")<!>
fun foo() {} fun foo() {}
<!ILLEGAL_PLATFORM_NAME!>@platformName("/")<!> <!ILLEGAL_JVM_NAME!>@jvmName("/")<!>
fun fooSlash() {} fun fooSlash() {}
<!ILLEGAL_PLATFORM_NAME!>@platformName("<")<!> <!ILLEGAL_JVM_NAME!>@jvmName("<")<!>
fun fooLT() {} fun fooLT() {}
@@ -1,6 +1,6 @@
package package
kotlin.platform.platformName(name = ".") internal fun foo(): kotlin.Unit kotlin.jvm.jvmName(name = ".") internal fun foo(): kotlin.Unit
kotlin.platform.platformName(name = "") internal fun foo(/*0*/ a: kotlin.Any): kotlin.Unit kotlin.jvm.jvmName(name = "") internal fun foo(/*0*/ a: kotlin.Any): kotlin.Unit
kotlin.platform.platformName(name = "<") internal fun fooLT(): kotlin.Unit kotlin.jvm.jvmName(name = "<") internal fun fooLT(): kotlin.Unit
kotlin.platform.platformName(name = "/") internal fun fooSlash(): kotlin.Unit kotlin.jvm.jvmName(name = "/") internal fun fooSlash(): kotlin.Unit
@@ -0,0 +1,89 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
@jvmName("a")
fun foo() {}
@jvmName("b")
fun Any.foo() {}
<!WRONG_ANNOTATION_TARGET!>@jvmName("c")<!>
val px = 1
<!WRONG_ANNOTATION_TARGET!>@jvmName("d")<!>
val Any.px : Int
get() = 1
val valx: Int
@jvmName("e")
get() = 1
var varx: Int
@jvmName("f")
get() = 1
@jvmName("g")
set(v) {}
var vardef: Int = 1
@jvmName("h")
get
@jvmName("i")
set
<!WRONG_ANNOTATION_TARGET!>@jvmName("C")<!>
class C <!WRONG_ANNOTATION_TARGET!>jvmName("primary")<!> constructor() {
<!WRONG_ANNOTATION_TARGET!>jvmName("ctr")<!> constructor(x: Int): this() {}
@jvmName("a")
fun foo() {}
@jvmName("b")
fun Any.foo() {}
<!WRONG_ANNOTATION_TARGET!>@jvmName("c")<!>
val px = 1
<!WRONG_ANNOTATION_TARGET!>@jvmName("d")<!>
val Any.px : Int
get() = 1
val valx: Int
@jvmName("e")
get() = 1
var varx: Int
@jvmName("f")
get() = 1
@jvmName("g")
set(v) {}
}
fun foo1() {
<!INAPPLICABLE_JVM_NAME!>@jvmName("a")<!>
fun foo() {}
<!WRONG_ANNOTATION_TARGET!>@jvmName("a")<!>
val x = 1
}
abstract class AB {
<!INAPPLICABLE_JVM_NAME!>@jvmName("AB_absFun1")<!>
abstract fun absFun1()
abstract fun absFun2()
<!INAPPLICABLE_JVM_NAME!>@jvmName("AB_openFun")<!>
open fun openFun() {}
}
class D: AB() {
override fun absFun1() {}
<!INAPPLICABLE_JVM_NAME!>@jvmName("D_absFun2")<!>
override fun absFun2() {}
<!INAPPLICABLE_JVM_NAME!>@jvmName("D_openFun")<!>
final override fun openFun() {}
@jvmName("D_finalFun")
fun finalFun() {}
}
@@ -0,0 +1,45 @@
package
kotlin.jvm.jvmName(name = "c") internal val px: kotlin.Int = 1
internal val valx: kotlin.Int
internal var vardef: kotlin.Int
internal var varx: kotlin.Int
kotlin.jvm.jvmName(name = "d") internal val kotlin.Any.px: kotlin.Int
kotlin.jvm.jvmName(name = "a") internal fun foo(): kotlin.Unit
internal fun foo1(): kotlin.Unit
kotlin.jvm.jvmName(name = "b") internal fun kotlin.Any.foo(): kotlin.Unit
internal abstract class AB {
public constructor AB()
kotlin.jvm.jvmName(name = "AB_absFun1") internal abstract fun absFun1(): kotlin.Unit
internal abstract fun absFun2(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
kotlin.jvm.jvmName(name = "AB_openFun") internal open fun openFun(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
kotlin.jvm.jvmName(name = "C") internal final class C {
kotlin.jvm.jvmName(name = "primary") public constructor C()
kotlin.jvm.jvmName(name = "ctr") public constructor C(/*0*/ x: kotlin.Int)
kotlin.jvm.jvmName(name = "c") internal final val px: kotlin.Int = 1
internal final val valx: kotlin.Int
internal final var varx: kotlin.Int
kotlin.jvm.jvmName(name = "d") internal final val kotlin.Any.px: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
kotlin.jvm.jvmName(name = "a") internal final fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
kotlin.jvm.jvmName(name = "b") internal final fun kotlin.Any.foo(): kotlin.Unit
}
internal final class D : AB {
public constructor D()
internal open override /*1*/ fun absFun1(): kotlin.Unit
kotlin.jvm.jvmName(name = "D_absFun2") internal open override /*1*/ fun absFun2(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
kotlin.jvm.jvmName(name = "D_finalFun") internal final fun finalFun(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
kotlin.jvm.jvmName(name = "D_openFun") internal final override /*1*/ fun openFun(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -1,91 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
import kotlin.platform.*
@platformName("a")
fun foo() {}
@platformName("b")
fun Any.foo() {}
<!WRONG_ANNOTATION_TARGET!>@platformName("c")<!>
val px = 1
<!WRONG_ANNOTATION_TARGET!>@platformName("d")<!>
val Any.px : Int
get() = 1
val valx: Int
@platformName("e")
get() = 1
var varx: Int
@platformName("f")
get() = 1
@platformName("g")
set(v) {}
var vardef: Int = 1
@platformName("h")
get
@platformName("i")
set
<!WRONG_ANNOTATION_TARGET!>@platformName("C")<!>
class C <!WRONG_ANNOTATION_TARGET!>platformName("primary")<!> constructor() {
<!WRONG_ANNOTATION_TARGET!>platformName("ctr")<!> constructor(x: Int): this() {}
@platformName("a")
fun foo() {}
@platformName("b")
fun Any.foo() {}
<!WRONG_ANNOTATION_TARGET!>@platformName("c")<!>
val px = 1
<!WRONG_ANNOTATION_TARGET!>@platformName("d")<!>
val Any.px : Int
get() = 1
val valx: Int
@platformName("e")
get() = 1
var varx: Int
@platformName("f")
get() = 1
@platformName("g")
set(v) {}
}
fun foo1() {
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("a")<!>
fun foo() {}
<!WRONG_ANNOTATION_TARGET!>@platformName("a")<!>
val x = 1
}
abstract class AB {
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("AB_absFun1")<!>
abstract fun absFun1()
abstract fun absFun2()
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("AB_openFun")<!>
open fun openFun() {}
}
class D: AB() {
override fun absFun1() {}
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("D_absFun2")<!>
override fun absFun2() {}
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("D_openFun")<!>
final override fun openFun() {}
@platformName("D_finalFun")
fun finalFun() {}
}
@@ -1,45 +0,0 @@
package
kotlin.platform.platformName(name = "c") internal val px: kotlin.Int = 1
internal val valx: kotlin.Int
internal var vardef: kotlin.Int
internal var varx: kotlin.Int
kotlin.platform.platformName(name = "d") internal val kotlin.Any.px: kotlin.Int
kotlin.platform.platformName(name = "a") internal fun foo(): kotlin.Unit
internal fun foo1(): kotlin.Unit
kotlin.platform.platformName(name = "b") internal fun kotlin.Any.foo(): kotlin.Unit
internal abstract class AB {
public constructor AB()
kotlin.platform.platformName(name = "AB_absFun1") internal abstract fun absFun1(): kotlin.Unit
internal abstract fun absFun2(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
kotlin.platform.platformName(name = "AB_openFun") internal open fun openFun(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
kotlin.platform.platformName(name = "C") internal final class C {
kotlin.platform.platformName(name = "primary") public constructor C()
kotlin.platform.platformName(name = "ctr") public constructor C(/*0*/ x: kotlin.Int)
kotlin.platform.platformName(name = "c") internal final val px: kotlin.Int = 1
internal final val valx: kotlin.Int
internal final var varx: kotlin.Int
kotlin.platform.platformName(name = "d") internal final val kotlin.Any.px: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
kotlin.platform.platformName(name = "a") internal final fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
kotlin.platform.platformName(name = "b") internal final fun kotlin.Any.foo(): kotlin.Unit
}
internal final class D : AB {
public constructor D()
internal open override /*1*/ fun absFun1(): kotlin.Unit
kotlin.platform.platformName(name = "D_absFun2") internal open override /*1*/ fun absFun2(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
kotlin.platform.platformName(name = "D_finalFun") internal final fun finalFun(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
kotlin.platform.platformName(name = "D_openFun") internal final override /*1*/ fun openFun(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -1,22 +1,20 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER // !DIAGNOSTICS: -UNUSED_PARAMETER
import kotlin.platform.* @jvmName("bar")
@platformName("bar")
fun foo(a: Any) {} fun foo(a: Any) {}
fun Any.foo() {} fun Any.foo() {}
@platformName("barInt") @jvmName("barInt")
fun bar(x: List<Int>) {} fun bar(x: List<Int>) {}
@platformName("barStr") @jvmName("barStr")
fun bar(x: List<String>) {} fun bar(x: List<String>) {}
class C { class C {
var rwProp: Int var rwProp: Int
@platformName("get_rwProp") @jvmName("get_rwProp")
get() = 0 get() = 0
@platformName("set_rwProp") @jvmName("set_rwProp")
set(v) {} set(v) {}
fun getRwProp(): Int = 123 fun getRwProp(): Int = 123
@@ -1,8 +1,8 @@
package package
kotlin.platform.platformName(name = "barInt") internal fun bar(/*0*/ x: kotlin.List<kotlin.Int>): kotlin.Unit kotlin.jvm.jvmName(name = "barInt") internal fun bar(/*0*/ x: kotlin.List<kotlin.Int>): kotlin.Unit
kotlin.platform.platformName(name = "barStr") internal fun bar(/*0*/ x: kotlin.List<kotlin.String>): kotlin.Unit kotlin.jvm.jvmName(name = "barStr") internal fun bar(/*0*/ x: kotlin.List<kotlin.String>): kotlin.Unit
kotlin.platform.platformName(name = "bar") internal fun foo(/*0*/ a: kotlin.Any): kotlin.Unit kotlin.jvm.jvmName(name = "bar") internal fun foo(/*0*/ a: kotlin.Any): kotlin.Unit
internal fun kotlin.Any.foo(): kotlin.Unit internal fun kotlin.Any.foo(): kotlin.Unit
internal final class C { internal final class C {
@@ -1,16 +1,14 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER // !DIAGNOSTICS: -UNUSED_PARAMETER
import kotlin.platform.* <!CONFLICTING_JVM_DECLARATIONS!>@jvmName("bar")
<!CONFLICTING_JVM_DECLARATIONS!>@platformName("bar")
fun foo(a: Any)<!> {} fun foo(a: Any)<!> {}
<!CONFLICTING_JVM_DECLARATIONS!>fun bar(a: Any)<!> {} <!CONFLICTING_JVM_DECLARATIONS!>fun bar(a: Any)<!> {}
class C { class C {
<!CONFLICTING_JVM_DECLARATIONS!>@platformName("foo1") <!CONFLICTING_JVM_DECLARATIONS!>@jvmName("foo1")
fun foo(list: List<Int>)<!> {} fun foo(list: List<Int>)<!> {}
<!CONFLICTING_JVM_DECLARATIONS!>@platformName("foo1") <!CONFLICTING_JVM_DECLARATIONS!>@jvmName("foo1")
fun foo(list: List<String>)<!> {} fun foo(list: List<String>)<!> {}
} }
@@ -19,7 +17,7 @@ class C {
// A1 -> B1 with accidental override // A1 -> B1 with accidental override
open class A1 { open class A1 {
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("bar")<!> <!INAPPLICABLE_JVM_NAME!>@jvmName("bar")<!>
open fun foo() {} open fun foo() {}
} }
@@ -30,7 +28,7 @@ class B1 : A1() {
// A2 -> B2 with intended override and conflicting JVM declarations // A2 -> B2 with intended override and conflicting JVM declarations
open class A2 { open class A2 {
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("bar")<!> <!INAPPLICABLE_JVM_NAME!>@jvmName("bar")<!>
open fun foo() {} open fun foo() {}
} }
@@ -43,7 +41,7 @@ class <!CONFLICTING_JVM_DECLARATIONS!>B2<!> : A2() {
// A3 -> B3 -> C3 with accidental override // A3 -> B3 -> C3 with accidental override
open class A3 { open class A3 {
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("bar")<!> <!INAPPLICABLE_JVM_NAME!>@jvmName("bar")<!>
open fun foo() {} open fun foo() {}
} }
@@ -1,12 +1,12 @@
package package
internal fun bar(/*0*/ a: kotlin.Any): kotlin.Unit internal fun bar(/*0*/ a: kotlin.Any): kotlin.Unit
kotlin.platform.platformName(name = "bar") internal fun foo(/*0*/ a: kotlin.Any): kotlin.Unit kotlin.jvm.jvmName(name = "bar") internal fun foo(/*0*/ a: kotlin.Any): kotlin.Unit
internal open class A1 { internal open class A1 {
public constructor A1() public constructor A1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
kotlin.platform.platformName(name = "bar") internal open fun foo(): kotlin.Unit kotlin.jvm.jvmName(name = "bar") internal open fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
@@ -14,7 +14,7 @@ internal open class A1 {
internal open class A2 { internal open class A2 {
public constructor A2() public constructor A2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
kotlin.platform.platformName(name = "bar") internal open fun foo(): kotlin.Unit kotlin.jvm.jvmName(name = "bar") internal open fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
@@ -22,7 +22,7 @@ internal open class A2 {
internal open class A3 { internal open class A3 {
public constructor A3() public constructor A3()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
kotlin.platform.platformName(name = "bar") internal open fun foo(): kotlin.Unit kotlin.jvm.jvmName(name = "bar") internal open fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
@@ -31,7 +31,7 @@ internal final class B1 : A1 {
public constructor B1() public constructor B1()
internal final fun bar(): kotlin.Unit internal final fun bar(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
kotlin.platform.platformName(name = "bar") internal open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit kotlin.jvm.jvmName(name = "bar") internal open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
@@ -48,7 +48,7 @@ internal final class B2 : A2 {
internal open class B3 : A3 { internal open class B3 : A3 {
public constructor B3() public constructor B3()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
kotlin.platform.platformName(name = "bar") internal open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit kotlin.jvm.jvmName(name = "bar") internal open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
@@ -56,8 +56,8 @@ internal open class B3 : A3 {
internal final class C { internal final class C {
public constructor C() public constructor C()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
kotlin.platform.platformName(name = "foo1") internal final fun foo(/*0*/ list: kotlin.List<kotlin.Int>): kotlin.Unit kotlin.jvm.jvmName(name = "foo1") internal final fun foo(/*0*/ list: kotlin.List<kotlin.Int>): kotlin.Unit
kotlin.platform.platformName(name = "foo1") internal final fun foo(/*0*/ list: kotlin.List<kotlin.String>): kotlin.Unit kotlin.jvm.jvmName(name = "foo1") internal final fun foo(/*0*/ list: kotlin.List<kotlin.String>): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
@@ -66,7 +66,7 @@ internal final class C3 : B3 {
public constructor C3() public constructor C3()
internal final fun bar(): kotlin.Unit internal final fun bar(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
kotlin.platform.platformName(name = "bar") internal open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit kotlin.jvm.jvmName(name = "bar") internal open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
@@ -111,9 +111,9 @@ public class JetDiagnosticsTestWithStdLibGenerated extends AbstractJetDiagnostic
doTest(fileName); doTest(fileName);
} }
@TestMetadata("platformName.kt") @TestMetadata("jvmName.kt")
public void testPlatformName() throws Exception { public void testJvmName() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/platformName.kt"); String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/jvmName.kt");
doTest(fileName); doTest(fileName);
} }
} }
@@ -51,6 +51,8 @@ import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.
public class DescriptorUtils { public class DescriptorUtils {
public static final Name ENUM_VALUES = Name.identifier("values"); public static final Name ENUM_VALUES = Name.identifier("values");
public static final Name ENUM_VALUE_OF = Name.identifier("valueOf"); public static final Name ENUM_VALUE_OF = Name.identifier("valueOf");
public static final FqName JVM_NAME = new FqName("kotlin.jvm.jvmName");
public static final FqName PLATFORM_NAME = new FqName("kotlin.platform.platformName");
private DescriptorUtils() { private DescriptorUtils() {
} }
@@ -552,11 +554,11 @@ public class DescriptorUtils {
} }
@Nullable @Nullable
public static String getPlatformName(@NotNull Annotated descriptor) { public static String getJvmName(@NotNull Annotated descriptor) {
AnnotationDescriptor platformNameAnnotation = descriptor.getAnnotations().findAnnotation(new FqName("kotlin.platform.platformName")); AnnotationDescriptor jvmNameAnnotation = getJvmNameAnnotation(descriptor);
if (platformNameAnnotation == null) return null; if (jvmNameAnnotation == null) return null;
Map<ValueParameterDescriptor, ConstantValue<?>> arguments = platformNameAnnotation.getAllValueArguments(); Map<ValueParameterDescriptor, ConstantValue<?>> arguments = jvmNameAnnotation.getAllValueArguments();
if (arguments.isEmpty()) return null; if (arguments.isEmpty()) return null;
ConstantValue<?> name = arguments.values().iterator().next(); ConstantValue<?> name = arguments.values().iterator().next();
@@ -565,6 +567,14 @@ public class DescriptorUtils {
return ((StringValue) name).getValue(); return ((StringValue) name).getValue();
} }
public static AnnotationDescriptor getJvmNameAnnotation(@NotNull Annotated descriptor) {
AnnotationDescriptor jvmNameAnnotation = descriptor.getAnnotations().findAnnotation(JVM_NAME);
if (jvmNameAnnotation == null) {
jvmNameAnnotation = descriptor.getAnnotations().findAnnotation(PLATFORM_NAME);
}
return jvmNameAnnotation;
}
private static void getSubPackagesFqNames(PackageViewDescriptor packageView, Set<FqName> result) { private static void getSubPackagesFqNames(PackageViewDescriptor packageView, Set<FqName> result) {
FqName fqName = packageView.getFqName(); FqName fqName = packageView.getFqName();
if (!fqName.isRoot()) { if (!fqName.isRoot()) {
@@ -34,6 +34,16 @@ public annotation(retention = AnnotationRetention.BINARY, mustBeDocumented = tru
target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER) target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
public annotation(retention = AnnotationRetention.RUNTIME, mustBeDocumented = true) class jvmStatic public annotation(retention = AnnotationRetention.RUNTIME, mustBeDocumented = true) class jvmStatic
/**
* Specifies the name for the Java class or method
* which is generated from this element.
* See the [Kotlin language documentation](http://kotlinlang.org/docs/reference/java-interop.html#handling-signature-clashes-with-platformname)
* for more information.
* @property name the name of the element.
*/
target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
public annotation(retention = AnnotationRetention.RUNTIME, mustBeDocumented = true) class jvmName(public val name: String)
/** /**
* Instructs the Kotlin compiler to generate a public backing field for this property. * Instructs the Kotlin compiler to generate a public backing field for this property.
*/ */
@@ -18,14 +18,8 @@ package kotlin.platform
import kotlin.annotation.AnnotationTarget.* import kotlin.annotation.AnnotationTarget.*
/**
* Specifies the name for the target platform element (Java method, JavaScript function)
* which is generated from this element.
* See the [Kotlin language documentation](http://kotlinlang.org/docs/reference/java-interop.html#handling-signature-clashes-with-platformname)
* for more information.
* @property name the name of the element.
*/
target(FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER) target(FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER)
deprecated("Use kotlin.jvm.jvmName instead", ReplaceWith("kotlin.jvm.jvmName"))
public annotation(retention = AnnotationRetention.RUNTIME, mustBeDocumented = true) class platformName(public val name: String) public annotation(retention = AnnotationRetention.RUNTIME, mustBeDocumented = true) class platformName(public val name: String)
target(FUNCTION, PROPERTY, FIELD, PROPERTY_GETTER, PROPERTY_SETTER) target(FUNCTION, PROPERTY, FIELD, PROPERTY_GETTER, PROPERTY_SETTER)