From b7b957ffd2dd1702b2c3281b0ed5384e0edfa659 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Fri, 8 Nov 2013 16:20:01 +0400 Subject: [PATCH] Deparentesize expression in ConstantExpressionEvaluator --- .../evaluate/ConstantExpressionEvaluator.java | 27 ++++++++++++++++--- .../lang/resolve/constants/ConstantUtils.kt | 2 ++ .../parameters/expressions/labeled.kt | 7 +++++ .../parameters/expressions/paranthesized.kt | 7 +++++ .../AnnotationParameterTestGenerated.java | 10 +++++++ 5 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/resolveAnnotations/parameters/expressions/labeled.kt create mode 100644 compiler/testData/resolveAnnotations/parameters/expressions/paranthesized.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/evaluate/ConstantExpressionEvaluator.java b/compiler/frontend/src/org/jetbrains/jet/lang/evaluate/ConstantExpressionEvaluator.java index f7e6dcab2a5..f4bb7e2d748 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/evaluate/ConstantExpressionEvaluator.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/evaluate/ConstantExpressionEvaluator.java @@ -39,7 +39,6 @@ import java.util.List; import java.util.Map; import static org.jetbrains.jet.lang.resolve.BindingContext.COMPILE_TIME_INITIALIZER; -import static org.jetbrains.jet.lang.resolve.BindingContext.RESOLVED_CALL; @SuppressWarnings("StaticMethodReferencedViaSubclass") public class ConstantExpressionEvaluator extends JetVisitor, Void> { @@ -58,9 +57,29 @@ public class ConstantExpressionEvaluator extends JetVisitor visitParenthesizedExpression(@NotNull JetParenthesizedExpression expression, Void nothing) { - JetExpression innerExpression = expression.getExpression(); - if (innerExpression == null) return null; - return innerExpression.accept(this, null); + JetExpression deparenthesizedExpression = getDeparenthesizedExpression(expression, nothing); + if (deparenthesizedExpression != null) { + return deparenthesizedExpression.accept(this, nothing); + } + return super.visitParenthesizedExpression(expression, nothing); + } + + @Override + public CompileTimeConstant visitPrefixExpression(@NotNull JetPrefixExpression expression, Void data) { + JetExpression deparenthesizedExpression = getDeparenthesizedExpression(expression, data); + if (deparenthesizedExpression != null) { + return deparenthesizedExpression.accept(this, data); + } + return super.visitPrefixExpression(expression, data); + } + + @Nullable + private JetExpression getDeparenthesizedExpression(JetExpression expression, Void data) { + JetExpression deparenthesizedExpr = JetPsiUtil.deparenthesize(expression); + if (deparenthesizedExpr == expression) { + return null; + } + return deparenthesizedExpr; } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/constants/ConstantUtils.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/constants/ConstantUtils.kt index b57a31c7df4..5edbd7f36e2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/constants/ConstantUtils.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/constants/ConstantUtils.kt @@ -69,3 +69,5 @@ public fun resolveCallToCompileTimeValue( return null } + + diff --git a/compiler/testData/resolveAnnotations/parameters/expressions/labeled.kt b/compiler/testData/resolveAnnotations/parameters/expressions/labeled.kt new file mode 100644 index 00000000000..896f7461d08 --- /dev/null +++ b/compiler/testData/resolveAnnotations/parameters/expressions/labeled.kt @@ -0,0 +1,7 @@ +package test + +annotation class Ann(i: Int) + +Ann(@A 1) class MyClass + +// EXPECTED: Ann[i = 1.toInt(): jet.Int] diff --git a/compiler/testData/resolveAnnotations/parameters/expressions/paranthesized.kt b/compiler/testData/resolveAnnotations/parameters/expressions/paranthesized.kt new file mode 100644 index 00000000000..240964e45fa --- /dev/null +++ b/compiler/testData/resolveAnnotations/parameters/expressions/paranthesized.kt @@ -0,0 +1,7 @@ +package test + +annotation class Ann(i: Int) + +Ann((1 + 2) * 2) class MyClass + +// EXPECTED: Ann[i = 6.toInt(): jet.Int] diff --git a/compiler/tests/org/jetbrains/jet/resolve/annotation/AnnotationParameterTestGenerated.java b/compiler/tests/org/jetbrains/jet/resolve/annotation/AnnotationParameterTestGenerated.java index b97b2ddb956..e9993630830 100644 --- a/compiler/tests/org/jetbrains/jet/resolve/annotation/AnnotationParameterTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/resolve/annotation/AnnotationParameterTestGenerated.java @@ -143,6 +143,11 @@ public class AnnotationParameterTestGenerated extends AbstractAnnotationParamete doTest("compiler/testData/resolveAnnotations/parameters/expressions/intrincics.kt"); } + @TestMetadata("labeled.kt") + public void testLabeled() throws Exception { + doTest("compiler/testData/resolveAnnotations/parameters/expressions/labeled.kt"); + } + @TestMetadata("long.kt") public void testLong() throws Exception { doTest("compiler/testData/resolveAnnotations/parameters/expressions/long.kt"); @@ -198,6 +203,11 @@ public class AnnotationParameterTestGenerated extends AbstractAnnotationParamete doTest("compiler/testData/resolveAnnotations/parameters/expressions/orOr.kt"); } + @TestMetadata("paranthesized.kt") + public void testParanthesized() throws Exception { + doTest("compiler/testData/resolveAnnotations/parameters/expressions/paranthesized.kt"); + } + @TestMetadata("plus.kt") public void testPlus() throws Exception { doTest("compiler/testData/resolveAnnotations/parameters/expressions/plus.kt");