Skip to content

Commit cb857a1

Browse files
authored
Split apart ModelElement.from into a few pieces for cleaner code (#2265)
ModelElement.from was huge; it handles all types of elements, including property-inducing ones. It handled verification, and element caching. This changes splits it into 4 functions: * ModelElement.fromPropertyInducingElement, a factory constructor. * ModelElement.from, the sibling constructor for non-property-inducing elements. * ModelElement._from, a helper which performs the actual constructions. * ModelElement._cacheNewModelElement, a helper which caches the newly constructed ModelElement. Callers frequently had conditional logic for property-inducing elements, so the splitting of the constructor does not complicate callers, but allows them to be explicit about which constructor they are calling.
1 parent 3de1728 commit cb857a1

File tree

5 files changed

+208
-153
lines changed

5 files changed

+208
-153
lines changed

lib/src/model/class.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -428,14 +428,14 @@ class Class extends Container
428428
if ((getter == null || getter.isInherited) &&
429429
(setter == null || setter.isInherited)) {
430430
// Field is 100% inherited.
431-
field = ModelElement.from(f, library, packageGraph,
431+
field = ModelElement.fromPropertyInducingElement(f, library, packageGraph,
432432
enclosingContainer: this, getter: getter, setter: setter);
433433
} else {
434434
// Field is <100% inherited (could be half-inherited).
435435
// TODO(jcollins-g): Navigation is probably still confusing for
436436
// half-inherited fields when traversing the inheritance tree. Make
437437
// this better, somehow.
438-
field = ModelElement.from(f, library, packageGraph,
438+
field = ModelElement.fromPropertyInducingElement(f, library, packageGraph,
439439
getter: getter, setter: setter);
440440
}
441441
_allFields.add(field);

lib/src/model/extension.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class Extension extends Container
7676
if (f.setter != null) {
7777
setter = ContainerAccessor(f.setter, library, packageGraph);
7878
}
79-
return ModelElement.from(f, library, packageGraph,
79+
return ModelElement.fromPropertyInducingElement(f, library, packageGraph,
8080
getter: getter, setter: setter) as Field;
8181
}).toList(growable: false)
8282
..sort(byName);

lib/src/model/library.dart

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,22 +140,27 @@ class Library extends ModelElement with Categorization, TopLevelContainer {
140140
/// to inheritance and reexporting. Most useful for error reporting.
141141
Iterable<String> get allOriginalModelElementNames {
142142
_allOriginalModelElementNames ??= allModelElements.map((e) {
143-
Accessor getter;
144-
Accessor setter;
145143
if (e is GetterSetterCombo) {
144+
Accessor getter;
145+
Accessor setter;
146146
if (e.hasGetter) {
147147
getter = ModelElement.fromElement(e.getter.element, packageGraph);
148148
}
149149
if (e.hasSetter) {
150150
setter = ModelElement.fromElement(e.setter.element, packageGraph);
151151
}
152+
return ModelElement.fromPropertyInducingElement(
153+
e.element,
154+
packageGraph.findButDoNotCreateLibraryFor(e.element),
155+
packageGraph,
156+
getter: getter,
157+
setter: setter)
158+
.fullyQualifiedName;
152159
}
153160
return ModelElement.from(
154161
e.element,
155162
packageGraph.findButDoNotCreateLibraryFor(e.element),
156-
packageGraph,
157-
getter: getter,
158-
setter: setter)
163+
packageGraph)
159164
.fullyQualifiedName;
160165
}).toList();
161166
return _allOriginalModelElementNames;
@@ -504,7 +509,8 @@ class Library extends ModelElement with Categorization, TopLevelContainer {
504509
if (element.setter != null) {
505510
setter = ModelElement.from(element.setter, this, packageGraph);
506511
}
507-
var me = ModelElement.from(element, this, packageGraph,
512+
var me = ModelElement.fromPropertyInducingElement(
513+
element, this, packageGraph,
508514
getter: getter, setter: setter);
509515
_variables.add(me);
510516
}

0 commit comments

Comments
 (0)