Drop loading Java annotation methods as functions

This commit is contained in:
Yan Zhulanow
2015-10-15 16:27:11 +03:00
parent 25b40455ad
commit 9ae3b0fa9c
81 changed files with 30 additions and 409 deletions
@@ -1,39 +0,0 @@
/*
* Copyright 2010-2015 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 org.jetbrains.kotlin.load.kotlin
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
public class JavaAnnotationMethodCallChecker : CallChecker {
override fun <F : CallableDescriptor> check(resolvedCall: ResolvedCall<F>, context: BasicCallResolutionContext) {
val descriptor = resolvedCall.getCandidateDescriptor().getOriginal()
val containingDeclaration = descriptor.getContainingDeclaration()
if (containingDeclaration is JavaClassDescriptor &&
containingDeclaration.getKind() == ClassKind.ANNOTATION_CLASS &&
descriptor is JavaMethodDescriptor && descriptor.getKind().isReal()
) {
context.trace.report(ErrorsJvm.DEPRECATED_ANNOTATION_METHOD_CALL.on(resolvedCall.getCall().getCallElement()))
}
}
}
@@ -61,7 +61,6 @@ public class DefaultErrorMessagesJvm implements DefaultErrorMessages.Extension {
MAP.put(ErrorsJvm.EXTERNAL_DECLARATION_CANNOT_BE_INLINED, "Members of interfaces can not be external");
MAP.put(ErrorsJvm.POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION, "Only named arguments are available for Java annotations");
MAP.put(ErrorsJvm.DEPRECATED_ANNOTATION_METHOD_CALL, "Annotation methods are deprecated. Use property instead");
MAP.put(ErrorsJvm.DEPRECATED_JAVA_ANNOTATION, "This annotation is deprecated in Kotlin. Use ''{0}'' instead", Renderers.TO_STRING);
MAP.put(ErrorsJvm.NON_SOURCE_REPEATED_ANNOTATION, "Only annotations with SOURCE retention can be repeated on JVM version before 1.8");
MAP.put(ErrorsJvm.ANNOTATION_IS_NOT_APPLICABLE_TO_MULTIFILE_CLASSES, "Annotation {0} is not applicable to the multi-file classes", Renderers.TO_STRING);
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.container.StorageComponentContainer
import org.jetbrains.kotlin.container.useImpl
import org.jetbrains.kotlin.jvm.RuntimeAssertionsTypeChecker
import org.jetbrains.kotlin.load.kotlin.JavaAnnotationCallChecker
import org.jetbrains.kotlin.load.kotlin.JavaAnnotationMethodCallChecker
import org.jetbrains.kotlin.load.kotlin.nativeDeclarations.NativeFunChecker
import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.jvm.checkers.*
@@ -45,7 +44,6 @@ public object JvmPlatformConfigurator : PlatformConfigurator(
additionalCallCheckers = listOf(
NeedSyntheticChecker(),
JavaAnnotationCallChecker(),
JavaAnnotationMethodCallChecker(),
TraitDefaultMethodCallChecker(),
JavaClassOnCompanionChecker()
),
@@ -4,7 +4,7 @@ class K
@JavaAnn(args = arrayOf(O::class, K::class)) class MyClass
fun box(): String {
val args = javaClass<MyClass>().getAnnotation(javaClass<JavaAnn>()).args()
val args = javaClass<MyClass>().getAnnotation(javaClass<JavaAnn>()).args
val argName1 = args[0].simpleName ?: "fail 1"
val argName2 = args[1].simpleName ?: "fail 2"
return argName1 + argName2
@@ -1,5 +1,5 @@
fun box(): String {
val args = javaClass<MyJavaClass>().getAnnotation(javaClass<JavaAnn>()).args()
val args = javaClass<MyJavaClass>().getAnnotation(javaClass<JavaAnn>()).args
val argName1 = args[0].simpleName ?: "fail 1"
val argName2 = args[1].simpleName ?: "fail 2"
return argName1 + argName2
@@ -5,21 +5,21 @@
fun box(): String {
val value1 = javaClass<MyClass1>().getAnnotation(javaClass<JavaAnn>()).value()
val value1 = javaClass<MyClass1>().getAnnotation(javaClass<JavaAnn>()).value
if (value1.size() != 2) return "fail1: ${value1.size()}"
if (value1[0] != "d1") return "fail2: ${value1[0]}"
if (value1[1] != "d2") return "fail3: ${value1[1]}"
val value2 = javaClass<MyClass2>().getAnnotation(javaClass<JavaAnn>()).value()
val value2 = javaClass<MyClass2>().getAnnotation(javaClass<JavaAnn>()).value
if (value2.size() != 2) return "fail4: ${value2.size()}"
if (value2[0] != "d1") return "fail5: ${value2[0]}"
if (value2[1] != "d2") return "fail6: ${value2[1]}"
val value3 = javaClass<MyClass3>().getAnnotation(javaClass<JavaAnn>()).value()
val value3 = javaClass<MyClass3>().getAnnotation(javaClass<JavaAnn>()).value
if (value3.size() != 1) return "fail7: ${value3.size()}"
if (value3[0] != "asd") return "fail8: ${value3[0]}"
val value4 = javaClass<MyClass4>().getAnnotation(javaClass<JavaAnn>()).value()
val value4 = javaClass<MyClass4>().getAnnotation(javaClass<JavaAnn>()).value
if (value4.size() != 0) return "fail 9: ${value4.size()}"
return "OK"
@@ -5,17 +5,17 @@
fun box(): String {
val value1 = javaClass<MyClass1>().getAnnotation(javaClass<JavaAnn>()).value()
val value1 = javaClass<MyClass1>().getAnnotation(javaClass<JavaAnn>()).value
if (value1.size() != 0) return "fail1: ${value1.size()}"
val value2 = javaClass<MyClass2>().getAnnotation(javaClass<JavaAnn>()).value()
val value2 = javaClass<MyClass2>().getAnnotation(javaClass<JavaAnn>()).value
if (value2.size() != 0) return "fail2: ${value2.size()}"
val value3 = javaClass<MyClass3>().getAnnotation(javaClass<JavaAnn>()).value()
val value3 = javaClass<MyClass3>().getAnnotation(javaClass<JavaAnn>()).value
if (value3.size() != 1) return "fail3: ${value3.size()}"
if (value3[0] != "asd") return "fail4: ${value3[0]}"
val value4 = javaClass<MyClass4>().getAnnotation(javaClass<JavaAnn>()).value()
val value4 = javaClass<MyClass4>().getAnnotation(javaClass<JavaAnn>()).value
if (value4.size() != 0) return "fail 5: ${value4.size()}"
return "OK"
@@ -3,6 +3,6 @@
fun box(): String {
val ann = javaClass<MyClass>().getAnnotation(javaClass<JavaAnn>())
if (ann == null) return "fail: cannot find Ann on MyClass}"
if (ann.value() != "value") return "fail: annotation parameter i should be 'value', but was ${ann.value()}"
if (ann.value != "value") return "fail: annotation parameter i should be 'value', but was ${ann.value}"
return "OK"
}
@@ -4,17 +4,17 @@
fun box(): String {
val ann = javaClass<MyClass>().getAnnotation(javaClass<JavaAnn>())
if (ann == null) return "fail: cannot find Ann on MyClass}"
if (ann.value() != "default") return "fail: annotation parameter i should be 'default', but was ${ann.value()}"
if (ann.value != "default") return "fail: annotation parameter i should be 'default', but was ${ann.value}"
val ann2 = javaClass<MyClass2>().getAnnotation(javaClass<JavaAnn2>())
if (ann2 == null) return "fail: cannot find Ann on MyClass}"
if (ann2.a() != 1) return "fail for a: expected = 1, but was ${ann2.a()}"
if (ann2.b() != 1.toByte()) return "fail for b: expected = 1, but was ${ann2.b()}"
if (ann2.c() != 1.toShort()) return "fail for c: expected = 1, but was ${ann2.c()}"
if (ann2.d() != 1.0) return "fail for d: expected = 1, but was ${ann2.d()}"
if (ann2.e() != 1F) return "fail for e: expected = 1, but was ${ann2.e()}"
if (ann2.j() != 1L) return "fail for j: expected = 1, but was ${ann2.j()}"
if (ann2.f() != "default") return "fail for f: expected = default, but was ${ann2.f()}"
if (ann2.a != 1) return "fail for a: expected = 1, but was ${ann2.a}"
if (ann2.b != 1.toByte()) return "fail for b: expected = 1, but was ${ann2.b}"
if (ann2.c != 1.toShort()) return "fail for c: expected = 1, but was ${ann2.c}"
if (ann2.d != 1.0) return "fail for d: expected = 1, but was ${ann2.d}"
if (ann2.e != 1F) return "fail for e: expected = 1, but was ${ann2.e}"
if (ann2.j != 1L) return "fail for j: expected = 1, but was ${ann2.j}"
if (ann2.f != "default") return "fail for f: expected = default, but was ${ann2.f}"
return "OK"
}
@@ -4,7 +4,7 @@ class K
@JavaAnn(args = arrayOf(O::class, K::class)) class MyClass
fun box(): String {
val args = javaClass<MyClass>().getAnnotation(javaClass<JavaAnn>()).args()
val args = javaClass<MyClass>().getAnnotation(javaClass<JavaAnn>()).args
val argName1 = args[0].simpleName ?: "fail 1"
val argName2 = args[1].simpleName ?: "fail 2"
return argName1 + argName2
@@ -1,5 +1,5 @@
fun box(): String {
val args = javaClass<MyJavaClass>().getAnnotation(javaClass<JavaAnn>()).args()
val args = javaClass<MyJavaClass>().getAnnotation(javaClass<JavaAnn>()).args
val argName1 = args[0].simpleName ?: "fail 1"
val argName2 = args[1].simpleName ?: "fail 2"
return argName1 + argName2
@@ -6,5 +6,5 @@ class OK
fun box(): String {
val ann = javaClass<MyClass>().getAnnotation(javaClass<JavaAnn>())
if (ann == null) return "fail: cannot find JavaAnn on MyClass"
return ann.value().simpleName!!
return ann.value.simpleName!!
}
@@ -2,5 +2,5 @@
fun box(): String {
val ann = javaClass<MyJavaClass>().getAnnotation(javaClass<JavaAnn>())
if (ann == null) return "fail: cannot find JavaAnn on MyClass"
return ann.value().simpleName!!
return ann.value.simpleName!!
}
@@ -4,7 +4,7 @@ class K
@JavaAnn(O::class, K::class) class MyClass
fun box(): String {
val args = javaClass<MyClass>().getAnnotation(javaClass<JavaAnn>()).value()
val args = javaClass<MyClass>().getAnnotation(javaClass<JavaAnn>()).value
val argName1 = args[0].simpleName ?: "fail 1"
val argName2 = args[1].simpleName ?: "fail 2"
return argName1 + argName2
@@ -2,7 +2,7 @@ class O
class K
fun box(): String {
val args = javaClass<MyJavaClass>().getAnnotation(javaClass<JavaAnn>()).value()
val args = javaClass<MyJavaClass>().getAnnotation(javaClass<JavaAnn>()).value
val argName1 = args[0].simpleName ?: "fail 1"
val argName2 = args[1].simpleName ?: "fail 2"
return argName1 + argName2
@@ -1,4 +1,4 @@
@file:StringHolder("OK")
fun box(): String =
Class.forName("FileFacadeKt").getAnnotation(StringHolder::class.java)?.value() ?: "null"
Class.forName("FileFacadeKt").getAnnotation(StringHolder::class.java)?.value ?: "null"
@@ -22,7 +22,7 @@ fun box(): String {
throw AssertionError("Method ${method.name} has no ${kotlinDelegatedMethod.simpleName} annotation.")
}
val implementationClassName = ann.implementationClassName()
val implementationClassName = ann.implementationClassName
val implementationClass = try {
Class.forName(implementationClassName)
}
@@ -15,7 +15,6 @@ public open class kt3698 {
public/*package*/ final class Foo : kotlin.Annotation {
public/*package*/ constructor Foo(/*0*/ kotlin.Int)
public final val value: kotlin.Int
public abstract fun value(): kotlin.Int
}
// Static members
@@ -9,6 +9,4 @@ public final class A : kotlin.Annotation {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun x(): kotlin.Int
public abstract fun y(): kotlin.String
}
@@ -1,27 +0,0 @@
// FILE: A.java
public @interface A {
String value();
int arg();
}
// FILE: b.kt
@A(value = "a", arg = 1) class MyClass
fun foo(ann: A) {
ann.<!DEPRECATED_ANNOTATION_METHOD_CALL!>value()<!>
ann.<!DEPRECATED_ANNOTATION_METHOD_CALL!>arg()<!>
ann.equals(ann)
ann.toString()
ann.hashCode()
MyClass::class.java.getAnnotation(A::class.java).<!DEPRECATED_ANNOTATION_METHOD_CALL!>value()<!>
MyClass::class.java.getAnnotation(A::class.java).<!DEPRECATED_ANNOTATION_METHOD_CALL!>arg()<!>
}
fun A.bar() {
<!DEPRECATED_ANNOTATION_METHOD_CALL!>value()<!>
<!DEPRECATED_ANNOTATION_METHOD_CALL!>arg()<!>
this.<!DEPRECATED_ANNOTATION_METHOD_CALL!>value()<!>
this.<!DEPRECATED_ANNOTATION_METHOD_CALL!>arg()<!>
}
@@ -1,22 +0,0 @@
package
public fun foo(/*0*/ ann: A): kotlin.Unit
public fun A.bar(): kotlin.Unit
public final class A : kotlin.Annotation {
public constructor A(/*0*/ value: kotlin.String, /*1*/ arg: kotlin.Int)
public final val arg: kotlin.Int
public final val value: kotlin.String
public abstract fun arg(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun value(): kotlin.String
}
@A(arg = 1, value = "a") public final class MyClass {
public constructor MyClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -8,13 +8,7 @@ public final class A : kotlin.Annotation {
public final val x: kotlin.reflect.KClass<*>
public final val x1: kotlin.reflect.KClass<*>
public final val x2: kotlin.reflect.KClass<*>
public abstract fun a(): kotlin.Int
public abstract fun b(): kotlin.Double
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun value(): kotlin.String
public abstract fun x(): kotlin.reflect.KClass<*>
public abstract fun x1(): kotlin.reflect.KClass<*>
public abstract fun x2(): kotlin.reflect.KClass<*>
}
@@ -7,12 +7,7 @@ public final class A : kotlin.Annotation {
public final val x: kotlin.reflect.KClass<*>
public final val x1: kotlin.reflect.KClass<*>
public final val x2: kotlin.reflect.KClass<*>
public abstract fun a(): kotlin.Int
public abstract fun b(): kotlin.Double
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun x(): kotlin.reflect.KClass<*>
public abstract fun x1(): kotlin.reflect.KClass<*>
public abstract fun x2(): kotlin.reflect.KClass<*>
}
@@ -17,7 +17,4 @@ public final class A : kotlin.Annotation {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun value(): kotlin.Array<kotlin.String>
public abstract fun x(): kotlin.reflect.KClass<*>
public abstract fun y(): kotlin.Int
}
@@ -20,7 +20,4 @@ public final class A : kotlin.Annotation {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun value(): kotlin.Array<kotlin.String>
public abstract fun x(): kotlin.reflect.KClass<*>
public abstract fun y(): kotlin.Int
}
@@ -12,5 +12,4 @@ public final class A : kotlin.Annotation {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun value(): kotlin.Array<kotlin.String>
}
@@ -12,5 +12,4 @@ public final class A : kotlin.Annotation {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun value(): kotlin.Array<kotlin.String>
}
@@ -8,5 +8,4 @@ public final class A : kotlin.Annotation {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun value(): kotlin.Array<kotlin.String>
}
@@ -5,23 +5,18 @@ public final class A : kotlin.Annotation {
public final val arg: kotlin.reflect.KClass<*>
public final val b: B
public final val x: kotlin.Int
public abstract fun arg(): kotlin.reflect.KClass<*>
public abstract fun b(): B
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun x(): kotlin.Int
}
public final class B : kotlin.Annotation {
public constructor B(/*0*/ arg: kotlin.reflect.KClass<*> = ..., /*1*/ y: kotlin.Int = ...)
public final val arg: kotlin.reflect.KClass<*>
public final val y: kotlin.Int
public abstract fun arg(): kotlin.reflect.KClass<*>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun y(): kotlin.Int
}
@A(arg = kotlin.String::class, b = B(y = 1)) public final class MyClass1 {
@@ -3,7 +3,6 @@ package
public final class A : kotlin.Annotation {
public constructor A(/*0*/ arg: kotlin.reflect.KClass<*>)
public final val arg: kotlin.reflect.KClass<*>
public abstract fun arg(): kotlin.reflect.KClass<*>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
@@ -4,11 +4,9 @@ public final class A : kotlin.Annotation {
public constructor A(/*0*/ arg: kotlin.reflect.KClass<*>, /*1*/ x: kotlin.Int = ...)
public final val arg: kotlin.reflect.KClass<*>
public final val x: kotlin.Int
public abstract fun arg(): kotlin.reflect.KClass<*>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun x(): kotlin.Int
}
@A(arg = kotlin.String::class) public final class MyClass1 {
@@ -3,7 +3,6 @@ package
public final class A : kotlin.Annotation {
public constructor A(/*0*/ arg: kotlin.Array<kotlin.reflect.KClass<*>>)
public final val arg: kotlin.Array<kotlin.reflect.KClass<*>>
public abstract fun arg(): kotlin.Array<kotlin.reflect.KClass<*>>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
@@ -3,7 +3,6 @@ package
public final class A : kotlin.Annotation {
public constructor A(/*0*/ arg: kotlin.reflect.KClass<*> = ...)
public final val arg: kotlin.reflect.KClass<*>
public abstract fun arg(): kotlin.reflect.KClass<*>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
@@ -4,11 +4,9 @@ public final class A : kotlin.Annotation {
public constructor A(/*0*/ arg: kotlin.reflect.KClass<*> = ..., /*1*/ x: kotlin.Int)
public final val arg: kotlin.reflect.KClass<*>
public final val x: kotlin.Int
public abstract fun arg(): kotlin.reflect.KClass<*>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun x(): kotlin.Int
}
@A(arg = kotlin.String::class, x = 4) public final class MyClass2 {
@@ -4,8 +4,6 @@ public final class A : kotlin.Annotation {
public constructor A(/*0*/ arg1: kotlin.reflect.KClass<*>, /*1*/ arg2: kotlin.reflect.KClass<*>)
public final val arg1: kotlin.reflect.KClass<*>
public final val arg2: kotlin.reflect.KClass<*>
public abstract fun arg1(): kotlin.reflect.KClass<*>
public abstract fun arg2(): kotlin.reflect.KClass<*>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
@@ -6,7 +6,6 @@ public final class A : kotlin.Annotation {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun value(): kotlin.reflect.KClass<*>
}
@A(value = kotlin.String::class) public final class MyClass1 {
@@ -7,8 +7,6 @@ public final class A : kotlin.Annotation {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun value(): kotlin.reflect.KClass<*>
public abstract fun x(): kotlin.Int
}
@A(value = kotlin.String::class) public final class MyClass1 {
@@ -6,7 +6,6 @@ public final class A : kotlin.Annotation {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun value(): kotlin.Array<kotlin.reflect.KClass<*>>
}
@A(value = {kotlin.String::class, kotlin.Int::class}) public final class MyClass1 {
@@ -6,7 +6,6 @@ public final class A : kotlin.Annotation {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun value(): kotlin.reflect.KClass<*>
}
@A(value = kotlin.String::class) public final class MyClass1 {
@@ -7,8 +7,6 @@ public final class A : kotlin.Annotation {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun value(): kotlin.reflect.KClass<*>
public abstract fun x(): kotlin.Int
}
@A(value = kotlin.String::class, x = 2) public final class MyClass1 {
@@ -7,10 +7,7 @@ public final class A : kotlin.Annotation {
public final val a: kotlin.Int
public final val b: kotlin.Double
public final val x: kotlin.Boolean
public abstract fun a(): kotlin.Int
public abstract fun b(): kotlin.Double
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun x(): kotlin.Boolean
}
@@ -8,10 +8,7 @@ public final class A : kotlin.Annotation {
public final val a: kotlin.Int
public final val b: kotlin.Double
public final val x: kotlin.Boolean
public abstract fun a(): kotlin.Int
public abstract fun b(): kotlin.Double
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun x(): kotlin.Boolean
}
@@ -11,11 +11,7 @@ public final class A : kotlin.Annotation {
public final val b: kotlin.Double
public final val value: kotlin.String
public final val x: kotlin.Boolean
public abstract fun a(): kotlin.Int
public abstract fun b(): kotlin.Double
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun value(): kotlin.String
public abstract fun x(): kotlin.Boolean
}
@@ -9,10 +9,7 @@ public final class A : kotlin.Annotation {
public final val a: kotlin.Int
public final val b: kotlin.Double
public final val x: kotlin.Boolean
public abstract fun a(): kotlin.Int
public abstract fun b(): kotlin.Double
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract fun x(): kotlin.Boolean
}
@@ -6,6 +6,5 @@ public open class AnnotatedConstructor {
public final class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ value: kotlin.String)
public final val value: kotlin.String
public abstract fun value(): kotlin.String
}
}
@@ -7,7 +7,6 @@ public open class AnnotatedField {
public final class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ value: kotlin.String)
public final val value: kotlin.String
public abstract fun value(): kotlin.String
}
// Static members
@@ -7,6 +7,5 @@ public open class AnnotatedMethod {
public final class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ value: kotlin.Int)
public final val value: kotlin.Int
public abstract fun value(): kotlin.Int
}
}
@@ -7,6 +7,5 @@ public open class AnnotatedValueParameter {
public final class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ value: kotlin.String)
public final val value: kotlin.String
public abstract fun value(): kotlin.String
}
}
@@ -17,38 +17,31 @@ public interface AnnotationInParam {
public final class MyAnnotation : kotlin.Annotation {
public constructor MyAnnotation(/*0*/ value: kotlin.String)
public final val value: kotlin.String
public abstract fun value(): kotlin.String
}
public final class MyAnnotation2 : kotlin.Annotation {
public constructor MyAnnotation2(/*0*/ vararg value: kotlin.String /*kotlin.Array<out kotlin.String>*/)
public final val value: kotlin.Array<kotlin.String>
public abstract fun value(): kotlin.Array<kotlin.String>
}
public final class MyAnnotation3 : kotlin.Annotation {
public constructor MyAnnotation3(/*0*/ first: kotlin.String, /*1*/ second: kotlin.String)
public final val first: kotlin.String
public final val second: kotlin.String
public abstract fun first(): kotlin.String
public abstract fun second(): kotlin.String
}
public final class MyAnnotationWithParam : kotlin.Annotation {
public constructor MyAnnotationWithParam(/*0*/ value: test.AnnotationInParam.MyAnnotation)
public final val value: test.AnnotationInParam.MyAnnotation
public abstract fun value(): test.AnnotationInParam.MyAnnotation
}
public final class MyAnnotationWithParam2 : kotlin.Annotation {
public constructor MyAnnotationWithParam2(/*0*/ value: test.AnnotationInParam.MyAnnotation2)
public final val value: test.AnnotationInParam.MyAnnotation2
public abstract fun value(): test.AnnotationInParam.MyAnnotation2
}
public final class MyAnnotationWithParam3 : kotlin.Annotation {
public constructor MyAnnotationWithParam3(/*0*/ value: test.AnnotationInParam.MyAnnotation3)
public final val value: test.AnnotationInParam.MyAnnotation3
public abstract fun value(): test.AnnotationInParam.MyAnnotation3
}
}
@@ -6,7 +6,6 @@ public open class ArithmeticExpressionInParam {
public final class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ value: kotlin.Int)
public final val value: kotlin.Int
public abstract fun value(): kotlin.Int
}
@test.ArithmeticExpressionInParam.Anno(value = 42) public open class Class {
@@ -5,6 +5,5 @@ public interface ArrayOfEnumInParam {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FIELD, AnnotationTarget.CONSTRUCTOR}) public final class targetAnnotation : kotlin.Annotation {
public constructor targetAnnotation(/*0*/ value: kotlin.String)
public final val value: kotlin.String
public abstract fun value(): kotlin.String
}
}
@@ -9,6 +9,5 @@ public interface ArrayOfStringInParam {
public final class MyAnnotation : kotlin.Annotation {
public constructor MyAnnotation(/*0*/ vararg value: kotlin.String /*kotlin.Array<out kotlin.String>*/)
public final val value: kotlin.Array<kotlin.String>
public abstract fun value(): kotlin.Array<kotlin.String>
}
}
@@ -6,7 +6,6 @@ public open class ClassObjectArrayInParam {
public final class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ vararg value: kotlin.reflect.KClass<*> /*kotlin.Array<out kotlin.reflect.KClass<*>>*/)
public final val value: kotlin.Array<kotlin.reflect.KClass<*>>
public abstract fun value(): kotlin.Array<kotlin.reflect.KClass<*>>
}
@test.ClassObjectArrayInParam.Anno(value = {test.ClassObjectArrayInParam::class, test.ClassObjectArrayInParam.Nested::class, kotlin.String::class}) public open class Nested {
@@ -6,7 +6,6 @@ public open class ClassObjectInParam {
public final class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ value: kotlin.reflect.KClass<*>)
public final val value: kotlin.reflect.KClass<*>
public abstract fun value(): kotlin.reflect.KClass<*>
}
@test.ClassObjectInParam.Anno(value = test.ClassObjectInParam::class) public open class Nested {
@@ -7,8 +7,6 @@ public open class ClassObjectInParamRaw {
public constructor Anno(/*0*/ value: kotlin.reflect.KClass<*>, /*1*/ arg: kotlin.Array<kotlin.reflect.KClass<*>>)
public final val arg: kotlin.Array<kotlin.reflect.KClass<*>>
public final val value: kotlin.reflect.KClass<*>
public abstract fun arg(): kotlin.Array<kotlin.reflect.KClass<*>>
public abstract fun value(): kotlin.reflect.KClass<*>
}
@test.ClassObjectInParamRaw.Anno(arg = {}, value = test.ClassObjectInParamRaw::class) public open class Nested {
@@ -13,13 +13,5 @@ public open class ClassObjectInParamVariance {
public final val arg6: kotlin.Array<kotlin.reflect.KClass<in java.lang.Class<*>!>>
public final val arg7: kotlin.Array<kotlin.reflect.KClass<out java.lang.Class<kotlin.Int!>!>>
public final val arg8: kotlin.Array<kotlin.reflect.KClass<in java.lang.Class<kotlin.Int!>!>>
public abstract fun arg1(): kotlin.reflect.KClass<out kotlin.Int!>
public abstract fun arg2(): kotlin.reflect.KClass<in kotlin.Int!>
public abstract fun arg3(): kotlin.Array<kotlin.reflect.KClass<out kotlin.Int!>>
public abstract fun arg4(): kotlin.Array<kotlin.reflect.KClass<in kotlin.Int!>>
public abstract fun arg5(): kotlin.Array<kotlin.reflect.KClass<out java.lang.Class<*>!>>
public abstract fun arg6(): kotlin.Array<kotlin.reflect.KClass<in java.lang.Class<*>!>>
public abstract fun arg7(): kotlin.Array<kotlin.reflect.KClass<out java.lang.Class<kotlin.Int!>!>>
public abstract fun arg8(): kotlin.Array<kotlin.reflect.KClass<in java.lang.Class<kotlin.Int!>!>>
}
}
@@ -5,7 +5,6 @@ public interface CustomAnnotation {
public final class MyAnnotation : kotlin.Annotation {
public constructor MyAnnotation(/*0*/ value: test.CustomAnnotation.MyEnum)
public final val value: test.CustomAnnotation.MyEnum
public abstract fun value(): test.CustomAnnotation.MyEnum
}
public final enum class MyEnum : kotlin.Enum<test.CustomAnnotation.MyEnum!> {
@@ -6,8 +6,6 @@ public interface CustomAnnotationWithDefaultParameter {
public constructor MyAnnotation(/*0*/ first: kotlin.String, /*1*/ second: kotlin.String = ...)
public final val first: kotlin.String
public final val second: kotlin.String
public abstract fun first(): kotlin.String
public abstract fun second(): kotlin.String
}
@test.CustomAnnotationWithDefaultParameter.MyAnnotation(first = "f", second = "s") public open class MyTest {
@@ -9,6 +9,5 @@ public interface EmptyArrayInParam {
public final class MyAnnotation : kotlin.Annotation {
public constructor MyAnnotation(/*0*/ vararg value: kotlin.String /*kotlin.Array<out kotlin.String>*/)
public final val value: kotlin.Array<kotlin.String>
public abstract fun value(): kotlin.Array<kotlin.String>
}
}
@@ -21,12 +21,10 @@ public open class EnumArgumentWithCustomToString {
public final class EnumAnno : kotlin.Annotation {
public constructor EnumAnno(/*0*/ value: test.EnumArgumentWithCustomToString.E)
public final val value: test.EnumArgumentWithCustomToString.E
public abstract fun value(): test.EnumArgumentWithCustomToString.E
}
public final class EnumArrayAnno : kotlin.Annotation {
public constructor EnumArrayAnno(/*0*/ vararg value: test.EnumArgumentWithCustomToString.E /*kotlin.Array<out test.EnumArgumentWithCustomToString.E>*/)
public final val value: kotlin.Array<test.EnumArgumentWithCustomToString.E>
public abstract fun value(): kotlin.Array<test.EnumArgumentWithCustomToString.E>
}
}
@@ -13,7 +13,6 @@ public final enum class EnumConstructorParameter : kotlin.Enum<test.EnumConstruc
public final class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ value: kotlin.String)
public final val value: kotlin.String
public abstract fun value(): kotlin.String
}
// Static members
@@ -5,12 +5,10 @@ public interface EnumInParam {
public final class MyRetention : kotlin.Annotation {
public constructor MyRetention(/*0*/ value: java.lang.annotation.RetentionPolicy)
public final val value: java.lang.annotation.RetentionPolicy
public abstract fun value(): java.lang.annotation.RetentionPolicy
}
@test.EnumInParam.MyRetention(value = RetentionPolicy.RUNTIME) public final class RetentionAnnotation : kotlin.Annotation {
public constructor RetentionAnnotation(/*0*/ value: kotlin.String)
public final val value: kotlin.String
public abstract fun value(): kotlin.String
}
}
@@ -7,7 +7,6 @@ public open class NestedEnumArgument {
public final class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ value: test.NestedEnumArgument.E)
public final val value: test.NestedEnumArgument.E
public abstract fun value(): test.NestedEnumArgument.E
}
public final enum class E : kotlin.Enum<test.NestedEnumArgument.E!> {
@@ -14,11 +14,5 @@ public interface PrimitiveValueInParam {
public final val i: kotlin.Int
public final val l: kotlin.Long
public final val str: kotlin.String
public abstract fun bool(): kotlin.Boolean
public abstract fun d(): kotlin.Double
public abstract fun f(): kotlin.Float
public abstract fun i(): kotlin.Int
public abstract fun l(): kotlin.Long
public abstract fun str(): kotlin.String
}
}
@@ -5,12 +5,10 @@ public interface RecursiveAnnotation {
@test.RecursiveAnnotation.B(value = test.RecursiveAnnotation.A(value = "test")) public final class A : kotlin.Annotation {
public constructor A(/*0*/ value: kotlin.String)
public final val value: kotlin.String
public abstract fun value(): kotlin.String
}
@test.RecursiveAnnotation.B(value = test.RecursiveAnnotation.A(value = "test")) public final class B : kotlin.Annotation {
public constructor B(/*0*/ value: test.RecursiveAnnotation.A)
public final val value: test.RecursiveAnnotation.A
public abstract fun value(): test.RecursiveAnnotation.A
}
}
@@ -5,12 +5,10 @@ public interface RecursiveAnnotation2 {
public final class A : kotlin.Annotation {
public constructor A(/*0*/ value: test.RecursiveAnnotation2.B)
public final val value: test.RecursiveAnnotation2.B
public abstract fun value(): test.RecursiveAnnotation2.B
}
@test.RecursiveAnnotation2.A(value = test.RecursiveAnnotation2.B(value = "test")) public final class B : kotlin.Annotation {
public constructor B(/*0*/ value: kotlin.String)
public final val value: kotlin.String
public abstract fun value(): kotlin.String
}
}
@@ -5,7 +5,6 @@ public interface StringConcatenationInParam {
public final class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ value: kotlin.String)
public final val value: kotlin.String
public abstract fun value(): kotlin.String
}
@test.StringConcatenationInParam.Anno(value = "hello") public open class Class {
@@ -5,7 +5,6 @@ public interface StringConstantInParam {
public final class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ value: kotlin.String)
public final val value: kotlin.String
public abstract fun value(): kotlin.String
}
@test.StringConstantInParam.Anno(value = "hello") public open class Class {
@@ -5,7 +5,6 @@ public interface StringInParam {
public final class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ value: kotlin.String)
public final val value: kotlin.String
public abstract fun value(): kotlin.String
}
@test.StringInParam.Anno(value = "hello") public open class Class {
@@ -9,7 +9,5 @@ public interface NullInAnnotation {
public constructor Ann(/*0*/ a: kotlin.String, /*1*/ b: kotlin.Array<kotlin.String>)
public final val a: kotlin.String
public final val b: kotlin.Array<kotlin.String>
public abstract fun a(): kotlin.String
public abstract fun b(): kotlin.Array<kotlin.String>
}
}
@@ -97,12 +97,6 @@ public class JetDiagnosticsTestWithStdLibGenerated extends AbstractJetDiagnostic
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/testsWithStdLib/annotations"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("annotationClassMethodCall.kt")
public void testAnnotationClassMethodCall() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/annotationClassMethodCall.kt");
doTest(fileName);
}
@TestMetadata("ClassObjectAnnotatedWithItsKClass.kt")
public void testClassObjectAnnotatedWithItsKClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/ClassObjectAnnotatedWithItsKClass.kt");
@@ -86,6 +86,9 @@ public class LazyJavaClassMemberScope(
}
override fun JavaMethodDescriptor.isVisibleAsFunction(): Boolean {
// Do not load Java annotation methods as Kotlin functions (load them as properties instead)
if (jClass.isAnnotationType) return false
if (getPropertyNamesCandidatesByAccessorName(name).any {
propertyName ->
getPropertiesFromSupertypes(propertyName).any {
@@ -1,67 +0,0 @@
/*
* Copyright 2010-2015 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 org.jetbrains.kotlin.idea.quickfix
import com.intellij.codeInsight.intention.IntentionAction
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
import org.jetbrains.kotlin.idea.quickfix.quickfixUtil.createIntentionForFirstParentOfType
import org.jetbrains.kotlin.psi.JetCallExpression
import org.jetbrains.kotlin.psi.JetFile
import org.jetbrains.kotlin.psi.JetPsiFactory
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
import org.jetbrains.kotlin.utils.addIfNotNull
public class MigrateAnnotationMethodCallFix(
expression: JetCallExpression
) : KotlinQuickFixAction<JetCallExpression>(expression) {
override fun getText() = "Replace method call with property access"
override fun getFamilyName() = getText()
override fun invoke(project: Project, editor: Editor?, file: JetFile) = replaceWithSimpleCall(element)
companion object : JetSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic) = diagnostic.createIntentionForFirstParentOfType(::MigrateAnnotationMethodCallFix)
fun replaceWithSimpleCall(expression: JetCallExpression) {
val simpleName = expression.getCalleeExpression()?.getText() ?: return
expression.replace(JetPsiFactory(expression).createSimpleName(simpleName))
}
}
}
class MigrateAnnotationMethodCallInWholeFile : IntentionAction {
override fun getText() = "Replace deprecated method calls with property access in current file"
override fun getFamilyName() = getText()
override fun startInWriteAction(): Boolean = true
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile?) = true
override fun invoke(project: Project, editor: Editor?, file: PsiFile?) = (file as? JetFile)?.let {
it.analyzeFully().getDiagnostics().
filter { it.getFactory() == ErrorsJvm.DEPRECATED_ANNOTATION_METHOD_CALL }.
forEach {
(it.getPsiElement() as? JetCallExpression)?.let { MigrateAnnotationMethodCallFix.replaceWithSimpleCall(it) }
}
} ?: Unit
companion object : JetSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic) = MigrateAnnotationMethodCallInWholeFile()
}
}
@@ -38,7 +38,6 @@ import org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.kotlin.lexer.JetTokens.*
import org.jetbrains.kotlin.psi.JetClass
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm.DEPRECATED_ANNOTATION_METHOD_CALL
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm.NO_REFLECTION_IN_CLASS_PATH
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm.POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION
@@ -302,8 +301,6 @@ public class QuickFixRegistrar : QuickFixContributor {
EXPLICIT_DELEGATION_CALL_REQUIRED.registerFactory(InsertDelegationCallQuickfix.InsertThisDelegationCallFactory)
EXPLICIT_DELEGATION_CALL_REQUIRED.registerFactory(InsertDelegationCallQuickfix.InsertSuperDelegationCallFactory)
DEPRECATED_ANNOTATION_METHOD_CALL.registerFactory(MigrateAnnotationMethodCallFix, MigrateAnnotationMethodCallInWholeFile)
MISSING_CONSTRUCTOR_KEYWORD.registerFactory(MissingConstructorKeywordFix,
MissingConstructorKeywordFix.createWholeProjectFixFactory())
@@ -1,6 +0,0 @@
// "Replace method call with property access" "true"
// WITH_RUNTIME
fun foo(ann: Ann) {
ann.value
}
@@ -1,3 +0,0 @@
public @interface Ann {
int value();
}
@@ -1,6 +0,0 @@
// "Replace method call with property access" "true"
// WITH_RUNTIME
fun foo(ann: Ann) {
ann.value()<caret>
}
@@ -1,32 +0,0 @@
// "Replace deprecated method calls with property access in current file" "true"
// WITH_RUNTIME
class A {
fun foo() {}
}
fun bar(x: Int) {
javaClass<A>().getAnnotation(javaClass<Ann>()).args[0]
javaClass<A>().getAnnotation(javaClass<Ann>()).y
}
fun foo(ann: Ann, a: A) {
ann.value
bar(ann.x + (ann).y)
a.foo()
a.equals(a)
a.toString()
a.hashCode()
class Local {
val prop = ann.arg
fun baz() {
val v = ann.args
val summ = ann.x * ann.ext()
}
fun Ann.ext(): Int = -y
}
}
@@ -1,7 +0,0 @@
public @interface Ann {
Class<?> value();
int x() default 1;
int y() default 2;
Class<?> arg() default String;
Class<?>[] args() default {};
}
@@ -1,32 +0,0 @@
// "Replace deprecated method calls with property access in current file" "true"
// WITH_RUNTIME
class A {
fun foo() {}
}
fun bar(x: Int) {
javaClass<A>().getAnnotation(javaClass<Ann>()).args()[0]
javaClass<A>().getAnnotation(javaClass<Ann>()).y()
}
fun foo(ann: Ann, a: A) {
ann.value()<caret>
bar(ann.x() + (ann).y())
a.foo()
a.equals(a)
a.toString()
a.hashCode()
class Local {
val prop = ann.arg()
fun baz() {
val v = ann.args()
val summ = ann.x() * ann.ext()
}
fun Ann.ext(): Int = -y()
}
}
@@ -1213,27 +1213,6 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes
}
}
@TestMetadata("idea/testData/quickfix/migration/migrateJavaAnnotationMethodCall")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class MigrateJavaAnnotationMethodCall extends AbstractQuickFixMultiFileTest {
public void testAllFilesPresentInMigrateJavaAnnotationMethodCall() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/migration/migrateJavaAnnotationMethodCall"), Pattern.compile("^(\\w+)\\.before\\.Main\\.\\w+$"), true);
}
@TestMetadata("basicMultiple.before.Main.kt")
public void testBasicMultiple() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/migration/migrateJavaAnnotationMethodCall/basicMultiple.before.Main.kt");
doTestWithExtraFile(fileName);
}
@TestMetadata("wholeFileMultiple.before.Main.kt")
public void testWholeFileMultiple() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/migration/migrateJavaAnnotationMethodCall/wholeFileMultiple.before.Main.kt");
doTestWithExtraFile(fileName);
}
}
@TestMetadata("idea/testData/quickfix/migration/missingConstructorKeyword")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)