Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1651)

Unified Diff: pkg/analyzer/lib/src/dart/ast/ast.dart

Issue 1833573006: Distinguish SimpleIdentifier uses and declarations at parse time. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Brace body. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/dart/ast/ast.dart ('k') | pkg/analyzer/lib/src/dart/ast/utilities.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/dart/ast/ast.dart
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 3f398acfad1be71d081a884ad4e9d48f943b7737..a8d19170a933428f4fad6ad297e2364e80c580fe 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -3258,6 +3258,24 @@ class DeclaredIdentifierImpl extends DeclarationImpl
}
/**
+ * A simple identifier that declares a name.
+ */
+// TODO(rnystrom): Consider making this distinct from [SimpleIdentifier] and
+// get rid of all of the:
+//
+// if (node.inDeclarationContext()) { ... }
+//
+// code and instead visit this separately. A declaration is semantically pretty
+// different from a use, so using the same node type doesn't seem to buy us
+// much.
+class DeclaredSimpleIdentifier extends SimpleIdentifierImpl {
+ DeclaredSimpleIdentifier(Token token) : super(token);
+
+ @override
+ bool inDeclarationContext() => true;
+}
+
+/**
* A formal parameter with a default value. There are two kinds of parameters
* that are both represented by this class: named formal parameters and
* positional formal parameters.
@@ -8930,7 +8948,7 @@ class SimpleIdentifierImpl extends IdentifierImpl implements SimpleIdentifier {
@override
void set propagatedElement(Element element) {
- _propagatedElement = _validateElement(element);
+ _propagatedElement = element;
}
@override
@@ -8938,7 +8956,7 @@ class SimpleIdentifierImpl extends IdentifierImpl implements SimpleIdentifier {
@override
void set staticElement(Element element) {
- _staticElement = _validateElement(element);
+ _staticElement = element;
}
@override
@@ -8946,46 +8964,7 @@ class SimpleIdentifierImpl extends IdentifierImpl implements SimpleIdentifier {
visitor.visitSimpleIdentifier(this);
@override
- bool inDeclarationContext() {
- // TODO(brianwilkerson) Convert this to a getter.
- AstNode parent = this.parent;
- if (parent is CatchClause) {
- CatchClause clause = parent;
- return identical(this, clause.exceptionParameter) ||
- identical(this, clause.stackTraceParameter);
- } else if (parent is ClassDeclaration) {
- return identical(this, parent.name);
- } else if (parent is ClassTypeAlias) {
- return identical(this, parent.name);
- } else if (parent is ConstructorDeclaration) {
- return identical(this, parent.name);
- } else if (parent is DeclaredIdentifier) {
- return identical(this, parent.identifier);
- } else if (parent is EnumDeclaration) {
- return identical(this, parent.name);
- } else if (parent is EnumConstantDeclaration) {
- return identical(this, parent.name);
- } else if (parent is FunctionDeclaration) {
- return identical(this, parent.name);
- } else if (parent is FunctionTypeAlias) {
- return identical(this, parent.name);
- } else if (parent is ImportDirective) {
- return identical(this, parent.prefix);
- } else if (parent is Label) {
- return identical(this, parent.label) &&
- (parent.parent is LabeledStatement);
- } else if (parent is MethodDeclaration) {
- return identical(this, parent.name);
- } else if (parent is FunctionTypedFormalParameter ||
- parent is SimpleFormalParameter) {
- return identical(this, (parent as NormalFormalParameter).identifier);
- } else if (parent is TypeParameter) {
- return identical(this, parent.name);
- } else if (parent is VariableDeclaration) {
- return identical(this, parent.name);
- }
- return false;
- }
+ bool inDeclarationContext() => false;
@override
bool inGetterContext() {
@@ -9066,66 +9045,6 @@ class SimpleIdentifierImpl extends IdentifierImpl implements SimpleIdentifier {
void visitChildren(AstVisitor visitor) {
// There are no children to visit.
}
-
- /**
- * Return the given element if it is valid, or report the problem and return
- * `null` if it is not appropriate.
- *
- * The [parent] is the parent of the element, used for reporting when there is
- * a problem.
- * The [isValid] is `true` if the element is appropriate.
- * The [element] is the element to be associated with this identifier.
- */
- Element _returnOrReportElement(
- AstNode parent, bool isValid, Element element) {
- if (!isValid) {
- AnalysisEngine.instance.logger.logInformation(
- "Internal error: attempting to set the name of a ${parent.runtimeType} to a ${element.runtimeType}",
- new CaughtException(new AnalysisException(), null));
- return null;
- }
- return element;
- }
-
- /**
- * Return the given [element] if it is an appropriate element based on the
- * parent of this identifier, or `null` if it is not appropriate.
- */
- Element _validateElement(Element element) {
- if (element == null) {
- return null;
- }
- AstNode parent = this.parent;
- if (parent is ClassDeclaration && identical(parent.name, this)) {
- return _returnOrReportElement(parent, element is ClassElement, element);
- } else if (parent is ClassTypeAlias && identical(parent.name, this)) {
- return _returnOrReportElement(parent, element is ClassElement, element);
- } else if (parent is DeclaredIdentifier &&
- identical(parent.identifier, this)) {
- return _returnOrReportElement(
- parent, element is LocalVariableElement, element);
- } else if (parent is FormalParameter &&
- identical(parent.identifier, this)) {
- return _returnOrReportElement(
- parent, element is ParameterElement, element);
- } else if (parent is FunctionDeclaration && identical(parent.name, this)) {
- return _returnOrReportElement(
- parent, element is ExecutableElement, element);
- } else if (parent is FunctionTypeAlias && identical(parent.name, this)) {
- return _returnOrReportElement(
- parent, element is FunctionTypeAliasElement, element);
- } else if (parent is MethodDeclaration && identical(parent.name, this)) {
- return _returnOrReportElement(
- parent, element is ExecutableElement, element);
- } else if (parent is TypeParameter && identical(parent.name, this)) {
- return _returnOrReportElement(
- parent, element is TypeParameterElement, element);
- } else if (parent is VariableDeclaration && identical(parent.name, this)) {
- return _returnOrReportElement(
- parent, element is VariableElement, element);
- }
- return element;
- }
}
/**
« no previous file with comments | « pkg/analyzer/lib/dart/ast/ast.dart ('k') | pkg/analyzer/lib/src/dart/ast/utilities.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698