Minor refactoring in MembersCache
Inline methods, provide a sane public interface
This commit is contained in:
+21
-31
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-2
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user