Add validation for binding between java classes and corresponding package fragments
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user