From fea73b3dce3251b52755a6cc5f10e0731c176775 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 8 Aug 2012 17:36:04 +0400 Subject: [PATCH] getObjectDescriptors() for lazy classes --- .../lang/resolve/TypeHierarchyResolver.java | 5 +++-- .../resolve/lazy/AbstractLazyMemberScope.java | 21 +++++++++++++------ .../namespaceComparator/objectInClass.kt | 9 ++++++++ .../namespaceComparator/objectInClass.txt | 6 ++++++ ...esolveNamespaceComparingTestGenerated.java | 9 +++++--- 5 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 compiler/testData/lazyResolve/namespaceComparator/objectInClass.kt create mode 100644 compiler/testData/lazyResolve/namespaceComparator/objectInClass.txt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java index 566fb301940..fcb122366e7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java @@ -41,7 +41,8 @@ import javax.inject.Inject; import java.util.*; import static org.jetbrains.jet.lang.diagnostics.Errors.*; -import static org.jetbrains.jet.lang.resolve.BindingContext.*; +import static org.jetbrains.jet.lang.resolve.BindingContext.FQNAME_TO_CLASS_DESCRIPTOR; +import static org.jetbrains.jet.lang.resolve.BindingContext.TYPE; /** * @author abreslav @@ -228,6 +229,7 @@ public class TypeHierarchyResolver { @Override public void visitObjectDeclaration(JetObjectDeclaration declaration) { final MutableClassDescriptor objectDescriptor = createClassDescriptorForObject(declaration, owner, outerScope); + owner.addObjectDescriptor(objectDescriptor); trace.record(FQNAME_TO_CLASS_DESCRIPTOR, JetPsiUtil.getFQName(declaration), objectDescriptor); } @@ -307,7 +309,6 @@ public class TypeHierarchyResolver { prepareForDeferredCall(classScope, mutableClassDescriptor, declaration); createPrimaryConstructorForObject(declaration, mutableClassDescriptor); - owner.addObjectDescriptor(mutableClassDescriptor); trace.record(BindingContext.CLASS, declaration, mutableClassDescriptor); return mutableClassDescriptor; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyMemberScope.java index 95e48124b05..81ab43bb22e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyMemberScope.java @@ -42,6 +42,8 @@ public abstract class AbstractLazyMemberScope classDescriptors = Maps.newHashMap(); + private final Map objectDescriptors = Maps.newHashMap(); + private final Map> functionDescriptors = Maps.newHashMap(); private final Map> propertyDescriptors = Maps.newHashMap(); @@ -58,8 +60,8 @@ public abstract class AbstractLazyMemberScope cache, @NotNull Name name, boolean object) { + ClassDescriptor known = cache.get(name); if (known != null) return known; if (allDescriptorsComputed) return null; @@ -72,7 +74,7 @@ public abstract class AbstractLazyMemberScope getObjectDescriptors() { - throw new UnsupportedOperationException(); // TODO + for (JetDeclaration declaration : declarationProvider.getAllDeclarations()) { + if (declaration instanceof JetObjectDeclaration) { + JetObjectDeclaration objectDeclaration = (JetObjectDeclaration) declaration; + getObjectDescriptor(objectDeclaration.getNameAsName()); + } + } + + return objectDescriptors.values(); } @Override diff --git a/compiler/testData/lazyResolve/namespaceComparator/objectInClass.kt b/compiler/testData/lazyResolve/namespaceComparator/objectInClass.kt new file mode 100644 index 00000000000..dc64d93277d --- /dev/null +++ b/compiler/testData/lazyResolve/namespaceComparator/objectInClass.kt @@ -0,0 +1,9 @@ +package test + +class A { + object B { + fun foo(a: Int) : String { + return "" + } + } +} diff --git a/compiler/testData/lazyResolve/namespaceComparator/objectInClass.txt b/compiler/testData/lazyResolve/namespaceComparator/objectInClass.txt new file mode 100644 index 00000000000..4e77eee6965 --- /dev/null +++ b/compiler/testData/lazyResolve/namespaceComparator/objectInClass.txt @@ -0,0 +1,6 @@ +namespace test + +internal final class test.A : jet.Any { + public final /*constructor*/ fun (): test.A + internal final val B: test.A.B +} diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java index 92732d8f83f..4d452133d30 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java @@ -1269,9 +1269,7 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso @TestMetadata("compiler/testData/lazyResolve/namespaceComparator") public static class NamespaceComparator extends AbstractLazyResolveNamespaceComparingTest { public void testAllFilesPresentInNamespaceComparator() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), - "org.jetbrains.jet.lang.resolve.lazy.AbstractLazyResolveNamespaceComparingTest", - new File("compiler/testData/lazyResolve/namespaceComparator"), "kt", false); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.lang.resolve.lazy.AbstractLazyResolveNamespaceComparingTest", new File("compiler/testData/lazyResolve/namespaceComparator"), "kt", false); } @TestMetadata("enum.kt") @@ -1294,6 +1292,11 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso doTestSinglePackage("compiler/testData/lazyResolve/namespaceComparator/innerObject.kt"); } + @TestMetadata("objectInClass.kt") + public void testObjectInClass() throws Exception { + doTestSinglePackage("compiler/testData/lazyResolve/namespaceComparator/objectInClass.kt"); + } + @TestMetadata("objectMembers.kt") public void testObjectMembers() throws Exception { doTestSinglePackage("compiler/testData/lazyResolve/namespaceComparator/objectMembers.kt");