diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaVisibilities.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaVisibilities.java index 1f971efe0b6..8c0e6af6460 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaVisibilities.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaVisibilities.java @@ -19,8 +19,7 @@ package org.jetbrains.jet.lang.resolve.java; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.DescriptorUtils; -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptorImpl; -import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils; +import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor; public class JavaVisibilities { private JavaVisibilities() { @@ -67,9 +66,12 @@ public class JavaVisibilities { // protected static function or property else { DeclarationDescriptor whatDeclarationDescriptor = what.getContainingDeclaration(); - assert whatDeclarationDescriptor instanceof JavaPackageFragmentDescriptorImpl : "Only static declarations can have protected_static visibility"; - whatClass = DescriptorResolverUtils - .getClassForCorrespondingJavaPackage((JavaPackageFragmentDescriptorImpl) whatDeclarationDescriptor); + + assert whatDeclarationDescriptor instanceof JavaPackageFragmentDescriptor : "Only static declarations can have protected_static visibility"; + JavaPackageFragmentDescriptor javaPackageFragmentDescriptor = (JavaPackageFragmentDescriptor) whatDeclarationDescriptor; + + whatClass = javaPackageFragmentDescriptor.getJavaDescriptorResolver().resolveClass( + javaPackageFragmentDescriptor.getFqName()); } assert whatClass != null : "Couldn't find ClassDescriptor for protected static member " + what; diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java index 16af06c46dd..120f03965e8 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java @@ -30,7 +30,6 @@ import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils; import org.jetbrains.jet.lang.resolve.java.structure.*; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.TypeConstructor; import org.jetbrains.jet.lang.types.TypeProjection; import org.jetbrains.jet.lang.types.TypeProjectionImpl; @@ -270,67 +269,6 @@ public final class DescriptorResolverUtils { return TypeSubstitutor.create(typeSubstitutionContext); } - @Nullable - private static JavaClassDescriptor findClassInScope(@NotNull JetScope memberScope, @NotNull Name name) { - ClassifierDescriptor classifier = memberScope.getClassifier(name); - if (classifier instanceof JavaClassDescriptor) { - return (JavaClassDescriptor) classifier; - } - return null; - } - - // E.g. we have foo.Bar.Baz class declared in Java. It will produce the following descriptors structure: - // package fragment foo - // +-- class Bar - // | +-- class Baz - // +-- package fragment Bar - // We need to find class 'Baz' in fragment 'foo.Bar'. - @Nullable - static JavaClassDescriptor findClassInPackage(@NotNull JavaPackageFragmentDescriptorImpl fragment, @NotNull Name name) { - // First, try to find in fragment directly - JavaClassDescriptor found = findClassInScope(fragment.getMemberScope(), name); - if (found != null) { - return found; - } - - // If unsuccessful, try to find class of the same name as current (class 'foo.Bar') - JavaPackageFragmentDescriptorImpl parentPackage = getParentPackage(fragment); - if (parentPackage == null) { - return null; - } - - // Calling recursively, looking for 'Bar' in 'foo' - ClassDescriptor classForCurrentPackage = findClassInPackage(parentPackage, fragment.getName()); - if (classForCurrentPackage != null) { - // Try to find nested class 'Baz' in class 'foo.Bar' - return findClassInScope(DescriptorUtils.getStaticNestedClassesScope(classForCurrentPackage), name); - } - - return null; - } - - @Nullable - private static JavaPackageFragmentDescriptorImpl getParentPackage(@NotNull JavaPackageFragmentDescriptorImpl fragment) { - FqName fqName = fragment.getFqName(); - if (fqName.isRoot()) { - return null; - } - - JavaPackageFragmentDescriptorImpl parentPackage = fragment.getProvider().getOrCreatePackage(fqName.parent()); - assert parentPackage != null : " couldn't find parent package for " + fragment; - return parentPackage; - } - - @Nullable - public static JavaClassDescriptor getClassForCorrespondingJavaPackage(@NotNull JavaPackageFragmentDescriptorImpl fragment) { - JavaPackageFragmentDescriptorImpl parentPackage = getParentPackage(fragment); - if (parentPackage == null) { - return null; - } - - return findClassInPackage(parentPackage, fragment.getFqName().shortName()); - } - @Nullable public static JavaPackageFragmentDescriptor getPackageForCorrespondingJavaClass(@NotNull JavaClassDescriptor javaClass) { PackageFragmentDescriptor packageFragment = DescriptorUtils.getParentOfType(javaClass, PackageFragmentDescriptor.class); diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java index dc197bc9683..9aa31cbc865 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java @@ -194,8 +194,8 @@ public final class JavaFunctionResolver { } } - if (owner instanceof JavaPackageFragmentDescriptorImpl) { - SamConstructorDescriptor samConstructor = resolveSamConstructor((JavaPackageFragmentDescriptorImpl) owner, members); + if (owner instanceof JavaPackageFragmentDescriptor) { + SamConstructorDescriptor samConstructor = resolveSamConstructor((JavaPackageFragmentDescriptor) owner, members); if (samConstructor != null) { functionsFromCurrent.add(samConstructor); } @@ -225,11 +225,11 @@ public final class JavaFunctionResolver { } @Nullable - public static SamConstructorDescriptor resolveSamConstructor(@NotNull JavaPackageFragmentDescriptorImpl owner, @NotNull NamedMembers namedMembers) { + public static SamConstructorDescriptor resolveSamConstructor(@NotNull JavaPackageFragmentDescriptor owner, @NotNull NamedMembers namedMembers) { if (namedMembers.getSamInterface() != null) { - JavaClassDescriptor klass = DescriptorResolverUtils.findClassInPackage(owner, namedMembers.getName()); - if (klass != null) { - return createSamConstructorFunction(owner, klass); + ClassDescriptor klass = owner.getJavaDescriptorResolver().resolveClass(owner.getFqName().child(namedMembers.getName())); + if (klass instanceof JavaClassDescriptor) { + return createSamConstructorFunction(owner, (JavaClassDescriptor) klass); } } return null; diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPurePackageScope.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPurePackageScope.java index c7af663de47..dfe51fbb350 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPurePackageScope.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPurePackageScope.java @@ -19,9 +19,12 @@ package org.jetbrains.jet.lang.resolve.java.scope; import com.google.common.collect.Lists; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptorImpl; +import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor; import org.jetbrains.jet.lang.resolve.java.descriptor.SamConstructorDescriptor; -import org.jetbrains.jet.lang.resolve.java.resolver.*; +import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils; +import org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver; +import org.jetbrains.jet.lang.resolve.java.resolver.JavaMemberResolver; +import org.jetbrains.jet.lang.resolve.java.resolver.ProgressChecker; import org.jetbrains.jet.lang.resolve.java.structure.JavaClass; import org.jetbrains.jet.lang.resolve.java.structure.JavaPackage; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -97,7 +100,7 @@ public final class JavaPurePackageScope extends JavaBaseScope implements JavaPac if (members == null) { return Collections.emptySet(); } - SamConstructorDescriptor samConstructor = JavaFunctionResolver.resolveSamConstructor((JavaPackageFragmentDescriptorImpl) descriptor, members); + SamConstructorDescriptor samConstructor = JavaFunctionResolver.resolveSamConstructor((JavaPackageFragmentDescriptor) descriptor, members); if (samConstructor == null) { return Collections.emptySet(); }