| OLD | NEW |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 import '../closure.dart'; | 5 import '../closure.dart'; |
| 6 import '../common.dart'; | 6 import '../common.dart'; |
| 7 import '../common_elements.dart'; | 7 import '../common_elements.dart'; |
| 8 import '../compiler.dart'; | 8 import '../compiler.dart'; |
| 9 import '../constants/values.dart'; | 9 import '../constants/values.dart'; |
| 10 import '../elements/elements.dart'; | 10 import '../elements/elements.dart'; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 /// Should [name] be retained for reflection? | 71 /// Should [name] be retained for reflection? |
| 72 bool shouldRetainName(String name); | 72 bool shouldRetainName(String name); |
| 73 | 73 |
| 74 /// Returns `true` if the class [element] is covered by a `MirrorsUsed` | 74 /// Returns `true` if the class [element] is covered by a `MirrorsUsed` |
| 75 /// annotation. | 75 /// annotation. |
| 76 /// | 76 /// |
| 77 /// Note that it might still be ok to tree shake the element away if no | 77 /// Note that it might still be ok to tree shake the element away if no |
| 78 /// reflection is used in the program (and thus [isTreeShakingDisabled] is | 78 /// reflection is used in the program (and thus [isTreeShakingDisabled] is |
| 79 /// still false). Therefore _do not_ use this predicate to decide inclusion | 79 /// still false). Therefore _do not_ use this predicate to decide inclusion |
| 80 /// in the tree, use [requiredByMirrorSystem] instead. | 80 /// in the tree, use [requiredByMirrorSystem] instead. |
| 81 bool isClassReferencedFromMirrorSystem(ClassEntity element); | 81 bool isClassReferencedFromMirrorSystem(covariant ClassEntity element); |
| 82 | 82 |
| 83 /// Returns `true` if the member [element] is covered by a `MirrorsUsed` | 83 /// Returns `true` if the member [element] is covered by a `MirrorsUsed` |
| 84 /// annotation. | 84 /// annotation. |
| 85 /// | 85 /// |
| 86 /// Note that it might still be ok to tree shake the element away if no | 86 /// Note that it might still be ok to tree shake the element away if no |
| 87 /// reflection is used in the program (and thus [isTreeShakingDisabled] is | 87 /// reflection is used in the program (and thus [isTreeShakingDisabled] is |
| 88 /// still false). Therefore _do not_ use this predicate to decide inclusion | 88 /// still false). Therefore _do not_ use this predicate to decide inclusion |
| 89 /// in the tree, use [requiredByMirrorSystem] instead. | 89 /// in the tree, use [requiredByMirrorSystem] instead. |
| 90 bool isMemberReferencedFromMirrorSystem(MemberEntity element); | 90 bool isMemberReferencedFromMirrorSystem(covariant MemberEntity element); |
| 91 | 91 |
| 92 /// Returns `true` if the library [element] is covered by a `MirrorsUsed` | 92 /// Returns `true` if the library [element] is covered by a `MirrorsUsed` |
| 93 /// annotation. | 93 /// annotation. |
| 94 bool isLibraryReferencedFromMirrorSystem(LibraryEntity element); | 94 bool isLibraryReferencedFromMirrorSystem(covariant LibraryEntity element); |
| 95 | 95 |
| 96 /// Returns `true` if the typedef [element] needs reflection information at | 96 /// Returns `true` if the typedef [element] needs reflection information at |
| 97 /// runtime. | 97 /// runtime. |
| 98 /// | 98 /// |
| 99 /// This property is used to tag emitted elements with a marker which is | 99 /// This property is used to tag emitted elements with a marker which is |
| 100 /// checked by the runtime system to throw an exception if an element is | 100 /// checked by the runtime system to throw an exception if an element is |
| 101 /// accessed (invoked, get, set) that is not accessible for the reflective | 101 /// accessed (invoked, get, set) that is not accessible for the reflective |
| 102 /// system. | 102 /// system. |
| 103 bool isTypedefAccessibleByReflection(TypedefElement element); | 103 bool isTypedefAccessibleByReflection(TypedefElement element); |
| 104 | 104 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 117 /// This property is used to tag emitted elements with a marker which is | 117 /// This property is used to tag emitted elements with a marker which is |
| 118 /// checked by the runtime system to throw an exception if an element is | 118 /// checked by the runtime system to throw an exception if an element is |
| 119 /// accessed (invoked, get, set) that is not accessible for the reflective | 119 /// accessed (invoked, get, set) that is not accessible for the reflective |
| 120 /// system. | 120 /// system. |
| 121 bool isMemberAccessibleByReflection(MemberEntity element); | 121 bool isMemberAccessibleByReflection(MemberEntity element); |
| 122 | 122 |
| 123 // TODO(johnniwinther): Remove this. | 123 // TODO(johnniwinther): Remove this. |
| 124 @deprecated | 124 @deprecated |
| 125 bool isAccessibleByReflection(Element element); | 125 bool isAccessibleByReflection(Element element); |
| 126 | 126 |
| 127 bool retainMetadataOfLibrary(LibraryEntity element, | 127 bool retainMetadataOfLibrary(covariant LibraryEntity element, |
| 128 {bool addForEmission: true}); | 128 {bool addForEmission: true}); |
| 129 bool retainMetadataOfTypedef(TypedefElement element); | 129 bool retainMetadataOfTypedef(TypedefElement element); |
| 130 bool retainMetadataOfClass(ClassEntity element); | 130 bool retainMetadataOfClass(covariant ClassEntity element); |
| 131 bool retainMetadataOfMember(MemberEntity element); | 131 bool retainMetadataOfMember(covariant MemberEntity element); |
| 132 bool retainMetadataOfParameter(ParameterElement element); | 132 bool retainMetadataOfParameter(ParameterElement element); |
| 133 | 133 |
| 134 bool invokedReflectively(Element element); | 134 bool invokedReflectively(Element element); |
| 135 | 135 |
| 136 /// Returns true if this element has to be enqueued due to | 136 /// Returns true if this element has to be enqueued due to |
| 137 /// mirror usage. Might be a subset of [referencedFromMirrorSystem] if | 137 /// mirror usage. Might be a subset of [referencedFromMirrorSystem] if |
| 138 /// normal tree shaking is still active ([isTreeShakingDisabled] is false). | 138 /// normal tree shaking is still active ([isTreeShakingDisabled] is false). |
| 139 bool requiredByMirrorSystem(Element element); | 139 bool requiredByMirrorSystem(Element element); |
| 140 } | 140 } |
| 141 | 141 |
| 142 abstract class MirrorsDataBuilder { | 142 abstract class MirrorsDataBuilder { |
| 143 void registerUsedMember(MemberElement member); | 143 void registerUsedMember(MemberElement member); |
| 144 | 144 |
| 145 /// Called by [MirrorUsageAnalyzerTask] after it has merged all @MirrorsUsed | 145 /// Called by [MirrorUsageAnalyzerTask] after it has merged all @MirrorsUsed |
| 146 /// annotations. The arguments corresponds to the unions of the corresponding | 146 /// annotations. The arguments corresponds to the unions of the corresponding |
| 147 /// fields of the annotations. | 147 /// fields of the annotations. |
| 148 void registerMirrorUsage( | 148 void registerMirrorUsage( |
| 149 Set<String> symbols, Set<Element> targets, Set<Element> metaTargets); | 149 Set<String> symbols, Set<Element> targets, Set<Element> metaTargets); |
| 150 | 150 |
| 151 /// Called when `const Symbol(name)` is seen. | 151 /// Called when `const Symbol(name)` is seen. |
| 152 void registerConstSymbol(String name); | 152 void registerConstSymbol(String name); |
| 153 | 153 |
| 154 void maybeMarkClosureAsNeededForReflection( | 154 void maybeMarkClosureAsNeededForReflection( |
| 155 ClosureClassElement globalizedElement, | 155 ClosureClassElement globalizedElement, |
| 156 FunctionElement callFunction, | 156 MethodElement callFunction, |
| 157 FunctionElement function); | 157 LocalFunctionElement function); |
| 158 | 158 |
| 159 void computeMembersNeededForReflection( | 159 void computeMembersNeededForReflection( |
| 160 ResolutionWorldBuilder worldBuilder, ClosedWorld closedWorld); | 160 ResolutionWorldBuilder worldBuilder, ClosedWorld closedWorld); |
| 161 } | 161 } |
| 162 | 162 |
| 163 class MirrorsDataImpl implements MirrorsData, MirrorsDataBuilder { | 163 class MirrorsDataImpl implements MirrorsData, MirrorsDataBuilder { |
| 164 /// True if a call to preserveMetadataMarker has been seen. This means that | 164 /// True if a call to preserveMetadataMarker has been seen. This means that |
| 165 /// metadata must be retained for dart:mirrors to work correctly. | 165 /// metadata must be retained for dart:mirrors to work correctly. |
| 166 bool mustRetainMetadata = false; | 166 bool mustRetainMetadata = false; |
| 167 | 167 |
| (...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 704 } | 704 } |
| 705 | 705 |
| 706 /// Called when `const Symbol(name)` is seen. | 706 /// Called when `const Symbol(name)` is seen. |
| 707 void registerConstSymbol(String name) { | 707 void registerConstSymbol(String name) { |
| 708 symbolsUsed.add(name); | 708 symbolsUsed.add(name); |
| 709 if (name.endsWith('=')) { | 709 if (name.endsWith('=')) { |
| 710 symbolsUsed.add(name.substring(0, name.length - 1)); | 710 symbolsUsed.add(name.substring(0, name.length - 1)); |
| 711 } | 711 } |
| 712 } | 712 } |
| 713 } | 713 } |
| OLD | NEW |