| Index: pkg/analyzer/lib/src/dart/element/builder.dart
|
| diff --git a/pkg/analyzer/lib/src/dart/element/builder.dart b/pkg/analyzer/lib/src/dart/element/builder.dart
|
| index b45f44e9742c3ba070731d3f5e7730edd0e82d8e..b421e75f13d11de9893ebc85bf28b22a9223a5f6 100644
|
| --- a/pkg/analyzer/lib/src/dart/element/builder.dart
|
| +++ b/pkg/analyzer/lib/src/dart/element/builder.dart
|
| @@ -1078,8 +1078,11 @@ class LocalElementBuilder extends _BaseElementBuilder {
|
| CompilationUnitElementImpl compilationUnitElement)
|
| : super(initialHolder, compilationUnitElement);
|
|
|
| - @override
|
| - Object visitCatchClause(CatchClause node) {
|
| + /**
|
| + * Builds the variable elements associated with [node] and stores them in
|
| + * the element holder.
|
| + */
|
| + void buildCatchVariableElements(CatchClause node) {
|
| SimpleIdentifier exceptionParameter = node.exceptionParameter;
|
| if (exceptionParameter != null) {
|
| // exception
|
| @@ -1102,6 +1105,26 @@ class LocalElementBuilder extends _BaseElementBuilder {
|
| stackTraceParameter.staticElement = stackTrace;
|
| }
|
| }
|
| + }
|
| +
|
| + /**
|
| + * Builds the label elements associated with [labels] and stores them in the
|
| + * element holder.
|
| + */
|
| + void buildLabelElements(
|
| + NodeList<Label> labels, bool onSwitchStatement, bool onSwitchMember) {
|
| + for (Label label in labels) {
|
| + SimpleIdentifier labelName = label.label;
|
| + LabelElementImpl element = new LabelElementImpl.forNode(
|
| + labelName, onSwitchStatement, onSwitchMember);
|
| + labelName.staticElement = element;
|
| + _currentHolder.addLabel(element);
|
| + }
|
| + }
|
| +
|
| + @override
|
| + Object visitCatchClause(CatchClause node) {
|
| + buildCatchVariableElements(node);
|
| return super.visitCatchClause(node);
|
| }
|
|
|
| @@ -1226,37 +1249,19 @@ class LocalElementBuilder extends _BaseElementBuilder {
|
| @override
|
| Object visitLabeledStatement(LabeledStatement node) {
|
| bool onSwitchStatement = node.statement is SwitchStatement;
|
| - for (Label label in node.labels) {
|
| - SimpleIdentifier labelName = label.label;
|
| - LabelElementImpl element =
|
| - new LabelElementImpl.forNode(labelName, onSwitchStatement, false);
|
| - _currentHolder.addLabel(element);
|
| - labelName.staticElement = element;
|
| - }
|
| + buildLabelElements(node.labels, onSwitchStatement, false);
|
| return super.visitLabeledStatement(node);
|
| }
|
|
|
| @override
|
| Object visitSwitchCase(SwitchCase node) {
|
| - for (Label label in node.labels) {
|
| - SimpleIdentifier labelName = label.label;
|
| - LabelElementImpl element =
|
| - new LabelElementImpl.forNode(labelName, false, true);
|
| - _currentHolder.addLabel(element);
|
| - labelName.staticElement = element;
|
| - }
|
| + buildLabelElements(node.labels, false, true);
|
| return super.visitSwitchCase(node);
|
| }
|
|
|
| @override
|
| Object visitSwitchDefault(SwitchDefault node) {
|
| - for (Label label in node.labels) {
|
| - SimpleIdentifier labelName = label.label;
|
| - LabelElementImpl element =
|
| - new LabelElementImpl.forNode(labelName, false, true);
|
| - _currentHolder.addLabel(element);
|
| - labelName.staticElement = element;
|
| - }
|
| + buildLabelElements(node.labels, false, true);
|
| return super.visitSwitchDefault(node);
|
| }
|
|
|
|
|