Extract interface JavaPackageFragmentDescriptor
This commit is contained in:
+3
-3
@@ -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;
|
||||
|
||||
+1
-73
@@ -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<JavaPackageFragmentDescriptor, JavaPackageFragmentScope> scopeFactory
|
||||
) {
|
||||
super(Collections.<AnnotationDescriptor>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<JavaPackageFragmentDescriptor, JavaPackageFragmentScope> 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, D> R accept(DeclarationDescriptorVisitor<R, D> 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 {
|
||||
}
|
||||
|
||||
+93
@@ -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<JavaPackageFragmentDescriptor, JavaPackageFragmentScope> scopeFactory
|
||||
) {
|
||||
super(Collections.<AnnotationDescriptor>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<JavaPackageFragmentDescriptor, JavaPackageFragmentScope> 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, D> R accept(DeclarationDescriptorVisitor<R, D> 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;
|
||||
}
|
||||
}
|
||||
+9
-9
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
+4
-7
@@ -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) {
|
||||
|
||||
+5
-4
@@ -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<FqName, JavaPackageFragmentDescriptor> packageFragments = Maps.newHashMap();
|
||||
private final Map<FqName, JavaPackageFragmentDescriptorImpl> packageFragments = Maps.newHashMap();
|
||||
|
||||
private JavaClassFinder javaClassFinder;
|
||||
private JavaResolverCache cache;
|
||||
@@ -95,7 +96,7 @@ public final class JavaPackageFragmentProvider implements PackageFragmentProvide
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<FqName> 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<JavaPackageFragmentDescriptor, JavaPackageFragmentScope>() {
|
||||
@Override
|
||||
@Nullable
|
||||
|
||||
+2
-2
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user