Introduce 'coroutine'/'suspend' modifiers
This commit is contained in:
+1
-1
@@ -130,7 +130,7 @@ private class FunctionClsStubBuilder(
|
||||
val modalityModifier = if (isTopLevel) listOf() else listOf(MODALITY)
|
||||
val modifierListStubImpl = createModifierListStubForDeclaration(
|
||||
callableStub, functionProto.flags,
|
||||
listOf(VISIBILITY, OPERATOR, INFIX, EXTERNAL_FUN, INLINE, TAILREC) + modalityModifier
|
||||
listOf(VISIBILITY, OPERATOR, INFIX, EXTERNAL_FUN, INLINE, TAILREC, SUSPEND) + modalityModifier
|
||||
)
|
||||
|
||||
val annotationIds = c.components.annotationLoader.loadCallableAnnotations(
|
||||
|
||||
+3
@@ -171,6 +171,9 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) {
|
||||
if (varargElementType != null) { modifiers.add(KtTokens.VARARG_KEYWORD) }
|
||||
if (Flags.IS_CROSSINLINE.get(valueParameterProto.flags)) { modifiers.add(KtTokens.CROSSINLINE_KEYWORD) }
|
||||
if (Flags.IS_NOINLINE.get(valueParameterProto.flags)) { modifiers.add(KtTokens.NOINLINE_KEYWORD) }
|
||||
if (Flags.IS_COROUTINE.get(valueParameterProto.flags)) {
|
||||
modifiers.add(KtTokens.COROUTINE_KEYWORD)
|
||||
}
|
||||
|
||||
val modifierList = createModifierListStub(parameterStub, modifiers)
|
||||
val parameterAnnotations = c.components.annotationLoader.loadValueParameterAnnotations(
|
||||
|
||||
@@ -60,6 +60,7 @@ val DATA = createBooleanFlagToModifier(Flags.IS_DATA, KtTokens.DATA_KEYWORD)
|
||||
val EXTERNAL_FUN = createBooleanFlagToModifier(Flags.IS_EXTERNAL_FUNCTION, KtTokens.EXTERNAL_KEYWORD)
|
||||
val INLINE = createBooleanFlagToModifier(Flags.IS_INLINE, KtTokens.INLINE_KEYWORD)
|
||||
val TAILREC = createBooleanFlagToModifier(Flags.IS_TAILREC, KtTokens.TAILREC_KEYWORD)
|
||||
val SUSPEND = createBooleanFlagToModifier(Flags.IS_SUSPEND, KtTokens.SUSPEND_KEYWORD)
|
||||
|
||||
private fun createBooleanFlagToModifier(
|
||||
flagField: Flags.BooleanFlagField, ktModifierKeywordToken: KtModifierKeywordToken
|
||||
|
||||
@@ -40,4 +40,5 @@ class MouseMovedEventArgs
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -34,4 +34,5 @@ class B {
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -39,4 +39,5 @@ class A {
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -38,4 +38,5 @@ var a : Int
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -25,4 +25,5 @@ annotation class Test {
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -37,4 +37,5 @@ public class Test {
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -31,4 +31,5 @@ class TestClass {
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -25,6 +25,7 @@ enum class Test {
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// EXIST: fun
|
||||
|
||||
/* TODO: items below are not valid here */
|
||||
|
||||
@@ -27,4 +27,5 @@ interface Test {
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -8,6 +8,7 @@ class TestSample() {
|
||||
// EXIST: vararg
|
||||
// EXIST: noinline
|
||||
// EXIST: crossinline
|
||||
// EXIST: coroutine
|
||||
/* TODO: val&var are not correct */
|
||||
// EXIST: val
|
||||
// EXIST: var
|
||||
|
||||
@@ -28,4 +28,5 @@ object Test {
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ class TestSample(<caret>)
|
||||
// EXIST: private
|
||||
// EXIST: protected
|
||||
// EXIST: internal
|
||||
|
||||
// EXIST: coroutine
|
||||
/* TODO: keywords below should not be here*/
|
||||
// EXIST: abstract
|
||||
// EXIST: const
|
||||
|
||||
@@ -5,6 +5,7 @@ fun test(<caret>) {
|
||||
// EXIST: vararg
|
||||
// EXIST: noinline
|
||||
// EXIST: crossinline
|
||||
// EXIST: coroutine
|
||||
/* TODO: they all are not correct */
|
||||
// EXIST: val
|
||||
// EXIST: var
|
||||
|
||||
@@ -25,4 +25,5 @@ package Test
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -39,4 +39,5 @@ class Some {
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -39,4 +39,5 @@ class Some {
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -37,4 +37,5 @@ class Some {
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -24,4 +24,5 @@
|
||||
// EXIST: external
|
||||
// EXIST: annotation class
|
||||
// EXIST: const
|
||||
// EXIST: suspend
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -206,7 +206,7 @@ class ChangeMemberFunctionSignatureFix private constructor(
|
||||
ValueParameterDescriptorImpl(
|
||||
descriptor, null, index,
|
||||
parameter.annotations, parameter.name, parameter.returnType!!, parameter.declaresDefaultValue(),
|
||||
parameter.isCrossinline, parameter.isNoinline, parameter.varargElementType, SourceElement.NO_SOURCE
|
||||
parameter.isCrossinline, parameter.isNoinline, parameter.isCoroutine, parameter.varargElementType, SourceElement.NO_SOURCE
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -9,4 +9,4 @@ data class Modifiers(val x: Int) {
|
||||
inline fun inlined(crossinline arg1: ()->Unit, noinline arg2: ()->Unit): Unit {}
|
||||
}
|
||||
|
||||
annotation class Ann
|
||||
annotation class Ann
|
||||
|
||||
@@ -17,4 +17,8 @@ data class Modifiers(val x: Int) {
|
||||
override operator fun equals(other: Any?) = false
|
||||
|
||||
annotation class Ann
|
||||
}
|
||||
|
||||
suspend fun suspend(x: Continuation<Int>) {}
|
||||
|
||||
fun builder(coroutine c: Any.() -> Continuation<Unit>) {}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,39 @@ PsiJetFileStubImpl[package=test]
|
||||
USER_TYPE:
|
||||
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||
REFERENCE_EXPRESSION:[referencedName=Int]
|
||||
FUN:[fqName=test.Modifiers.builder, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, name=builder]
|
||||
MODIFIER_LIST:[public final]
|
||||
VALUE_PARAMETER_LIST:
|
||||
VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=c]
|
||||
MODIFIER_LIST:[coroutine]
|
||||
TYPE_REFERENCE:
|
||||
FUNCTION_TYPE:
|
||||
FUNCTION_TYPE_RECEIVER:
|
||||
TYPE_REFERENCE:
|
||||
USER_TYPE:
|
||||
USER_TYPE:
|
||||
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||
REFERENCE_EXPRESSION:[referencedName=Any]
|
||||
VALUE_PARAMETER_LIST:
|
||||
TYPE_REFERENCE:
|
||||
USER_TYPE:
|
||||
USER_TYPE:
|
||||
USER_TYPE:
|
||||
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||
REFERENCE_EXPRESSION:[referencedName=coroutines]
|
||||
REFERENCE_EXPRESSION:[referencedName=Continuation]
|
||||
TYPE_ARGUMENT_LIST:
|
||||
TYPE_PROJECTION:[projectionKind=NONE]
|
||||
TYPE_REFERENCE:
|
||||
USER_TYPE:
|
||||
USER_TYPE:
|
||||
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||
REFERENCE_EXPRESSION:[referencedName=Unit]
|
||||
TYPE_REFERENCE:
|
||||
USER_TYPE:
|
||||
USER_TYPE:
|
||||
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||
REFERENCE_EXPRESSION:[referencedName=Unit]
|
||||
FUN:[fqName=test.Modifiers.component1, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, name=component1]
|
||||
MODIFIER_LIST:[public final operator]
|
||||
VALUE_PARAMETER_LIST:
|
||||
@@ -107,6 +140,29 @@ PsiJetFileStubImpl[package=test]
|
||||
USER_TYPE:
|
||||
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||
REFERENCE_EXPRESSION:[referencedName=Long]
|
||||
FUN:[fqName=test.Modifiers.suspend, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, name=suspend]
|
||||
MODIFIER_LIST:[public final suspend]
|
||||
VALUE_PARAMETER_LIST:
|
||||
VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=x]
|
||||
TYPE_REFERENCE:
|
||||
USER_TYPE:
|
||||
USER_TYPE:
|
||||
USER_TYPE:
|
||||
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||
REFERENCE_EXPRESSION:[referencedName=coroutines]
|
||||
REFERENCE_EXPRESSION:[referencedName=Continuation]
|
||||
TYPE_ARGUMENT_LIST:
|
||||
TYPE_PROJECTION:[projectionKind=NONE]
|
||||
TYPE_REFERENCE:
|
||||
USER_TYPE:
|
||||
USER_TYPE:
|
||||
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||
REFERENCE_EXPRESSION:[referencedName=Int]
|
||||
TYPE_REFERENCE:
|
||||
USER_TYPE:
|
||||
USER_TYPE:
|
||||
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||
REFERENCE_EXPRESSION:[referencedName=Unit]
|
||||
CLASS:[fqName=test.Modifiers.Ann, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=false, name=Ann, superNames=[Annotation]]
|
||||
MODIFIER_LIST:[public final annotation]
|
||||
PRIMARY_CONSTRUCTOR:
|
||||
|
||||
@@ -1037,6 +1037,21 @@ public class ResolveByStubTestGenerated extends AbstractResolveByStubTest {
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/loadJava/compiledKotlin/coroutines")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class Coroutines extends AbstractResolveByStubTest {
|
||||
public void testAllFilesPresentInCoroutines() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/loadJava/compiledKotlin/coroutines"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("Basic.kt")
|
||||
public void testBasic() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/coroutines/Basic.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/loadJava/compiledKotlin/dataClass")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
Reference in New Issue
Block a user