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

Unified Diff: pkg/compiler/lib/src/resolution/resolution.dart

Issue 1383483006: Extract DiagnosticReporter implementation from Compiler. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fixes after rebase. Created 5 years, 2 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
Index: pkg/compiler/lib/src/resolution/resolution.dart
diff --git a/pkg/compiler/lib/src/resolution/resolution.dart b/pkg/compiler/lib/src/resolution/resolution.dart
index 4a3118bf585f45f0a27fc95b2ba84f6707038589..f7554e5c3af0ec5bbffd24c688068f9a39b9c0b0 100644
--- a/pkg/compiler/lib/src/resolution/resolution.dart
+++ b/pkg/compiler/lib/src/resolution/resolution.dart
@@ -22,7 +22,8 @@ import '../constants/values.dart' show
ConstantValue;
import '../dart_types.dart';
import '../diagnostics/diagnostic_listener.dart' show
- DiagnosticMessage;
+ DiagnosticMessage,
+ DiagnosticReporter;
import '../diagnostics/invariant.dart' show
invariant;
import '../diagnostics/messages.dart' show
@@ -130,7 +131,7 @@ class ResolverTask extends CompilerTask {
// Ensure that we follow redirections through implementation elements.
redirection = redirection.implementation;
if (seen.contains(redirection)) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
node, MessageKind.REDIRECTING_CONSTRUCTOR_CYCLE);
return;
}
@@ -142,6 +143,7 @@ class ResolverTask extends CompilerTask {
static void processAsyncMarker(Compiler compiler,
BaseFunctionElementX element,
ResolutionRegistry registry) {
+ DiagnosticReporter reporter = compiler.reporter;
Resolution resolution = compiler.resolution;
FunctionExpression functionExpression = element.node;
AsyncModifier asyncModifier = functionExpression.asyncModifier;
@@ -154,18 +156,18 @@ class ResolverTask extends CompilerTask {
element.asyncMarker = AsyncMarker.SYNC_STAR;
}
if (element.isAbstract) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
asyncModifier,
MessageKind.ASYNC_MODIFIER_ON_ABSTRACT_METHOD,
{'modifier': element.asyncMarker});
} else if (element.isConstructor) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
asyncModifier,
MessageKind.ASYNC_MODIFIER_ON_CONSTRUCTOR,
{'modifier': element.asyncMarker});
} else {
if (element.isSetter) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
asyncModifier,
MessageKind.ASYNC_MODIFIER_ON_SETTER,
{'modifier': element.asyncMarker});
@@ -173,7 +175,7 @@ class ResolverTask extends CompilerTask {
}
if (functionExpression.body.asReturn() != null &&
element.asyncMarker.isYielding) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
asyncModifier,
MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY,
{'modifier': element.asyncMarker});
@@ -205,22 +207,22 @@ class ResolverTask extends CompilerTask {
WorldImpact resolveMethodElementImplementation(
FunctionElement element, FunctionExpression tree) {
- return compiler.withCurrentElement(element, () {
+ return reporter.withCurrentElement(element, () {
if (element.isExternal && tree.hasBody()) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
element,
MessageKind.EXTERNAL_WITH_BODY,
{'functionName': element.name});
}
if (element.isConstructor) {
if (tree.returnType != null) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
tree, MessageKind.CONSTRUCTOR_WITH_RETURN_TYPE);
}
if (element.isConst &&
tree.hasBody() &&
!tree.isRedirectingFactory) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
tree, MessageKind.CONST_CONSTRUCTOR_HAS_BODY);
}
}
@@ -241,7 +243,7 @@ class ResolverTask extends CompilerTask {
resolveRedirectingConstructor(resolver, tree, element, redirection);
}
} else if (tree.initializers != null) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
tree, MessageKind.FUNCTION_WITH_INITIALIZER);
}
@@ -272,7 +274,7 @@ class ResolverTask extends CompilerTask {
if (Elements.isInstanceMethod(element) &&
element.name == Identifiers.noSuchMethod_ &&
_isNativeClassOrExtendsNativeClass(enclosingClass)) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
tree, MessageKind.NO_SUCH_METHOD_IN_NATIVE);
}
@@ -283,7 +285,7 @@ class ResolverTask extends CompilerTask {
WorldImpact resolveMethodElement(FunctionElementX element) {
assert(invariant(element, element.isDeclaration));
- return compiler.withCurrentElement(element, () {
+ return reporter.withCurrentElement(element, () {
if (compiler.enqueuer.resolution.hasBeenResolved(element)) {
// TODO(karlklose): Remove the check for [isConstructor]. [elememts]
// should never be non-null, not even for constructors.
@@ -340,7 +342,7 @@ class ResolverTask extends CompilerTask {
WorldImpact resolveField(FieldElementX element) {
VariableDefinitions tree = element.parseNode(parsing);
if(element.modifiers.isStatic && element.isTopLevel) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
element.modifiers.getStatic(),
MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC);
}
@@ -364,10 +366,10 @@ class ResolverTask extends CompilerTask {
// [Compiler.analyzeSignaturesOnly] is set.
visitor.visit(initializer);
} else if (modifiers.isConst) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
element, MessageKind.CONST_WITHOUT_INITIALIZER);
} else if (modifiers.isFinal && !element.isInstanceMember) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
element, MessageKind.FINAL_WITHOUT_INITIALIZER);
} else {
registry.registerInstantiatedClass(compiler.nullClass);
@@ -399,7 +401,7 @@ class ResolverTask extends CompilerTask {
DartType resolveTypeAnnotation(Element element, TypeAnnotation annotation) {
DartType type = resolveReturnType(element, annotation);
if (type.isVoid) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
annotation, MessageKind.VOID_NOT_ALLOWED);
}
return type;
@@ -434,7 +436,7 @@ class ResolverTask extends CompilerTask {
Element nextTarget = target.immediateRedirectionTarget;
if (seen.contains(nextTarget)) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
node, MessageKind.CYCLIC_REDIRECTING_FACTORY);
targetType = target.enclosingClass.thisType;
break;
@@ -481,10 +483,10 @@ class ResolverTask extends CompilerTask {
* called by [resolveClass] and [ClassSupertypeResolver].
*/
void loadSupertypes(BaseClassElementX cls, Spannable from) {
- compiler.withCurrentElement(cls, () => measure(() {
+ reporter.withCurrentElement(cls, () => measure(() {
if (cls.supertypeLoadState == STATE_DONE) return;
if (cls.supertypeLoadState == STATE_STARTED) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
from,
MessageKind.CYCLIC_CLASS_HIERARCHY,
{'className': cls.name});
@@ -500,7 +502,7 @@ class ResolverTask extends CompilerTask {
return;
}
cls.supertypeLoadState = STATE_STARTED;
- compiler.withCurrentElement(cls, () {
+ reporter.withCurrentElement(cls, () {
// TODO(ahe): Cache the node in cls.
cls.parseNode(parsing).accept(
new ClassSupertypeResolver(compiler, cls));
@@ -527,7 +529,7 @@ class ResolverTask extends CompilerTask {
// 'TypeDeclarationResolver'.
_resolveTypeDeclaration(TypeDeclarationElement element,
resolveTypeDeclaration()) {
- return compiler.withCurrentElement(element, () {
+ return reporter.withCurrentElement(element, () {
return measure(() {
TypeDeclarationElement previousResolvedTypeDeclaration =
currentlyResolvedTypeDeclaration;
@@ -584,7 +586,7 @@ class ResolverTask extends CompilerTask {
void resolveClassInternal(BaseClassElementX element,
ResolutionRegistry registry) {
if (!element.isPatch) {
- compiler.withCurrentElement(element, () => measure(() {
+ reporter.withCurrentElement(element, () => measure(() {
assert(element.resolutionState == STATE_NOT_STARTED);
element.resolutionState = STATE_STARTED;
Node tree = element.parseNode(parsing);
@@ -637,7 +639,7 @@ class ResolverTask extends CompilerTask {
// TODO(ahe): Avoid this eager resolution.
element.forEachMember((_, Element member) {
if (!member.isInstanceMember) {
- compiler.withCurrentElement(member, () {
+ reporter.withCurrentElement(member, () {
for (MetadataAnnotation metadata in member.implementation.metadata) {
metadata.ensureResolved(resolution);
}
@@ -670,7 +672,7 @@ class ResolverTask extends CompilerTask {
int illegalFlags = modifiers.flags & ~Modifiers.FLAG_ABSTRACT;
if (illegalFlags != 0) {
Modifiers illegalModifiers = new Modifiers.withFlags(null, illegalFlags);
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
modifiers,
MessageKind.ILLEGAL_MIXIN_APPLICATION_MODIFIERS,
{'modifiers': illegalModifiers});
@@ -684,7 +686,7 @@ class ResolverTask extends CompilerTask {
// Check that we're not trying to use Object as a mixin.
if (mixin.superclass == null) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
mixinApplication,
MessageKind.ILLEGAL_MIXIN_OBJECT);
// Avoid reporting additional errors for the Object class.
@@ -698,7 +700,7 @@ class ResolverTask extends CompilerTask {
// Check that the mixed in class has Object as its superclass.
if (!mixin.superclass.isObject) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
mixin, MessageKind.ILLEGAL_MIXIN_SUPERCLASS);
}
@@ -706,7 +708,7 @@ class ResolverTask extends CompilerTask {
// make sure we aren't mixing in methods that use 'super'.
mixin.forEachLocalMember((AstElement member) {
if (member.isGenerativeConstructor && !member.isSynthesized) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
member, MessageKind.ILLEGAL_MIXIN_CONSTRUCTOR);
} else {
// Get the resolution tree and check that the resolved member
@@ -732,18 +734,18 @@ class ResolverTask extends CompilerTask {
if (resolutionTree == null) return;
Iterable<Node> superUses = resolutionTree.superUses;
if (superUses.isEmpty) return;
- DiagnosticMessage error = compiler.createMessage(
+ DiagnosticMessage error = reporter.createMessage(
mixinApplication,
MessageKind.ILLEGAL_MIXIN_WITH_SUPER,
{'className': mixin.name});
// Show the user the problematic uses of 'super' in the mixin.
List<DiagnosticMessage> infos = <DiagnosticMessage>[];
for (Node use in superUses) {
- infos.add(compiler.createMessage(
+ infos.add(reporter.createMessage(
use,
MessageKind.ILLEGAL_MIXIN_SUPER_USE));
}
- compiler.reportError(error, infos);
+ reporter.reportError(error, infos);
}
void checkClassMembers(ClassElement cls) {
@@ -754,13 +756,13 @@ class ResolverTask extends CompilerTask {
List<Element> constConstructors = <Element>[];
List<Element> nonFinalInstanceFields = <Element>[];
cls.forEachMember((holder, member) {
- compiler.withCurrentElement(member, () {
+ reporter.withCurrentElement(member, () {
// Perform various checks as side effect of "computing" the type.
member.computeType(resolution);
// Check modifiers.
if (member.isFunction && member.modifiers.isFinal) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
member, MessageKind.ILLEGAL_FINAL_METHOD_MODIFIER);
}
if (member.isConstructor) {
@@ -770,7 +772,7 @@ class ResolverTask extends CompilerTask {
if (mismatchedFlagsBits != 0) {
final mismatchedFlags =
new Modifiers.withFlags(null, mismatchedFlagsBits);
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
member,
MessageKind.ILLEGAL_CONSTRUCTOR_MODIFIERS,
{'modifiers': mismatchedFlags});
@@ -781,7 +783,7 @@ class ResolverTask extends CompilerTask {
}
if (member.isField) {
if (member.modifiers.isConst && !member.modifiers.isStatic) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
member, MessageKind.ILLEGAL_CONST_FIELD_MODIFIER);
}
if (!member.modifiers.isStatic && !member.modifiers.isFinal) {
@@ -795,24 +797,24 @@ class ResolverTask extends CompilerTask {
if (!constConstructors.isEmpty && !nonFinalInstanceFields.isEmpty) {
Spannable span = constConstructors.length > 1
? cls : constConstructors[0];
- DiagnosticMessage error = compiler.createMessage(
+ DiagnosticMessage error = reporter.createMessage(
span,
MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS,
{'className': cls.name});
List<DiagnosticMessage> infos = <DiagnosticMessage>[];
if (constConstructors.length > 1) {
for (Element constructor in constConstructors) {
- infos.add(compiler.createMessage(
+ infos.add(reporter.createMessage(
constructor,
MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR));
}
}
for (Element field in nonFinalInstanceFields) {
- infos.add(compiler.createMessage(
+ infos.add(reporter.createMessage(
field,
MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD));
}
- compiler.reportError(error, infos);
+ reporter.reportError(error, infos);
}
}
@@ -826,11 +828,11 @@ class ResolverTask extends CompilerTask {
ClassElement classElement = member.enclosingClass;
Element lookupElement = classElement.lookupLocalMember(member.name);
if (lookupElement == null) {
- compiler.internalError(member,
+ reporter.internalError(member,
"No abstract field for accessor");
} else if (!identical(lookupElement.kind, ElementKind.ABSTRACT_FIELD)) {
if (lookupElement.isErroneous || lookupElement.isAmbiguous) return;
- compiler.internalError(member,
+ reporter.internalError(member,
"Inaccessible abstract field for accessor");
}
AbstractFieldElement field = lookupElement;
@@ -844,11 +846,11 @@ class ResolverTask extends CompilerTask {
if (!identical(getterFlags, setterFlags)) {
final mismatchedFlags =
new Modifiers.withFlags(null, getterFlags ^ setterFlags);
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
field.getter,
MessageKind.GETTER_MISMATCH,
{'modifiers': mismatchedFlags});
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
field.setter,
MessageKind.SETTER_MISMATCH,
{'modifiers': mismatchedFlags});
@@ -884,7 +886,7 @@ class ResolverTask extends CompilerTask {
messageKind = MessageKind.TERNARY_OPERATOR_BAD_ARITY;
requiredParameterCount = 2;
} else {
- compiler.internalError(function,
+ reporter.internalError(function,
'Unexpected user defined operator $value');
}
checkArity(function, requiredParameterCount, messageKind, isMinus);
@@ -896,7 +898,7 @@ class ResolverTask extends CompilerTask {
Element hashCodeImplementation =
cls.lookupLocalMember('hashCode');
if (hashCodeImplementation != null) return;
- compiler.reportHintMessage(
+ reporter.reportHintMessage(
operatorEquals, MessageKind.OVERRIDE_EQUALS_NOT_HASH_CODE,
{'class': cls.name});
}
@@ -937,19 +939,19 @@ class ResolverTask extends CompilerTask {
errorNode = node.parameters.nodes.skip(requiredParameterCount).head;
}
}
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
errorNode, messageKind, {'operatorName': function.name});
}
if (signature.optionalParameterCount != 0) {
Node errorNode =
node.parameters.nodes.skip(signature.requiredParameterCount).head;
if (signature.optionalParametersAreNamed) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
errorNode,
MessageKind.OPERATOR_NAMED_PARAMETERS,
{'operatorName': function.name});
} else {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
errorNode,
MessageKind.OPERATOR_OPTIONAL_PARAMETERS,
{'operatorName': function.name});
@@ -961,14 +963,14 @@ class ResolverTask extends CompilerTask {
MessageKind errorMessage,
Element contextElement,
MessageKind contextMessage) {
- compiler.reportError(
- compiler.createMessage(
+ reporter.reportError(
+ reporter.createMessage(
errorneousElement,
errorMessage,
{'memberName': contextElement.name,
'className': contextElement.enclosingClass.name}),
<DiagnosticMessage>[
- compiler.createMessage(contextElement, contextMessage),
+ reporter.createMessage(contextElement, contextMessage),
]);
}
@@ -981,7 +983,7 @@ class ResolverTask extends CompilerTask {
defaultValuesError = MessageKind.REDIRECTING_FACTORY_WITH_DEFAULT;
}
}
- return compiler.withCurrentElement(element, () {
+ return reporter.withCurrentElement(element, () {
FunctionExpression node = element.parseNode(parsing);
return measure(() => SignatureResolver.analyze(
compiler, node.parameters, node.returnType, element,
@@ -997,7 +999,7 @@ class ResolverTask extends CompilerTask {
return _resolveTypeDeclaration(element, () {
ResolutionRegistry registry = new ResolutionRegistry(
compiler, _ensureTreeElements(element));
- return compiler.withCurrentElement(element, () {
+ return reporter.withCurrentElement(element, () {
return measure(() {
assert(element.resolutionState == STATE_NOT_STARTED);
element.resolutionState = STATE_STARTED;
@@ -1013,7 +1015,7 @@ class ResolverTask extends CompilerTask {
}
void resolveMetadataAnnotation(MetadataAnnotationX annotation) {
- compiler.withCurrentElement(annotation.annotatedElement, () => measure(() {
+ reporter.withCurrentElement(annotation.annotatedElement, () => measure(() {
assert(annotation.resolutionState == STATE_NOT_STARTED);
annotation.resolutionState = STATE_STARTED;
« no previous file with comments | « pkg/compiler/lib/src/resolution/members.dart ('k') | pkg/compiler/lib/src/resolution/resolution_common.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698