[FIR IDE] Enable constant evaluation tests in AAPI/FE10

Implementation of constant evaluation was changed, so now it doesn't
swallow error values.
This commit is contained in:
Yan Zhulanow
2021-11-03 01:11:46 +09:00
parent 5e9c397023
commit 21026cc704
4 changed files with 131 additions and 13 deletions
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.bas
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtConstantValue
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.resolve.DelegatingBindingTrace
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator
import org.jetbrains.kotlin.types.TypeUtils
@@ -23,15 +22,8 @@ internal class KtFe10CompileTimeConstantProvider(
get() = analysisSession.token
override fun evaluate(expression: KtExpression): KtConstantValue? {
val resolveSession = analysisContext.resolveSession
val evaluator = ConstantExpressionEvaluator(
resolveSession.moduleDescriptor,
resolveSession.languageVersionSettings,
resolveSession.project
)
val bindingContext = analysisContext.analyze(expression)
val bindingTrace = DelegatingBindingTrace(bindingContext, "Binding trace for constant expression evaluation")
return evaluator.evaluateToConstantValue(expression, bindingTrace, TypeUtils.NO_EXPECTED_TYPE)?.toKtConstantValue()
val constant = ConstantExpressionEvaluator.getPossiblyErrorConstant(expression, bindingContext)
return constant?.toConstantValue(TypeUtils.NO_EXPECTED_TYPE)?.toKtConstantValue()
}
}
@@ -0,0 +1,122 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.analysis.api.descriptors.test.symbols;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.util.KtTestUtil;
import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.util.regex.Pattern;
/** This class is generated by {@link GenerateNewCompilerTests.kt}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("analysis/analysis-api/testData/components/compileTimeConstantEvaluator")
@TestDataPath("$PROJECT_ROOT")
public class KtFe10CompileTimeConstantEvaluatorTestGenerated extends AbstractKtFe10CompileTimeConstantEvaluatorTest {
@Test
public void testAllFilesPresentInCompileTimeConstantEvaluator() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/compileTimeConstantEvaluator"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@Test
@TestMetadata("annotationInAnnotation_arrayOf.kt")
public void testAnnotationInAnnotation_arrayOf() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/annotationInAnnotation_arrayOf.kt");
}
@Test
@TestMetadata("annotationInAnnotation_collectionLiteral.kt")
public void testAnnotationInAnnotation_collectionLiteral() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/annotationInAnnotation_collectionLiteral.kt");
}
@Test
@TestMetadata("annotationInAnnotation_collectionLiteral_spread.kt")
public void testAnnotationInAnnotation_collectionLiteral_spread() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/annotationInAnnotation_collectionLiteral_spread.kt");
}
@Test
@TestMetadata("annotationInAnnotation_multipleAnnotations_arrayOf.kt")
public void testAnnotationInAnnotation_multipleAnnotations_arrayOf() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/annotationInAnnotation_multipleAnnotations_arrayOf.kt");
}
@Test
@TestMetadata("annotationInAnnotation_multipleAnnotations_collectionLiteral.kt")
public void testAnnotationInAnnotation_multipleAnnotations_collectionLiteral() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/annotationInAnnotation_multipleAnnotations_collectionLiteral.kt");
}
@Test
@TestMetadata("annotationInAnnotation_single.kt")
public void testAnnotationInAnnotation_single() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/annotationInAnnotation_single.kt");
}
@Test
@TestMetadata("annotationInAnnotation_vararg.kt")
public void testAnnotationInAnnotation_vararg() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/annotationInAnnotation_vararg.kt");
}
@Test
@TestMetadata("enumAsAnnotationValue.kt")
public void testEnumAsAnnotationValue() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/enumAsAnnotationValue.kt");
}
@Test
@TestMetadata("propertyInit_Byte.kt")
public void testPropertyInit_Byte() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/propertyInit_Byte.kt");
}
@Test
@TestMetadata("propertyInit_DivByZero.kt")
public void testPropertyInit_DivByZero() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/propertyInit_DivByZero.kt");
}
@Test
@TestMetadata("propertyInit_Double.kt")
public void testPropertyInit_Double() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/propertyInit_Double.kt");
}
@Test
@TestMetadata("propertyInit_Float.kt")
public void testPropertyInit_Float() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/propertyInit_Float.kt");
}
@Test
@TestMetadata("propertyInit_Int.kt")
public void testPropertyInit_Int() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/propertyInit_Int.kt");
}
@Test
@TestMetadata("propertyInit_Long.kt")
public void testPropertyInit_Long() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/propertyInit_Long.kt");
}
@Test
@TestMetadata("propertyInit_UInt.kt")
public void testPropertyInit_UInt() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/propertyInit_UInt.kt");
}
@Test
@TestMetadata("stringLiteral.kt")
public void testStringLiteral() throws Exception {
runTest("analysis/analysis-api/testData/components/compileTimeConstantEvaluator/stringLiteral.kt");
}
}
@@ -0,0 +1,3 @@
expression: 42 / 0
constant_value: KtErrorValue(Division by zero)
constant: null
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.generators.tests.analysis.api
import org.jetbrains.kotlin.analysis.api.descriptors.test.AbstractKtFe10ResolveCallTest
import org.jetbrains.kotlin.analysis.api.descriptors.test.components.*
import org.jetbrains.kotlin.analysis.api.descriptors.test.symbols.AbstractKtFe10CompileTimeConstantEvaluatorTest
import org.jetbrains.kotlin.analysis.api.descriptors.test.symbols.AbstractKtFe10SymbolByFqNameTest
import org.jetbrains.kotlin.analysis.api.descriptors.test.symbols.AbstractKtFe10SymbolByPsiTest
import org.jetbrains.kotlin.analysis.api.descriptors.test.symbols.AbstractKtFe10SymbolByReferenceTest
@@ -141,9 +142,9 @@ fun main(args: Array<String>) {
model("symbols/symbolByPsi")
}
// testClass<AbstractKtFe10CompileTimeConstantEvaluatorTest> {
// model("components/compileTimeConstantEvaluator")
// }
testClass<AbstractKtFe10CompileTimeConstantEvaluatorTest> {
model("components/compileTimeConstantEvaluator")
}
testClass<AbstractKtFe10SymbolByFqNameTest> {
model("symbols/symbolByFqName")