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 typeConverter: TypeConverter get() = state.typeConverter
|
||||||
val methodReturnType: PsiType? get() = state.methodReturnType
|
val methodReturnType: PsiType? get() = state.methodReturnType
|
||||||
|
|
||||||
|
private val expressionVisitor = state.expressionVisitorFactory(this)
|
||||||
|
private val statementVisitor = state.statementVisitorFactory(this)
|
||||||
|
|
||||||
class object {
|
class object {
|
||||||
public fun create(project: Project, settings: ConverterSettings, conversionScope: ConversionScope): Converter
|
public fun create(project: Project, settings: ConverterSettings, conversionScope: ConversionScope): Converter
|
||||||
= Converter(project, settings, conversionScope, State(TypeConverter(settings, conversionScope), null, { ExpressionVisitor(it) }, { StatementVisitor(it) }))
|
= 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 {
|
public fun convertStatement(statement: PsiStatement?): Statement {
|
||||||
if (statement == null) return Statement.Empty
|
if (statement == null) return Statement.Empty
|
||||||
|
|
||||||
val statementVisitor = state.statementVisitorFactory(this)
|
statementVisitor.reset()
|
||||||
statement.accept(statementVisitor)
|
statement.accept(statementVisitor)
|
||||||
return statementVisitor.result
|
return statementVisitor.result
|
||||||
}
|
}
|
||||||
@@ -499,7 +502,7 @@ public class Converter private(val project: Project, val settings: ConverterSett
|
|||||||
public fun convertExpression(expression: PsiExpression?): Expression {
|
public fun convertExpression(expression: PsiExpression?): Expression {
|
||||||
if (expression == null) return Expression.Empty
|
if (expression == null) return Expression.Empty
|
||||||
|
|
||||||
val expressionVisitor = state.expressionVisitorFactory(this)
|
expressionVisitor.reset()
|
||||||
expression.accept(expressionVisitor)
|
expression.accept(expressionVisitor)
|
||||||
return expressionVisitor.result
|
return expressionVisitor.result
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ class ExpressionVisitor(private val converter: Converter,
|
|||||||
public var result: Expression = Expression.Empty
|
public var result: Expression = Expression.Empty
|
||||||
protected set
|
protected set
|
||||||
|
|
||||||
|
public fun reset() {
|
||||||
|
result = Expression.Empty
|
||||||
|
}
|
||||||
|
|
||||||
override fun visitArrayAccessExpression(expression: PsiArrayAccessExpression) {
|
override fun visitArrayAccessExpression(expression: PsiArrayAccessExpression) {
|
||||||
val assignment = PsiTreeUtil.getParentOfType(expression, javaClass<PsiAssignmentExpression>())
|
val assignment = PsiTreeUtil.getParentOfType(expression, javaClass<PsiAssignmentExpression>())
|
||||||
val lvalue = assignment != null && expression == assignment.getLExpression();
|
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
|
public var result: Statement = Statement.Empty
|
||||||
protected set
|
protected set
|
||||||
|
|
||||||
|
public fun reset() {
|
||||||
|
result = Statement.Empty
|
||||||
|
}
|
||||||
|
|
||||||
override fun visitAssertStatement(statement: PsiAssertStatement) {
|
override fun visitAssertStatement(statement: PsiAssertStatement) {
|
||||||
val descriptionExpr = statement.getAssertDescription()
|
val descriptionExpr = statement.getAssertDescription()
|
||||||
val condition = converter.convertExpression(statement.getAssertCondition())
|
val condition = converter.convertExpression(statement.getAssertCondition())
|
||||||
|
|||||||
Reference in New Issue
Block a user