From 846ac36fab0ec0efb206f61d7fdc2318740b809a Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Tue, 8 Nov 2011 14:40:41 +0400 Subject: [PATCH] cleanup --- .../jet/j2k/visitors/ExpressionVisitor.java | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index 65e2ba87160..7dc769befb5 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -230,7 +230,19 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor { public void visitReferenceExpression(PsiReferenceExpression expression) { super.visitReferenceExpression(expression); - boolean hasDollar = false; + boolean hasDollar = isFinalFieldReference(expression) && isInsideConstructor(expression); + boolean isNullable = typeToType(expression.getType()).isNullable(); + + final IdentifierImpl identifier = hasDollar ? + new IdentifierImpl("$" + expression.getReferenceName(), isNullable) : + new IdentifierImpl(expression.getReferenceName(), isNullable); + myResult = new CallChainExpression( + expressionToExpression(expression.getQualifierExpression()), + identifier // TODO: if type exists so identifier is nullable + ); + } + + private boolean isFinalFieldReference(PsiReferenceExpression expression) { final PsiReference reference = expression.getReference(); if (reference != null) { final PsiElement resolvedReference = reference.resolve(); @@ -238,25 +250,22 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor { if (resolvedReference instanceof PsiField) { final PsiModifierList modifierList = ((PsiField) resolvedReference).getModifierList(); if (modifierList != null && modifierList.hasExplicitModifier(PsiModifier.FINAL)) { - PsiElement context = expression.getContext(); - while (context != null) { - if (context instanceof PsiMethod && ((PsiMethod) context).isConstructor()) { - hasDollar = true; - break; - } - context = context.getContext(); - } + return true; } } } } + return false; + } - boolean isNullable = typeToType(expression.getType()).isNullable(); - final IdentifierImpl identifier = hasDollar ? new IdentifierImpl("$" + expression.getReferenceName(), isNullable) : new IdentifierImpl(expression.getReferenceName(), isNullable); - myResult = new CallChainExpression( - expressionToExpression(expression.getQualifierExpression()), - identifier // TODO: if type exists so id is nullable - ); + private boolean isInsideConstructor(PsiReferenceExpression expression) { + PsiElement context = expression.getContext(); + while (context != null) { + if (context instanceof PsiMethod && ((PsiMethod) context).isConstructor()) + return true; + context = context.getContext(); + } + return false; } @Override