Renamed NamespaceComparator → RecursiveDescriptorComparator.

This commit is contained in:
Evgeny Gerashchenko
2013-10-09 19:51:46 +04:00
parent 1b28fb50b9
commit 62c542341a
10 changed files with 64 additions and 60 deletions
@@ -35,7 +35,7 @@ import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.storage.LockBasedStorageManager; import org.jetbrains.jet.storage.LockBasedStorageManager;
import org.jetbrains.jet.test.util.NamespaceComparator; import org.jetbrains.jet.test.util.RecursiveDescriptorComparator;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -69,7 +69,8 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
NamespaceDescriptor deserialized = serializeAndDeserialize(javaDescriptorResolver, testNamespace); NamespaceDescriptor deserialized = serializeAndDeserialize(javaDescriptorResolver, testNamespace);
NamespaceComparator.validateAndCompareNamespaces(testNamespace, deserialized, NamespaceComparator.RECURSIVE, null); RecursiveDescriptorComparator
.validateAndCompareDescriptors(testNamespace, deserialized, RecursiveDescriptorComparator.RECURSIVE, null);
} }
@NotNull @NotNull
@@ -37,7 +37,7 @@ import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.renderer.DescriptorRenderer; import org.jetbrains.jet.renderer.DescriptorRenderer;
import org.jetbrains.jet.renderer.DescriptorRendererBuilder; import org.jetbrains.jet.renderer.DescriptorRendererBuilder;
import org.jetbrains.jet.storage.LockBasedStorageManager; import org.jetbrains.jet.storage.LockBasedStorageManager;
import org.jetbrains.jet.test.util.NamespaceComparator; import org.jetbrains.jet.test.util.RecursiveDescriptorComparator;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
@@ -54,7 +54,7 @@ public class BuiltinsDeserializationTest extends KotlinTestWithEnvironment {
Collection<DeclarationDescriptor> allDescriptors = KotlinBuiltIns.getInstance().getBuiltInsScope().getAllDescriptors(); Collection<DeclarationDescriptor> allDescriptors = KotlinBuiltIns.getInstance().getBuiltInsScope().getAllDescriptors();
NamespaceDescriptorImpl actualNamespace = getDeserializedDescriptorsAsNamespace(allDescriptors); NamespaceDescriptorImpl actualNamespace = getDeserializedDescriptorsAsNamespace(allDescriptors);
NamespaceComparator.Configuration configuration = NamespaceComparator.RECURSIVE.withRenderer( RecursiveDescriptorComparator.Configuration configuration = RecursiveDescriptorComparator.RECURSIVE.withRenderer(
new DescriptorRendererBuilder() new DescriptorRendererBuilder()
.setWithDefinedIn(false) .setWithDefinedIn(false)
.setExcludedAnnotationClasses(Arrays.asList(new FqName(ExpectedLoadErrorsUtil.ANNOTATION_CLASS_NAME))) .setExcludedAnnotationClasses(Arrays.asList(new FqName(ExpectedLoadErrorsUtil.ANNOTATION_CLASS_NAME)))
@@ -64,7 +64,8 @@ public class BuiltinsDeserializationTest extends KotlinTestWithEnvironment {
.setPrettyFunctionTypes(false) .setPrettyFunctionTypes(false)
.build() .build()
); );
NamespaceComparator.validateAndCompareNamespaces(KotlinBuiltIns.getInstance().getBuiltInsPackage(), actualNamespace, configuration, null); RecursiveDescriptorComparator
.validateAndCompareDescriptors(KotlinBuiltIns.getInstance().getBuiltInsPackage(), actualNamespace, configuration, null);
} }
private static NamespaceDescriptorImpl getDeserializedDescriptorsAsNamespace(Collection<DeclarationDescriptor> allDescriptors) { private static NamespaceDescriptorImpl getDeserializedDescriptorsAsNamespace(Collection<DeclarationDescriptor> allDescriptors) {
@@ -27,13 +27,13 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.test.TestCaseWithTmpdir; import org.jetbrains.jet.test.TestCaseWithTmpdir;
import org.jetbrains.jet.test.util.NamespaceComparator; import org.jetbrains.jet.test.util.RecursiveDescriptorComparator;
import java.io.File; import java.io.File;
import static org.jetbrains.jet.jvm.compiler.LoadDescriptorUtil.TEST_PACKAGE_FQNAME; import static org.jetbrains.jet.jvm.compiler.LoadDescriptorUtil.TEST_PACKAGE_FQNAME;
import static org.jetbrains.jet.jvm.compiler.LoadDescriptorUtil.compileKotlinToDirAndGetAnalyzeExhaust; import static org.jetbrains.jet.jvm.compiler.LoadDescriptorUtil.compileKotlinToDirAndGetAnalyzeExhaust;
import static org.jetbrains.jet.test.util.NamespaceComparator.validateAndCompareNamespaces; import static org.jetbrains.jet.test.util.RecursiveDescriptorComparator.validateAndCompareDescriptors;
/** /**
* Compile Kotlin and then parse model from .class files. * Compile Kotlin and then parse model from .class files.
@@ -71,11 +71,11 @@ public abstract class AbstractLoadCompiledKotlinTest extends TestCaseWithTmpdir
} }
} }
validateAndCompareNamespaces(namespaceFromSource, namespaceFromClass, validateAndCompareDescriptors(namespaceFromSource, namespaceFromClass,
NamespaceComparator.DONT_INCLUDE_METHODS_OF_OBJECT RecursiveDescriptorComparator.DONT_INCLUDE_METHODS_OF_OBJECT
.checkPrimaryConstructors(true) .checkPrimaryConstructors(true)
.checkPropertyAccessors(includeAccessors), .checkPropertyAccessors(includeAccessors),
txtFile); txtFile);
} }
private static void checkUsageOfDeserializedScope(@NotNull NamespaceDescriptor namespaceFromClass) { private static void checkUsageOfDeserializedScope(@NotNull NamespaceDescriptor namespaceFromClass) {
@@ -54,7 +54,7 @@ import java.util.Map;
import static org.jetbrains.jet.jvm.compiler.LoadDescriptorUtil.*; import static org.jetbrains.jet.jvm.compiler.LoadDescriptorUtil.*;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES; import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
import static org.jetbrains.jet.test.util.DescriptorValidator.ValidationVisitor.ALLOW_ERROR_TYPES; import static org.jetbrains.jet.test.util.DescriptorValidator.ValidationVisitor.ALLOW_ERROR_TYPES;
import static org.jetbrains.jet.test.util.NamespaceComparator.*; import static org.jetbrains.jet.test.util.RecursiveDescriptorComparator.*;
/* /*
The generated test compares namespace descriptors loaded from kotlin sources and read from compiled java. The generated test compares namespace descriptors loaded from kotlin sources and read from compiled java.
@@ -202,7 +202,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
checkForLoadErrorsAndCompare(javaNamespace, bindingContext, new Runnable() { checkForLoadErrorsAndCompare(javaNamespace, bindingContext, new Runnable() {
@Override @Override
public void run() { public void run() {
validateAndCompareNamespaces(kotlinNamespace, javaNamespace, DONT_INCLUDE_METHODS_OF_OBJECT, txtFile); validateAndCompareDescriptors(kotlinNamespace, javaNamespace, DONT_INCLUDE_METHODS_OF_OBJECT, txtFile);
} }
}); });
} }
@@ -216,7 +216,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
checkForLoadErrorsAndCompare(javaNamespace, bindingContext, new Runnable() { checkForLoadErrorsAndCompare(javaNamespace, bindingContext, new Runnable() {
@Override @Override
public void run() { public void run() {
validateAndCompareNamespaceWithFile(javaNamespace, configuration, txtFile); validateAndCompareDescriptorWithFile(javaNamespace, configuration, txtFile);
} }
}); });
} }
@@ -33,7 +33,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.test.TestCaseWithTmpdir; import org.jetbrains.jet.test.TestCaseWithTmpdir;
import org.jetbrains.jet.test.util.DescriptorValidator; import org.jetbrains.jet.test.util.DescriptorValidator;
import org.jetbrains.jet.test.util.NamespaceComparator; import org.jetbrains.jet.test.util.RecursiveDescriptorComparator;
import org.jetbrains.jet.utils.ExceptionUtils; import org.jetbrains.jet.utils.ExceptionUtils;
import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
@@ -45,8 +45,8 @@ import java.util.jar.JarEntry;
import java.util.jar.JarFile; import java.util.jar.JarFile;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
import static org.jetbrains.jet.test.util.RecursiveDescriptorComparator.validateAndCompareDescriptorWithFile;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isObject; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isObject;
import static org.jetbrains.jet.test.util.NamespaceComparator.validateAndCompareNamespaceWithFile;
public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir { public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir {
public static final String TEST_DATA_PATH = "compiler/testData/compileKotlinAgainstCustomBinaries/"; public static final String TEST_DATA_PATH = "compiler/testData/compileKotlinAgainstCustomBinaries/";
@@ -66,10 +66,11 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir {
NamespaceDescriptor namespace = analyzeFileToNamespace(ktFile, extraClassPath); NamespaceDescriptor namespace = analyzeFileToNamespace(ktFile, extraClassPath);
NamespaceComparator.Configuration comparator = NamespaceComparator.DONT_INCLUDE_METHODS_OF_OBJECT.withValidationStrategy( RecursiveDescriptorComparator.Configuration comparator =
DescriptorValidator.ValidationVisitor.ALLOW_ERROR_TYPES); RecursiveDescriptorComparator.DONT_INCLUDE_METHODS_OF_OBJECT.withValidationStrategy(
DescriptorValidator.ValidationVisitor.ALLOW_ERROR_TYPES);
File txtFile = new File(getTestDataDirectory(), FileUtil.getNameWithoutExtension(ktFile) + ".txt"); File txtFile = new File(getTestDataDirectory(), FileUtil.getNameWithoutExtension(ktFile) + ".txt");
validateAndCompareNamespaceWithFile(namespace, comparator, txtFile); validateAndCompareDescriptorWithFile(namespace, comparator, txtFile);
} }
@NotNull @NotNull
@@ -31,8 +31,8 @@ import java.io.File;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import static org.jetbrains.jet.test.util.NamespaceComparator.RECURSIVE; import static org.jetbrains.jet.test.util.RecursiveDescriptorComparator.RECURSIVE;
import static org.jetbrains.jet.test.util.NamespaceComparator.validateAndCompareNamespaces; import static org.jetbrains.jet.test.util.RecursiveDescriptorComparator.validateAndCompareDescriptors;
public abstract class AbstractLazyResolveDiagnosticsTest extends AbstractJetDiagnosticsTest { public abstract class AbstractLazyResolveDiagnosticsTest extends AbstractJetDiagnosticsTest {
@@ -54,7 +54,7 @@ public abstract class AbstractLazyResolveDiagnosticsTest extends AbstractJetDiag
// Only recurse into those namespaces mentioned in the files // Only recurse into those namespaces mentioned in the files
// Otherwise we'll be examining the whole JDK // Otherwise we'll be examining the whole JDK
final Set<Name> names = LazyResolveTestUtil.getTopLevelPackagesFromFileList(jetFiles); final Set<Name> names = LazyResolveTestUtil.getTopLevelPackagesFromFileList(jetFiles);
validateAndCompareNamespaces( validateAndCompareDescriptors(
expected, actual, expected, actual,
RECURSIVE.filterRecursion(new Predicate<FqNameUnsafe>() { RECURSIVE.filterRecursion(new Predicate<FqNameUnsafe>() {
@Override @Override
@@ -28,7 +28,7 @@ import org.jetbrains.jet.lang.psi.JetPsiFactory;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.test.util.NamespaceComparator; import org.jetbrains.jet.test.util.RecursiveDescriptorComparator;
import org.junit.Assert; import org.junit.Assert;
import java.io.File; import java.io.File;
@@ -81,8 +81,8 @@ public abstract class AbstractLazyResolveNamespaceComparingTest extends KotlinTe
File serializeResultsTo = new File(FileUtil.getNameWithoutExtension(testFileName) + ".txt"); File serializeResultsTo = new File(FileUtil.getNameWithoutExtension(testFileName) + ".txt");
NamespaceComparator.validateAndCompareNamespaces( RecursiveDescriptorComparator.validateAndCompareDescriptors(
expected, actual, NamespaceComparator.DONT_INCLUDE_METHODS_OF_OBJECT.filterRecursion( expected, actual, RecursiveDescriptorComparator.DONT_INCLUDE_METHODS_OF_OBJECT.filterRecursion(
new Predicate<FqNameUnsafe>() { new Predicate<FqNameUnsafe>() {
@Override @Override
public boolean apply(FqNameUnsafe fqName) { public boolean apply(FqNameUnsafe fqName) {
@@ -23,8 +23,8 @@ import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import java.io.File; import java.io.File;
import static org.jetbrains.jet.test.util.NamespaceComparator.RECURSIVE_ALL; import static org.jetbrains.jet.test.util.RecursiveDescriptorComparator.RECURSIVE_ALL;
import static org.jetbrains.jet.test.util.NamespaceComparator.validateAndCompareNamespaceWithFile; import static org.jetbrains.jet.test.util.RecursiveDescriptorComparator.validateAndCompareDescriptorWithFile;
public class LazyResolveBuiltinClassesTest extends KotlinTestWithEnvironment { public class LazyResolveBuiltinClassesTest extends KotlinTestWithEnvironment {
@Override @Override
@@ -34,6 +34,6 @@ public class LazyResolveBuiltinClassesTest extends KotlinTestWithEnvironment {
public void testBuiltIns() throws Exception { public void testBuiltIns() throws Exception {
NamespaceDescriptor builtInsPackage = KotlinBuiltIns.getInstance().getBuiltInsPackage(); NamespaceDescriptor builtInsPackage = KotlinBuiltIns.getInstance().getBuiltInsPackage();
validateAndCompareNamespaceWithFile(builtInsPackage, RECURSIVE_ALL, new File("compiler/testData/builtin-classes.txt")); validateAndCompareDescriptorWithFile(builtInsPackage, RECURSIVE_ALL, new File("compiler/testData/builtin-classes.txt"));
} }
} }
@@ -26,7 +26,7 @@ import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.test.util.NamespaceComparator; import org.jetbrains.jet.test.util.RecursiveDescriptorComparator;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
@@ -54,7 +54,7 @@ public class LazyResolveStdlibLoadingTest extends KotlinTestWithEnvironmentManag
for (Name name : namespaceShortNames) { for (Name name : namespaceShortNames) {
NamespaceDescriptor eager = module.getNamespace(FqName.topLevel(name)); NamespaceDescriptor eager = module.getNamespace(FqName.topLevel(name));
NamespaceDescriptor lazy = lazyModule.getNamespace(FqName.topLevel(name)); NamespaceDescriptor lazy = lazyModule.getNamespace(FqName.topLevel(name));
NamespaceComparator.validateAndCompareNamespaces(eager, lazy, NamespaceComparator.RECURSIVE, null); RecursiveDescriptorComparator.validateAndCompareDescriptors(eager, lazy, RecursiveDescriptorComparator.RECURSIVE, null);
} }
} }
@@ -44,7 +44,7 @@ import java.util.List;
import static org.jetbrains.jet.test.util.DescriptorValidator.ValidationVisitor.FORBID_ERROR_TYPES; import static org.jetbrains.jet.test.util.DescriptorValidator.ValidationVisitor.FORBID_ERROR_TYPES;
public class NamespaceComparator { public class RecursiveDescriptorComparator {
private static final DescriptorRenderer DEFAULT_RENDERER = new DescriptorRendererBuilder() private static final DescriptorRenderer DEFAULT_RENDERER = new DescriptorRendererBuilder()
.setWithDefinedIn(false) .setWithDefinedIn(false)
.setExcludedAnnotationClasses(Arrays.asList(new FqName(ExpectedLoadErrorsUtil.ANNOTATION_CLASS_NAME))) .setExcludedAnnotationClasses(Arrays.asList(new FqName(ExpectedLoadErrorsUtil.ANNOTATION_CLASS_NAME)))
@@ -67,7 +67,7 @@ public class NamespaceComparator {
private final Configuration conf; private final Configuration conf;
private NamespaceComparator(@NotNull Configuration conf) { private RecursiveDescriptorComparator(@NotNull Configuration conf) {
this.conf = conf; this.conf = conf;
} }
@@ -164,60 +164,61 @@ public class NamespaceComparator {
} }
} }
private static void compareNamespaceWithFile( private static void compareDescriptorWithFile(
@NotNull NamespaceDescriptor actualNamespace, @NotNull DeclarationDescriptor actual,
@NotNull Configuration configuration, @NotNull Configuration configuration,
@NotNull File txtFile @NotNull File txtFile
) { ) {
doCompareNamespaces(null, actualNamespace, configuration, txtFile); doCompareDescriptors(null, actual, configuration, txtFile);
} }
private static void compareNamespaces( private static void compareDescriptors(
@NotNull NamespaceDescriptor expectedNamespace, @NotNull DeclarationDescriptor expected,
@NotNull NamespaceDescriptor actualNamespace, @NotNull DeclarationDescriptor actual,
@NotNull Configuration configuration, @NotNull Configuration configuration,
@Nullable File txtFile @Nullable File txtFile
) { ) {
if (expectedNamespace == actualNamespace) { if (expected == actual) {
throw new IllegalArgumentException("Don't invoke this method with expectedNamespace == actualNamespace." + throw new IllegalArgumentException("Don't invoke this method with expected == actual." +
"Invoke compareNamespaceWithFile() instead."); "Invoke compareDescriptorWithFile() instead.");
} }
doCompareNamespaces(expectedNamespace, actualNamespace, configuration, txtFile); doCompareDescriptors(expected, actual, configuration, txtFile);
} }
public static void validateAndCompareNamespaceWithFile( public static void validateAndCompareDescriptorWithFile(
@NotNull NamespaceDescriptor actualNamespace, @NotNull DeclarationDescriptor actual,
@NotNull Configuration configuration, @NotNull Configuration configuration,
@NotNull File txtFile @NotNull File txtFile
) { ) {
DescriptorValidator.validate(configuration.validationStrategy, actualNamespace); DescriptorValidator.validate(configuration.validationStrategy, actual);
compareNamespaceWithFile(actualNamespace, configuration, txtFile); compareDescriptorWithFile(actual, configuration, txtFile);
} }
public static void validateAndCompareNamespaces( public static void validateAndCompareDescriptors(
@NotNull NamespaceDescriptor expectedNamespace, @NotNull DeclarationDescriptor expected,
@NotNull NamespaceDescriptor actualNamespace, @NotNull DeclarationDescriptor actual,
@NotNull Configuration configuration, @NotNull Configuration configuration,
@Nullable File txtFile @Nullable File txtFile
) { ) {
DescriptorValidator.validate(configuration.validationStrategy, expectedNamespace, actualNamespace); DescriptorValidator.validate(configuration.validationStrategy, expected, actual);
compareNamespaces(expectedNamespace, actualNamespace, configuration, txtFile); compareDescriptors(expected, actual, configuration, txtFile);
} }
private static void doCompareNamespaces( private static void doCompareDescriptors(
@Nullable NamespaceDescriptor expectedNamespace, @Nullable DeclarationDescriptor expected,
@NotNull NamespaceDescriptor actualNamespace, @NotNull DeclarationDescriptor actual,
@NotNull Configuration configuration, @NotNull Configuration configuration,
@Nullable File txtFile @Nullable File txtFile
) { ) {
NamespaceComparator comparator = new NamespaceComparator(configuration); RecursiveDescriptorComparator comparator = new RecursiveDescriptorComparator(configuration);
String actualSerialized = comparator.serializeRecursively(actualNamespace); String actualSerialized = comparator.serializeRecursively(actual);
if (expectedNamespace != null) { if (expected != null) {
String expectedSerialized = comparator.serializeRecursively(expectedNamespace); String expectedSerialized = comparator.serializeRecursively(expected);
Assert.assertSame(expected.getClass(), actual.getClass());
Assert.assertEquals("Expected and actual namespaces differ", expectedSerialized, actualSerialized); Assert.assertEquals("Expected and actual descriptors differ", expectedSerialized, actualSerialized);
} }
if (txtFile != null) { if (txtFile != null) {