cleanup
This commit is contained in:
@@ -230,7 +230,19 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor {
|
|||||||
public void visitReferenceExpression(PsiReferenceExpression expression) {
|
public void visitReferenceExpression(PsiReferenceExpression expression) {
|
||||||
super.visitReferenceExpression(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();
|
final PsiReference reference = expression.getReference();
|
||||||
if (reference != null) {
|
if (reference != null) {
|
||||||
final PsiElement resolvedReference = reference.resolve();
|
final PsiElement resolvedReference = reference.resolve();
|
||||||
@@ -238,25 +250,22 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor {
|
|||||||
if (resolvedReference instanceof PsiField) {
|
if (resolvedReference instanceof PsiField) {
|
||||||
final PsiModifierList modifierList = ((PsiField) resolvedReference).getModifierList();
|
final PsiModifierList modifierList = ((PsiField) resolvedReference).getModifierList();
|
||||||
if (modifierList != null && modifierList.hasExplicitModifier(PsiModifier.FINAL)) {
|
if (modifierList != null && modifierList.hasExplicitModifier(PsiModifier.FINAL)) {
|
||||||
PsiElement context = expression.getContext();
|
return true;
|
||||||
while (context != null) {
|
|
||||||
if (context instanceof PsiMethod && ((PsiMethod) context).isConstructor()) {
|
|
||||||
hasDollar = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
context = context.getContext();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
boolean isNullable = typeToType(expression.getType()).isNullable();
|
private boolean isInsideConstructor(PsiReferenceExpression expression) {
|
||||||
final IdentifierImpl identifier = hasDollar ? new IdentifierImpl("$" + expression.getReferenceName(), isNullable) : new IdentifierImpl(expression.getReferenceName(), isNullable);
|
PsiElement context = expression.getContext();
|
||||||
myResult = new CallChainExpression(
|
while (context != null) {
|
||||||
expressionToExpression(expression.getQualifierExpression()),
|
if (context instanceof PsiMethod && ((PsiMethod) context).isConstructor())
|
||||||
identifier // TODO: if type exists so id is nullable
|
return true;
|
||||||
);
|
context = context.getContext();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user