Refactoring

This commit is contained in:
Natalia Ukhorskaya
2013-11-26 15:14:31 +04:00
parent a99ce06e78
commit b4b7988eec
@@ -38,7 +38,14 @@ import java.lang.Long.parseLong as javaParseLong
[suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")] [suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")]
public class ConstantExpressionEvaluator private (val trace: BindingTrace) : JetVisitor<CompileTimeConstant<*>, JetType>() { public class ConstantExpressionEvaluator private (val trace: BindingTrace) : JetVisitor<CompileTimeConstant<*>, JetType>() {
public fun evaluate(expression: JetExpression, expectedType: JetType?): CompileTimeConstant<*>? { class object {
public fun evaluate(expression: JetExpression, trace: BindingTrace, expectedType: JetType? = TypeUtils.NO_EXPECTED_TYPE): CompileTimeConstant<*>? {
val evaluator = ConstantExpressionEvaluator(trace)
return evaluator.evaluate(expression, expectedType)
}
}
private fun evaluate(expression: JetExpression, expectedType: JetType?): CompileTimeConstant<*>? {
val recordedCompileTimeConstant = trace.get(BindingContext.COMPILE_TIME_VALUE, expression) val recordedCompileTimeConstant = trace.get(BindingContext.COMPILE_TIME_VALUE, expression)
if (recordedCompileTimeConstant != null) { if (recordedCompileTimeConstant != null) {
return recordedCompileTimeConstant return recordedCompileTimeConstant
@@ -98,26 +105,26 @@ public class ConstantExpressionEvaluator private (val trace: BindingTrace) : Jet
val deparenthesizedExpression = JetPsiUtil.deparenthesize(expression) val deparenthesizedExpression = JetPsiUtil.deparenthesize(expression)
return if (deparenthesizedExpression != null && deparenthesizedExpression != expression) { return if (deparenthesizedExpression != null && deparenthesizedExpression != expression) {
evaluate(deparenthesizedExpression, expectedType) evaluate(deparenthesizedExpression, expectedType)
} else { }
else {
super.visitPrefixExpression(expression, expectedType) super.visitPrefixExpression(expression, expectedType)
} }
} }
override fun visitStringTemplateExpression(expression: JetStringTemplateExpression, expectedType: JetType?): CompileTimeConstant<*>? { override fun visitStringTemplateExpression(expression: JetStringTemplateExpression, expectedType: JetType?): CompileTimeConstant<*>? {
return with(StringBuilder()) { val sb = StringBuilder()
var interupted = false var interupted = false
for (entry in expression.getEntries()) { for (entry in expression.getEntries()) {
val constant = stringExpressionEvaluator.evaluate(entry) val constant = stringExpressionEvaluator.evaluate(entry)
if (constant == null) { if (constant == null) {
interupted = true interupted = true
break break
} }
else { else {
append(constant.getValue()) sb.append(constant.getValue())
}
} }
if (!interupted) createCompileTimeConstant(toString(), expectedType) else null
} }
return if (!interupted) createCompileTimeConstant(sb.toString(), expectedType) else null
} }
override fun visitBinaryExpression(expression: JetBinaryExpression, expectedType: JetType?): CompileTimeConstant<*>? { override fun visitBinaryExpression(expression: JetBinaryExpression, expectedType: JetType?): CompileTimeConstant<*>? {
@@ -190,7 +197,6 @@ public class ConstantExpressionEvaluator private (val trace: BindingTrace) : Jet
override fun visitUnaryExpression(expression: JetUnaryExpression, expectedType: JetType?): CompileTimeConstant<*>? { override fun visitUnaryExpression(expression: JetUnaryExpression, expectedType: JetType?): CompileTimeConstant<*>? {
val leftExpression = expression.getBaseExpression() val leftExpression = expression.getBaseExpression()
if (leftExpression == null) return null if (leftExpression == null) return null
val result = evaluateCall(expression.getOperationReference(), leftExpression) val result = evaluateCall(expression.getOperationReference(), leftExpression)
return createCompileTimeConstant(result, expectedType) return createCompileTimeConstant(result, expectedType)
} }
@@ -287,12 +293,6 @@ public class ConstantExpressionEvaluator private (val trace: BindingTrace) : Jet
return null return null
} }
class object {
public fun evaluate(expression: JetExpression, trace: BindingTrace, expectedType: JetType? = TypeUtils.NO_EXPECTED_TYPE): CompileTimeConstant<*>? {
val evaluator = ConstantExpressionEvaluator(trace)
return evaluator.evaluate(expression, expectedType)
}
}
private class OperationArgument(val value: Any?, val ctcType: CompileTimeType<*>) private class OperationArgument(val value: Any?, val ctcType: CompileTimeType<*>)