Converter from Java: optimization to not instantiate visitor objects each time

This commit is contained in:
Valentin Kipyatkov
2014-06-11 16:21:50 +04:00
parent ab714f168c
commit c36624a58e
3 changed files with 13 additions and 2 deletions
+5 -2
View File
@@ -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
}
@@ -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<PsiAssignmentExpression>())
val lvalue = assignment != null && expression == assignment.getLExpression();
@@ -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())