Validation integrated into NamespaceComparator
This commit is contained in:
+2
-4
@@ -34,7 +34,6 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.test.TestCaseWithTmpdir;
|
||||
import org.jetbrains.jet.test.util.DescriptorValidator;
|
||||
import org.jetbrains.jet.test.util.NamespaceComparator;
|
||||
import org.junit.Assert;
|
||||
|
||||
@@ -45,7 +44,7 @@ import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static org.jetbrains.jet.test.util.NamespaceComparator.compareNamespaceWithFile;
|
||||
import static org.jetbrains.jet.test.util.NamespaceComparator.validateAndCompareNamespaceWithFile;
|
||||
|
||||
public abstract class AbstractCompileKotlinAgainstCustomJavaTest extends TestCaseWithTmpdir {
|
||||
protected void doTest(String ktFilePath) throws Exception {
|
||||
@@ -71,8 +70,7 @@ public abstract class AbstractCompileKotlinAgainstCustomJavaTest extends TestCas
|
||||
NamespaceDescriptor namespaceDescriptor = bindingContext.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, namespaceFqn);
|
||||
assertNotNull("Failed to find namespace: " + namespaceFqn, namespaceDescriptor);
|
||||
|
||||
DescriptorValidator.validate(namespaceDescriptor);
|
||||
compareNamespaceWithFile(namespaceDescriptor, NamespaceComparator.DONT_INCLUDE_METHODS_OF_OBJECT, expectedFile);
|
||||
validateAndCompareNamespaceWithFile(namespaceDescriptor, NamespaceComparator.DONT_INCLUDE_METHODS_OF_OBJECT, expectedFile);
|
||||
}
|
||||
|
||||
private JetCoreEnvironment getEnvironment(File ktFile) {
|
||||
|
||||
@@ -23,14 +23,13 @@ import org.jetbrains.jet.analyzer.AnalyzeExhaust;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.test.TestCaseWithTmpdir;
|
||||
import org.jetbrains.jet.test.util.DescriptorValidator;
|
||||
import org.jetbrains.jet.test.util.NamespaceComparator;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
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.test.util.NamespaceComparator.compareNamespaces;
|
||||
import static org.jetbrains.jet.test.util.NamespaceComparator.validateAndCompareNamespaces;
|
||||
|
||||
/**
|
||||
* Compile Kotlin and then parse model from .class files.
|
||||
@@ -57,15 +56,13 @@ public abstract class AbstractLoadCompiledKotlinTest extends TestCaseWithTmpdir
|
||||
assert namespaceFromSource != null;
|
||||
Assert.assertEquals("test", namespaceFromSource.getName().asString());
|
||||
|
||||
DescriptorValidator.validate(namespaceFromSource);
|
||||
|
||||
NamespaceDescriptor namespaceFromClass = LoadDescriptorUtil.loadTestNamespaceAndBindingContextFromJavaRoot(
|
||||
tmpdir, getTestRootDisposable(), ConfigurationKind.JDK_ONLY).first;
|
||||
|
||||
compareNamespaces(namespaceFromSource, namespaceFromClass,
|
||||
NamespaceComparator.DONT_INCLUDE_METHODS_OF_OBJECT
|
||||
.checkPrimaryConstructors(true)
|
||||
.checkPropertyAccessors(includeAccessors),
|
||||
txtFile);
|
||||
validateAndCompareNamespaces(namespaceFromSource, namespaceFromClass,
|
||||
NamespaceComparator.DONT_INCLUDE_METHODS_OF_OBJECT
|
||||
.checkPrimaryConstructors(true)
|
||||
.checkPropertyAccessors(includeAccessors),
|
||||
txtFile);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,7 +42,6 @@ import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
|
||||
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.test.TestCaseWithTmpdir;
|
||||
import org.jetbrains.jet.test.util.DescriptorValidator;
|
||||
import org.junit.Assert;
|
||||
|
||||
import java.io.File;
|
||||
@@ -165,7 +164,6 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
|
||||
LoadDescriptorUtil.TEST_PACKAGE_FQNAME, DescriptorSearchRule.INCLUDE_KOTLIN);
|
||||
assert namespaceDescriptor != null : "Test namespace not found";
|
||||
|
||||
DescriptorValidator.validate(namespaceDescriptor);
|
||||
checkJavaNamespace(expectedFile, namespaceDescriptor, trace.getBindingContext(), DONT_INCLUDE_METHODS_OF_OBJECT);
|
||||
}
|
||||
|
||||
@@ -205,7 +203,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
|
||||
checkForLoadErrorsAndCompare(javaNamespace, bindingContext, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
compareNamespaces(kotlinNamespace, javaNamespace, DONT_INCLUDE_METHODS_OF_OBJECT, txtFile);
|
||||
validateAndCompareNamespaces(kotlinNamespace, javaNamespace, DONT_INCLUDE_METHODS_OF_OBJECT, txtFile);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -219,7 +217,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
|
||||
checkForLoadErrorsAndCompare(javaNamespace, bindingContext, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
compareNamespaceWithFile(javaNamespace, configuration, txtFile);
|
||||
validateAndCompareNamespaceWithFile(javaNamespace, configuration, txtFile);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -42,7 +42,6 @@ import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.test.util.DescriptorValidator;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -108,7 +107,6 @@ public final class LoadDescriptorUtil {
|
||||
javaDescriptorResolver.resolveNamespace(TEST_PACKAGE_FQNAME, DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN);
|
||||
assert namespaceDescriptor != null;
|
||||
|
||||
DescriptorValidator.validateIgnoringErrorTypes(namespaceDescriptor);
|
||||
return Pair.create(namespaceDescriptor, injector.getBindingTrace().getBindingContext());
|
||||
}
|
||||
|
||||
@@ -141,7 +139,6 @@ public final class LoadDescriptorUtil {
|
||||
NamespaceDescriptor namespace =
|
||||
fileAndExhaust.getExhaust().getBindingContext().get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, TEST_PACKAGE_FQNAME);
|
||||
assert namespace != null: TEST_PACKAGE_FQNAME + " package not found in " + ktFile.getName();
|
||||
DescriptorValidator.validate(namespace);
|
||||
return namespace;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,14 +22,12 @@ import org.jetbrains.jet.analyzer.AnalyzeExhaust;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.test.TestCaseWithTmpdir;
|
||||
import org.jetbrains.jet.test.util.DescriptorValidator;
|
||||
import org.jetbrains.jet.test.util.NamespaceComparator;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import static org.jetbrains.jet.jvm.compiler.LoadDescriptorUtil.*;
|
||||
import static org.jetbrains.jet.test.util.NamespaceComparator.DONT_INCLUDE_METHODS_OF_OBJECT;
|
||||
import static org.jetbrains.jet.test.util.NamespaceComparator.compareNamespaceWithFile;
|
||||
import static org.jetbrains.jet.test.util.NamespaceComparator.*;
|
||||
|
||||
/*
|
||||
* This test should be implemented via AbstractLoadCompiledKotlinTest.
|
||||
@@ -45,7 +43,7 @@ public final class LoadKotlinCustomTest extends TestCaseWithTmpdir {
|
||||
throws Exception {
|
||||
NamespaceDescriptor namespaceFromClass =
|
||||
compileKotlinAndLoadTestNamespaceDescriptorFromBinary(kotlinFile, tmpdir, myTestRootDisposable, ConfigurationKind.JDK_ONLY);
|
||||
compareNamespaceWithFile(namespaceFromClass, DONT_INCLUDE_METHODS_OF_OBJECT, expectedFile);
|
||||
validateAndCompareNamespaceWithFile(namespaceFromClass, DONT_INCLUDE_METHODS_OF_OBJECT, expectedFile);
|
||||
}
|
||||
|
||||
private void loadDescriptorsFromSourceAndCompareWithTxt(@NotNull File expectedFile, @NotNull File kotlinFile)
|
||||
@@ -54,8 +52,7 @@ public final class LoadKotlinCustomTest extends TestCaseWithTmpdir {
|
||||
NamespaceDescriptor namespaceFromSource = exhaust.getBindingContext().get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR,
|
||||
TEST_PACKAGE_FQNAME);
|
||||
assert namespaceFromSource != null;
|
||||
DescriptorValidator.validate(namespaceFromSource);
|
||||
compareNamespaceWithFile(namespaceFromSource, NamespaceComparator.DONT_INCLUDE_METHODS_OF_OBJECT.checkPrimaryConstructors(true),
|
||||
validateAndCompareNamespaceWithFile(namespaceFromSource, NamespaceComparator.DONT_INCLUDE_METHODS_OF_OBJECT.checkPrimaryConstructors(true),
|
||||
expectedFile);
|
||||
}
|
||||
|
||||
|
||||
+3
-4
@@ -26,13 +26,13 @@ import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.test.util.DescriptorValidator;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.jetbrains.jet.test.util.NamespaceComparator.*;
|
||||
import static org.jetbrains.jet.test.util.NamespaceComparator.RECURSIVE;
|
||||
import static org.jetbrains.jet.test.util.NamespaceComparator.validateAndCompareNamespaces;
|
||||
|
||||
public abstract class AbstractLazyResolveDiagnosticsTest extends AbstractJetDiagnosticsTest {
|
||||
|
||||
@@ -47,7 +47,6 @@ public abstract class AbstractLazyResolveDiagnosticsTest extends AbstractJetDiag
|
||||
String path = JetTestUtils.getFilePath(new File(FileUtil.getRelativePath(TEST_DATA_DIR, testDataFile)));
|
||||
NamespaceDescriptor expected = eagerModule.getNamespace(FqName.ROOT);
|
||||
NamespaceDescriptor actual = lazyModule.getNamespace(FqName.ROOT);
|
||||
DescriptorValidator.validate(expected, actual);
|
||||
|
||||
String txtFileRelativePath = path.replaceAll("\\.kt$|\\.ktscript", ".txt");
|
||||
File txtFile = new File("compiler/testData/lazyResolve/diagnostics/" + txtFileRelativePath);
|
||||
@@ -55,7 +54,7 @@ public abstract class AbstractLazyResolveDiagnosticsTest extends AbstractJetDiag
|
||||
// Only recurse into those namespaces mentioned in the files
|
||||
// Otherwise we'll be examining the whole JDK
|
||||
final Set<Name> names = LazyResolveTestUtil.getTopLevelPackagesFromFileList(jetFiles);
|
||||
compareNamespaces(
|
||||
validateAndCompareNamespaces(
|
||||
expected, actual,
|
||||
RECURSIVE.filterRecursion(new Predicate<FqNameUnsafe>() {
|
||||
@Override
|
||||
|
||||
+5
-10
@@ -28,7 +28,6 @@ import org.jetbrains.jet.lang.psi.JetPsiFactory;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||
import org.jetbrains.jet.test.util.DescriptorValidator;
|
||||
import org.jetbrains.jet.test.util.NamespaceComparator;
|
||||
import org.junit.Assert;
|
||||
|
||||
@@ -36,6 +35,9 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import static org.jetbrains.jet.test.util.DescriptorValidator.ValidationVisitor.ALLOW_ERROR_TYPES;
|
||||
import static org.jetbrains.jet.test.util.DescriptorValidator.ValidationVisitor.FORBID_ERROR_TYPES;
|
||||
|
||||
public abstract class AbstractLazyResolveNamespaceComparingTest extends KotlinTestWithEnvironment {
|
||||
|
||||
@Override
|
||||
@@ -78,15 +80,8 @@ public abstract class AbstractLazyResolveNamespaceComparingTest extends KotlinTe
|
||||
|
||||
File serializeResultsTo = new File(FileUtil.getNameWithoutExtension(testFileName) + ".txt");
|
||||
|
||||
if (allowErrorTypes) {
|
||||
DescriptorValidator.validateIgnoringErrorTypes(expected, actual);
|
||||
}
|
||||
else {
|
||||
DescriptorValidator.validate(expected, actual);
|
||||
}
|
||||
|
||||
|
||||
NamespaceComparator.compareNamespaces(
|
||||
NamespaceComparator.validateAndCompareNamespaces(
|
||||
allowErrorTypes ? ALLOW_ERROR_TYPES : FORBID_ERROR_TYPES,
|
||||
expected, actual, NamespaceComparator.DONT_INCLUDE_METHODS_OF_OBJECT.filterRecursion(
|
||||
new Predicate<FqNameUnsafe>() {
|
||||
@Override
|
||||
|
||||
+2
-6
@@ -20,13 +20,11 @@ import org.jetbrains.jet.ConfigurationKind;
|
||||
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||
import org.jetbrains.jet.test.util.DescriptorValidator;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import static org.jetbrains.jet.test.util.NamespaceComparator.RECURSIVE_ALL;
|
||||
import static org.jetbrains.jet.test.util.NamespaceComparator.compareNamespaceWithFile;
|
||||
import static org.jetbrains.jet.test.util.NamespaceComparator.validateAndCompareNamespaceWithFile;
|
||||
|
||||
public class LazyResolveBuiltinClassesTest extends KotlinTestWithEnvironment {
|
||||
@Override
|
||||
@@ -34,10 +32,8 @@ public class LazyResolveBuiltinClassesTest extends KotlinTestWithEnvironment {
|
||||
return createEnvironmentWithMockJdk(ConfigurationKind.JDK_ONLY);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuiltIns() throws Exception {
|
||||
NamespaceDescriptor builtInsPackage = KotlinBuiltIns.getInstance().getBuiltInsPackage();
|
||||
DescriptorValidator.validate(builtInsPackage);
|
||||
compareNamespaceWithFile(builtInsPackage, RECURSIVE_ALL, new File("compiler/testData/builtin-classes.txt"));
|
||||
validateAndCompareNamespaceWithFile(builtInsPackage, RECURSIVE_ALL, new File("compiler/testData/builtin-classes.txt"));
|
||||
}
|
||||
}
|
||||
|
||||
+1
-3
@@ -29,7 +29,6 @@ import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.psi.JetPsiFactory;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.test.util.DescriptorValidator;
|
||||
import org.jetbrains.jet.test.util.NamespaceComparator;
|
||||
|
||||
import java.io.File;
|
||||
@@ -60,8 +59,7 @@ public class LazyResolveStdlibLoadingTest extends KotlinTestWithEnvironmentManag
|
||||
for (Name name : namespaceShortNames) {
|
||||
NamespaceDescriptor eager = module.getNamespace(FqName.topLevel(name));
|
||||
NamespaceDescriptor lazy = lazyModule.getNamespace(FqName.topLevel(name));
|
||||
DescriptorValidator.validate(eager, lazy);
|
||||
NamespaceComparator.compareNamespaces(eager, lazy, NamespaceComparator.RECURSIVE, null);
|
||||
NamespaceComparator.validateAndCompareNamespaces(eager, lazy, NamespaceComparator.RECURSIVE, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,15 +32,12 @@ import java.util.List;
|
||||
|
||||
public class DescriptorValidator {
|
||||
|
||||
public static final ValidationVisitor FORBID_ERROR_TYPES = new ValidationVisitor(false);
|
||||
public static final ValidationVisitor ALLOW_ERROR_TYPES = new ValidationVisitor(true);
|
||||
|
||||
public static void validate(DeclarationDescriptor... descriptors) {
|
||||
validate(FORBID_ERROR_TYPES, Arrays.asList(descriptors));
|
||||
validate(ValidationVisitor.FORBID_ERROR_TYPES, Arrays.asList(descriptors));
|
||||
}
|
||||
|
||||
public static void validateIgnoringErrorTypes(DeclarationDescriptor... descriptors) {
|
||||
validate(ALLOW_ERROR_TYPES, Arrays.asList(descriptors));
|
||||
public static void validate(@NotNull ValidationVisitor validationStrategy, DeclarationDescriptor... descriptors) {
|
||||
validate(validationStrategy, Arrays.asList(descriptors));
|
||||
}
|
||||
|
||||
public static void validate(@NotNull ValidationVisitor validator, @NotNull Collection<DeclarationDescriptor> descriptors) {
|
||||
@@ -68,6 +65,8 @@ public class DescriptorValidator {
|
||||
}
|
||||
|
||||
public static class ValidationVisitor implements DeclarationDescriptorVisitor<Boolean, DiagnosticCollector> {
|
||||
public static final ValidationVisitor FORBID_ERROR_TYPES = new ValidationVisitor(false);
|
||||
public static final ValidationVisitor ALLOW_ERROR_TYPES = new ValidationVisitor(true);
|
||||
|
||||
private final boolean allowErrorTypes;
|
||||
|
||||
|
||||
@@ -44,6 +44,8 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static org.jetbrains.jet.test.util.DescriptorValidator.ValidationVisitor.FORBID_ERROR_TYPES;
|
||||
|
||||
public class NamespaceComparator {
|
||||
public static final Configuration DONT_INCLUDE_METHODS_OF_OBJECT = new Configuration(false, false, false, Predicates.<FqNameUnsafe>alwaysTrue());
|
||||
public static final Configuration RECURSIVE = new Configuration(false, false, true, Predicates.<FqNameUnsafe>alwaysTrue());
|
||||
@@ -179,6 +181,44 @@ public class NamespaceComparator {
|
||||
doCompareNamespaces(expectedNamespace, actualNamespace, configuration, txtFile);
|
||||
}
|
||||
|
||||
public static void validateAndCompareNamespaceWithFile(
|
||||
@NotNull NamespaceDescriptor actualNamespace,
|
||||
@NotNull Configuration configuration,
|
||||
@NotNull File txtFile
|
||||
) {
|
||||
validateAndCompareNamespaceWithFile(FORBID_ERROR_TYPES, actualNamespace, configuration, txtFile);
|
||||
}
|
||||
|
||||
public static void validateAndCompareNamespaceWithFile(
|
||||
@NotNull DescriptorValidator.ValidationVisitor validationStrategy,
|
||||
@NotNull NamespaceDescriptor actualNamespace,
|
||||
@NotNull Configuration configuration,
|
||||
@NotNull File txtFile
|
||||
) {
|
||||
DescriptorValidator.validate(validationStrategy, actualNamespace);
|
||||
compareNamespaceWithFile(actualNamespace, configuration, txtFile);
|
||||
}
|
||||
|
||||
public static void validateAndCompareNamespaces(
|
||||
@NotNull NamespaceDescriptor expectedNamespace,
|
||||
@NotNull NamespaceDescriptor actualNamespace,
|
||||
@NotNull Configuration configuration,
|
||||
@Nullable File txtFile
|
||||
) {
|
||||
validateAndCompareNamespaces(FORBID_ERROR_TYPES, expectedNamespace, actualNamespace, configuration, txtFile);
|
||||
}
|
||||
|
||||
public static void validateAndCompareNamespaces(
|
||||
@NotNull DescriptorValidator.ValidationVisitor validationStrategy,
|
||||
@NotNull NamespaceDescriptor expectedNamespace,
|
||||
@NotNull NamespaceDescriptor actualNamespace,
|
||||
@NotNull Configuration configuration,
|
||||
@Nullable File txtFile
|
||||
) {
|
||||
DescriptorValidator.validate(validationStrategy, expectedNamespace, actualNamespace);
|
||||
compareNamespaces(expectedNamespace, actualNamespace, configuration, txtFile);
|
||||
}
|
||||
|
||||
private static void doCompareNamespaces(
|
||||
@Nullable NamespaceDescriptor expectedNamespace,
|
||||
@NotNull NamespaceDescriptor actualNamespace,
|
||||
|
||||
Reference in New Issue
Block a user