diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java index d1fb957b408..524091ae94e 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java @@ -41,6 +41,7 @@ import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants; import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor; +import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptorImpl; import org.jetbrains.jet.lang.resolve.java.mapping.KotlinToJavaTypesMap; import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider; import org.jetbrains.jet.lang.resolve.java.scope.JavaClassStaticMembersScope; @@ -144,7 +145,7 @@ public class JetTypeMapper extends BindingTraceAware { throw new IllegalStateException("Unexpected scope: " + packageScope.getClass()); } - JavaPackageFragmentProvider javaFragmentProvider = ((JavaPackageFragmentDescriptor) packageFragment).getProvider(); + JavaPackageFragmentProvider javaFragmentProvider = ((JavaPackageFragmentDescriptorImpl) packageFragment).getProvider(); StringBuilder r = new StringBuilder(); for (FqName pathItem : packageFragment.getFqName().parent().path()) { 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 7ecd3dced73..1f971efe0b6 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,7 +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.JavaPackageFragmentDescriptor; +import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptorImpl; import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils; public class JavaVisibilities { @@ -67,9 +67,9 @@ public class JavaVisibilities { // protected static function or property else { DeclarationDescriptor whatDeclarationDescriptor = what.getContainingDeclaration(); - assert whatDeclarationDescriptor instanceof JavaPackageFragmentDescriptor : "Only static declarations can have protected_static visibility"; + assert whatDeclarationDescriptor instanceof JavaPackageFragmentDescriptorImpl : "Only static declarations can have protected_static visibility"; whatClass = DescriptorResolverUtils - .getClassForCorrespondingJavaPackage((JavaPackageFragmentDescriptor) whatDeclarationDescriptor); + .getClassForCorrespondingJavaPackage((JavaPackageFragmentDescriptorImpl) whatDeclarationDescriptor); } 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/descriptor/JavaPackageFragmentDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaPackageFragmentDescriptor.java index be10fa5e23f..bb034261a8c 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaPackageFragmentDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaPackageFragmentDescriptor.java @@ -16,79 +16,7 @@ package org.jetbrains.jet.lang.resolve.java.descriptor; -import com.intellij.util.NullableFunction; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorVisitor; -import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; -import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; -import org.jetbrains.jet.lang.descriptors.impl.DeclarationDescriptorImpl; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider; -import org.jetbrains.jet.lang.resolve.java.scope.JavaPackageFragmentScope; -import org.jetbrains.jet.lang.resolve.name.FqName; -import org.jetbrains.jet.lang.types.TypeSubstitutor; -import java.util.Collections; - -public class JavaPackageFragmentDescriptor extends DeclarationDescriptorImpl implements PackageFragmentDescriptor { - private final JavaPackageFragmentProvider provider; - private final FqName fqName; - private final JavaPackageFragmentScope memberScope; - - private JavaPackageFragmentDescriptor( - @NotNull JavaPackageFragmentProvider provider, - @NotNull FqName fqName, - @NotNull NullableFunction scopeFactory - ) { - super(Collections.emptyList(), fqName.shortNameOrSpecial()); - this.provider = provider; - this.fqName = fqName; - this.memberScope = scopeFactory.fun(this); - } - - @Nullable - public static JavaPackageFragmentDescriptor create( - @NotNull JavaPackageFragmentProvider provider, - @NotNull FqName fqName, - @NotNull NullableFunction scopeFactory - ) { - JavaPackageFragmentDescriptor descriptor = new JavaPackageFragmentDescriptor(provider, fqName, scopeFactory); - return descriptor.memberScope == null ? null : descriptor; - } - - @NotNull - @Override - public ModuleDescriptor getContainingDeclaration() { - return provider.getModule(); - } - - @Nullable - @Override - public DeclarationDescriptor substitute(@NotNull TypeSubstitutor substitutor) { - return this; - } - - @Override - public R accept(DeclarationDescriptorVisitor visitor, D data) { - return visitor.visitPackageFragmentDescriptor(this, data); - } - - @NotNull - @Override - public JavaPackageFragmentScope getMemberScope() { - return memberScope; - } - - @NotNull - @Override - public FqName getFqName() { - return fqName; - } - - @NotNull - public JavaPackageFragmentProvider getProvider() { - return provider; - } +public interface JavaPackageFragmentDescriptor extends PackageFragmentDescriptor { } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaPackageFragmentDescriptorImpl.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaPackageFragmentDescriptorImpl.java new file mode 100644 index 00000000000..87cecd413f0 --- /dev/null +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaPackageFragmentDescriptorImpl.java @@ -0,0 +1,93 @@ +/* + * Copyright 2010-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.resolve.java.descriptor; + +import com.intellij.util.NullableFunction; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorVisitor; +import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; +import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; +import org.jetbrains.jet.lang.descriptors.impl.DeclarationDescriptorImpl; +import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider; +import org.jetbrains.jet.lang.resolve.java.scope.JavaPackageFragmentScope; +import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.types.TypeSubstitutor; + +import java.util.Collections; + +public class JavaPackageFragmentDescriptorImpl extends DeclarationDescriptorImpl implements JavaPackageFragmentDescriptor { + private final JavaPackageFragmentProvider provider; + private final FqName fqName; + private final JavaPackageFragmentScope memberScope; + + private JavaPackageFragmentDescriptorImpl( + @NotNull JavaPackageFragmentProvider provider, + @NotNull FqName fqName, + @NotNull NullableFunction scopeFactory + ) { + super(Collections.emptyList(), fqName.shortNameOrSpecial()); + this.provider = provider; + this.fqName = fqName; + this.memberScope = scopeFactory.fun(this); + } + + @Nullable + public static JavaPackageFragmentDescriptorImpl create( + @NotNull JavaPackageFragmentProvider provider, + @NotNull FqName fqName, + @NotNull NullableFunction scopeFactory + ) { + JavaPackageFragmentDescriptorImpl descriptor = new JavaPackageFragmentDescriptorImpl(provider, fqName, scopeFactory); + return descriptor.memberScope == null ? null : descriptor; + } + + @NotNull + @Override + public ModuleDescriptor getContainingDeclaration() { + return provider.getModule(); + } + + @Nullable + @Override + public DeclarationDescriptor substitute(@NotNull TypeSubstitutor substitutor) { + return this; + } + + @Override + public R accept(DeclarationDescriptorVisitor visitor, D data) { + return visitor.visitPackageFragmentDescriptor(this, data); + } + + @NotNull + @Override + public JavaPackageFragmentScope getMemberScope() { + return memberScope; + } + + @NotNull + @Override + public FqName getFqName() { + return fqName; + } + + @NotNull + public JavaPackageFragmentProvider getProvider() { + return provider; + } +} 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 a9cdf79d9fa..16af06c46dd 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 @@ -23,9 +23,9 @@ import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.OverridingUtil; import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames; -import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor; import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor; +import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptorImpl; 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; @@ -286,7 +286,7 @@ public final class DescriptorResolverUtils { // +-- package fragment Bar // We need to find class 'Baz' in fragment 'foo.Bar'. @Nullable - static JavaClassDescriptor findClassInPackage(@NotNull JavaPackageFragmentDescriptor fragment, @NotNull Name name) { + 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) { @@ -294,7 +294,7 @@ public final class DescriptorResolverUtils { } // If unsuccessful, try to find class of the same name as current (class 'foo.Bar') - JavaPackageFragmentDescriptor parentPackage = getParentPackage(fragment); + JavaPackageFragmentDescriptorImpl parentPackage = getParentPackage(fragment); if (parentPackage == null) { return null; } @@ -310,20 +310,20 @@ public final class DescriptorResolverUtils { } @Nullable - private static JavaPackageFragmentDescriptor getParentPackage(@NotNull JavaPackageFragmentDescriptor fragment) { + private static JavaPackageFragmentDescriptorImpl getParentPackage(@NotNull JavaPackageFragmentDescriptorImpl fragment) { FqName fqName = fragment.getFqName(); if (fqName.isRoot()) { return null; } - JavaPackageFragmentDescriptor parentPackage = fragment.getProvider().getOrCreatePackage(fqName.parent()); + 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 JavaPackageFragmentDescriptor fragment) { - JavaPackageFragmentDescriptor parentPackage = getParentPackage(fragment); + public static JavaClassDescriptor getClassForCorrespondingJavaPackage(@NotNull JavaPackageFragmentDescriptorImpl fragment) { + JavaPackageFragmentDescriptorImpl parentPackage = getParentPackage(fragment); if (parentPackage == null) { return null; } @@ -334,10 +334,10 @@ public final class DescriptorResolverUtils { @Nullable public static JavaPackageFragmentDescriptor getPackageForCorrespondingJavaClass(@NotNull JavaClassDescriptor javaClass) { PackageFragmentDescriptor packageFragment = DescriptorUtils.getParentOfType(javaClass, PackageFragmentDescriptor.class); - assert packageFragment instanceof JavaPackageFragmentDescriptor : + assert packageFragment instanceof JavaPackageFragmentDescriptorImpl : "java class " + javaClass + " is under non-java fragment: " + packageFragment; - JavaPackageFragmentProvider provider = ((JavaPackageFragmentDescriptor) packageFragment).getProvider(); + JavaPackageFragmentProvider provider = ((JavaPackageFragmentDescriptorImpl) packageFragment).getProvider(); return provider.getOrCreatePackage(getFqNameSafe(javaClass)); } 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 aa25d8ee037..dc197bc9683 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 @@ -21,10 +21,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.impl.SimpleFunctionDescriptorImpl; import org.jetbrains.jet.lang.resolve.DescriptorUtils; -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor; -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaMethodDescriptor; -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.descriptor.*; import org.jetbrains.jet.lang.resolve.java.scope.NamedMembers; import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod; import org.jetbrains.jet.lang.resolve.java.structure.JavaType; @@ -197,8 +194,8 @@ public final class JavaFunctionResolver { } } - if (owner instanceof JavaPackageFragmentDescriptor) { - SamConstructorDescriptor samConstructor = resolveSamConstructor((JavaPackageFragmentDescriptor) owner, members); + if (owner instanceof JavaPackageFragmentDescriptorImpl) { + SamConstructorDescriptor samConstructor = resolveSamConstructor((JavaPackageFragmentDescriptorImpl) owner, members); if (samConstructor != null) { functionsFromCurrent.add(samConstructor); } @@ -228,7 +225,7 @@ public final class JavaFunctionResolver { } @Nullable - public static SamConstructorDescriptor resolveSamConstructor(@NotNull JavaPackageFragmentDescriptor owner, @NotNull NamedMembers namedMembers) { + public static SamConstructorDescriptor resolveSamConstructor(@NotNull JavaPackageFragmentDescriptorImpl owner, @NotNull NamedMembers namedMembers) { if (namedMembers.getSamInterface() != null) { JavaClassDescriptor klass = DescriptorResolverUtils.findClassInPackage(owner, namedMembers.getName()); if (klass != null) { diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPackageFragmentProvider.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPackageFragmentProvider.java index 8cad077d73d..1b65c9d34dd 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPackageFragmentProvider.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPackageFragmentProvider.java @@ -27,6 +27,7 @@ import org.jetbrains.jet.lang.descriptors.PackageFragmentProvider; import org.jetbrains.jet.lang.resolve.java.JavaClassFinder; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor; +import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptorImpl; import org.jetbrains.jet.lang.resolve.java.scope.JavaClassStaticMembersScope; import org.jetbrains.jet.lang.resolve.java.scope.JavaFullPackageScope; import org.jetbrains.jet.lang.resolve.java.scope.JavaPackageFragmentScope; @@ -45,7 +46,7 @@ import java.util.*; public final class JavaPackageFragmentProvider implements PackageFragmentProvider { @NotNull - private final Map packageFragments = Maps.newHashMap(); + private final Map packageFragments = Maps.newHashMap(); private JavaClassFinder javaClassFinder; private JavaResolverCache cache; @@ -95,7 +96,7 @@ public final class JavaPackageFragmentProvider implements PackageFragmentProvide @NotNull @Override public Collection getSubPackagesOf(@NotNull FqName fqName) { - JavaPackageFragmentDescriptor packageFragment = getOrCreatePackage(fqName); + JavaPackageFragmentDescriptorImpl packageFragment = getOrCreatePackage(fqName); if (packageFragment == null) { return Collections.emptyList(); } @@ -104,12 +105,12 @@ public final class JavaPackageFragmentProvider implements PackageFragmentProvide } @Nullable - public JavaPackageFragmentDescriptor getOrCreatePackage(@NotNull final FqName fqName) { + public JavaPackageFragmentDescriptorImpl getOrCreatePackage(@NotNull final FqName fqName) { if (packageFragments.containsKey(fqName)) { return packageFragments.get(fqName); } - JavaPackageFragmentDescriptor packageFragment = JavaPackageFragmentDescriptor.create( + JavaPackageFragmentDescriptorImpl packageFragment = JavaPackageFragmentDescriptorImpl.create( this, fqName, new NullableFunction() { @Override @Nullable 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 9827797e467..c7af663de47 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,7 +19,7 @@ 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.JavaPackageFragmentDescriptor; +import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptorImpl; import org.jetbrains.jet.lang.resolve.java.descriptor.SamConstructorDescriptor; import org.jetbrains.jet.lang.resolve.java.resolver.*; import org.jetbrains.jet.lang.resolve.java.structure.JavaClass; @@ -97,7 +97,7 @@ public final class JavaPurePackageScope extends JavaBaseScope implements JavaPac if (members == null) { return Collections.emptySet(); } - SamConstructorDescriptor samConstructor = JavaFunctionResolver.resolveSamConstructor((JavaPackageFragmentDescriptor) descriptor, members); + SamConstructorDescriptor samConstructor = JavaFunctionResolver.resolveSamConstructor((JavaPackageFragmentDescriptorImpl) descriptor, members); if (samConstructor == null) { return Collections.emptySet(); }