Drop inlineOptions and fix forgotten usages

This commit is contained in:
Denis Zharkov
2015-09-23 12:07:07 +03:00
parent 67486b867b
commit 098f5462eb
58 changed files with 13 additions and 150 deletions
@@ -1,22 +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.resolve.inline;
public enum InlineOption {
LOCAL_CONTINUE_AND_BREAK,
ONLY_LOCAL_RETURN
}
@@ -61,29 +61,8 @@ public class InlineUtil {
return InlineStrategy.valueOf(((EnumValue) argument).getValue().getName().asString());
}
public static boolean hasOnlyLocalContinueAndBreak(@NotNull ValueParameterDescriptor descriptor) {
return hasInlineOption(descriptor, InlineOption.LOCAL_CONTINUE_AND_BREAK);
}
public static boolean hasOnlyLocalReturn(@NotNull ValueParameterDescriptor descriptor) {
return hasInlineOption(descriptor, InlineOption.ONLY_LOCAL_RETURN)
|| descriptor.getAnnotations().findAnnotation(KotlinBuiltIns.FQ_NAMES.crossinline) != null;
}
private static boolean hasInlineOption(@NotNull ValueParameterDescriptor descriptor, @NotNull InlineOption option) {
AnnotationDescriptor annotation = descriptor.getAnnotations().findAnnotation(KotlinBuiltIns.FQ_NAMES.inlineOptions);
if (annotation != null) {
ConstantValue<?> argument = firstOrNull(annotation.getAllValueArguments().values());
if (argument instanceof ArrayValue) {
for (ConstantValue<?> value : ((ArrayValue) argument).getValue()) {
if (value instanceof EnumValue && ((EnumValue) value).getValue().getName().asString().equals(option.name())) {
return true;
}
}
}
}
return false;
return descriptor.getAnnotations().findAnnotation(KotlinBuiltIns.FQ_NAMES.crossinline) != null;
}
public static boolean checkNonLocalReturnUsage(
-22
View File
@@ -591,22 +591,6 @@ public interface Function</*0*/ out R> {
/*primary*/ public constructor HiddenDeclaration()
}
public final enum class InlineOption : kotlin.Enum<kotlin.InlineOption> {
enum entry LOCAL_CONTINUE_AND_BREAK
enum entry ONLY_LOCAL_RETURN
/*primary*/ private constructor InlineOption()
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: kotlin.InlineOption): kotlin.Int
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
// Static members
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): kotlin.InlineOption
public final /*synthesized*/ fun values(): kotlin.Array<kotlin.InlineOption>
}
public final class Int : kotlin.Number, kotlin.Comparable<kotlin.Int> {
/*primary*/ private constructor Int()
public final fun and(/*0*/ other: kotlin.Int): kotlin.Int
@@ -1268,12 +1252,6 @@ public object Unit {
/*primary*/ public constructor inline()
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.VALUE_PARAMETER}) @kotlin.annotation.Retention(value = AnnotationRetention.RUNTIME) @kotlin.annotation.MustBeDocumented() @kotlin.annotation.annotation() public final class inlineOptions : kotlin.Annotation {
/*primary*/ public constructor inlineOptions(/*0*/ vararg value: kotlin.InlineOption /*kotlin.Array<out kotlin.InlineOption>*/)
public final val value: kotlin.Array<out kotlin.InlineOption>
public final fun <get-value>(): kotlin.Array<out kotlin.InlineOption>
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.VALUE_PARAMETER}) @kotlin.annotation.Retention(value = AnnotationRetention.RUNTIME) @kotlin.annotation.MustBeDocumented() @kotlin.annotation.annotation() public final class noinline : kotlin.Annotation {
/*primary*/ public constructor noinline()
}
@@ -1,6 +1,5 @@
package test
import kotlin.InlineOption.*
abstract class A<R> {
abstract fun getO() : R
@@ -1,6 +1,5 @@
package test
import kotlin.InlineOption.*
abstract class A<R>(val param : R) {
abstract fun getO() : R
@@ -1,6 +1,5 @@
//NO_CHECK_LAMBDA_INLINING
import builders.*
import kotlin.InlineOption.*
inline fun testAllInline(f: () -> String) : String {
val args = arrayOf("1", "2", "3")
@@ -1,6 +1,5 @@
package test
import kotlin.InlineOption.*
inline fun <R> doWork(crossinline job: ()-> R) : R {
return notInline({job()})
@@ -1,6 +1,5 @@
package test
import kotlin.InlineOption.*
inline fun <R> doWork(crossinline job: ()-> R) : R {
val k = 10;
-1
View File
@@ -1,6 +1,5 @@
package test
import kotlin.InlineOption.*
public class Data()
@@ -1,6 +1,5 @@
package zzz
import kotlin.InlineOption.*
inline fun calc(crossinline lambda: () -> Int): Int {
return doCalc { lambda() }
@@ -1,6 +1,5 @@
//NO_CHECK_LAMBDA_INLINING
import test.*
import kotlin.InlineOption.*
fun test1(param: String): String {
var result = "fail1"
@@ -1,6 +1,5 @@
package test
import kotlin.InlineOption.*
inline fun <R> call(crossinline f: () -> R) : R {
return {f()} ()
@@ -1,6 +1,5 @@
//NO_CHECK_LAMBDA_INLINING
import test.*
import kotlin.InlineOption.*
fun testSameCaptured() : String {
var result = 0;
@@ -1,6 +1,5 @@
package test
import kotlin.InlineOption.*
inline fun <R> doWork(crossinline job: ()-> R) : R {
val k = 10;
@@ -1,6 +1,5 @@
//NO_CHECK_LAMBDA_INLINING
import test.*
import kotlin.InlineOption.*
inline fun test1(crossinline param: () -> String): String {
var result = "fail"
@@ -1,6 +1,5 @@
package test
import kotlin.InlineOption.*
inline fun <R> doWork(crossinline job: ()-> R) : R {
return notInline({job()})
@@ -1,5 +1,5 @@
import builders.*
import kotlin.InlineOption.*
fun test(): String {
var res = "Fail"
@@ -1,5 +1,5 @@
import builders.*
import kotlin.InlineOption.*
fun test(): String {
var res = "Fail"
@@ -1,5 +1,5 @@
import builders.*
import kotlin.InlineOption.*
inline fun test(): String {
var res = "Fail"
@@ -1,5 +1,5 @@
import builders.*
import kotlin.InlineOption.*
fun test(): String {
var res = "Fail"
@@ -1,5 +1,5 @@
import builders.*
import kotlin.InlineOption.*
fun test(): String {
var res = "Fail"
@@ -1,5 +1,5 @@
import builders.*
import kotlin.InlineOption.*
inline fun test(): String {
var res = "Fail"
@@ -1,5 +1,5 @@
import builders.*
import kotlin.InlineOption.*
fun box(): String {
return test()
@@ -1,5 +1,5 @@
import builders.*
import kotlin.InlineOption.*
fun box(): String {
return test{"OK"}
+1 -1
View File
@@ -1,5 +1,5 @@
import builders.*
import kotlin.InlineOption.*
inline fun test(): String {
var res = "Fail"
@@ -1,4 +1,3 @@
import kotlin.InlineOption.*
inline fun<reified T> createArray(n: Int, crossinline block: () -> T): Array<T> {
return Array<T>(n) { block() }
@@ -1,4 +1,3 @@
import kotlin.InlineOption.*
inline fun<reified T> createArray(n: Int, crossinline block: () -> T): Array<T> {
return Array<T>(n) { block() }
@@ -1,4 +1,3 @@
import kotlin.InlineOption.*
inline fun<reified T1, reified T2> createArray(n: Int, crossinline block: () -> Pair<T1, T2>): Pair<Array<T1>, Array<T2>> {
return Pair(Array(n) { block().first }, Array(n) { block().second })
@@ -1,4 +1,3 @@
import kotlin.InlineOption.*
class A {
fun foo() {
@@ -1,6 +1,5 @@
package foo
import kotlin.InlineOption.*
class Foo {
@@ -1,6 +1,5 @@
package foo
import kotlin.InlineOption.*
class Foo {
@@ -11,4 +11,4 @@ val a: Enum<E> = E.ENTRY
val b: Enum<RetentionPolicy> = RetentionPolicy.RUNTIME
// Test deserialized resolve
val c: Enum<InlineOption> = InlineOption.ONLY_LOCAL_RETURN
val c: Enum<AnnotationTarget> = AnnotationTarget.CLASS
@@ -2,7 +2,7 @@ package
public val a: kotlin.Enum<E>
public val b: kotlin.Enum<java.lang.annotation.RetentionPolicy>
public val c: kotlin.Enum<kotlin.InlineOption>
public val c: kotlin.Enum<kotlin.annotation.AnnotationTarget>
public final enum class E : kotlin.Enum<E> {
enum entry ENTRY
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE -NOTHING_TO_INLINE
import kotlin.InlineOption.*
inline fun <R> inlineFunOnlyLocal(crossinline p: () -> R) {
val s = object {
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE -NOTHING_TO_INLINE
import kotlin.InlineOption.*
inline fun <R> inlineFunOnlyLocal(crossinline p: () -> R) {
val s = object {
@@ -1,4 +1,3 @@
import kotlin.InlineOption.*
inline fun <R> onlyLocal(crossinline p: () -> R) {
inlineAll(p)
@@ -1,4 +1,3 @@
import kotlin.InlineOption.*
inline fun <R> inlineFunWithAnnotation(crossinline p: () -> R) {
inlineFun {
@@ -1,4 +1,3 @@
import kotlin.InlineOption.ONLY_LOCAL_RETURN
inline fun testSameCaptured(lambdaWithResultCaptured: () -> Unit) : String {
doWork({<!NON_LOCAL_RETURN_NOT_ALLOWED!>lambdaWithResultCaptured<!>()})
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE -NOTHING_TO_INLINE
import kotlin.InlineOption.*
inline fun <R> inlineFunOnlyLocal(crossinline p: () -> R) {
<!NOT_YET_SUPPORTED_IN_INLINE!>fun a() {
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE -NOTHING_TO_INLINE
import kotlin.InlineOption.*
inline fun <R> inlineFunOnlyLocal(crossinline p: () -> R) {
{
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE -NOTHING_TO_INLINE
import kotlin.InlineOption.*
inline fun <R> inlineFunOnlyLocal(crossinline p: () -> R) {
<!NOT_YET_SUPPORTED_IN_INLINE!>class A {
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE -NOTHING_TO_INLINE
import kotlin.InlineOption.*
fun <R> fun1(p: () -> R) {
inlineFun {
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE -NOTHING_TO_INLINE
import kotlin.InlineOption.*
class Z {
inline fun <R> inlineFun(crossinline p: () -> R) {
@@ -1,4 +1,3 @@
import kotlin.InlineOption.*
inline fun <R> toOnlyLocal(crossinline p: () -> R) {
p()
+1 -30
View File
@@ -32,21 +32,13 @@ public annotation class noinline
* See the [Kotlin language documentation](http://kotlinlang.org/docs/reference/inline-functions.html) for more information.
*
* @see noinline
* @see inlineOptions
* @see crossinline
*/
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY)
@Retention(AnnotationRetention.RUNTIME)
@MustBeDocumented
public annotation class inline
/**
* @suppress
*/
@Target(AnnotationTarget.VALUE_PARAMETER)
@Retention(AnnotationRetention.RUNTIME)
@MustBeDocumented
public annotation class inlineOptions(vararg val value: InlineOption)
/**
* Forbids use of non-local control flow statements within lambdas passed as arguments for this parameter.
*/
@@ -54,24 +46,3 @@ public annotation class inlineOptions(vararg val value: InlineOption)
@Retention(AnnotationRetention.RUNTIME)
@MustBeDocumented
public annotation class crossinline
/**
* Specifies the control flow statements which are allowed to be used for non-local control flow transfer in a lambda
* passed as a parameter to an inline function.
*/
public enum class InlineOption {
/**
* This option hasn't been implemented yet.
*/
LOCAL_CONTINUE_AND_BREAK,
/**
* If this option is specified, lambdas may not use non-local return statements (statements which return from
* their calling function or one of its enclosing functions). This option must be specified if the lambda
* is not invoked directly by the receiving function but instead used in a different execution context
* (for example, from an object contained in the receiving function).
*
* By default, lambdas are allowed to use non-local returns.
*/
ONLY_LOCAL_RETURN
}
@@ -186,7 +186,6 @@ public class KotlinBuiltIns {
public final FqName inline = fqName("inline");
public final FqName noinline = fqName("noinline");
public final FqName crossinline = fqName("crossinline");
public final FqName inlineOptions = fqName("inlineOptions");
public final FqName extension = fqName("Extension");
public final FqName target = annotationName("Target");
public final FqName annotation = annotationName("annotation");
-1
View File
@@ -16,7 +16,6 @@
package kotlin
import kotlin.InlineOption.ONLY_LOCAL_RETURN
// Note:
// Right now we don't want to have neither 'volatile' nor 'synchronized' at runtime,
@@ -5,7 +5,6 @@
package foo
import kotlin.InlineOption.*
inline fun <R> doWork(crossinline job: ()-> R) : R {
return notInline({job()})
@@ -6,7 +6,6 @@
package test
import kotlin.InlineOption.*
abstract class A<R> {
abstract fun getO() : R
@@ -5,7 +5,6 @@
package test
import kotlin.InlineOption.*
abstract class A<R>(val param : R) {
abstract fun getO() : R
@@ -5,7 +5,6 @@
package foo
import kotlin.InlineOption.*
inline fun testAllInline(f: () -> String) : String {
val args = arrayOf("1", "2", "3")
@@ -5,7 +5,6 @@
package test
import kotlin.InlineOption.*
inline fun <R> doWork(crossinline job: ()-> R) : R {
return notInline({job()})
@@ -5,7 +5,6 @@
package test
import kotlin.InlineOption.*
inline fun <R> doWork(crossinline job: ()-> R) : R {
val k = 10;
@@ -6,7 +6,6 @@
package foo
import test.*
import kotlin.InlineOption.*
fun test1(param: String): String {
var result = "fail1"
@@ -5,7 +5,6 @@
package test
import kotlin.InlineOption.*
inline fun <R> call(crossinline f: () -> R) : R {
return {f()} ()
@@ -6,7 +6,6 @@
package foo
import test.*
import kotlin.InlineOption.*
fun testSameCaptured() : String {
var result = 0;
@@ -5,7 +5,6 @@
package test
import kotlin.InlineOption.*
inline fun <R> doWork(crossinline job: ()-> R) : R {
val k = 10;
@@ -5,7 +5,6 @@
package test
import kotlin.InlineOption.*
public class Data()