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

Side by Side Diff: pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart

Issue 2916863003: Implement library access restrictions and privacy. (Closed)
Patch Set: Created 3 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library fasta.fasta_accessors; 5 library fasta.fasta_accessors;
6 6
7 import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart' 7 import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart'
8 show KernelArguments; 8 show KernelArguments;
9 9
10 import 'package:front_end/src/fasta/kernel/utils.dart' show offsetForToken; 10 import 'package:front_end/src/fasta/kernel/utils.dart' show offsetForToken;
(...skipping 19 matching lines...) Expand all
30 PropertyAccessor, 30 PropertyAccessor,
31 ReadOnlyAccessor, 31 ReadOnlyAccessor,
32 StaticAccessor, 32 StaticAccessor,
33 SuperIndexAccessor, 33 SuperIndexAccessor,
34 SuperPropertyAccessor, 34 SuperPropertyAccessor,
35 ThisIndexAccessor, 35 ThisIndexAccessor,
36 ThisPropertyAccessor, 36 ThisPropertyAccessor,
37 VariableAccessor; 37 VariableAccessor;
38 38
39 import 'kernel_builder.dart' 39 import 'kernel_builder.dart'
40 show Builder, KernelClassBuilder, PrefixBuilder, TypeDeclarationBuilder; 40 show
41 Builder,
42 KernelClassBuilder,
43 LibraryBuilder,
44 PrefixBuilder,
45 TypeDeclarationBuilder;
41 46
42 import '../names.dart' show callName, lengthName; 47 import '../names.dart' show callName, lengthName;
43 48
44 abstract class BuilderHelper { 49 abstract class BuilderHelper {
50 LibraryBuilder get library;
51
45 Uri get uri; 52 Uri get uri;
46 53
47 TypePromoter get typePromoter; 54 TypePromoter get typePromoter;
48 55
49 int get functionNestingLevel; 56 int get functionNestingLevel;
50 57
51 bool get constantExpressionRequired; 58 bool get constantExpressionRequired;
52 59
53 Constructor lookupConstructor(Name name, {bool isSuper}); 60 Constructor lookupConstructor(Name name, {bool isSuper});
54 61
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 return receiver.buildPropertyAccess(this, isNullAware); 447 return receiver.buildPropertyAccess(this, isNullAware);
441 } 448 }
442 if (receiver is PrefixBuilder) { 449 if (receiver is PrefixBuilder) {
443 PrefixBuilder prefix = receiver; 450 PrefixBuilder prefix = receiver;
444 receiver = helper.scopeLookup(prefix.exports, name.name, token, 451 receiver = helper.scopeLookup(prefix.exports, name.name, token,
445 isQualified: true, prefix: prefix); 452 isQualified: true, prefix: prefix);
446 return helper.finishSend(receiver, arguments, offsetForToken(token)); 453 return helper.finishSend(receiver, arguments, offsetForToken(token));
447 } 454 }
448 Expression result; 455 Expression result;
449 if (receiver is KernelClassBuilder) { 456 if (receiver is KernelClassBuilder) {
450 Builder builder = 457 Builder builder = receiver.findStaticBuilder(
451 receiver.findStaticBuilder(name.name, offsetForToken(token), uri); 458 name.name, offsetForToken(token), uri, helper.library);
452 if (builder == null || builder is AccessErrorBuilder) { 459 if (builder == null || builder is AccessErrorBuilder) {
453 return buildThrowNoSuchMethodError(arguments); 460 return buildThrowNoSuchMethodError(arguments);
454 } 461 }
455 if (builder.hasProblem) { 462 if (builder.hasProblem) {
456 result = helper.buildProblemExpression(builder, offsetForToken(token)); 463 result = helper.buildProblemExpression(builder, offsetForToken(token));
457 } else { 464 } else {
458 Member target = builder.target; 465 Member target = builder.target;
459 if (target != null) { 466 if (target != null) {
460 if (target is Field) { 467 if (target is Field) {
461 result = helper.buildMethodInvocation( 468 result = helper.buildMethodInvocation(
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 } 539 }
533 if (receiver is FastaAccessor) { 540 if (receiver is FastaAccessor) {
534 return receiver.buildPropertyAccess(this, isNullAware); 541 return receiver.buildPropertyAccess(this, isNullAware);
535 } 542 }
536 if (receiver is PrefixBuilder) { 543 if (receiver is PrefixBuilder) {
537 PrefixBuilder prefix = receiver; 544 PrefixBuilder prefix = receiver;
538 return helper.scopeLookup(prefix.exports, name.name, token, 545 return helper.scopeLookup(prefix.exports, name.name, token,
539 isQualified: true, prefix: prefix); 546 isQualified: true, prefix: prefix);
540 } 547 }
541 if (receiver is KernelClassBuilder) { 548 if (receiver is KernelClassBuilder) {
542 Builder builder = 549 Builder builder = receiver.findStaticBuilder(
543 receiver.findStaticBuilder(name.name, offsetForToken(token), uri); 550 name.name, offsetForToken(token), uri, helper.library);
544 if (builder == null) { 551 if (builder == null) {
545 // If we find a setter, [builder] is an [AccessErrorBuilder], not null. 552 // If we find a setter, [builder] is an [AccessErrorBuilder], not null.
546 return buildThrowNoSuchMethodError(new Arguments.empty(), 553 return buildThrowNoSuchMethodError(new Arguments.empty(),
547 isGetter: true); 554 isGetter: true);
548 } 555 }
549 Builder setter; 556 Builder setter;
550 if (builder.isSetter) { 557 if (builder.isSetter) {
551 setter = builder; 558 setter = builder;
552 } else if (builder.isGetter) { 559 } else if (builder.isGetter) {
553 setter = receiver.findStaticBuilder( 560 setter = receiver.findStaticBuilder(
554 name.name, offsetForToken(token), uri, 561 name.name, offsetForToken(token), uri, helper.library,
555 isSetter: true); 562 isSetter: true);
556 } else if (builder.isField && !builder.isFinal) { 563 } else if (builder.isField && !builder.isFinal) {
557 setter = builder; 564 setter = builder;
558 } 565 }
559 return new StaticAccessor.fromBuilder(helper, builder, token, setter); 566 return new StaticAccessor.fromBuilder(helper, builder, token, setter);
560 } 567 }
561 return PropertyAccessor.make( 568 return PropertyAccessor.make(
562 helper, token, helper.toValue(receiver), name, null, null, isNullAware); 569 helper, token, helper.toValue(receiver), name, null, null, isNullAware);
563 } 570 }
564 571
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 {bool isGetter: false, bool isSetter: false, int offset}) { 890 {bool isGetter: false, bool isSetter: false, int offset}) {
884 return helper.throwNoSuchMethodError( 891 return helper.throwNoSuchMethodError(
885 plainNameForRead, arguments, offset ?? offsetForToken(this.token), 892 plainNameForRead, arguments, offset ?? offsetForToken(this.token),
886 isGetter: isGetter, isSetter: isSetter); 893 isGetter: isGetter, isSetter: isSetter);
887 } 894 }
888 } 895 }
889 896
890 bool isFieldOrGetter(Member member) { 897 bool isFieldOrGetter(Member member) {
891 return member is Field || (member is Procedure && member.isGetter); 898 return member is Field || (member is Procedure && member.isGetter);
892 } 899 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698