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.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
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.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
@@ -179,6 +181,13 @@ public class DescriptorValidator {
|
|||||||
public Boolean visitPackageFragmentDescriptor(
|
public Boolean visitPackageFragmentDescriptor(
|
||||||
PackageFragmentDescriptor descriptor, DiagnosticCollector collector
|
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);
|
validateScope(descriptor.getMemberScope(), collector);
|
||||||
return true;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user