Use of Block.of()

This commit is contained in:
Valentin Kipyatkov
2016-08-19 17:27:13 +03:00
parent 7016ce9b41
commit 20c17fc435
6 changed files with 16 additions and 21 deletions
@@ -354,7 +354,7 @@ class Converter private constructor(
val superExpression = SuperExpression(Identifier.Empty).assignNoPrototype()
val superAccess = QualifiedExpression(superExpression, propertyInfo.identifier).assignNoPrototype()
val returnStatement = ReturnStatement(superAccess).assignNoPrototype()
val body = Block(listOf(returnStatement), LBrace().assignNoPrototype(), RBrace().assignNoPrototype()).assignNoPrototype()
val body = Block.of(returnStatement).assignNoPrototype()
val parameterList = ParameterList(emptyList()).assignNoPrototype()
getter = PropertyAccessor(AccessorKind.GETTER, Annotations.Empty, Modifiers.Empty, parameterList, deferredElement { body })
getter.assignNoPrototype()
@@ -388,7 +388,7 @@ class Converter private constructor(
val superAccess = QualifiedExpression(superExpression, propertyInfo.identifier).assignNoPrototype()
val valueIdentifier = Identifier("value", false).assignNoPrototype()
val assignment = AssignmentExpression(superAccess, valueIdentifier, Operator.EQ).assignNoPrototype()
val body = Block(listOf(assignment), LBrace().assignNoPrototype(), RBrace().assignNoPrototype()).assignNoPrototype()
val body = Block.of(assignment).assignNoPrototype()
val parameter = FunctionParameter(valueIdentifier, propertyType, FunctionParameter.VarValModifier.None, Annotations.Empty, Modifiers.Empty).assignNoPrototype()
val parameterList = ParameterList(listOf(parameter)).assignNoPrototype()
setter = PropertyAccessor(AccessorKind.SETTER, Annotations.Empty, accessorModifiers, parameterList, deferredElement { body })
@@ -698,7 +698,7 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
when (body) {
is PsiExpression -> {
val convertedBody = codeConverter.convertExpression(body).assignPrototype(body)
result = LambdaExpression(convertedParameters, Block(listOf(convertedBody), LBrace().assignNoPrototype(), RBrace().assignNoPrototype()))
result = LambdaExpression(convertedParameters, Block.of(convertedBody).assignNoPrototype())
}
is PsiCodeBlock -> {
val convertedBlock = codeConverter.withSpecialStatementConverter(object: SpecialStatementConverter {
@@ -812,12 +812,7 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
parameters.map { LambdaParameter(it.first, it.second).assignNoPrototype() }
}).assignNoPrototype()
val lambdaExpression = LambdaExpression(
lambdaParameterList,
Block(listOf(statement),
LBrace().assignNoPrototype(),
RBrace().assignNoPrototype()).assignNoPrototype()
).assignNoPrototype()
val lambdaExpression = LambdaExpression(lambdaParameterList, Block.of(statement).assignNoPrototype()).assignNoPrototype()
if (isKotlinFunctionType) {
result = lambdaExpression
@@ -69,7 +69,7 @@ class ForConverter(
}
}
else {
return Block(statements, LBrace().assignNoPrototype(), RBrace().assignNoPrototype())
return Block.of(statements)
}
}
})
@@ -85,7 +85,7 @@ class ForConverter(
if (nameConflict) {
val statements = listOf(codeConverterToUse.convertStatement(body), updateConverted)
Block(statements, LBrace().assignNoPrototype(), RBrace().assignNoPrototype(), true).assignNoPrototype()
Block.of(statements).assignNoPrototype()
}
else {
val block = codeConverterToUse.convertBlock(body.codeBlock, true)
@@ -94,7 +94,7 @@ class ForConverter(
}
else {
val statements = listOf(codeConverterToUse.convertStatement(body), updateConverted)
Block(statements, LBrace().assignNoPrototype(), RBrace().assignNoPrototype(), true).assignNoPrototype()
Block.of(statements).assignNoPrototype()
}
}
@@ -133,7 +133,7 @@ class ForConverter(
builder.append(statements, "\n")
}
else {
val block = Block(statements, LBrace().assignNoPrototype(), RBrace().assignNoPrototype()).assignNoPrototype()
val block = Block.of(statements).assignNoPrototype()
if (kind == Kind.WITH_BLOCK) {
block.generateCode(builder)
}
@@ -58,8 +58,7 @@ class DefaultStatementConverter : JavaElementVisitor(), StatementConverter {
}
else {
val description = codeConverter.convertExpression(descriptionExpr)
val block = Block(listOf(description), LBrace().assignNoPrototype(), RBrace().assignNoPrototype())
val lambda = LambdaExpression(null, block.assignNoPrototype())
val lambda = LambdaExpression(null, Block.of(description).assignNoPrototype())
result = MethodCallExpression.build(null, "assert", listOf(condition, lambda), listOf(), false)
}
}
@@ -210,8 +209,8 @@ class DefaultStatementConverter : JavaElementVisitor(), StatementConverter {
}
private fun convertTryWithResources(tryBlock: PsiCodeBlock?, resourceVariables: List<PsiResourceVariable>, catchesConverted: List<CatchStatement>, finallyConverted: Block): Statement {
var wrapResultStatement: (Expression) -> Statement = { it }
var converterForBody = codeConverter
val wrapResultStatement: (Expression) -> Statement = { it }
val converterForBody = codeConverter
var block = converterForBody.convertBlock(tryBlock)
var expression: Expression = Expression.Empty
@@ -221,7 +220,7 @@ class DefaultStatementConverter : JavaElementVisitor(), StatementConverter {
val lambda = LambdaExpression(parameterList, block)
expression = MethodCallExpression.build(codeConverter.convertExpression(variable.initializer), "use", listOf(lambda), listOf(), false)
expression.assignNoPrototype()
block = Block(listOf(expression), LBrace().assignNoPrototype(), RBrace().assignNoPrototype()).assignNoPrototype()
block = Block.of(expression).assignNoPrototype()
}
if (catchesConverted.isEmpty() && finallyConverted.isEmpty) {
@@ -108,7 +108,7 @@ class SwitchConverter(private val codeConverter: CodeConverter) {
return if (statements.size == 1)
statements.single()
else
Block(statements, LBrace().assignNoPrototype(), RBrace().assignNoPrototype(), true).assignNoPrototype()
Block.of(statements).assignNoPrototype()
}
private fun isSwitchBreak(statement: PsiStatement) = statement is PsiBreakStatement && statement.labelIdentifier == null
@@ -40,13 +40,14 @@ class Block(val statements: List<Statement>, val lBrace: LBrace, val rBrace: RBr
}
// we use LBrace and RBrace elements to better handle comments around them
class LBrace() : Element() {
class LBrace : Element() {
override fun generateCode(builder: CodeBuilder) {
builder.append("{")
}
}
class RBrace() : Element() {
class RBrace : Element() {
override fun generateCode(builder: CodeBuilder) {
builder.append("}")
}