[Analysis API] add isNoinline/isCrossinline to the KtValueParameterSymbol

This commit is contained in:
Ilya Kirillov
2022-06-30 20:02:06 +02:00
parent 6a145b52aa
commit 184478858c
13 changed files with 192 additions and 2 deletions
@@ -94,6 +94,12 @@ class KtFe10DescDefaultPropertySetterSymbol(
override val isImplicitLambdaParameter: Boolean
get() = withValidityAssertion { false }
override val isCrossinline: Boolean
get() = withValidityAssertion { false }
override val isNoinline: Boolean
get() = withValidityAssertion { false }
override val name: Name
get() = withValidityAssertion { Name.identifier("value") }
@@ -42,6 +42,12 @@ internal class KtFe10DescValueParameterSymbol(
override val isVararg: Boolean
get() = withValidityAssertion { descriptor.isVararg }
override val isCrossinline: Boolean
get() = withValidityAssertion { descriptor.isCrossinline }
override val isNoinline: Boolean
get() = withValidityAssertion { descriptor.isNoinline }
override val isImplicitLambdaParameter: Boolean
get() = withValidityAssertion {
descriptor.containingDeclaration is AnonymousFunctionDescriptor &&
@@ -118,6 +118,12 @@ class KtFe10PsiDefaultPropertySetterSymbol(
override val isImplicitLambdaParameter: Boolean
get() = withValidityAssertion { false }
override val isCrossinline: Boolean
get() = withValidityAssertion { false }
override val isNoinline: Boolean
get() = withValidityAssertion { false }
override val name: Name
get() = withValidityAssertion { Name.identifier("value") }
@@ -43,6 +43,12 @@ internal class KtFe10PsiDefaultSetterParameterSymbol(
override val isVararg: Boolean
get() = withValidityAssertion { false }
override val isCrossinline: Boolean
get() = withValidityAssertion { false }
override val isNoinline: Boolean
get() = withValidityAssertion { false }
override val isImplicitLambdaParameter: Boolean
get() = withValidityAssertion { false }
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.kotlin.resolve.BindingContext
@@ -48,6 +49,12 @@ internal class KtFe10PsiValueParameterSymbol(
override val isVararg: Boolean
get() = withValidityAssertion { psi.isVarArg }
override val isCrossinline: Boolean
get() = withValidityAssertion { psi.hasModifier(KtTokens.CROSSINLINE_KEYWORD) }
override val isNoinline: Boolean
get() = withValidityAssertion { psi.hasModifier(KtTokens.NOINLINE_KEYWORD) }
override val isImplicitLambdaParameter: Boolean
get() = withValidityAssertion { false }
@@ -271,4 +271,20 @@ public class Fe10IdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated extends A
runTest("analysis/analysis-api/testData/symbols/symbolByPsi/contextReceivers/contextReceiversOnProperty.kt");
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters")
@TestDataPath("$PROJECT_ROOT")
public class ValueParameters {
@Test
public void testAllFilesPresentInValueParameters() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@Test
@TestMetadata("parameterInlining.kt")
public void testParameterInlining() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterInlining.kt");
}
}
}
@@ -41,6 +41,10 @@ internal class KtFirValueParameterSymbol(
firSymbol.source?.kind == KtFakeSourceElementKind.ItLambdaParameter
}
override val isCrossinline: Boolean get() = withValidityAssertion { firSymbol.isCrossinline}
override val isNoinline: Boolean get() = withValidityAssertion { firSymbol.isNoinline}
override val returnType by cached {
val returnType = firSymbol.resolvedReturnType
return@cached if (firSymbol.isVararg) {
@@ -271,4 +271,20 @@ public class FirIdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated extends Ab
runTest("analysis/analysis-api/testData/symbols/symbolByPsi/contextReceivers/contextReceiversOnProperty.kt");
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters")
@TestDataPath("$PROJECT_ROOT")
public class ValueParameters {
@Test
public void testAllFilesPresentInValueParameters() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@Test
@TestMetadata("parameterInlining.kt")
public void testParameterInlining() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterInlining.kt");
}
}
}
@@ -271,4 +271,20 @@ public class FirStandaloneNormalAnalysisSourceModuleSymbolByPsiTestGenerated ext
runTest("analysis/analysis-api/testData/symbols/symbolByPsi/contextReceivers/contextReceiversOnProperty.kt");
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters")
@TestDataPath("$PROJECT_ROOT")
public class ValueParameters {
@Test
public void testAllFilesPresentInValueParameters() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@Test
@TestMetadata("parameterInlining.kt")
public void testParameterInlining() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterInlining.kt");
}
}
}
@@ -6,13 +6,15 @@
package org.jetbrains.kotlin.analysis.api.symbols
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.*
import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue
import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.KtNonConstantInitializerValue
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.analysis.api.symbols.markers.*
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
@@ -171,6 +173,16 @@ public abstract class KtValueParameterSymbol : KtVariableLikeSymbol(), KtSymbolW
final override val receiverType: KtType? get() = withValidityAssertion { null }
final override val contextReceivers: List<KtContextReceiver> get() = withValidityAssertion { emptyList() }
/**
* Returns true if the function parameter is marked with `noinline` modifier
*/
public abstract val isNoinline: Boolean
/**
* Returns true if the function parameter is marked with `crossinline` modifier
*/
public abstract val isCrossinline: Boolean
final override val typeParameters: List<KtTypeParameterSymbol>
get() = withValidityAssertion { emptyList() }
@@ -0,0 +1,5 @@
inline fun foo(
inlineParameter: () -> Int,
crossinline crossinlineParameter: () -> Int,
noinline noinlineParameter: () -> Int,
) {}
@@ -0,0 +1 @@
inline fun foo(inlineParameter: () -> kotlin.Int, crossinline crossinlineParameter: () -> kotlin.Int, noinline noinlineParameter: () -> kotlin.Int)
@@ -0,0 +1,89 @@
KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
generatedPrimaryConstructorProperty: null
hasDefaultValue: false
isCrossinline: false
isExtension: false
isImplicitLambdaParameter: false
isNoinline: false
isVararg: false
name: inlineParameter
origin: SOURCE
receiverType: null
returnType: kotlin/Function0<kotlin/Int>
symbolKind: LOCAL
typeParameters: []
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
generatedPrimaryConstructorProperty: null
hasDefaultValue: false
isCrossinline: true
isExtension: false
isImplicitLambdaParameter: false
isNoinline: false
isVararg: false
name: crossinlineParameter
origin: SOURCE
receiverType: null
returnType: kotlin/Function0<kotlin/Int>
symbolKind: LOCAL
typeParameters: []
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
generatedPrimaryConstructorProperty: null
hasDefaultValue: false
isCrossinline: false
isExtension: false
isImplicitLambdaParameter: false
isNoinline: true
isVararg: false
name: noinlineParameter
origin: SOURCE
receiverType: null
returnType: kotlin/Function0<kotlin/Int>
symbolKind: LOCAL
typeParameters: []
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
KtFunctionSymbol:
annotationsList: []
callableIdIfNonLocal: /foo
contextReceivers: []
hasStableParameterNames: true
isBuiltinFunctionInvoke: false
isExtension: false
isExternal: false
isInfix: false
isInline: true
isOperator: false
isOverride: false
isStatic: false
isSuspend: false
modality: FINAL
name: foo
origin: SOURCE
receiverType: null
returnType: kotlin/Unit
symbolKind: TOP_LEVEL
typeParameters: []
valueParameters: [
KtValueParameterSymbol(inlineParameter)
KtValueParameterSymbol(crossinlineParameter)
KtValueParameterSymbol(noinlineParameter)
]
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null