Rename annotation testing methods in Element

Change-Id: I0f60b9abd3de350e62d89eac0d690a1db40316b7
Reviewed-on: https://dart-review.googlesource.com/45080
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Brian Wilkerson 2018-03-05 17:23:48 +00:00 committed by commit-bot@chromium.org
parent 4688be6320
commit 1d159e7c23
19 changed files with 226 additions and 63 deletions

View file

@ -25,7 +25,7 @@ Element convertElement(engine.Element element) {
name,
Element.makeFlags(
isPrivate: element.isPrivate,
isDeprecated: element.isDeprecated,
isDeprecated: element.hasDeprecated,
isAbstract: _isAbstract(element),
isConst: _isConst(element),
isFinal: _isFinal(element),
@ -153,7 +153,7 @@ String _getParametersString(engine.Element element) {
closeOptionalString = ']';
}
}
if (parameter.isRequired) {
if (parameter.hasRequired) {
sb.write('@required ');
}
parameter.appendToWithoutDelimiters(sb);
@ -222,7 +222,7 @@ bool _isStatic(engine.Element element) {
// Sort @required named parameters before optional ones.
int _preferRequiredParams(
engine.ParameterElement e1, engine.ParameterElement e2) {
int rank1 = e1.isRequired ? 0 : !e1.isNamed ? -1 : 1;
int rank2 = e2.isRequired ? 0 : !e2.isNamed ? -1 : 1;
int rank1 = e1.hasRequired ? 0 : !e1.isNamed ? -1 : 1;
int rank2 = e2.hasRequired ? 0 : !e2.isNamed ? -1 : 1;
return rank1 - rank2;
}

View file

@ -54,7 +54,7 @@ class DartUnitHoverComputer {
// description
hover.elementDescription = element.toString();
hover.elementKind = element.kind.displayName;
hover.isDeprecated = element.isDeprecated;
hover.isDeprecated = element.hasDeprecated;
// not local element
if (element.enclosingElement is! ExecutableElement) {
// containing class

View file

@ -377,7 +377,7 @@ class DartUnitOutlineComputer {
*/
static bool _isDeprecated(Declaration declaration) {
engine.Element element = declaration.element;
return element != null && element.isDeprecated;
return element != null && element.hasDeprecated;
}
static String _safeToSource(AstNode node) =>

View file

@ -252,7 +252,7 @@ class ArgListContributor extends DartCompletionContributor {
completion += ',';
}
final int relevance = parameter.isRequired
final int relevance = parameter.hasRequired
? DART_RELEVANCE_NAMED_PARAMETER_REQUIRED
: DART_RELEVANCE_NAMED_PARAMETER;

View file

@ -110,7 +110,7 @@ class OverrideContributor implements DartCompletionContributor {
completion,
selectionRange.offset - offsetDelta,
selectionRange.length,
element.isDeprecated,
element.hasDeprecated,
false,
displayText: displayText);
suggestion.element = protocol.convertElement(element);

View file

@ -37,7 +37,7 @@ CompletionSuggestion createSuggestion(Element element,
if (completion == null) {
completion = element.displayName;
}
bool isDeprecated = element.isDeprecated;
bool isDeprecated = element.hasDeprecated;
CompletionSuggestion suggestion = new CompletionSuggestion(
kind,
isDeprecated ? DART_RELEVANCE_LOW : relevance,

View file

@ -55,7 +55,7 @@ void addDefaultArgDetails(
}
for (ParameterElement param in namedParams) {
if (param.isRequired) {
if (param.hasRequired) {
if (sb.isNotEmpty) {
sb.write(', ');
}

View file

@ -240,7 +240,7 @@ enum E2 { three, four }''');
engine.CompilationUnit unit = await resolveLibraryUnit(source);
{
engine.ClassElement engineElement = findElementInUnit(unit, '_E1');
expect(engineElement.isDeprecated, isTrue);
expect(engineElement.hasDeprecated, isTrue);
// create notification Element
Element element = convertElement(engineElement);
expect(element.kind, ElementKind.ENUM);
@ -257,7 +257,7 @@ enum E2 { three, four }''');
expect(element.parameters, isNull);
expect(
element.flags,
(engineElement.isDeprecated ? Element.FLAG_DEPRECATED : 0) |
(engineElement.hasDeprecated ? Element.FLAG_DEPRECATED : 0) |
Element.FLAG_PRIVATE);
}
{

View file

@ -603,6 +603,49 @@ abstract class Element implements AnalysisTarget, ResolutionTarget {
*/
Element get enclosingElement;
/**
* Return `true` if this element has an annotation of the form
* `@alwaysThrows`.
*/
bool get hasAlwaysThrows;
/**
* Return `true` if this element has an annotation of the form `@deprecated`
* or `@Deprecated('..')`.
*/
bool get hasDeprecated;
/**
* Return `true` if this element has an annotation of the form `@factory`.
*/
bool get hasFactory;
/**
* Return `true` if this element has an annotation of the form `@JS(..)`.
*/
bool get hasJS;
/**
* Return `true` if this element has an annotation of the form `@override`.
*/
bool get hasOverride;
/**
* Return `true` if this element has an annotation of the form `@protected`.
*/
bool get hasProtected;
/**
* Return `true` if this element has an annotation of the form '@required'.
*/
bool get hasRequired;
/**
* Return `true` if this element has an annotation of the form
* `@visibleForTesting`.
*/
bool get hasVisibleForTesting;
/**
* The unique integer identifier of this element.
*/
@ -612,27 +655,32 @@ abstract class Element implements AnalysisTarget, ResolutionTarget {
* Return `true` if this element has an annotation of the form
* '@alwaysThrows'.
*/
@deprecated
bool get isAlwaysThrows;
/**
* Return `true` if this element has an annotation of the form '@deprecated'
* or '@Deprecated('..')'.
*/
@deprecated
bool get isDeprecated;
/**
* Return `true` if this element has an annotation of the form '@factory'.
*/
@deprecated
bool get isFactory;
/**
* Return `true` if this element has an annotation of the form '@JS(..)'.
*/
@deprecated
bool get isJS;
/**
* Return `true` if this element has an annotation of the form '@override'.
*/
@deprecated
bool get isOverride;
/**
@ -644,6 +692,7 @@ abstract class Element implements AnalysisTarget, ResolutionTarget {
/**
* Return `true` if this element has an annotation of the form '@protected'.
*/
@deprecated
bool get isProtected;
/**
@ -655,6 +704,7 @@ abstract class Element implements AnalysisTarget, ResolutionTarget {
/**
* Return `true` if this element has an annotation of the form '@required'.
*/
@deprecated
bool get isRequired;
/**
@ -667,6 +717,7 @@ abstract class Element implements AnalysisTarget, ResolutionTarget {
/// Return `true` if this element has an annotation of the form
/// '@visibleForTesting'.
@deprecated
bool get isVisibleForTesting;
/**
@ -877,8 +928,10 @@ abstract class ElementAnnotation
*/
bool get isRequired;
/// Return `true` if this annotation marks the associated member as being
/// visible for testing.
/**
* Return `true` if this annotation marks the associated member as being
* visible for testing.
*/
bool get isVisibleForTesting;
/**

View file

@ -3172,6 +3172,18 @@ abstract class ElementImpl implements Element {
return _enclosingElement?.enclosingUnit;
}
@override
bool get hasAlwaysThrows =>
metadata.any((ElementAnnotation annotation) => annotation.isAlwaysThrows);
@override
bool get hasDeprecated =>
metadata.any((ElementAnnotation annotation) => annotation.isDeprecated);
@override
bool get hasFactory =>
metadata.any((ElementAnnotation annotation) => annotation.isFactory);
@override
int get hashCode {
// TODO: We might want to re-visit this optimization in the future.
@ -3182,6 +3194,26 @@ abstract class ElementImpl implements Element {
return _cachedHashCode;
}
@override
bool get hasJS =>
metadata.any((ElementAnnotation annotation) => annotation.isJS);
@override
bool get hasOverride =>
metadata.any((ElementAnnotation annotation) => annotation.isOverride);
@override
bool get hasProtected =>
metadata.any((ElementAnnotation annotation) => annotation.isProtected);
@override
bool get hasRequired =>
metadata.any((ElementAnnotation annotation) => annotation.isRequired);
@override
bool get hasVisibleForTesting => metadata
.any((ElementAnnotation annotation) => annotation.isVisibleForTesting);
/**
* Return an identifier that uniquely identifies this element among the
* children of this element's parent.
@ -7471,6 +7503,30 @@ class MultiplyDefinedElementImpl implements MultiplyDefinedElement {
@override
Element get enclosingElement => null;
@override
bool get hasAlwaysThrows => false;
@override
bool get hasDeprecated => false;
@override
bool get hasFactory => false;
@override
bool get hasJS => false;
@override
bool get hasOverride => false;
@override
bool get hasProtected => false;
@override
bool get hasRequired => false;
@override
bool get hasVisibleForTesting => false;
@override
bool get isAlwaysThrows => false;

View file

@ -43,12 +43,18 @@ class ClassElementHandle extends ElementHandle implements ClassElement {
@override
List<FieldElement> get fields => actualElement.fields;
@override
bool get hasJS => actualElement.hasJS;
@override
bool get hasNonFinalField => actualElement.hasNonFinalField;
@override
bool get hasReferenceToSuper => actualElement.hasReferenceToSuper;
@override
bool get hasRequired => actualElement.hasRequired;
@override
bool get hasStaticMember => actualElement.hasStaticMember;
@ -62,7 +68,7 @@ class ClassElementHandle extends ElementHandle implements ClassElement {
bool get isEnum => actualElement.isEnum;
@override
bool get isJS => actualElement.isJS;
bool get isJS => actualElement.hasJS;
@override
bool get isMixinApplication => actualElement.isMixinApplication;
@ -74,7 +80,7 @@ class ClassElementHandle extends ElementHandle implements ClassElement {
bool get isProxy => actualElement.isProxy;
@override
bool get isRequired => actualElement.isRequired;
bool get isRequired => actualElement.hasRequired;
@override
bool get isValidMixin => actualElement.isValidMixin;
@ -344,41 +350,65 @@ abstract class ElementHandle implements Element {
@override
Element get enclosingElement => actualElement.enclosingElement;
@override
bool get hasAlwaysThrows => actualElement.hasAlwaysThrows;
@override
bool get hasDeprecated => actualElement.hasDeprecated;
@override
bool get hasFactory => actualElement.hasFactory;
@override
int get hashCode => _location.hashCode;
@override
bool get isAlwaysThrows => actualElement.isAlwaysThrows;
bool get hasJS => actualElement.hasJS;
@override
bool get isDeprecated => actualElement.isDeprecated;
bool get hasOverride => actualElement.hasOverride;
@override
bool get isFactory => actualElement.isFactory;
bool get hasProtected => actualElement.hasProtected;
@override
bool get isJS => actualElement.isJS;
bool get hasRequired => actualElement.hasRequired;
@override
bool get isOverride => actualElement.isOverride;
bool get hasVisibleForTesting => actualElement.hasVisibleForTesting;
@override
bool get isAlwaysThrows => actualElement.hasAlwaysThrows;
@override
bool get isDeprecated => actualElement.hasDeprecated;
@override
bool get isFactory => actualElement.hasFactory;
@override
bool get isJS => actualElement.hasJS;
@override
bool get isOverride => actualElement.hasOverride;
@override
bool get isPrivate => actualElement.isPrivate;
@override
bool get isProtected => actualElement.isProtected;
bool get isProtected => actualElement.hasProtected;
@override
bool get isPublic => actualElement.isPublic;
@override
bool get isRequired => actualElement.isRequired;
bool get isRequired => actualElement.hasRequired;
@override
bool get isSynthetic => actualElement.isSynthetic;
@override
bool get isVisibleForTesting => actualElement.isVisibleForTesting;
bool get isVisibleForTesting => actualElement.hasVisibleForTesting;
@override
LibraryElement get library =>

View file

@ -390,41 +390,65 @@ abstract class Member implements Element {
@override
String get documentationComment => _baseElement.documentationComment;
@override
bool get hasAlwaysThrows => _baseElement.hasAlwaysThrows;
@override
bool get hasDeprecated => _baseElement.hasDeprecated;
@override
bool get hasFactory => _baseElement.hasFactory;
@override
bool get hasJS => _baseElement.hasJS;
@override
bool get hasOverride => _baseElement.hasOverride;
@override
bool get hasProtected => _baseElement.hasProtected;
@override
bool get hasRequired => _baseElement.hasRequired;
@override
bool get hasVisibleForTesting => _baseElement.hasVisibleForTesting;
@override
int get id => _baseElement.id;
@override
bool get isAlwaysThrows => _baseElement.isAlwaysThrows;
bool get isAlwaysThrows => _baseElement.hasAlwaysThrows;
@override
bool get isDeprecated => _baseElement.isDeprecated;
bool get isDeprecated => _baseElement.hasDeprecated;
@override
bool get isFactory => _baseElement.isFactory;
bool get isFactory => _baseElement.hasFactory;
@override
bool get isJS => _baseElement.isJS;
bool get isJS => _baseElement.hasJS;
@override
bool get isOverride => _baseElement.isOverride;
bool get isOverride => _baseElement.hasOverride;
@override
bool get isPrivate => _baseElement.isPrivate;
@override
bool get isProtected => _baseElement.isProtected;
bool get isProtected => _baseElement.hasProtected;
@override
bool get isPublic => _baseElement.isPublic;
@override
bool get isRequired => _baseElement.isRequired;
bool get isRequired => _baseElement.hasRequired;
@override
bool get isSynthetic => _baseElement.isSynthetic;
@override
bool get isVisibleForTesting => _baseElement.isVisibleForTesting;
bool get isVisibleForTesting => _baseElement.hasVisibleForTesting;
@override
ElementKind get kind => _baseElement.kind;

View file

@ -4790,7 +4790,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> {
void _checkForMissingJSLibAnnotation(Annotation node) {
if (resolutionMap.elementAnnotationForAnnotation(node)?.isJS ?? false) {
if (_currentLibrary.isJS != true) {
if (_currentLibrary.hasJS != true) {
_errorReporter.reportErrorForNode(
HintCode.MISSING_JS_LIB_ANNOTATION, node);
}

View file

@ -252,7 +252,7 @@ class BestPracticesVerifier extends RecursiveAstVisitor<Object> {
: _nullType = typeProvider.nullType,
_futureNullType = typeProvider.futureNullType,
_typeSystem = typeSystem ?? new TypeSystemImpl(typeProvider) {
inDeprecatedMember = _currentLibrary.isDeprecated;
inDeprecatedMember = _currentLibrary.hasDeprecated;
}
@override
@ -318,7 +318,7 @@ class BestPracticesVerifier extends RecursiveAstVisitor<Object> {
ClassElementImpl outerClass = _enclosingClass;
bool wasInDeprecatedMember = inDeprecatedMember;
ClassElement element = AbstractClassElementImpl.getImpl(node.element);
if (element != null && element.isDeprecated) {
if (element != null && element.hasDeprecated) {
inDeprecatedMember = true;
}
try {
@ -363,7 +363,7 @@ class BestPracticesVerifier extends RecursiveAstVisitor<Object> {
Object visitFunctionDeclaration(FunctionDeclaration node) {
bool wasInDeprecatedMember = inDeprecatedMember;
ExecutableElement element = node.element;
if (element != null && element.isDeprecated) {
if (element != null && element.hasDeprecated) {
inDeprecatedMember = true;
}
try {
@ -406,7 +406,7 @@ class BestPracticesVerifier extends RecursiveAstVisitor<Object> {
Object visitMethodDeclaration(MethodDeclaration node) {
bool wasInDeprecatedMember = inDeprecatedMember;
ExecutableElement element = node.element;
if (element != null && element.isDeprecated) {
if (element != null && element.hasDeprecated) {
inDeprecatedMember = true;
}
try {
@ -709,9 +709,9 @@ class BestPracticesVerifier extends RecursiveAstVisitor<Object> {
if (variable == null) {
return false;
}
return variable.isDeprecated;
return variable.hasDeprecated;
}
return element.isDeprecated;
return element.hasDeprecated;
}
if (!inDeprecatedMember && isDeprecated(element)) {
@ -909,12 +909,12 @@ class BestPracticesVerifier extends RecursiveAstVisitor<Object> {
bool isProtected(Element element) {
if (element is PropertyAccessorElement &&
element.enclosingElement is ClassElement &&
(element.isProtected || element.variable.isProtected)) {
(element.hasProtected || element.variable.hasProtected)) {
return true;
}
if (element is MethodElement &&
element.enclosingElement is ClassElement &&
element.isProtected) {
element.hasProtected) {
return true;
}
return false;
@ -924,12 +924,12 @@ class BestPracticesVerifier extends RecursiveAstVisitor<Object> {
if (element == null) {
return false;
}
if (element.isVisibleForTesting) {
if (element.hasVisibleForTesting) {
return true;
}
if (element is PropertyAccessorElement &&
element.enclosingElement is ClassElement &&
element.variable.isVisibleForTesting) {
element.variable.hasVisibleForTesting) {
return true;
}
return false;
@ -1324,7 +1324,7 @@ class BestPracticesVerifier extends RecursiveAstVisitor<Object> {
void _checkRequiredParameter(FormalParameterList node) {
final requiredParameters =
node.parameters.where((p) => p.element?.isRequired == true);
node.parameters.where((p) => p.element?.hasRequired == true);
final nonNamedParamsWithRequired =
requiredParameters.where((p) => !p.isNamed);
final namedParamsWithRequiredAndDefault = requiredParameters
@ -3467,7 +3467,7 @@ class ExitDetector extends GeneralizingAstVisitor<bool> {
}
}
Element element = node.methodName.staticElement;
if (element != null && element.isAlwaysThrows) {
if (element != null && element.hasAlwaysThrows) {
return true;
}
return _nodeExits(node.argumentList);
@ -4661,7 +4661,7 @@ class OverrideVerifier extends RecursiveAstVisitor {
* @param element the element being tested
* @return `true` if the element has an override annotation associated with it
*/
bool _isOverride(Element element) => element != null && element.isOverride;
bool _isOverride(Element element) => element != null && element.hasOverride;
}
/**

View file

@ -291,9 +291,9 @@ class C {
expect(variable, isNotNull);
expect(variable.hasImplicitType, isTrue);
expect(variable.isConst, isFalse);
expect(variable.isDeprecated, isFalse);
expect(variable.hasDeprecated, isFalse);
expect(variable.isFinal, isFalse);
expect(variable.isOverride, isFalse);
expect(variable.hasAlwaysThrows, isFalse);
expect(variable.isPrivate, isFalse);
expect(variable.isPublic, isTrue);
expect(variable.isSynthetic, isFalse);
@ -307,9 +307,9 @@ class C {
assertHasCodeRange(variable, 11, 5);
expect(variable.hasImplicitType, isFalse);
expect(variable.isConst, isFalse);
expect(variable.isDeprecated, isFalse);
expect(variable.hasDeprecated, isFalse);
expect(variable.isFinal, isFalse);
expect(variable.isOverride, isFalse);
expect(variable.hasOverride, isFalse);
expect(variable.isPrivate, isFalse);
expect(variable.isPublic, isTrue);
expect(variable.isSynthetic, isFalse);
@ -336,10 +336,10 @@ class C {
expect(parameter.initializer.type, isNotNull);
expect(parameter.initializer.hasImplicitReturnType, isTrue);
expect(parameter.isConst, isFalse);
expect(parameter.isDeprecated, isFalse);
expect(parameter.hasDeprecated, isFalse);
expect(parameter.isFinal, isFalse);
expect(parameter.isInitializingFormal, isFalse);
expect(parameter.isOverride, isFalse);
expect(parameter.hasOverride, isFalse);
expect(parameter.isPrivate, isFalse);
expect(parameter.isPublic, isTrue);
expect(parameter.isSynthetic, isFalse);
@ -364,10 +364,10 @@ class C {
expect(parameter.initializer.type, isNotNull);
expect(parameter.initializer.hasImplicitReturnType, isTrue);
expect(parameter.isConst, isFalse);
expect(parameter.isDeprecated, isFalse);
expect(parameter.hasDeprecated, isFalse);
expect(parameter.isFinal, isFalse);
expect(parameter.isInitializingFormal, isFalse);
expect(parameter.isOverride, isFalse);
expect(parameter.hasOverride, isFalse);
expect(parameter.isPrivate, isFalse);
expect(parameter.isPublic, isTrue);
expect(parameter.isSynthetic, isFalse);

View file

@ -64,7 +64,7 @@ enum C {C1, C2, C3}
// A
{
ClassElement elementA = unitElement.getType("A");
expect(elementA.isDeprecated, isFalse);
expect(elementA.hasDeprecated, isFalse);
expect(elementA.isEnum, isFalse);
ClassDeclaration nodeA = elementA.computeNode();
expect(nodeA, isNotNull);
@ -74,7 +74,7 @@ enum C {C1, C2, C3}
// B
{
ClassElement elementB = unitElement.getType("B");
expect(elementB.isDeprecated, isTrue);
expect(elementB.hasDeprecated, isTrue);
expect(elementB.isEnum, isFalse);
ClassDeclaration nodeB = elementB.computeNode();
expect(nodeB, isNotNull);
@ -84,7 +84,7 @@ enum C {C1, C2, C3}
// C
{
ClassElement elementC = unitElement.getEnum("C");
expect(elementC.isDeprecated, isFalse);
expect(elementC.hasDeprecated, isFalse);
expect(elementC.isEnum, isTrue);
EnumDeclaration nodeC = elementC.computeNode();
expect(nodeC, isNotNull);
@ -94,7 +94,7 @@ enum C {C1, C2, C3}
// D
{
ClassElement elementD = unitElement.getEnum("D");
expect(elementD.isDeprecated, isTrue);
expect(elementD.hasDeprecated, isTrue);
expect(elementD.isEnum, isTrue);
EnumDeclaration nodeC = elementD.computeNode();
expect(nodeC, isNotNull);

View file

@ -58,7 +58,7 @@ class SuggestionBuilderImpl implements SuggestionBuilder {
}
for (ParameterElement param in namedParams) {
if (param.isRequired) {
if (param.hasRequired) {
if (buffer.isNotEmpty) {
buffer.write(', ');
}
@ -94,7 +94,7 @@ class SuggestionBuilderImpl implements SuggestionBuilder {
if (completion == null) {
completion = element.displayName;
}
bool isDeprecated = element.isDeprecated;
bool isDeprecated = element.hasDeprecated;
CompletionSuggestion suggestion = new CompletionSuggestion(
kind,
isDeprecated ? DART_RELEVANCE_LOW : relevance,

View file

@ -93,7 +93,7 @@ class AnalyzerConverter {
element.displayName,
plugin.Element.makeFlags(
isPrivate: element.isPrivate,
isDeprecated: element.isDeprecated,
isDeprecated: element.hasDeprecated,
isAbstract: _isAbstract(element),
isConst: _isConst(element),
isFinal: _isFinal(element),

View file

@ -265,7 +265,7 @@ enum E2 { three, four }''');
analyzer.CompilationUnit unit = await resolveLibraryUnit(source);
{
analyzer.ClassElement engineElement = findElementInUnit(unit, '_E1');
expect(engineElement.isDeprecated, isTrue);
expect(engineElement.hasDeprecated, isTrue);
// create notification Element
plugin.Element element = converter.convertElement(engineElement);
expect(element.kind, plugin.ElementKind.ENUM);
@ -282,7 +282,7 @@ enum E2 { three, four }''');
expect(element.parameters, isNull);
expect(
element.flags,
(engineElement.isDeprecated ? plugin.Element.FLAG_DEPRECATED : 0) |
(engineElement.hasDeprecated ? plugin.Element.FLAG_DEPRECATED : 0) |
plugin.Element.FLAG_PRIVATE);
}
{