From a671328de30eb372d2bb6bc28aea47486b82ad0d Mon Sep 17 00:00:00 2001 From: Johnni Winther Date: Wed, 20 Dec 2017 14:52:59 +0000 Subject: [PATCH] Merge instance and static member usage maps. Change-Id: I2c4802b946af162be2257a10502b2c8f823786d1 Reviewed-on: https://dart-review.googlesource.com/30448 Reviewed-by: Sigmund Cherem --- .../universe/resolution_world_builder.dart | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/pkg/compiler/lib/src/universe/resolution_world_builder.dart b/pkg/compiler/lib/src/universe/resolution_world_builder.dart index a8501fbba3b..c08d2464b00 100644 --- a/pkg/compiler/lib/src/universe/resolution_world_builder.dart +++ b/pkg/compiler/lib/src/universe/resolution_world_builder.dart @@ -296,17 +296,28 @@ abstract class ResolutionWorldBuilderBase Map get classUsageForTesting => _processedClasses; /// Map of registered usage of static members of live classes. - final Map _staticMemberUsage = {}; - - Map get staticMemberUsageForTesting => - _staticMemberUsage; - - /// Map of registered usage of instance members of live classes. - final Map _instanceMemberUsage = + final Map _memberUsage = {}; - Map get instanceMemberUsageForTesting => - _instanceMemberUsage; + Map get staticMemberUsageForTesting { + Map map = {}; + _memberUsage.forEach((MemberEntity member, _MemberUsage usage) { + if (!member.isInstanceMember) { + map[member] = usage; + } + }); + return map; + } + + Map get instanceMemberUsageForTesting { + Map map = {}; + _memberUsage.forEach((MemberEntity member, _MemberUsage usage) { + if (member.isInstanceMember) { + map[member] = usage; + } + }); + return map; + } /// Map containing instance members of live classes that are not yet live /// themselves. @@ -616,7 +627,7 @@ abstract class ResolutionWorldBuilderBase MemberEntity element = staticUse.element; EnumSet useSet = new EnumSet(); - _MemberUsage usage = _staticMemberUsage.putIfAbsent(element, () { + _MemberUsage usage = _memberUsage.putIfAbsent(element, () { _MemberUsage usage = new _MemberUsage(element); useSet.addAll(usage.appliedUse); return usage; @@ -749,7 +760,7 @@ abstract class ResolutionWorldBuilderBase // its metadata parsed and analyzed. // Note: this assumes that there are no non-native fields on native // classes, which may not be the case when a native class is subclassed. - _instanceMemberUsage.putIfAbsent(member, () { + _memberUsage.putIfAbsent(member, () { bool isNative = _nativeBasicData.isNativeClass(cls); _MemberUsage usage = new _MemberUsage(member, isNative: isNative); EnumSet useSet = new EnumSet(); @@ -816,12 +827,7 @@ abstract class ResolutionWorldBuilderBase @override bool isMemberUsed(MemberEntity member) { - if (member.isInstanceMember) { - _MemberUsage usage = _instanceMemberUsage[member]; - if (usage != null && usage.hasUse) return true; - } - _MemberUsage usage = _staticMemberUsage[member]; - return usage != null && usage.hasUse; + return _memberUsage[member]?.hasUse ?? false; } Map> populateHierarchyNodes() {