Minor refactoring in MembersCache

Inline methods, provide a sane public interface
This commit is contained in:
Alexander Udalov
2013-08-09 19:20:35 +04:00
parent a5ad63c8b6
commit 2328902c7f
2 changed files with 32 additions and 33 deletions
@@ -50,7 +50,8 @@ import java.util.Map;
} }
@NotNull @NotNull
private NamedMembers getOrCreateEmpty(@NotNull Name name) { private NamedMembers getOrCreateEmpty(@NotNull JavaNamedElement element) {
Name name = element.getName();
NamedMembers r = namedMembersMap.get(name); NamedMembers r = namedMembersMap.get(name);
if (r == null) { if (r == null) {
r = new NamedMembers(name); r = new NamedMembers(name);
@@ -60,14 +61,7 @@ import java.util.Map;
} }
private void addTask(@NotNull JavaNamedElement member, @NotNull RunOnce task) { private void addTask(@NotNull JavaNamedElement member, @NotNull RunOnce task) {
addTask(member.getName().asString(), task); memberProcessingTasks.put(member.getName(), task);
}
private void addTask(@Nullable String name, @NotNull RunOnce task) {
if (name == null) {
return;
}
memberProcessingTasks.put(Name.identifier(name), task);
} }
private void runTasksByName(Name name) { private void runTasksByName(Name name) {
@@ -87,22 +81,21 @@ import java.util.Map;
} }
@NotNull @NotNull
public static MembersCache buildMembersByNameCache( public static MembersCache buildForClass(@NotNull JavaClass javaClass, boolean staticMembers) {
@Nullable JavaClass javaClass,
@Nullable JavaPackage javaPackage,
boolean staticMembers
) {
MembersCache membersCache = new MembersCache(); MembersCache membersCache = new MembersCache();
if (javaClass != null) { membersCache.new ClassMemberProcessor(javaClass, staticMembers).process();
membersCache.new ClassMemberProcessor(javaClass, staticMembers).process(); membersCache.new ExtraPackageMembersProcessor(javaClass.getInnerClasses()).process();
Collection<JavaClass> innerClasses = javaClass.getInnerClasses();
membersCache.new ExtraPackageMembersProcessor(innerClasses).process(); return membersCache;
} }
else if (javaPackage != null) {
Collection<JavaClass> classes = DescriptorResolverUtils.filterDuplicateClasses(javaPackage.getClasses()); @NotNull
membersCache.new ExtraPackageMembersProcessor(classes).process(); public static MembersCache buildForPackage(@NotNull JavaPackage javaPackage) {
} MembersCache membersCache = new MembersCache();
Collection<JavaClass> classes = DescriptorResolverUtils.filterDuplicateClasses(javaPackage.getClasses());
membersCache.new ExtraPackageMembersProcessor(classes).process();
return membersCache; return membersCache;
} }
@@ -126,8 +119,7 @@ import java.util.Map;
} }
private void processSamInterface(@NotNull JavaClass javaClass) { private void processSamInterface(@NotNull JavaClass javaClass) {
NamedMembers namedMembers = getOrCreateEmpty(javaClass.getName()); getOrCreateEmpty(javaClass).setSamInterface(javaClass);
namedMembers.setSamInterface(javaClass);
} }
} }
@@ -165,7 +157,7 @@ import java.util.Map;
private void createEntriesForAllMethods() { private void createEntriesForAllMethods() {
for (JavaMethod method : javaClass.getAllMethods()) { for (JavaMethod method : javaClass.getAllMethods()) {
getOrCreateEmpty(method.getName()); getOrCreateEmpty(method);
} }
} }
@@ -225,7 +217,7 @@ import java.util.Map;
private void processField(@NotNull JavaField field) { private void processField(@NotNull JavaField field) {
// group must be created even for excluded field // group must be created even for excluded field
NamedMembers namedMembers = getOrCreateEmpty(field.getName()); NamedMembers namedMembers = getOrCreateEmpty(field);
if (includeMember(field)) { if (includeMember(field)) {
namedMembers.addField(field); namedMembers.addField(field);
@@ -234,15 +226,13 @@ import java.util.Map;
private void processOwnMethod(@NotNull JavaMethod ownMethod) { private void processOwnMethod(@NotNull JavaMethod ownMethod) {
if (includeMember(ownMethod)) { if (includeMember(ownMethod)) {
NamedMembers namedMembers = getOrCreateEmpty(ownMethod.getName()); getOrCreateEmpty(ownMethod).addMethod(ownMethod);
namedMembers.addMethod(ownMethod);
} }
} }
private void processNestedClass(@NotNull JavaClass nested) { private void processNestedClass(@NotNull JavaClass nested) {
if (SingleAbstractMethodUtils.isSamInterface(nested)) { if (SingleAbstractMethodUtils.isSamInterface(nested)) {
NamedMembers namedMembers = getOrCreateEmpty(nested.getName()); getOrCreateEmpty(nested).setSamInterface(nested);
namedMembers.setSamInterface(nested);
} }
} }
} }
@@ -31,6 +31,8 @@ import java.util.Collection;
private final JavaPackage javaPackage; private final JavaPackage javaPackage;
private final boolean staticMembers; private final boolean staticMembers;
private MembersCache membersCache;
private MembersProvider(@Nullable JavaClass javaClass, @Nullable JavaPackage javaPackage, boolean staticMembers) { private MembersProvider(@Nullable JavaClass javaClass, @Nullable JavaPackage javaPackage, boolean staticMembers) {
this.javaClass = javaClass; this.javaClass = javaClass;
this.javaPackage = javaPackage; this.javaPackage = javaPackage;
@@ -57,11 +59,18 @@ import java.util.Collection;
return getMembersCache().allMembers(); return getMembersCache().allMembers();
} }
private MembersCache membersCache;
@NotNull @NotNull
private MembersCache getMembersCache() { private MembersCache getMembersCache() {
if (membersCache == null) { if (membersCache == null) {
membersCache = MembersCache.buildMembersByNameCache(javaClass, javaPackage, staticMembers); if (javaClass != null) {
membersCache = MembersCache.buildForClass(javaClass, staticMembers);
}
else if (javaPackage != null) {
membersCache = MembersCache.buildForPackage(javaPackage);
}
else {
throw new IllegalStateException("MembersProvider should be created either for a class or for a package");
}
} }
return membersCache; return membersCache;
} }