mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 09:43:57 +00:00
Add ElementKind.MIXIN, use it for MixinElement.
Change-Id: Ie95c6c331ff437c4d6b99bfc7f9a3109f47c985b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/332460 Commit-Queue: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
afa7842594
commit
49ef0be2bc
|
@ -94,6 +94,9 @@ ElementKind convertElementKind(engine.ElementKind kind) {
|
|||
if (kind == engine.ElementKind.METHOD) {
|
||||
return ElementKind.METHOD;
|
||||
}
|
||||
if (kind == engine.ElementKind.MIXIN) {
|
||||
return ElementKind.MIXIN;
|
||||
}
|
||||
if (kind == engine.ElementKind.PARAMETER) {
|
||||
return ElementKind.PARAMETER;
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ Element? _getContainer(Element element) {
|
|||
ElementKind.FUNCTION,
|
||||
ElementKind.GETTER,
|
||||
ElementKind.METHOD,
|
||||
ElementKind.MIXIN,
|
||||
ElementKind.SETTER,
|
||||
};
|
||||
return element.thisOrAncestorMatching(
|
||||
|
@ -156,6 +157,7 @@ enum CallHierarchyKind {
|
|||
ElementKind.FUNCTION: function,
|
||||
ElementKind.GETTER: property,
|
||||
ElementKind.METHOD: method,
|
||||
ElementKind.MIXIN: mixin,
|
||||
ElementKind.SETTER: property,
|
||||
};
|
||||
|
||||
|
|
|
@ -169,7 +169,8 @@ class CreateMethod extends ResolvedCorrectionProducer {
|
|||
// maybe static
|
||||
if (target is Identifier) {
|
||||
staticModifier = target.staticElement?.kind == ElementKind.CLASS ||
|
||||
target.staticElement?.kind == ElementKind.EXTENSION_TYPE;
|
||||
target.staticElement?.kind == ElementKind.EXTENSION_TYPE ||
|
||||
target.staticElement?.kind == ElementKind.MIXIN;
|
||||
}
|
||||
// use different utils
|
||||
var targetPath = targetClassElement.source.fullName;
|
||||
|
|
|
@ -134,6 +134,7 @@ class ImportLibrary extends MultiCorrectionProducer {
|
|||
ElementKind.CLASS,
|
||||
ElementKind.ENUM,
|
||||
ElementKind.FUNCTION_TYPE_ALIAS,
|
||||
ElementKind.MIXIN,
|
||||
ElementKind.TYPE_ALIAS,
|
||||
]);
|
||||
} else if (mightBeImplicitConstructor(targetNode)) {
|
||||
|
|
|
@ -3491,7 +3491,7 @@ mixin A {
|
|||
''');
|
||||
_createRefactoringForStartEndComments();
|
||||
return _assertConditionsError(
|
||||
"Class 'A' already declares method with name 'res'.");
|
||||
"Mixin 'A' already declares method with name 'res'.");
|
||||
}
|
||||
|
||||
Future<void> test_bad_conflict_method_shadowsSuperDeclaration() async {
|
||||
|
|
|
@ -965,34 +965,36 @@ class ElementKind implements Comparable<ElementKind> {
|
|||
|
||||
static const ElementKind METHOD = ElementKind('METHOD', 20, "method");
|
||||
|
||||
static const ElementKind NAME = ElementKind('NAME', 21, "<name>");
|
||||
static const ElementKind MIXIN = ElementKind('MIXIN', 21, "mixin");
|
||||
|
||||
static const ElementKind NEVER = ElementKind('NEVER', 22, "<never>");
|
||||
static const ElementKind NAME = ElementKind('NAME', 22, "<name>");
|
||||
|
||||
static const ElementKind NEVER = ElementKind('NEVER', 23, "<never>");
|
||||
|
||||
static const ElementKind PARAMETER =
|
||||
ElementKind('PARAMETER', 23, "parameter");
|
||||
ElementKind('PARAMETER', 24, "parameter");
|
||||
|
||||
static const ElementKind PART = ElementKind('PART', 24, "part");
|
||||
static const ElementKind PART = ElementKind('PART', 25, "part");
|
||||
|
||||
static const ElementKind PREFIX = ElementKind('PREFIX', 25, "import prefix");
|
||||
static const ElementKind PREFIX = ElementKind('PREFIX', 26, "import prefix");
|
||||
|
||||
static const ElementKind RECORD = ElementKind('RECORD', 26, "record");
|
||||
static const ElementKind RECORD = ElementKind('RECORD', 27, "record");
|
||||
|
||||
static const ElementKind SETTER = ElementKind('SETTER', 27, "setter");
|
||||
static const ElementKind SETTER = ElementKind('SETTER', 28, "setter");
|
||||
|
||||
static const ElementKind TOP_LEVEL_VARIABLE =
|
||||
ElementKind('TOP_LEVEL_VARIABLE', 28, "top level variable");
|
||||
ElementKind('TOP_LEVEL_VARIABLE', 29, "top level variable");
|
||||
|
||||
static const ElementKind FUNCTION_TYPE_ALIAS =
|
||||
ElementKind('FUNCTION_TYPE_ALIAS', 29, "function type alias");
|
||||
ElementKind('FUNCTION_TYPE_ALIAS', 30, "function type alias");
|
||||
|
||||
static const ElementKind TYPE_PARAMETER =
|
||||
ElementKind('TYPE_PARAMETER', 30, "type parameter");
|
||||
ElementKind('TYPE_PARAMETER', 31, "type parameter");
|
||||
|
||||
static const ElementKind TYPE_ALIAS =
|
||||
ElementKind('TYPE_ALIAS', 31, "type alias");
|
||||
ElementKind('TYPE_ALIAS', 32, "type alias");
|
||||
|
||||
static const ElementKind UNIVERSE = ElementKind('UNIVERSE', 32, "<universe>");
|
||||
static const ElementKind UNIVERSE = ElementKind('UNIVERSE', 33, "<universe>");
|
||||
|
||||
static const List<ElementKind> values = [
|
||||
CLASS,
|
||||
|
@ -1014,6 +1016,7 @@ class ElementKind implements Comparable<ElementKind> {
|
|||
LIBRARY,
|
||||
LOCAL_VARIABLE,
|
||||
METHOD,
|
||||
MIXIN,
|
||||
NAME,
|
||||
NEVER,
|
||||
PARAMETER,
|
||||
|
|
|
@ -550,6 +550,9 @@ class ClassElementImpl extends ClassOrMixinElementImpl
|
|||
return true;
|
||||
}
|
||||
|
||||
@override
|
||||
ElementKind get kind => ElementKind.CLASS;
|
||||
|
||||
@override
|
||||
set methods(List<MethodElementImpl> methods) {
|
||||
assert(!isMixinApplication);
|
||||
|
@ -742,10 +745,6 @@ abstract class ClassOrMixinElementImpl extends InterfaceElementImpl {
|
|||
set isBase(bool isBase) {
|
||||
setModifier(Modifier.BASE, isBase);
|
||||
}
|
||||
|
||||
/// TODO(scheglov) Do we need a separate kind for `MixinElement`?
|
||||
@override
|
||||
ElementKind get kind => ElementKind.CLASS;
|
||||
}
|
||||
|
||||
/// A concrete implementation of a [CompilationUnitElement].
|
||||
|
@ -5057,6 +5056,9 @@ class MixinElementImpl extends ClassOrMixinElementImpl
|
|||
return hasModifier(Modifier.BASE);
|
||||
}
|
||||
|
||||
@override
|
||||
ElementKind get kind => ElementKind.MIXIN;
|
||||
|
||||
@override
|
||||
List<InterfaceType> get mixins => const [];
|
||||
|
||||
|
|
Loading…
Reference in a new issue