Add validation for binding between java classes and corresponding package fragments

This commit is contained in:
Pavel V. Talanov
2014-02-10 15:33:59 +04:00
parent e4a0221abc
commit e3ae7afac3
@@ -21,6 +21,8 @@ import junit.framework.Assert;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor;
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassStaticsPackageFragmentDescriptor;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
@@ -179,6 +181,13 @@ public class DescriptorValidator {
public Boolean visitPackageFragmentDescriptor(
PackageFragmentDescriptor descriptor, DiagnosticCollector collector
) {
if (descriptor instanceof JavaClassStaticsPackageFragmentDescriptor) {
JavaClassDescriptor correspondingClass = ((JavaClassStaticsPackageFragmentDescriptor) descriptor).getCorrespondingClass();
JavaClassStaticsPackageFragmentDescriptor correspondingPackageFragment = correspondingClass.getCorrespondingPackageFragment();
if (correspondingPackageFragment != descriptor) {
report(collector, descriptor, "Corresponding class bound to another descriptor: " + correspondingPackageFragment);
}
}
validateScope(descriptor.getMemberScope(), collector);
return true;
}
@@ -254,6 +263,17 @@ public class DescriptorValidator {
}
}
if (descriptor instanceof JavaClassDescriptor) {
JavaClassStaticsPackageFragmentDescriptor
correspondingPackageFragment = ((JavaClassDescriptor) descriptor).getCorrespondingPackageFragment();
if (correspondingPackageFragment != null) {
JavaClassDescriptor correspondingClass = correspondingPackageFragment.getCorrespondingClass();
if (correspondingClass != descriptor) {
report(collector, descriptor, "Corresponding package bound to another descriptor: " + correspondingClass);
}
}
}
return true;
}