Skip to content

Commit 844ce65

Browse files
committed
DRY up common logic for handling nullable
1 parent 08aba80 commit 844ce65

File tree

6 files changed

+15
-38
lines changed

6 files changed

+15
-38
lines changed

lib/src/type_helpers/date_time_helper.dart

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:analyzer/dart/element/type.dart';
22
import 'package:source_gen/source_gen.dart' show TypeChecker;
33
import '../type_helper.dart';
4+
import 'type_helper_utils.dart';
45

56
class DateTimeHelper extends TypeHelper {
67
const DateTimeHelper();
@@ -28,14 +29,8 @@ class DateTimeHelper extends TypeHelper {
2829
return null;
2930
}
3031

31-
var buffer = new StringBuffer();
32-
33-
if (nullable) {
34-
buffer.write("$expression == null ? null : ");
35-
}
36-
37-
buffer.write("DateTime.parse($expression as String)");
38-
return buffer.toString();
32+
return commonNullPrefix(
33+
nullable, expression, "DateTime.parse($expression as String)");
3934
}
4035
}
4136

lib/src/type_helpers/enum_helper.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:analyzer/dart/element/type.dart';
22
import '../type_helper.dart';
3-
import '../utils.dart';
3+
import 'type_helper_utils.dart';
44

55
class EnumHelper extends TypeHelper {
66
const EnumHelper();

lib/src/type_helpers/json_helper.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:analyzer/dart/element/element.dart';
22
import 'package:analyzer/dart/element/type.dart';
33
import '../type_helper.dart';
4+
import 'type_helper_utils.dart';
45

56
class JsonHelper extends TypeHelper {
67
const JsonHelper();
@@ -43,11 +44,7 @@ class JsonHelper extends TypeHelper {
4344
// github.com/dart-lang/json_serializable/issues/19
4445
var result = "new ${targetType.name}.fromJson($expression$asCast)";
4546

46-
if (nullable) {
47-
result = "$expression == null ? null : " + result;
48-
}
49-
50-
return result;
47+
return commonNullPrefix(nullable, expression, result);
5148
}
5249
}
5350

lib/src/type_helpers/map_helper.dart

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:analyzer/dart/element/type.dart';
22
import 'package:source_gen/source_gen.dart' show TypeChecker;
33
import '../type_helper.dart';
4+
import 'type_helper_utils.dart';
45

56
/// Name used for closure argument when generating calls to `map`.
67
final _closureArg = "e";
@@ -41,11 +42,7 @@ class MapHelper extends TypeHelper {
4142
"$expression.keys,"
4243
"$expression.values.map(($_closureArg) => $subFieldValue))";
4344

44-
if (nullable) {
45-
result = "$expression == null ? null :" + result;
46-
}
47-
48-
return result;
45+
return commonNullPrefix(nullable, expression, result);
4946
}
5047
throw new UnsupportedTypeError(targetType, expression);
5148
}
@@ -85,12 +82,7 @@ class MapHelper extends TypeHelper {
8582
// No mapping of the values is required!
8683

8784
var result = "new Map<String, $valueArg>.from($expression as Map)";
88-
89-
if (nullable) {
90-
result = "$expression == null ? null :" + result;
91-
}
92-
93-
return result;
85+
return commonNullPrefix(nullable, expression, result);
9486
}
9587

9688
// In this case, we're going to create a new Map with matching reified
@@ -102,11 +94,7 @@ class MapHelper extends TypeHelper {
10294
"($expression as Map<String, dynamic>).keys,"
10395
"($expression as Map).values.map(($_closureArg) => $itemSubVal))";
10496

105-
if (nullable) {
106-
result = "$expression == null ? null :" + result;
107-
}
108-
109-
return result;
97+
return commonNullPrefix(nullable, expression, result);
11098
}
11199
}
112100

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
String commonNullPrefix(
2+
bool nullable, String expression, String unsafeExpression) =>
3+
nullable
4+
? "$expression == null ? null : $unsafeExpression"
5+
: unsafeExpression;

lib/src/utils.dart

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,6 @@
55
import 'dart:io';
66
import 'package:analyzer/dart/element/element.dart';
77

8-
String commonNullPrefix(
9-
bool nullable, String expression, String unsafeExpression) {
10-
if (nullable) {
11-
return "$expression == null ? null : $unsafeExpression";
12-
}
13-
return unsafeExpression;
14-
}
15-
168
// Copied from pkg/source_gen - lib/src/utils.
179
String friendlyNameForElement(Element element) {
1810
var friendlyName = element.displayName;

0 commit comments

Comments
 (0)