Converter from Java: optimization to not instantiate visitor objects each time
This commit is contained in:
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user