Read KotlinInfo annotations for packages
JavaNamespaceDescriptor creates DeserializedPackageMemberScope in case there is *Package class present for a particular package (other cases work as before)
This commit is contained in:
committed by
Alexander Udalov
parent
77aa190eb1
commit
9a33567287
@@ -52,7 +52,7 @@ public class KotlinInfoForPackageTest extends CodegenTestCase {
|
||||
assertTrue(aClass.isAnnotationPresent(KotlinInfo.class));
|
||||
KotlinInfo kotlinInfo = (KotlinInfo) aClass.getAnnotation(KotlinInfo.class);
|
||||
|
||||
PackageData data = PackageData.readPackageDataFrom(kotlinInfo.data());
|
||||
PackageData data = PackageData.read(kotlinInfo.data());
|
||||
|
||||
Set<String> classNames = collectClassNames(data);
|
||||
assertSameElements(Arrays.asList("A", "B", "C"), classNames);
|
||||
|
||||
+1
-1
@@ -68,7 +68,7 @@ public class KotlinInfoForClassTest extends CodegenTestCase {
|
||||
public KotlinInfoBasedDescriptorFinder(@NotNull KotlinInfo kotlinInfo) throws IOException {
|
||||
super(new LockBasedStorageManager(), AnnotationDeserializer.UNSUPPORTED);
|
||||
|
||||
this.classData = ClassSerializationUtil.readClassDataFrom(kotlinInfo.data());
|
||||
this.classData = ClassData.read(kotlinInfo.data());
|
||||
this.namespace = JetTestUtils.createTestNamespace(NAMESPACE_NAME.shortName());
|
||||
}
|
||||
|
||||
|
||||
@@ -21,11 +21,11 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.ConfigurationKind;
|
||||
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
|
||||
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPackageMemberScope;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.test.TestCaseWithTmpdir;
|
||||
import org.jetbrains.jet.test.util.NamespaceComparator;
|
||||
|
||||
@@ -63,6 +63,8 @@ public abstract class AbstractLoadCompiledKotlinTest extends TestCaseWithTmpdir
|
||||
NamespaceDescriptor namespaceFromClass = LoadDescriptorUtil.loadTestNamespaceAndBindingContextFromJavaRoot(
|
||||
tmpdir, getTestRootDisposable(), ConfigurationKind.JDK_ONLY).first;
|
||||
|
||||
checkUsageOfDeserializedScope(namespaceFromClass);
|
||||
|
||||
for (DeclarationDescriptor descriptor : namespaceFromClass.getMemberScope().getAllDescriptors()) {
|
||||
if (descriptor instanceof ClassDescriptor) {
|
||||
assert descriptor instanceof DeserializedClassDescriptor : DescriptorUtils.getFQName(descriptor);
|
||||
@@ -75,4 +77,21 @@ public abstract class AbstractLoadCompiledKotlinTest extends TestCaseWithTmpdir
|
||||
.checkPropertyAccessors(includeAccessors),
|
||||
txtFile);
|
||||
}
|
||||
|
||||
private static void checkUsageOfDeserializedScope(@NotNull NamespaceDescriptor namespaceFromClass) {
|
||||
JetScope scope = namespaceFromClass.getMemberScope();
|
||||
boolean hasOwnMembers = false;
|
||||
for (DeclarationDescriptor declarationDescriptor : scope.getAllDescriptors()) {
|
||||
if (declarationDescriptor instanceof CallableMemberDescriptor) {
|
||||
hasOwnMembers = true;
|
||||
}
|
||||
}
|
||||
if (hasOwnMembers) {
|
||||
assert scope instanceof DeserializedPackageMemberScope : "If namespace has members, members should be inside deserialized scope.";
|
||||
}
|
||||
else {
|
||||
//NOTE: should probably change
|
||||
assert !(scope instanceof DeserializedPackageMemberScope) : "We don't use deserialized scopes for namespaces without members.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user