PsiExpression (GrExpression expr) { if (expr == null) return null; final SoftReference<PsiExpression> ref = expr.getUserData(PSI_EXPRESSION); final PsiExpression element = dereference(ref); if (element != null) return element; final PsiExpression newExpr = expr instanceof GrLiteral ? new GrSyntheticLiteralExpression((GrLiteral)expr) : new GrSyntheticExpression(expr); expr.putUserData(PSI_EXPRESSION, new SoftReference<>(newExpr)); return newExpr; }