Simplified code in NamespaceComparator.

This commit is contained in:
Evgeny Gerashchenko
2012-12-27 13:03:07 +04:00
parent c0ce15ddfb
commit c483a7f7cd
@@ -39,6 +39,7 @@ import org.junit.Assert;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -78,47 +79,21 @@ public class NamespaceComparator {
printer.print(isPrimaryConstructor && conf.checkPrimaryConstructors ? "/*primary*/ " : "", RENDERER.render(descriptor));
if (descriptor instanceof ClassOrNamespaceDescriptor) {
if (topLevel) {
printer.println();
printer.println();
}
else {
if (!topLevel) {
printer.printlnWithNoIndent(" {").pushIndent();
}
List<DeclarationDescriptor> subDescriptors = Lists.newArrayList();
else {
printer.println();
printer.println();
}
if (descriptor instanceof ClassDescriptor) {
ClassDescriptor klass = (ClassDescriptor) descriptor;
JetScope memberScope = klass.getDefaultType().getMemberScope();
subDescriptors.addAll(klass.getConstructors());
subDescriptors.addAll(memberScope.getAllDescriptors());
subDescriptors.addAll(memberScope.getObjectDescriptors());
ContainerUtil.addIfNotNull(subDescriptors, klass.getClassObjectDescriptor());
appendSubDescriptors(klass.getDefaultType().getMemberScope(), getConstructorsAndClassObject(klass), printer);
}
else if (descriptor instanceof NamespaceDescriptor) {
JetScope memberScope = ((NamespaceDescriptor) descriptor).getMemberScope();
subDescriptors.addAll(memberScope.getAllDescriptors());
subDescriptors.addAll(memberScope.getObjectDescriptors());
}
else {
throw new IllegalStateException("Should be class or namespace: " + descriptor.getClass());
}
Collections.sort(subDescriptors, MemberComparator.INSTANCE);
for (DeclarationDescriptor subDescriptor : subDescriptors) {
if (!conf.includeMethodsOfJavaObject && subDescriptor instanceof FunctionDescriptor
&& JAVA_OBJECT_METHOD_NAMES.contains(subDescriptor.getName().getName())) {
continue;
}
if (subDescriptor instanceof NamespaceDescriptor && !conf.recurseIntoPackage.apply(DescriptorUtils.getFQName(subDescriptor))) {
continue;
}
appendDeclarationRecursively(subDescriptor, printer, false);
appendSubDescriptors(((NamespaceDescriptor) descriptor).getMemberScope(),
Collections.<DeclarationDescriptor>emptyList(), printer);
}
if (!topLevel) {
@@ -130,6 +105,43 @@ public class NamespaceComparator {
}
}
@NotNull
private static List<DeclarationDescriptor> getConstructorsAndClassObject(@NotNull ClassDescriptor klass) {
List<DeclarationDescriptor> constructorsAndClassObject = Lists.newArrayList();
constructorsAndClassObject.addAll(klass.getConstructors());
ContainerUtil.addIfNotNull(constructorsAndClassObject, klass.getClassObjectDescriptor());
return constructorsAndClassObject;
}
private boolean shouldSkip(@NotNull DeclarationDescriptor subDescriptor) {
return subDescriptor.getContainingDeclaration() instanceof ClassDescriptor
&& subDescriptor instanceof FunctionDescriptor
&& JAVA_OBJECT_METHOD_NAMES.contains(subDescriptor.getName().getName())
&& !conf.includeMethodsOfJavaObject
||
subDescriptor instanceof NamespaceDescriptor && !conf.recurseIntoPackage.apply(DescriptorUtils.getFQName(subDescriptor));
}
private void appendSubDescriptors(
@NotNull JetScope memberScope,
@NotNull Collection<DeclarationDescriptor> extraSubDescriptors,
@NotNull Printer printer
) {
List<DeclarationDescriptor> subDescriptors = Lists.newArrayList();
subDescriptors.addAll(memberScope.getAllDescriptors());
subDescriptors.addAll(memberScope.getObjectDescriptors());
subDescriptors.addAll(extraSubDescriptors);
Collections.sort(subDescriptors, MemberComparator.INSTANCE);
for (DeclarationDescriptor subDescriptor : subDescriptors) {
if (!shouldSkip(subDescriptor)) {
appendDeclarationRecursively(subDescriptor, printer, false);
}
}
}
public static void compareNamespaceWithFile(
@NotNull NamespaceDescriptor actualNamespace,
@NotNull Configuration configuration,