Skip to content

Commit

Permalink
Simplify Flutter support to a single instance.
Browse files Browse the repository at this point in the history
Change-Id: I90813c4e01694510971c4ce9cf96a4a3380a2923
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/153952
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
  • Loading branch information
scheglov authored and commit-bot@chromium.org committed Jul 10, 2020
1 parent ca7dd96 commit 90ce990
Show file tree
Hide file tree
Showing 14 changed files with 139 additions and 218 deletions.
11 changes: 5 additions & 6 deletions pkg/analysis_server/lib/src/computer/computer_outline.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@ import 'package:analyzer_plugin/protocol/protocol_common.dart';
class DartUnitOutlineComputer {
final ResolvedUnitResult resolvedUnit;
final bool withBasicFlutter;
final Flutter flutter;

DartUnitOutlineComputer(this.resolvedUnit, {this.withBasicFlutter = false})
: flutter = Flutter.of(resolvedUnit);
DartUnitOutlineComputer(this.resolvedUnit, {this.withBasicFlutter = false});

/// Returns the computed outline, not `null`.
Outline compute() {
Expand Down Expand Up @@ -409,6 +407,8 @@ class _FunctionBodyOutlinesVisitor extends RecursiveAstVisitor<void> {

_FunctionBodyOutlinesVisitor(this.outlineComputer, this.contents);

Flutter get _flutter => Flutter.instance;

/// Return `true` if the given [element] is the method 'group' defined in the
/// test package.
bool isGroup(engine.ExecutableElement element) {
Expand Down Expand Up @@ -438,13 +438,12 @@ class _FunctionBodyOutlinesVisitor extends RecursiveAstVisitor<void> {

@override
void visitInstanceCreationExpression(InstanceCreationExpression node) {
if (outlineComputer.withBasicFlutter &&
outlineComputer.flutter.isWidgetCreation(node)) {
if (outlineComputer.withBasicFlutter && _flutter.isWidgetCreation(node)) {
var children = <Outline>[];
node.argumentList
.accept(_FunctionBodyOutlinesVisitor(outlineComputer, children));

var text = outlineComputer.flutter.getWidgetPresentationText(node);
var text = _flutter.getWidgetPresentationText(node);
var element = Element(ElementKind.CONSTRUCTOR_INVOCATION, text, 0,
location: outlineComputer._getLocationOffsetLength(node.offset, 0));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,19 @@ import 'package:analyzer/dart/element/element.dart';
/// Computer for Flutter specific outlines.
class FlutterOutlineComputer {
final ResolvedUnitResult resolvedUnit;
Flutter flutter;

final List<protocol.FlutterOutline> _depthFirstOrder = [];

FlutterOutlineComputer(this.resolvedUnit);

Flutter get _flutter => Flutter.instance;

protocol.FlutterOutline compute() {
var dartOutline = DartUnitOutlineComputer(
resolvedUnit,
withBasicFlutter: false,
).compute();

flutter = Flutter.of(resolvedUnit);

// Convert Dart outlines into Flutter outlines.
var flutterDartOutline = _convert(dartOutline);

Expand Down Expand Up @@ -131,7 +130,7 @@ class FlutterOutlineComputer {
/// a widget reference outline item.
protocol.FlutterOutline _createOutline(Expression node, bool withGeneric) {
var type = node.staticType;
if (!flutter.isWidgetType(type)) {
if (!_flutter.isWidgetType(type)) {
return null;
}
var className = type.element.displayName;
Expand All @@ -140,9 +139,9 @@ class FlutterOutlineComputer {
var attributes = <protocol.FlutterOutlineAttribute>[];
var children = <protocol.FlutterOutline>[];
for (var argument in node.argumentList.arguments) {
var isWidgetArgument = flutter.isWidgetType(argument.staticType);
var isWidgetArgument = _flutter.isWidgetType(argument.staticType);
var isWidgetListArgument =
flutter.isListOfWidgetsType(argument.staticType);
_flutter.isListOfWidgetsType(argument.staticType);

String parentAssociationLabel;
Expression childrenExpression;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ class ArgListContributor extends DartCompletionContributor {
}

bool _isInFlutterCreation() {
var flutter = Flutter.of(request.result);
var flutter = Flutter.instance;
var containingNode = request.target?.containingNode;
var newExpr = containingNode != null
? flutter.identifyNewExpression(containingNode.parent)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,17 +164,12 @@ class SuggestionBuilder {
/// computed. In the latter case, [_hasContainingMemberName] will be `false`.
String _cachedContainingMemberName;

/// The cached instance of the flutter utilities, or `null` if it hasn't been
/// created yet.
Flutter _flutter;

/// Initialize a newly created suggestion builder to build suggestions for the
/// given [request].
SuggestionBuilder(this.request, {this.listener});

/// Return an object that can answer questions about Flutter code based on the
/// flavor of Flutter being used.
Flutter get flutter => _flutter ??= Flutter.of(request.result);
/// Return an object that can answer questions about Flutter code.
Flutter get flutter => Flutter.instance;

/// Return an iterable that can be used to access the completion suggestions
/// that have been built.
Expand Down Expand Up @@ -803,8 +798,7 @@ class SuggestionBuilder {
// todo (pq): revisit this special casing; likely it can be generalized away
var element = parameter.enclosingElement;
if (element is ConstructorElement) {
var flutter = Flutter.of(request.result);
if (flutter.isWidget(element.enclosingElement)) {
if (Flutter.instance.isWidget(element.enclosingElement)) {
var defaultValue = getDefaultStringParameterValue(parameter);
// TODO(devoncarew): Should we remove the check here? We would then
// suggest values for param types like closures.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ abstract class BaseProcessor {
final String file;

final TypeProvider typeProvider;
final Flutter flutter;

final AnalysisSession session;
final AnalysisSessionHelper sessionHelper;
Expand All @@ -38,13 +37,14 @@ abstract class BaseProcessor {
@required this.resolvedResult,
@required this.workspace,
}) : file = resolvedResult.path,
flutter = Flutter.of(resolvedResult),
session = resolvedResult.session,
sessionHelper = AnalysisSessionHelper(resolvedResult.session),
typeProvider = resolvedResult.typeProvider,
selectionEnd = (selectionOffset ?? 0) + (selectionLength ?? 0),
utils = CorrectionUtils(resolvedResult);

Flutter get flutter => Flutter.instance;

@protected
bool setupCompute() {
final locator = NodeLocator(selectionOffset, selectionEnd);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,6 @@ class CorrectionProducerContext {
final String file;

final TypeProvider typeProvider;
final Flutter flutter;

final AnalysisSession session;
final AnalysisSessionHelper sessionHelper;
Expand All @@ -272,7 +271,6 @@ class CorrectionProducerContext {
this.selectionOffset = -1,
this.selectionLength = 0,
}) : file = resolvedResult.path,
flutter = Flutter.of(resolvedResult),
session = resolvedResult.session,
sessionHelper = AnalysisSessionHelper(resolvedResult.session),
typeProvider = resolvedResult.typeProvider,
Expand Down Expand Up @@ -344,7 +342,7 @@ abstract class _AbstractCorrectionProducer {

String get file => _context.file;

Flutter get flutter => _context.flutter;
Flutter get flutter => Flutter.instance;

/// Return the library element for the library in which a correction is being
/// produced.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,6 @@ class _WidgetDescriptionComputer {
/// The offset of the widget expression.
final int widgetOffset;

/// The instance of [Flutter] support.
final Flutter flutter;

ClassElement _classAlignment;
ClassElement _classAlignmentDirectional;
ClassElement _classContainer;
Expand All @@ -143,11 +140,13 @@ class _WidgetDescriptionComputer {
this.classRegistry,
this.resolvedUnit,
this.widgetOffset,
) : flutter = Flutter.of(resolvedUnit);
);

Flutter get _flutter => Flutter.instance;

Future<_WidgetDescription> compute() async {
var node = NodeLocator2(widgetOffset).searchWithin(resolvedUnit.unit);
var instanceCreation = flutter.identifyNewExpression(node);
var instanceCreation = _flutter.identifyNewExpression(node);
if (instanceCreation == null) {
return null;
}
Expand All @@ -173,7 +172,7 @@ class _WidgetDescriptionComputer {
List<PropertyDescription> properties,
InstanceCreationExpression widgetCreation,
) {
if (!flutter.isWidgetCreation(widgetCreation)) {
if (!_flutter.isWidgetCreation(widgetCreation)) {
return;
}

Expand All @@ -190,7 +189,7 @@ class _WidgetDescriptionComputer {
}

PropertyDescription containerProperty;
if (flutter.isExactlyContainerCreation(parentCreation)) {
if (_flutter.isExactlyContainerCreation(parentCreation)) {
containerProperty = PropertyDescription(
resolvedUnit: resolvedUnit,
instanceCreation: parentCreation,
Expand Down Expand Up @@ -236,17 +235,17 @@ class _WidgetDescriptionComputer {
classDescription: containerDescription,
);

if (flutter.isExactlyAlignCreation(parentCreation) &&
flutter.findNamedArgument(parentCreation, 'widthFactor') == null &&
flutter.findNamedArgument(parentCreation, 'heightFactor') == null) {
if (_flutter.isExactlyAlignCreation(parentCreation) &&
_flutter.findNamedArgument(parentCreation, 'widthFactor') == null &&
_flutter.findNamedArgument(parentCreation, 'heightFactor') == null) {
_replaceNestedContainerProperty(
containerProperty,
parentCreation,
'alignment',
);
}

if (flutter.isExactlyPaddingCreation(parentCreation)) {
if (_flutter.isExactlyPaddingCreation(parentCreation)) {
_replaceNestedContainerProperty(
containerProperty,
parentCreation,
Expand Down Expand Up @@ -347,7 +346,7 @@ class _WidgetDescriptionComputer {
var propertyDescription = PropertyDescription(
parent: parent,
resolvedUnit: resolvedUnit,
flutter: flutter,
flutter: _flutter,
classDescription: classDescription,
instanceCreation: instanceCreation,
argumentExpression: argumentExpression,
Expand All @@ -366,7 +365,7 @@ class _WidgetDescriptionComputer {
);
properties.add(propertyDescription);

if (flutter.isExactEdgeInsetsGeometryType(parameter.type)) {
if (_flutter.isExactEdgeInsetsGeometryType(parameter.type)) {
propertyDescription.addEdgeInsetsNestedProperties(_classEdgeInsets);
} else if (valueExpression is InstanceCreationExpression) {
var type = valueExpression.staticType;
Expand Down Expand Up @@ -414,19 +413,19 @@ class _WidgetDescriptionComputer {
Future<void> _fetchClassElements() async {
var sessionHelper = AnalysisSessionHelper(resolvedUnit.session);
_classAlignment = await sessionHelper.getClass(
flutter.widgetsUri,
_flutter.widgetsUri,
'Alignment',
);
_classAlignmentDirectional = await sessionHelper.getClass(
flutter.widgetsUri,
_flutter.widgetsUri,
'AlignmentDirectional',
);
_classContainer = await sessionHelper.getClass(
flutter.widgetsUri,
_flutter.widgetsUri,
'Container',
);
_classEdgeInsets = await sessionHelper.getClass(
flutter.widgetsUri,
_flutter.widgetsUri,
'EdgeInsets',
);
}
Expand Down Expand Up @@ -460,7 +459,7 @@ class _WidgetDescriptionComputer {
enumItems: _enumItemsForEnum(classElement),
);
}
if (flutter.isExactAlignmentGeometry(classElement)) {
if (_flutter.isExactAlignmentGeometry(classElement)) {
var items = <protocol.FlutterWidgetPropertyValueEnumItem>[];
items.addAll(
_enumItemsForStaticFields(_classAlignment),
Expand All @@ -484,7 +483,7 @@ class _WidgetDescriptionComputer {
InstanceCreationExpression parentCreation,
String name,
) {
var argument = flutter.findNamedArgument(parentCreation, name);
var argument = _flutter.findNamedArgument(parentCreation, name);
if (argument != null) {
var replacements = <PropertyDescription>[];
_addProperty(
Expand Down Expand Up @@ -536,8 +535,8 @@ class _WidgetDescriptionComputer {
if (field is FieldElement && field.isStatic) {
var enclosingClass = field.enclosingElement as ClassElement;
if (field.isEnumConstant ||
flutter.isExactAlignment(enclosingClass) ||
flutter.isExactAlignmentDirectional(enclosingClass)) {
_flutter.isExactAlignment(enclosingClass) ||
_flutter.isExactAlignmentDirectional(enclosingClass)) {
return protocol.FlutterWidgetPropertyValue(
enumValue: _toEnumItem(field),
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ class ExtractWidgetRefactoringImpl extends RefactoringImpl
final int length;

CorrectionUtils utils;
Flutter flutter;

ClassElement classBuildContext;
ClassElement classKey;
Expand Down Expand Up @@ -78,7 +77,6 @@ class ExtractWidgetRefactoringImpl extends RefactoringImpl
this.searchEngine, this.resolveResult, this.offset, this.length)
: sessionHelper = AnalysisSessionHelper(resolveResult.session) {
utils = CorrectionUtils(resolveResult);
flutter = Flutter.of(resolveResult);
}

@override
Expand All @@ -90,6 +88,8 @@ class ExtractWidgetRefactoringImpl extends RefactoringImpl
return resolveResult.unit.featureSet;
}

Flutter get _flutter => Flutter.instance;

bool get _isNonNullable => _featureSet.isEnabled(Feature.non_nullable);

@override
Expand Down Expand Up @@ -184,8 +184,8 @@ class ExtractWidgetRefactoringImpl extends RefactoringImpl
_enclosingClassElement = _enclosingClassNode?.declaredElement;

// new MyWidget(...)
var newExpression = flutter.identifyNewExpression(node);
if (flutter.isWidgetCreation(newExpression)) {
var newExpression = _flutter.identifyNewExpression(node);
if (_flutter.isWidgetCreation(newExpression)) {
_expression = newExpression;
return RefactoringStatus();
}
Expand All @@ -203,7 +203,7 @@ class ExtractWidgetRefactoringImpl extends RefactoringImpl
if (statements.isNotEmpty) {
var lastStatement = statements.last;
if (lastStatement is ReturnStatement &&
flutter.isWidgetExpression(lastStatement.expression)) {
_flutter.isWidgetExpression(lastStatement.expression)) {
_statements = statements;
_statementsRange = range.startEnd(statements.first, statements.last);
return RefactoringStatus();
Expand All @@ -221,7 +221,7 @@ class ExtractWidgetRefactoringImpl extends RefactoringImpl
}
if (node is MethodDeclaration) {
var returnType = node.returnType?.type;
if (flutter.isWidgetType(returnType) && node.body != null) {
if (_flutter.isWidgetType(returnType) && node.body != null) {
_method = node;
return RefactoringStatus();
}
Expand All @@ -238,10 +238,10 @@ class ExtractWidgetRefactoringImpl extends RefactoringImpl
var result = RefactoringStatus();

Future<ClassElement> getClass(String name) async {
var element = await sessionHelper.getClass(flutter.widgetsUri, name);
var element = await sessionHelper.getClass(_flutter.widgetsUri, name);
if (element == null) {
result.addFatalError(
"Unable to find '$name' in ${flutter.widgetsUri}",
"Unable to find '$name' in ${_flutter.widgetsUri}",
);
}
return element;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,7 @@ class RenameUnitMemberRefactoringImpl extends RenameRefactoringImpl {
}

void _findFlutterStateClass() {
var flutter = Flutter.of(resolvedUnit);
if (flutter.isStatefulWidgetDeclaration(element)) {
if (Flutter.instance.isStatefulWidgetDeclaration(element)) {
var oldStateName = oldName + 'State';
_flutterWidgetState = element.library.getType(oldStateName) ??
element.library.getType('_' + oldStateName);
Expand Down
Loading

0 comments on commit 90ce990

Please sign in to comment.