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

Unified Diff: pkg/analyzer/lib/src/generated/resolver.dart

Issue 384093002: Resolve names in combinators for PropertyInducingElements instead of PropertyAccessorElements. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 5 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:
Download patch
Index: pkg/analyzer/lib/src/generated/resolver.dart
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index fa12291b94e390ae79b4e213cbb00fbe55e5eef4..10f97252743ef43d50fbcb9a6a563ea403542972 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -3759,71 +3759,98 @@ class ElementBuilder extends RecursiveAstVisitor<Object> {
@override
Object visitMethodDeclaration(MethodDeclaration node) {
- ElementHolder holder = new ElementHolder();
- bool wasInFunction = _inFunction;
- _inFunction = true;
try {
- _visitChildren(holder, node);
- } finally {
- _inFunction = wasInFunction;
- }
- bool isStatic = node.isStatic;
- sc.Token property = node.propertyKeyword;
- if (property == null) {
- SimpleIdentifier methodName = node.name;
- String nameOfMethod = methodName.name;
- if (nameOfMethod == sc.TokenType.MINUS.lexeme && node.parameters.parameters.length == 0) {
- nameOfMethod = "unary-";
+ ElementHolder holder = new ElementHolder();
+ bool wasInFunction = _inFunction;
+ _inFunction = true;
+ try {
+ _visitChildren(holder, node);
+ } finally {
+ _inFunction = wasInFunction;
}
- MethodElementImpl element = new MethodElementImpl(nameOfMethod, methodName.offset);
- element.abstract = node.isAbstract;
- element.functions = holder.functions;
- element.labels = holder.labels;
- element.localVariables = holder.localVariables;
- element.parameters = holder.parameters;
- element.static = isStatic;
- _currentHolder.addMethod(element);
- methodName.staticElement = element;
- } else {
- SimpleIdentifier propertyNameNode = node.name;
- String propertyName = propertyNameNode.name;
- FieldElementImpl field = _currentHolder.getField(propertyName) as FieldElementImpl;
- if (field == null) {
- field = new FieldElementImpl(node.name.name, -1);
- field.final2 = true;
- field.static = isStatic;
- field.synthetic = true;
- _currentHolder.addField(field);
- }
- if (_matches(property, sc.Keyword.GET)) {
- PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl.forNode(propertyNameNode);
- getter.functions = holder.functions;
- getter.labels = holder.labels;
- getter.localVariables = holder.localVariables;
- getter.variable = field;
- getter.abstract = node.body is EmptyFunctionBody && node.externalKeyword == null;
- getter.getter = true;
- getter.static = isStatic;
- field.getter = getter;
- _currentHolder.addAccessor(getter);
- propertyNameNode.staticElement = getter;
+ bool isStatic = node.isStatic;
+ sc.Token property = node.propertyKeyword;
+ if (property == null) {
+ SimpleIdentifier methodName = node.name;
+ String nameOfMethod = methodName.name;
+ if (nameOfMethod == sc.TokenType.MINUS.lexeme && node.parameters.parameters.length == 0) {
+ nameOfMethod = "unary-";
+ }
+ MethodElementImpl element = new MethodElementImpl(nameOfMethod, methodName.offset);
+ element.abstract = node.isAbstract;
+ element.functions = holder.functions;
+ element.labels = holder.labels;
+ element.localVariables = holder.localVariables;
+ element.parameters = holder.parameters;
+ element.static = isStatic;
+ _currentHolder.addMethod(element);
+ methodName.staticElement = element;
} else {
- PropertyAccessorElementImpl setter = new PropertyAccessorElementImpl.forNode(propertyNameNode);
- setter.functions = holder.functions;
- setter.labels = holder.labels;
- setter.localVariables = holder.localVariables;
- setter.parameters = holder.parameters;
- setter.variable = field;
- setter.abstract = node.body is EmptyFunctionBody && !_matches(node.externalKeyword, sc.Keyword.EXTERNAL);
- setter.setter = true;
- setter.static = isStatic;
- field.setter = setter;
- field.final2 = false;
- _currentHolder.addAccessor(setter);
- propertyNameNode.staticElement = setter;
+ SimpleIdentifier propertyNameNode = node.name;
+ String propertyName = propertyNameNode.name;
+ FieldElementImpl field = _currentHolder.getField(propertyName) as FieldElementImpl;
+ if (field == null) {
+ field = new FieldElementImpl(node.name.name, -1);
+ field.final2 = true;
+ field.static = isStatic;
+ field.synthetic = true;
+ _currentHolder.addField(field);
+ }
+ if (_matches(property, sc.Keyword.GET)) {
+ PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl.forNode(propertyNameNode);
+ getter.functions = holder.functions;
+ getter.labels = holder.labels;
+ getter.localVariables = holder.localVariables;
+ getter.variable = field;
+ getter.abstract = node.body is EmptyFunctionBody && node.externalKeyword == null;
+ getter.getter = true;
+ getter.static = isStatic;
+ field.getter = getter;
+ _currentHolder.addAccessor(getter);
+ propertyNameNode.staticElement = getter;
+ } else {
+ PropertyAccessorElementImpl setter = new PropertyAccessorElementImpl.forNode(propertyNameNode);
+ setter.functions = holder.functions;
+ setter.labels = holder.labels;
+ setter.localVariables = holder.localVariables;
+ setter.parameters = holder.parameters;
+ setter.variable = field;
+ setter.abstract = node.body is EmptyFunctionBody && !_matches(node.externalKeyword, sc.Keyword.EXTERNAL);
+ setter.setter = true;
+ setter.static = isStatic;
+ field.setter = setter;
+ field.final2 = false;
+ _currentHolder.addAccessor(setter);
+ propertyNameNode.staticElement = setter;
+ }
+ }
+ holder.validate();
+ } on JavaException catch (ex) {
+ if (node.name.staticElement == null) {
+ ClassDeclaration classNode = node.getAncestor((node) => node is ClassDeclaration);
+ JavaStringBuilder builder = new JavaStringBuilder();
+ builder.append("The element for the method ");
+ builder.append(node.name);
+ builder.append(" in ");
+ builder.append(classNode.name);
+ builder.append(" was not set while trying to build the element model.");
+ AnalysisEngine.instance.logger.logError2(builder.toString(), new AnalysisException(builder.toString(), new CaughtException(ex, null)));
+ } else {
+ String message = "Exception caught in ElementBuilder.visitMethodDeclaration()";
+ AnalysisEngine.instance.logger.logError2(message, new AnalysisException(message, new CaughtException(ex, null)));
+ }
+ } finally {
+ if (node.name.staticElement == null) {
+ ClassDeclaration classNode = node.getAncestor((node) => node is ClassDeclaration);
+ JavaStringBuilder builder = new JavaStringBuilder();
+ builder.append("The element for the method ");
+ builder.append(node.name);
+ builder.append(" in ");
+ builder.append(classNode.name);
+ builder.append(" was not set while trying to resolve types.");
+ AnalysisEngine.instance.logger.logError2(builder.toString(), new CaughtException(new AnalysisException(builder.toString()), null));
}
}
- holder.validate();
return null;
}
@@ -6507,8 +6534,15 @@ class ElementResolver extends SimpleAstVisitor<Object> {
names = (combinator as ShowCombinator).shownNames;
}
for (SimpleIdentifier name in names) {
- Element element = namespace.get(name.name);
+ String nameStr = name.name;
+ Element element = namespace.get(nameStr);
+ if (element == null) {
+ element = namespace.get("${nameStr}=");
+ }
if (element != null) {
+ if (element is PropertyAccessorElement) {
+ element = (element as PropertyAccessorElement).variable;
+ }
name.staticElement = element;
}
}
@@ -22840,6 +22874,23 @@ class TypeResolverVisitor extends ScopedVisitor {
Object visitMethodDeclaration(MethodDeclaration node) {
super.visitMethodDeclaration(node);
ExecutableElementImpl element = node.element as ExecutableElementImpl;
+ if (element == null) {
+ ClassDeclaration classNode = node.getAncestor((node) => node is ClassDeclaration);
+ ClassElement classElement = classNode.element;
+ JavaStringBuilder builder = new JavaStringBuilder();
+ builder.append("The element for the method ");
+ builder.append(node.name);
+ builder.append(" in ");
+ builder.append(classNode.name);
+ builder.append(" in ");
+ if (classElement != null) {
+ builder.append(classElement.source.fullName);
+ } else {
+ builder.append("<element from class also not resolved>");
+ }
+ builder.append(" was not set while trying to resolve types.");
+ AnalysisEngine.instance.logger.logError2(builder.toString(), new AnalysisException());
+ }
element.returnType = _computeReturnType(node.returnType);
FunctionTypeImpl type = new FunctionTypeImpl.con1(element);
ClassElement definingClass = element.getAncestor((element) => element is ClassElement);

Powered by Google App Engine
This is Rietveld 408576698