From 9995a31c46b48eda3ba4e1aff000d60060ee0b5d Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Fri, 24 Nov 2017 18:23:43 +0300 Subject: [PATCH] Add ReadOnly and Mutable into kotlin.annotations.jvm Originally provided in org.jetbrains.annotations package as a part of stdlib. --- .../kotlin/load/java/JvmAnnotationNames.java | 3 ++ .../kotlin/load/java/JvmAnnotationNames.kt | 6 ++-- .../tools/kotlin-annotations-jvm/build.gradle | 2 +- .../src/kotlin/annotations/jvm/Mutable.java | 29 +++++++++++++++++++ .../src/kotlin/annotations/jvm/ReadOnly.java | 29 +++++++++++++++++++ 5 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 libraries/tools/kotlin-annotations-jvm/src/kotlin/annotations/jvm/Mutable.java create mode 100644 libraries/tools/kotlin-annotations-jvm/src/kotlin/annotations/jvm/ReadOnly.java diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java index fca767bb29b..8edf985840f 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java @@ -46,6 +46,9 @@ public final class JvmAnnotationNames { public static final FqName JETBRAINS_MUTABLE_ANNOTATION = new FqName("org.jetbrains.annotations.Mutable"); public static final FqName JETBRAINS_READONLY_ANNOTATION = new FqName("org.jetbrains.annotations.ReadOnly"); + public static final FqName READONLY_ANNOTATION = new FqName("kotlin.annotations.jvm.ReadOnly"); + public static final FqName MUTABLE_ANNOTATION = new FqName("kotlin.annotations.jvm.Mutable"); + public static final FqName PURELY_IMPLEMENTS_ANNOTATION = new FqName("kotlin.jvm.PurelyImplements"); // Just for internal use: there is no such real classes in bytecode diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.kt index 998a0acf94f..675a4d453f5 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.kt @@ -47,9 +47,11 @@ val NOT_NULL_ANNOTATIONS = listOf( ) val READ_ONLY_ANNOTATIONS = listOf( - JvmAnnotationNames.JETBRAINS_READONLY_ANNOTATION + JvmAnnotationNames.JETBRAINS_READONLY_ANNOTATION, + JvmAnnotationNames.READONLY_ANNOTATION ) val MUTABLE_ANNOTATIONS = listOf( - JvmAnnotationNames.JETBRAINS_MUTABLE_ANNOTATION + JvmAnnotationNames.JETBRAINS_MUTABLE_ANNOTATION, + JvmAnnotationNames.MUTABLE_ANNOTATION ) diff --git a/libraries/tools/kotlin-annotations-jvm/build.gradle b/libraries/tools/kotlin-annotations-jvm/build.gradle index b1ff6bc64d9..a903be7ff56 100644 --- a/libraries/tools/kotlin-annotations-jvm/build.gradle +++ b/libraries/tools/kotlin-annotations-jvm/build.gradle @@ -7,7 +7,7 @@ configurePublishing(project) sourceSets { main { - kotlin { + java { srcDir 'src' } } diff --git a/libraries/tools/kotlin-annotations-jvm/src/kotlin/annotations/jvm/Mutable.java b/libraries/tools/kotlin-annotations-jvm/src/kotlin/annotations/jvm/Mutable.java new file mode 100644 index 00000000000..4d7adddb6b0 --- /dev/null +++ b/libraries/tools/kotlin-annotations-jvm/src/kotlin/annotations/jvm/Mutable.java @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package kotlin.annotations.jvm; + +import java.lang.annotation.*; + +/** + * Annotate anything of type descendant from Iterable or Iterator with @Mutable if the corresponding collection/iterator + * is allowed to be mutated. + */ +@Documented +@Retention(RetentionPolicy.CLASS) +@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE}) +public @interface Mutable { +} diff --git a/libraries/tools/kotlin-annotations-jvm/src/kotlin/annotations/jvm/ReadOnly.java b/libraries/tools/kotlin-annotations-jvm/src/kotlin/annotations/jvm/ReadOnly.java new file mode 100644 index 00000000000..5fe51d099dc --- /dev/null +++ b/libraries/tools/kotlin-annotations-jvm/src/kotlin/annotations/jvm/ReadOnly.java @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package kotlin.annotations.jvm; + +import java.lang.annotation.*; + +/** + * Annotate anything of type descendant from Iterable or Iterator with @ReadOnly if the underlying reference is not intended for mutation. + * Note that such a reference is not guaranteed to be immutable. It may refer to an object mutated elsewhere. + */ +@Documented +@Retention(RetentionPolicy.CLASS) +@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE}) +public @interface ReadOnly { +}