From c36624a58e305eba63e42a2cdbc4c3a1c0c7094b Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 11 Jun 2014 16:21:50 +0400 Subject: [PATCH] Converter from Java: optimization to not instantiate visitor objects each time --- j2k/src/org/jetbrains/jet/j2k/Converter.kt | 7 +++++-- .../org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt | 4 ++++ j2k/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.kt | 4 ++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/j2k/src/org/jetbrains/jet/j2k/Converter.kt b/j2k/src/org/jetbrains/jet/j2k/Converter.kt index 2f0534fbde6..a37cafc84e8 100644 --- a/j2k/src/org/jetbrains/jet/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/Converter.kt @@ -42,6 +42,9 @@ public class Converter private(val project: Project, val settings: ConverterSett val typeConverter: TypeConverter get() = state.typeConverter val methodReturnType: PsiType? get() = state.methodReturnType + private val expressionVisitor = state.expressionVisitorFactory(this) + private val statementVisitor = state.statementVisitorFactory(this) + class object { public fun create(project: Project, settings: ConverterSettings, conversionScope: ConversionScope): Converter = Converter(project, settings, conversionScope, State(TypeConverter(settings, conversionScope), null, { ExpressionVisitor(it) }, { StatementVisitor(it) })) @@ -488,7 +491,7 @@ public class Converter private(val project: Project, val settings: ConverterSett public fun convertStatement(statement: PsiStatement?): Statement { if (statement == null) return Statement.Empty - val statementVisitor = state.statementVisitorFactory(this) + statementVisitor.reset() statement.accept(statementVisitor) return statementVisitor.result } @@ -499,7 +502,7 @@ public class Converter private(val project: Project, val settings: ConverterSett public fun convertExpression(expression: PsiExpression?): Expression { if (expression == null) return Expression.Empty - val expressionVisitor = state.expressionVisitorFactory(this) + expressionVisitor.reset() expression.accept(expressionVisitor) return expressionVisitor.result } diff --git a/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt b/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt index 49af8936c60..ee05a5c2bdc 100644 --- a/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt +++ b/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt @@ -42,6 +42,10 @@ class ExpressionVisitor(private val converter: Converter, public var result: Expression = Expression.Empty protected set + public fun reset() { + result = Expression.Empty + } + override fun visitArrayAccessExpression(expression: PsiArrayAccessExpression) { val assignment = PsiTreeUtil.getParentOfType(expression, javaClass()) val lvalue = assignment != null && expression == assignment.getLExpression(); diff --git a/j2k/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.kt b/j2k/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.kt index 04b61e433e9..9719fe6dcf9 100644 --- a/j2k/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.kt +++ b/j2k/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.kt @@ -29,6 +29,10 @@ open class StatementVisitor(public val converter: Converter) : JavaElementVisito public var result: Statement = Statement.Empty protected set + public fun reset() { + result = Statement.Empty + } + override fun visitAssertStatement(statement: PsiAssertStatement) { val descriptionExpr = statement.getAssertDescription() val condition = converter.convertExpression(statement.getAssertCondition())