diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java index cfc8805308d..a5805eceb01 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java @@ -147,11 +147,9 @@ public class InjectorForJavaDescriptorResolver { deserializedDescriptorResolver.setAnnotationDeserializer(annotationDescriptorDeserializer); deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter); - deserializedDescriptorResolver.setJavaClassResolver(javaClassResolver); deserializedDescriptorResolver.setJavaPackageFragmentProvider(javaPackageFragmentProvider); annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter); - annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver); annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileFinder); javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java index 807d3ae7f47..b306441ec74 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -341,11 +341,9 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly deserializedDescriptorResolver.setAnnotationDeserializer(annotationDescriptorDeserializer); deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter); - deserializedDescriptorResolver.setJavaClassResolver(javaClassResolver); deserializedDescriptorResolver.setJavaPackageFragmentProvider(javaPackageFragmentProvider); annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter); - annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver); annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileFinder); javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver); diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 811b520566c..be02fa9d3b8 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -23,7 +23,6 @@ import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; -import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.ImportPath; import org.jetbrains.jet.lang.resolve.java.lazy.GlobalJavaResolverContext; import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaClassResolver; @@ -156,7 +155,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes public JavaClass findClass(@NotNull FqName fqName) { // Do not look for JavaClasses for Kotlin binaries & built-ins if (kotlinClassesFromBinaries.invoke(fqName) != null - || kotlinNamespacesFromBinaries.invoke(fqName) != null + //|| kotlinNamespacesFromBinaries.invoke(fqName) != null || JavaClassResolver.getKotlinBuiltinClassDescriptor(fqName) != null) { return null; } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaSubModule.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaSubModule.kt index fd5dbe4e199..311d21388ed 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaSubModule.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaSubModule.kt @@ -1,15 +1,15 @@ package org.jetbrains.jet.lang.resolve.java.lazy import org.jetbrains.jet.lang.descriptors.ModuleDescriptor -import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor import org.jetbrains.jet.storage.MemoizedFunctionToNullable import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.lang.resolve.java.structure.JavaClass import org.jetbrains.jet.lang.descriptors.ClassDescriptor import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaPackage import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaClass -import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver +import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor +import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils public open class LazyJavaSubModule( private val outerContext: GlobalJavaResolverContext, @@ -28,20 +28,16 @@ public open class LazyJavaSubModule( outerContext.javaDescriptorResolver ) - private val _packageFragments: MemoizedFunctionToNullable = c.storageManager.createMemoizedFunctionWithNullableValues { + private val _packageFragments: MemoizedFunctionToNullable = c.storageManager.createMemoizedFunctionWithNullableValues { fqName -> val jPackage = c.finder.findPackage(fqName) if (jPackage != null) { - val result = LazyPackageFragmentForJavaPackage(c, findParent(fqName), jPackage) - c.javaResolverCache.recordPackage(jPackage, result) - result + LazyPackageFragmentForJavaPackage(c, module, jPackage) } else { val jClass = c.finder.findClass(fqName) - if (jClass != null && JavaNamespaceResolver.hasStaticMembers(jClass)) { - val result = LazyPackageFragmentForJavaClass(c, findParent(fqName), jClass) - c.javaResolverCache.recordPackage(jClass, result) - result + if (jClass != null && DescriptorResolverUtils.isJavaClassVisibleAsPackage(jClass)) { + LazyPackageFragmentForJavaClass(c, module, jClass) } else null } @@ -51,7 +47,7 @@ public open class LazyJavaSubModule( if (fqName.isRoot()) module else getPackageFragment(fqName.parent()) ?: throw IllegalStateException("Cannot resolve parent package for: $fqName") - fun getPackageFragment(fqName: FqName): NamespaceDescriptor? = _packageFragments(fqName) + fun getPackageFragment(fqName: FqName) = _packageFragments(fqName) fun getClass(fqName: FqName): ClassDescriptor? = c.javaClassResolver.resolveClassByFqName(fqName) diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt index 316b846ea0a..143ef10ec80 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -172,7 +172,7 @@ public class LazyJavaClassMemberScope( alreadyResolved else LazyJavaClassDescriptor(c, getContainingDeclaration(), - DescriptorUtils.getFQName(getContainingDeclaration()).child(name).toSafe(), + DescriptorUtils.getFqName(getContainingDeclaration()).child(name).toSafe(), jNestedClass) } } @@ -189,7 +189,7 @@ public class LazyJavaClassMemberScope( } // namespaces should be resolved elsewhere - override fun getNamespace(name: Name): NamespaceDescriptor? = null + override fun getPackage(name: Name) = null override fun getAllPackageNames(): Collection = listOf() override fun toString() = "Lazy java member scope for " + jClass.getFqName() diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt index 5eea25f3b7d..c00599b5446 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt @@ -6,7 +6,6 @@ import org.jetbrains.jet.lang.resolve.name.LabelName import org.jetbrains.jet.lang.resolve.name.Name import org.jetbrains.jet.lang.resolve.scopes.JetScope import org.jetbrains.jet.utils.emptyList -import org.jetbrains.jet.lang.resolve.java.structure.JavaClass import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod import org.jetbrains.jet.lang.resolve.java.structure.JavaField import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContextWithTypes @@ -31,18 +30,15 @@ import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils import java.util.LinkedHashSet import org.jetbrains.jet.lang.types.JetType import org.jetbrains.jet.lang.resolve.java.resolver.JavaPropertyResolver -import org.jetbrains.jet.lang.resolve.java.lazy.types.toAttributes import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPropertyDescriptor import org.jetbrains.jet.lang.descriptors.impl.PropertyDescriptorImpl import java.util.Collections import org.jetbrains.jet.utils.emptyOrSingletonList -import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContext import org.jetbrains.annotations.TestOnly -import org.jetbrains.jet.utils.Printer import org.jetbrains.jet.lang.resolve.java.resolver.ExternalSignatureResolver import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils -import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorImpl import org.jetbrains.jet.utils.Printer +import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor public abstract class LazyJavaMemberScope( protected val c: LazyJavaResolverContextWithTypes, @@ -83,9 +79,9 @@ public abstract class LazyJavaMemberScope( listOf(function).iterator() }.toList()) - if (_containingDeclaration is NamespaceDescriptor) { - val klass = JavaFunctionResolver.findClassInNamespace(_containingDeclaration, name); - if (klass != null && klass.getFunctionTypeForSamInterface() != null) { + if (_containingDeclaration is JavaPackageFragmentDescriptor) { + val klass = c.javaDescriptorResolver.resolveClass(_containingDeclaration.getFqName().child(name)) + if (klass is LazyJavaClassDescriptor && klass.getFunctionTypeForSamInterface() != null) { functions.add(SingleAbstractMethodUtils.createSamConstructorFunction(_containingDeclaration, klass)) } } @@ -128,7 +124,7 @@ public abstract class LazyJavaMemberScope( val signatureErrors: MutableList val superFunctions: List val effectiveSignature: ExternalSignatureResolver.AlternativeMethodSignature - if (_containingDeclaration is NamespaceDescriptor) { + if (_containingDeclaration is PackageFragmentDescriptor) { superFunctions = Collections.emptyList() effectiveSignature = c.externalSignatureResolver.resolveAlternativeMethodSignature(method, false, returnType, null, valueParameters, methodTypeParameters) signatureErrors = effectiveSignature.getErrors() @@ -284,7 +280,7 @@ public abstract class LazyJavaMemberScope( val result = LinkedHashSet() for (name in getAllPackageNames()) { - val descriptor = getNamespace(name) + val descriptor = getPackage(name) if (descriptor != null) { // Null signifies that a package found in Java is not present in Kotlin result.add(descriptor) diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragment.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragment.kt index a972c90566e..7acd5493c36 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragment.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragment.kt @@ -1,9 +1,5 @@ package org.jetbrains.jet.lang.resolve.java.lazy.descriptors -import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor -import org.jetbrains.jet.lang.descriptors.impl.AbstractNamespaceDescriptorImpl -import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorParent -import org.jetbrains.jet.utils.emptyList import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContext import org.jetbrains.jet.lang.resolve.name.Name import org.jetbrains.jet.lang.resolve.scopes.JetScope @@ -12,23 +8,35 @@ import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe import org.jetbrains.jet.lang.resolve.java.structure.JavaClass import org.jetbrains.kotlin.util.sure +import org.jetbrains.jet.lang.descriptors.ModuleDescriptor +import org.jetbrains.jet.lang.descriptors.impl.DeclarationDescriptorNonRootImpl +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorVisitor +import org.jetbrains.jet.lang.types.TypeSubstitutor +import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor +import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver abstract class LazyJavaPackageFragment( - c: LazyJavaResolverContext, - containingDeclaration: NamespaceDescriptorParent, + private val c: LazyJavaResolverContext, + containingDeclaration: ModuleDescriptor, name: Name -) : AbstractNamespaceDescriptorImpl(containingDeclaration, emptyList(), name), NamespaceDescriptor, LazyJavaDescriptor { +) : DeclarationDescriptorNonRootImpl(containingDeclaration, listOf(), name), JavaPackageFragmentDescriptor, LazyJavaDescriptor { protected abstract val _memberScope: JetScope override fun getMemberScope() = _memberScope + override fun getJavaDescriptorResolver(): JavaDescriptorResolver = c.javaDescriptorResolver + + override fun accept(visitor: DeclarationDescriptorVisitor, data: D) = visitor.visitPackageFragmentDescriptor(this, data) as R + + override fun substitute(substitutor: TypeSubstitutor) = this + override fun toString() = "lazy java package fragment: " + getFqName() } public class LazyPackageFragmentForJavaPackage( c: LazyJavaResolverContext, - containingDeclaration: NamespaceDescriptorParent, + containingDeclaration: ModuleDescriptor, val jPackage: JavaPackage ) : LazyJavaPackageFragment(c, containingDeclaration, jPackage.getFqName().shortNameOrSpecial()) { override fun getFqName(): FqName = jPackage.getFqName() @@ -38,7 +46,7 @@ public class LazyPackageFragmentForJavaPackage( public class LazyPackageFragmentForJavaClass( c: LazyJavaResolverContext, - containingDeclaration: NamespaceDescriptorParent, + containingDeclaration: ModuleDescriptor, val jClass: JavaClass ) : LazyJavaPackageFragment(c, containingDeclaration, jClass.getFqName().sure("Attempt to build a package of an anonymous/local class: $jClass") diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragmentScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragmentScope.kt index db834bae408..c65ff109cac 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragmentScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragmentScope.kt @@ -11,7 +11,6 @@ import org.jetbrains.jet.lang.resolve.java.structure.JavaPackage import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.utils.flatten import org.jetbrains.jet.lang.resolve.java.structure.JavaClass -import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver import org.jetbrains.kotlin.util.inn import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule @@ -20,7 +19,7 @@ public abstract class LazyJavaPackageFragmentScope( packageFragment: LazyJavaPackageFragment ) : LazyJavaMemberScope(c.withTypes(), packageFragment) { - protected val fqName: FqName = DescriptorUtils.getFQName(packageFragment).toSafe() + protected val fqName: FqName = DescriptorUtils.getFqName(packageFragment).toSafe() private val classes = c.storageManager.createMemoizedFunctionWithNullableValues { name -> val fqName = fqName.child(name) @@ -49,7 +48,8 @@ public abstract class LazyJavaPackageFragmentScope( override fun getClassifier(name: Name): ClassifierDescriptor? = classes(name) - override fun getNamespace(name: Name): NamespaceDescriptor? = c.javaDescriptorResolver.resolveNamespace(getContainingDeclaration().getFqName().child(name), DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES) + // Package fragments are not nested + override fun getPackage(name: Name) = null override fun getImplicitReceiversHierarchy(): List = listOf() diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptor.java index 55572df16b2..fa9951ce885 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptor.java @@ -16,6 +16,7 @@ package org.jetbrains.jet.lang.descriptors; +import jet.runtime.typeinfo.KotlinSignature; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.annotations.Annotated; @@ -37,6 +38,7 @@ public interface DeclarationDescriptor extends Annotated, Named { @Nullable DeclarationDescriptor substitute(@NotNull TypeSubstitutor substitutor); + @KotlinSignature("fun accept(visitor: DeclarationDescriptorVisitor, data: D): R") R accept(DeclarationDescriptorVisitor visitor, D data); void acceptVoid(DeclarationDescriptorVisitor visitor); }