Index: pkg/analyzer/lib/src/dart/element/element.dart |
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart |
index d46c864189b0b3cf1b6516337cd738da05af5e83..a3ce3817649b819b599a49bc6ad71f4346066268 100644 |
--- a/pkg/analyzer/lib/src/dart/element/element.dart |
+++ b/pkg/analyzer/lib/src/dart/element/element.dart |
@@ -474,6 +474,9 @@ class ClassElementImpl extends ElementImpl |
} |
@override |
+ TypeParameterizedElementMixin get typeParameterContext => this; |
+ |
+ @override |
List<TypeParameterElement> get typeParameters { |
if (_unlinkedClass != null) { |
return super.typeParameters; |
@@ -1268,6 +1271,7 @@ class CompilationUnitElementImpl extends UriReferencedElementImpl |
@override |
String get identifier => source.encoding; |
+ |
@override |
ElementKind get kind => ElementKind.COMPILATION_UNIT; |
@@ -1333,6 +1337,9 @@ class CompilationUnitElementImpl extends UriReferencedElementImpl |
} |
@override |
+ TypeParameterizedElementMixin get typeParameterContext => null; |
+ |
+ @override |
List<ClassElement> get types => _types; |
/** |
@@ -2345,6 +2352,15 @@ abstract class ElementImpl implements Element { |
setModifier(Modifier.SYNTHETIC, isSynthetic); |
} |
+ /** |
+ * Return the context to resolve type parameters in, or `null` if neither this |
+ * element nor any of its ancestors is of a kind that can declare type |
+ * parameters. |
+ */ |
+ TypeParameterizedElementMixin get typeParameterContext { |
+ return _enclosingElement?.typeParameterContext; |
+ } |
+ |
@override |
CompilationUnit get unit => context.resolveCompilationUnit(source, library); |
@@ -2987,6 +3003,9 @@ abstract class ExecutableElementImpl extends ElementImpl |
} |
@override |
+ TypeParameterizedElementMixin get typeParameterContext => this; |
+ |
+ @override |
List<TypeParameterElement> get typeParameters => _typeParameters; |
/** |
@@ -3392,11 +3411,7 @@ class FunctionElementImpl extends ExecutableElementImpl |
@override |
TypeParameterizedElementMixin get enclosingTypeParameterContext { |
- Element enclosingElement = this.enclosingElement; |
- if (enclosingElement is TypeParameterizedElementMixin) { |
- return enclosingElement; |
- } |
- return null; |
+ return (enclosingElement as ElementImpl).typeParameterContext; |
} |
@override |
@@ -3622,6 +3637,9 @@ class FunctionTypeAliasElementImpl extends ElementImpl |
} |
@override |
+ TypeParameterizedElementMixin get typeParameterContext => this; |
+ |
+ @override |
List<TypeParameterElement> get typeParameters { |
if (_unlinkedTypedef != null) { |
return super.typeParameters; |
@@ -6076,11 +6094,7 @@ class PropertyAccessorElementImpl extends ExecutableElementImpl |
@override |
TypeParameterizedElementMixin get enclosingTypeParameterContext { |
- Element enclosingElement = this.enclosingElement; |
- if (enclosingElement is TypeParameterizedElementMixin) { |
- return enclosingElement; |
- } |
- return null; |
+ return (enclosingElement as ElementImpl).typeParameterContext; |
} |
/** |
@@ -6239,12 +6253,12 @@ abstract class ResynthesizerContext { |
/** |
* Build [ElementAnnotationImpl] for the given [UnlinkedConst]. |
*/ |
- ElementAnnotationImpl buildAnnotation(Element context, UnlinkedConst uc); |
+ ElementAnnotationImpl buildAnnotation(ElementImpl context, UnlinkedConst uc); |
/** |
* Build [Expression] for the given [UnlinkedConst]. |
*/ |
- Expression buildExpression(Element context, UnlinkedConst uc); |
+ Expression buildExpression(ElementImpl context, UnlinkedConst uc); |
/** |
* Build explicit top-level property accessors. |