Simplify PsiDeclarationProvider
- simplify hierarchy, now there's only two kinds of providers: for packages and for classes - remove getters from providers and thus almost get rid of dependencies on them from the outside resolver (the only usages left are those that call getMembersCache)
This commit is contained in:
committed by
Pavel V. Talanov
parent
d708dc6ed4
commit
e2d6234c9c
+15
-17
@@ -16,12 +16,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java;
|
package org.jetbrains.jet.lang.resolve.java;
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiClass;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.PackagePsiDeclarationProvider;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.*;
|
import org.jetbrains.jet.lang.resolve.java.resolver.*;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
@@ -191,10 +190,8 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Collection<ConstructorDescriptor> resolveConstructors(
|
public Collection<ConstructorDescriptor> resolveConstructors(@NotNull PsiClass psiClass, @NotNull ClassDescriptor classDescriptor) {
|
||||||
@NotNull ClassPsiDeclarationProvider classData, @NotNull ClassDescriptor classDescriptor
|
return constructorResolver.resolveConstructors(psiClass, classDescriptor);
|
||||||
) {
|
|
||||||
return constructorResolver.resolveConstructors(classData, classDescriptor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -215,10 +212,10 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
@NotNull
|
@NotNull
|
||||||
public Set<VariableDescriptor> resolveFieldGroupByName(
|
public Set<VariableDescriptor> resolveFieldGroupByName(
|
||||||
@NotNull Name name,
|
@NotNull Name name,
|
||||||
@NotNull PsiDeclarationProvider data,
|
@NotNull PsiDeclarationProvider provider,
|
||||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
||||||
) {
|
) {
|
||||||
return propertiesResolver.resolveFieldGroupByName(name, data, ownerDescriptor);
|
return propertiesResolver.resolveFieldGroupByName(name, provider, ownerDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -247,25 +244,26 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Set<FunctionDescriptor> resolveFunctionGroup(
|
public Set<FunctionDescriptor> resolveFunctionGroupForClass(
|
||||||
@NotNull Name methodName,
|
@NotNull Name methodName,
|
||||||
@NotNull ClassPsiDeclarationProvider scopeData,
|
@NotNull PsiDeclarationProvider provider,
|
||||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
@NotNull ClassOrNamespaceDescriptor ownerDescriptor,
|
||||||
|
@NotNull PsiClass psiClass
|
||||||
) {
|
) {
|
||||||
return functionResolver.resolveFunctionGroup(methodName, scopeData, ownerDescriptor);
|
return functionResolver.resolveFunctionGroupForClass(methodName, provider, ownerDescriptor, psiClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Set<FunctionDescriptor> resolveFunctionGroup(
|
public Set<FunctionDescriptor> resolveFunctionGroupForPackage(
|
||||||
@NotNull Name methodName,
|
@NotNull Name methodName,
|
||||||
@NotNull PackagePsiDeclarationProvider scopeData,
|
@NotNull PsiDeclarationProvider provider,
|
||||||
@NotNull NamespaceDescriptor ownerDescriptor
|
@NotNull NamespaceDescriptor ownerDescriptor
|
||||||
) {
|
) {
|
||||||
return functionResolver.resolveFunctionGroup(methodName, scopeData, ownerDescriptor);
|
return functionResolver.resolveFunctionGroupForPackage(methodName, provider, ownerDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<ClassDescriptor> resolveInnerClasses(@NotNull ClassPsiDeclarationProvider declarationProvider) {
|
public List<ClassDescriptor> resolveInnerClasses(@NotNull PsiClass psiClass) {
|
||||||
return innerClassResolver.resolveInnerClasses(declarationProvider);
|
return innerClassResolver.resolveInnerClasses(psiClass);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-5
@@ -18,12 +18,23 @@ package org.jetbrains.jet.lang.resolve.java.provider;
|
|||||||
|
|
||||||
import com.intellij.psi.PsiClass;
|
import com.intellij.psi.PsiClass;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||||
|
|
||||||
public interface ClassPsiDeclarationProvider extends PsiDeclarationProvider {
|
public final class ClassPsiDeclarationProvider extends PsiDeclarationProvider {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
PsiClass getPsiClass();
|
private final PsiClass psiClass;
|
||||||
|
|
||||||
//TODO: remove this method
|
private final boolean staticMembers;
|
||||||
boolean isStaticMembers();
|
|
||||||
|
public ClassPsiDeclarationProvider(@NotNull PsiClass psiClass, boolean staticMembers, @NotNull PsiClassFinder psiClassFinder) {
|
||||||
|
super(psiClassFinder);
|
||||||
|
this.staticMembers = staticMembers;
|
||||||
|
this.psiClass = psiClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@NotNull
|
||||||
|
protected MembersCache buildMembersCache() {
|
||||||
|
return MembersCache.buildMembersByNameCache(psiClassFinder, psiClass, null, staticMembers);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-54
@@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.provider;
|
|
||||||
|
|
||||||
import com.intellij.psi.PsiClass;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
|
||||||
|
|
||||||
public class ClassPsiDeclarationProviderImpl extends PsiDeclarationProviderBase implements ClassPsiDeclarationProvider {
|
|
||||||
@NotNull
|
|
||||||
protected final PsiClassFinder psiClassFinder;
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private final PsiClass psiClass;
|
|
||||||
|
|
||||||
private final boolean staticMembers;
|
|
||||||
|
|
||||||
public ClassPsiDeclarationProviderImpl(@NotNull PsiClass psiClass, boolean staticMembers, @NotNull PsiClassFinder psiClassFinder) {
|
|
||||||
this.staticMembers = staticMembers;
|
|
||||||
this.psiClass = psiClass;
|
|
||||||
this.psiClassFinder = psiClassFinder;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
protected MembersCache buildMembersCache() {
|
|
||||||
return MembersCache.buildMembersByNameCache(new MembersCache(), psiClassFinder, psiClass, null, staticMembers);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public PsiClass getPsiClass() {
|
|
||||||
return psiClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isStaticMembers() {
|
|
||||||
return staticMembers;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+3
-1
@@ -99,12 +99,13 @@ public final class MembersCache {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static MembersCache buildMembersByNameCache(
|
public static MembersCache buildMembersByNameCache(
|
||||||
@NotNull MembersCache membersCache,
|
|
||||||
@NotNull PsiClassFinder finder,
|
@NotNull PsiClassFinder finder,
|
||||||
@Nullable PsiClass psiClass,
|
@Nullable PsiClass psiClass,
|
||||||
@Nullable PsiPackage psiPackage,
|
@Nullable PsiPackage psiPackage,
|
||||||
boolean staticMembers
|
boolean staticMembers
|
||||||
) {
|
) {
|
||||||
|
MembersCache membersCache = new MembersCache();
|
||||||
|
|
||||||
if (psiClass != null) {
|
if (psiClass != null) {
|
||||||
membersCache.new ClassMemberProcessor(psiClass, staticMembers).process();
|
membersCache.new ClassMemberProcessor(psiClass, staticMembers).process();
|
||||||
}
|
}
|
||||||
@@ -112,6 +113,7 @@ public final class MembersCache {
|
|||||||
//TODO:
|
//TODO:
|
||||||
List<PsiClass> classes = psiPackage != null ? finder.findPsiClasses(psiPackage) : finder.findInnerPsiClasses(psiClass);
|
List<PsiClass> classes = psiPackage != null ? finder.findPsiClasses(psiPackage) : finder.findInnerPsiClasses(psiClass);
|
||||||
membersCache.new ExtraPackageMembersProcessor(classes).process();
|
membersCache.new ExtraPackageMembersProcessor(classes).process();
|
||||||
|
|
||||||
return membersCache;
|
return membersCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+13
-2
@@ -18,9 +18,20 @@ package org.jetbrains.jet.lang.resolve.java.provider;
|
|||||||
|
|
||||||
import com.intellij.psi.PsiPackage;
|
import com.intellij.psi.PsiPackage;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||||
|
|
||||||
public interface PackagePsiDeclarationProvider extends PsiDeclarationProvider {
|
public final class PackagePsiDeclarationProvider extends PsiDeclarationProvider {
|
||||||
|
@NotNull
|
||||||
|
private final PsiPackage psiPackage;
|
||||||
|
|
||||||
|
public PackagePsiDeclarationProvider(@NotNull PsiPackage psiPackage, @NotNull PsiClassFinder psiClassFinder) {
|
||||||
|
super(psiClassFinder);
|
||||||
|
this.psiPackage = psiPackage;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
PsiPackage getPsiPackage();
|
@Override
|
||||||
|
protected MembersCache buildMembersCache() {
|
||||||
|
return MembersCache.buildMembersByNameCache(psiClassFinder, null, psiPackage, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-46
@@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.provider;
|
|
||||||
|
|
||||||
import com.intellij.psi.PsiPackage;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
|
||||||
|
|
||||||
public final class PackagePsiDeclarationProviderImpl extends PsiDeclarationProviderBase implements PackagePsiDeclarationProvider {
|
|
||||||
@NotNull
|
|
||||||
private final PsiPackage psiPackage;
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private final PsiClassFinder psiClassFinder;
|
|
||||||
|
|
||||||
public PackagePsiDeclarationProviderImpl(@NotNull PsiPackage psiPackage, @NotNull PsiClassFinder psiClassFinder) {
|
|
||||||
this.psiPackage = psiPackage;
|
|
||||||
this.psiClassFinder = psiClassFinder;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public PsiPackage getPsiPackage() {
|
|
||||||
return psiPackage;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
protected MembersCache buildMembersCache() {
|
|
||||||
return MembersCache.buildMembersByNameCache(new MembersCache(), psiClassFinder, null, getPsiPackage(), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+19
-2
@@ -17,9 +17,26 @@
|
|||||||
package org.jetbrains.jet.lang.resolve.java.provider;
|
package org.jetbrains.jet.lang.resolve.java.provider;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||||
|
|
||||||
public interface PsiDeclarationProvider {
|
public abstract class PsiDeclarationProvider {
|
||||||
|
@NotNull
|
||||||
|
protected final PsiClassFinder psiClassFinder;
|
||||||
|
|
||||||
|
private MembersCache membersCache;
|
||||||
|
|
||||||
|
protected PsiDeclarationProvider(@NotNull PsiClassFinder psiClassFinder) {
|
||||||
|
this.psiClassFinder = psiClassFinder;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
MembersCache getMembersCache();
|
public MembersCache getMembersCache() {
|
||||||
|
if (membersCache == null) {
|
||||||
|
membersCache = buildMembersCache();
|
||||||
|
}
|
||||||
|
return membersCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
protected abstract MembersCache buildMembersCache();
|
||||||
}
|
}
|
||||||
|
|||||||
-35
@@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.provider;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
public abstract class PsiDeclarationProviderBase implements PsiDeclarationProvider {
|
|
||||||
private MembersCache membersCache = null;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public MembersCache getMembersCache() {
|
|
||||||
if (membersCache == null) {
|
|
||||||
membersCache = buildMembersCache();
|
|
||||||
}
|
|
||||||
return membersCache;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
protected abstract MembersCache buildMembersCache();
|
|
||||||
}
|
|
||||||
+12
-19
@@ -34,8 +34,6 @@ import org.jetbrains.jet.lang.resolve.BindingTrace;
|
|||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.*;
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProviderImpl;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.MembersCache;
|
import org.jetbrains.jet.lang.resolve.java.provider.MembersCache;
|
||||||
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils;
|
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassNonStaticMembersScope;
|
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassNonStaticMembersScope;
|
||||||
@@ -275,12 +273,11 @@ public final class JavaClassResolver {
|
|||||||
@NotNull PostponedTasks taskList,
|
@NotNull PostponedTasks taskList,
|
||||||
@NotNull ClassOrNamespaceDescriptor containingDeclaration
|
@NotNull ClassOrNamespaceDescriptor containingDeclaration
|
||||||
) {
|
) {
|
||||||
ClassKind kind = getClassKind(psiClass);
|
ClassDescriptorFromJvmBytecode classDescriptor = new ClassDescriptorFromJvmBytecode(containingDeclaration, getClassKind(psiClass),
|
||||||
ClassPsiDeclarationProvider classData = new ClassPsiDeclarationProviderImpl(psiClass, false, psiClassFinder);
|
isInnerClass(psiClass));
|
||||||
ClassDescriptorFromJvmBytecode classDescriptor = new ClassDescriptorFromJvmBytecode(
|
|
||||||
containingDeclaration, kind, isInnerClass(psiClass));
|
|
||||||
|
|
||||||
cache(javaClassToKotlinFqName(fqName), classDescriptor);
|
cache(javaClassToKotlinFqName(fqName), classDescriptor);
|
||||||
|
|
||||||
classDescriptor.setName(Name.identifier(psiClass.getName()));
|
classDescriptor.setName(Name.identifier(psiClass.getName()));
|
||||||
|
|
||||||
List<JavaSignatureResolver.TypeParameterDescriptorInitialization> typeParameterDescriptorInitializations
|
List<JavaSignatureResolver.TypeParameterDescriptorInitialization> typeParameterDescriptorInitializations
|
||||||
@@ -292,7 +289,9 @@ public final class JavaClassResolver {
|
|||||||
classDescriptor.setVisibility(DescriptorResolverUtils.resolveVisibility(psiClass));
|
classDescriptor.setVisibility(DescriptorResolverUtils.resolveVisibility(psiClass));
|
||||||
classDescriptor.setModality(resolveModality(psiClass, classDescriptor));
|
classDescriptor.setModality(resolveModality(psiClass, classDescriptor));
|
||||||
classDescriptor.createTypeConstructor();
|
classDescriptor.createTypeConstructor();
|
||||||
JavaClassNonStaticMembersScope scope = new JavaClassNonStaticMembersScope(classDescriptor, classData, javaDescriptorResolver);
|
|
||||||
|
JavaClassNonStaticMembersScope scope = new JavaClassNonStaticMembersScope(classDescriptor, psiClass, false, psiClassFinder,
|
||||||
|
javaDescriptorResolver);
|
||||||
classDescriptor.setScopeForMemberLookup(scope);
|
classDescriptor.setScopeForMemberLookup(scope);
|
||||||
classDescriptor.setScopeForConstructorResolve(scope);
|
classDescriptor.setScopeForConstructorResolve(scope);
|
||||||
|
|
||||||
@@ -505,27 +504,21 @@ public final class JavaClassResolver {
|
|||||||
private ClassDescriptorFromJvmBytecode createSyntheticClassObject(@NotNull ClassDescriptor containing, @NotNull PsiClass psiClass) {
|
private ClassDescriptorFromJvmBytecode createSyntheticClassObject(@NotNull ClassDescriptor containing, @NotNull PsiClass psiClass) {
|
||||||
ClassDescriptorFromJvmBytecode classObjectDescriptor =
|
ClassDescriptorFromJvmBytecode classObjectDescriptor =
|
||||||
new ClassDescriptorFromJvmBytecode(containing, ClassKind.CLASS_OBJECT, false);
|
new ClassDescriptorFromJvmBytecode(containing, ClassKind.CLASS_OBJECT, false);
|
||||||
ClassPsiDeclarationProvider provider = new ClassPsiDeclarationProviderImpl(psiClass, true, psiClassFinder);
|
|
||||||
setUpClassObjectDescriptor(classObjectDescriptor, containing, provider, getClassObjectName(containing.getName().asString()));
|
|
||||||
return classObjectDescriptor;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setUpClassObjectDescriptor(
|
classObjectDescriptor.setName(getClassObjectName(containing.getName()));
|
||||||
@NotNull ClassDescriptorFromJvmBytecode classObjectDescriptor,
|
|
||||||
@NotNull ClassDescriptor containing,
|
|
||||||
@NotNull ClassPsiDeclarationProvider data,
|
|
||||||
@NotNull Name classObjectName
|
|
||||||
) {
|
|
||||||
classObjectDescriptor.setName(classObjectName);
|
|
||||||
classObjectDescriptor.setModality(Modality.FINAL);
|
classObjectDescriptor.setModality(Modality.FINAL);
|
||||||
classObjectDescriptor.setVisibility(containing.getVisibility());
|
classObjectDescriptor.setVisibility(containing.getVisibility());
|
||||||
classObjectDescriptor.setTypeParameterDescriptors(Collections.<TypeParameterDescriptor>emptyList());
|
classObjectDescriptor.setTypeParameterDescriptors(Collections.<TypeParameterDescriptor>emptyList());
|
||||||
classObjectDescriptor.createTypeConstructor();
|
classObjectDescriptor.createTypeConstructor();
|
||||||
JavaClassNonStaticMembersScope scope = new JavaClassNonStaticMembersScope(classObjectDescriptor, data, javaDescriptorResolver);
|
|
||||||
|
JavaClassNonStaticMembersScope scope = new JavaClassNonStaticMembersScope(classObjectDescriptor, psiClass, true, psiClassFinder,
|
||||||
|
javaDescriptorResolver);
|
||||||
WritableScopeImpl writableScope =
|
WritableScopeImpl writableScope =
|
||||||
new WritableScopeImpl(scope, classObjectDescriptor, RedeclarationHandler.THROW_EXCEPTION, "Member lookup scope");
|
new WritableScopeImpl(scope, classObjectDescriptor, RedeclarationHandler.THROW_EXCEPTION, "Member lookup scope");
|
||||||
writableScope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
writableScope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
||||||
classObjectDescriptor.setScopeForMemberLookup(writableScope);
|
classObjectDescriptor.setScopeForMemberLookup(writableScope);
|
||||||
classObjectDescriptor.setScopeForConstructorResolve(scope);
|
classObjectDescriptor.setScopeForConstructorResolve(scope);
|
||||||
|
|
||||||
|
return classObjectDescriptor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-6
@@ -30,7 +30,6 @@ import org.jetbrains.jet.lang.resolve.BindingTrace;
|
|||||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.*;
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
@@ -68,13 +67,9 @@ public final class JavaConstructorResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Collection<ConstructorDescriptor> resolveConstructors(
|
public Collection<ConstructorDescriptor> resolveConstructors(@NotNull PsiClass psiClass, @NotNull ClassDescriptor containingClass) {
|
||||||
@NotNull ClassPsiDeclarationProvider classData, @NotNull ClassDescriptor containingClass
|
|
||||||
) {
|
|
||||||
Collection<ConstructorDescriptor> constructors = Lists.newArrayList();
|
Collection<ConstructorDescriptor> constructors = Lists.newArrayList();
|
||||||
|
|
||||||
PsiClass psiClass = classData.getPsiClass();
|
|
||||||
|
|
||||||
List<TypeParameterDescriptor> typeParameters = containingClass.getTypeConstructor().getParameters();
|
List<TypeParameterDescriptor> typeParameters = containingClass.getTypeConstructor().getParameters();
|
||||||
|
|
||||||
TypeVariableResolver typeVariableResolver =
|
TypeVariableResolver typeVariableResolver =
|
||||||
|
|||||||
+9
-11
@@ -34,9 +34,8 @@ import org.jetbrains.jet.lang.resolve.java.*;
|
|||||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesPropagationData;
|
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesPropagationData;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.PackagePsiDeclarationProvider;
|
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
@@ -369,27 +368,26 @@ public final class JavaFunctionResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Set<FunctionDescriptor> resolveFunctionGroup(
|
public Set<FunctionDescriptor> resolveFunctionGroupForClass(
|
||||||
@NotNull Name methodName,
|
@NotNull Name methodName,
|
||||||
@NotNull ClassPsiDeclarationProvider scopeData,
|
@NotNull PsiDeclarationProvider provider,
|
||||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
@NotNull ClassOrNamespaceDescriptor ownerDescriptor,
|
||||||
|
@NotNull PsiClass psiClass
|
||||||
) {
|
) {
|
||||||
|
NamedMembers namedMembers = provider.getMembersCache().get(methodName);
|
||||||
NamedMembers namedMembers = scopeData.getMembersCache().get(methodName);
|
|
||||||
if (namedMembers == null) {
|
if (namedMembers == null) {
|
||||||
return Collections.emptySet();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
PsiClass psiClass = scopeData.getPsiClass();
|
|
||||||
return resolveNamedGroupFunctions(ownerDescriptor, psiClass, namedMembers, methodName);
|
return resolveNamedGroupFunctions(ownerDescriptor, psiClass, namedMembers, methodName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Set<FunctionDescriptor> resolveFunctionGroup(
|
public Set<FunctionDescriptor> resolveFunctionGroupForPackage(
|
||||||
@NotNull Name functionName,
|
@NotNull Name functionName,
|
||||||
@NotNull PackagePsiDeclarationProvider scopeData,
|
@NotNull PsiDeclarationProvider provider,
|
||||||
@NotNull NamespaceDescriptor ownerDescriptor
|
@NotNull NamespaceDescriptor ownerDescriptor
|
||||||
) {
|
) {
|
||||||
NamedMembers namedMembers = scopeData.getMembersCache().get(functionName);
|
NamedMembers namedMembers = provider.getMembersCache().get(functionName);
|
||||||
if (namedMembers != null) {
|
if (namedMembers != null) {
|
||||||
SimpleFunctionDescriptor samConstructor = resolveSamConstructor(ownerDescriptor, namedMembers);
|
SimpleFunctionDescriptor samConstructor = resolveSamConstructor(ownerDescriptor, namedMembers);
|
||||||
if (samConstructor != null) {
|
if (samConstructor != null) {
|
||||||
|
|||||||
+1
-12
@@ -20,12 +20,10 @@ import com.intellij.psi.PsiClass;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
|
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public final class JavaInnerClassResolver {
|
public final class JavaInnerClassResolver {
|
||||||
@@ -41,16 +39,7 @@ public final class JavaInnerClassResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<ClassDescriptor> resolveInnerClasses(@NotNull ClassPsiDeclarationProvider declarationProvider) {
|
public List<ClassDescriptor> resolveInnerClasses(@NotNull PsiClass psiClass) {
|
||||||
if (declarationProvider.isStaticMembers()) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
return resolveInnerClasses(declarationProvider.getPsiClass());
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private List<ClassDescriptor> resolveInnerClasses(@NotNull PsiClass psiClass) {
|
|
||||||
PsiClass[] innerPsiClasses = psiClass.getInnerClasses();
|
PsiClass[] innerPsiClasses = psiClass.getInnerClasses();
|
||||||
List<ClassDescriptor> result = new ArrayList<ClassDescriptor>(innerPsiClasses.length);
|
List<ClassDescriptor> result = new ArrayList<ClassDescriptor>(innerPsiClasses.length);
|
||||||
for (PsiClass innerPsiClass : innerPsiClasses) {
|
for (PsiClass innerPsiClass : innerPsiClasses) {
|
||||||
|
|||||||
+2
-9
@@ -36,10 +36,7 @@ import org.jetbrains.jet.lang.resolve.BindingTrace;
|
|||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.*;
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaNamespaceDescriptor;
|
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaNamespaceDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProviderImpl;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.MembersCache;
|
import org.jetbrains.jet.lang.resolve.java.provider.MembersCache;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.PackagePsiDeclarationProvider;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.PackagePsiDeclarationProviderImpl;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaBaseScope;
|
import org.jetbrains.jet.lang.resolve.java.scope.JavaBaseScope;
|
||||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassStaticMembersScope;
|
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassStaticMembersScope;
|
||||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaPackageScope;
|
import org.jetbrains.jet.lang.resolve.java.scope.JavaPackageScope;
|
||||||
@@ -190,8 +187,7 @@ public final class JavaNamespaceResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise (if psiClass is null or doesn't have a supported Kotlin annotation), it's a Java class and the package is empty
|
// Otherwise (if psiClass is null or doesn't have a supported Kotlin annotation), it's a Java class and the package is empty
|
||||||
PackagePsiDeclarationProvider provider = new PackagePsiDeclarationProviderImpl(psiPackage, psiClassFinder);
|
return new JavaPackageScope(namespaceDescriptor, psiPackage, fqName, javaDescriptorResolver, psiClassFinder);
|
||||||
return new JavaPackageScope(namespaceDescriptor, provider, fqName, javaDescriptorResolver, psiClassFinder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PsiClass psiClass = psiClassFinder.findPsiClass(fqName, PsiClassFinder.RuntimeClassesHandleMode.IGNORE);
|
PsiClass psiClass = psiClassFinder.findPsiClass(fqName, PsiClassFinder.RuntimeClassesHandleMode.IGNORE);
|
||||||
@@ -205,10 +201,7 @@ public final class JavaNamespaceResolver {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, namespaceDescriptor, JavaNamespaceKind.CLASS_STATICS);
|
trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, namespaceDescriptor, JavaNamespaceKind.CLASS_STATICS);
|
||||||
return new JavaClassStaticMembersScope(
|
return new JavaClassStaticMembersScope(namespaceDescriptor, fqName, psiClass, psiClassFinder, javaDescriptorResolver);
|
||||||
namespaceDescriptor,
|
|
||||||
new ClassPsiDeclarationProviderImpl(psiClass, true, psiClassFinder),
|
|
||||||
fqName, javaDescriptorResolver);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isOldKotlinPackageClass(@NotNull PsiClass psiClass) {
|
private static boolean isOldKotlinPackageClass(@NotNull PsiClass psiClass) {
|
||||||
|
|||||||
+2
-2
@@ -70,10 +70,10 @@ public final class JavaPropertyResolver {
|
|||||||
@NotNull
|
@NotNull
|
||||||
public Set<VariableDescriptor> resolveFieldGroupByName(
|
public Set<VariableDescriptor> resolveFieldGroupByName(
|
||||||
@NotNull Name fieldName,
|
@NotNull Name fieldName,
|
||||||
@NotNull PsiDeclarationProvider scopeData,
|
@NotNull PsiDeclarationProvider provider,
|
||||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
||||||
) {
|
) {
|
||||||
NamedMembers namedMembers = scopeData.getMembersCache().get(fieldName);
|
NamedMembers namedMembers = provider.getMembersCache().get(fieldName);
|
||||||
if (namedMembers == null) {
|
if (namedMembers == null) {
|
||||||
return Collections.emptySet();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-11
@@ -27,9 +27,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.PackagePsiDeclarationProvider;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScopeImpl;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScopeImpl;
|
||||||
@@ -160,15 +158,7 @@ public abstract class JavaBaseScope extends JetScopeImpl {
|
|||||||
|
|
||||||
//TODO: remove this method
|
//TODO: remove this method
|
||||||
@NotNull
|
@NotNull
|
||||||
public PsiElement getPsiElement() {
|
public abstract PsiElement getPsiElement();
|
||||||
if (declarationProvider instanceof ClassPsiDeclarationProvider) {
|
|
||||||
return ((ClassPsiDeclarationProvider) declarationProvider).getPsiClass();
|
|
||||||
}
|
|
||||||
if (declarationProvider instanceof PackagePsiDeclarationProvider) {
|
|
||||||
return ((PackagePsiDeclarationProvider) declarationProvider).getPsiPackage();
|
|
||||||
}
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
protected Collection<ClassDescriptor> getInnerClasses() {
|
protected Collection<ClassDescriptor> getInnerClasses() {
|
||||||
|
|||||||
+12
-7
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.scope;
|
package org.jetbrains.jet.lang.resolve.java.scope;
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiClass;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||||
@@ -31,16 +32,26 @@ import java.util.Set;
|
|||||||
public abstract class JavaClassMembersScope extends JavaBaseScope {
|
public abstract class JavaClassMembersScope extends JavaBaseScope {
|
||||||
@NotNull
|
@NotNull
|
||||||
protected final ClassPsiDeclarationProvider declarationProvider;
|
protected final ClassPsiDeclarationProvider declarationProvider;
|
||||||
|
@NotNull
|
||||||
|
protected final PsiClass psiClass;
|
||||||
|
|
||||||
private Map<Name, ClassDescriptor> innerClassesMap = null;
|
private Map<Name, ClassDescriptor> innerClassesMap = null;
|
||||||
|
|
||||||
protected JavaClassMembersScope(
|
protected JavaClassMembersScope(
|
||||||
@NotNull ClassOrNamespaceDescriptor descriptor,
|
@NotNull ClassOrNamespaceDescriptor descriptor,
|
||||||
|
@NotNull PsiClass psiClass,
|
||||||
@NotNull ClassPsiDeclarationProvider declarationProvider,
|
@NotNull ClassPsiDeclarationProvider declarationProvider,
|
||||||
@NotNull JavaDescriptorResolver javaDescriptorResolver
|
@NotNull JavaDescriptorResolver javaDescriptorResolver
|
||||||
) {
|
) {
|
||||||
super(descriptor, javaDescriptorResolver, declarationProvider);
|
super(descriptor, javaDescriptorResolver, declarationProvider);
|
||||||
this.declarationProvider = declarationProvider;
|
this.declarationProvider = declarationProvider;
|
||||||
|
this.psiClass = psiClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public PsiClass getPsiElement() {
|
||||||
|
return psiClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -53,7 +64,7 @@ public abstract class JavaClassMembersScope extends JavaBaseScope {
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
|
protected Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
|
||||||
return javaDescriptorResolver.resolveFunctionGroup(name, declarationProvider, descriptor);
|
return javaDescriptorResolver.resolveFunctionGroupForClass(name, declarationProvider, descriptor, psiClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -68,12 +79,6 @@ public abstract class JavaClassMembersScope extends JavaBaseScope {
|
|||||||
return innerClassesMap;
|
return innerClassesMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
protected Collection<ClassDescriptor> computeInnerClasses() {
|
|
||||||
return javaDescriptorResolver.resolveInnerClasses(declarationProvider);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassDescriptor getObjectDescriptor(@NotNull Name name) {
|
public ClassDescriptor getObjectDescriptor(@NotNull Name name) {
|
||||||
ClassDescriptor innerClass = getInnerClassesMap().get(name);
|
ClassDescriptor innerClass = getInnerClassesMap().get(name);
|
||||||
|
|||||||
+25
-3
@@ -16,14 +16,17 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.scope;
|
package org.jetbrains.jet.lang.resolve.java.scope;
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiClass;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope {
|
public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope {
|
||||||
|
|
||||||
@@ -31,14 +34,24 @@ public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope
|
|||||||
private ConstructorDescriptor primaryConstructor = null;
|
private ConstructorDescriptor primaryConstructor = null;
|
||||||
@NotNull
|
@NotNull
|
||||||
private final ClassDescriptor descriptor;
|
private final ClassDescriptor descriptor;
|
||||||
|
@NotNull
|
||||||
|
private final PsiClass psiClass;
|
||||||
|
private final boolean staticMembersOfPsiClass;
|
||||||
|
|
||||||
public JavaClassNonStaticMembersScope(
|
public JavaClassNonStaticMembersScope(
|
||||||
@NotNull ClassDescriptor descriptor,
|
@NotNull ClassDescriptor descriptor,
|
||||||
@NotNull ClassPsiDeclarationProvider psiDeclarationProvider,
|
@NotNull PsiClass psiClass,
|
||||||
|
boolean staticMembersOfPsiClass,
|
||||||
|
@NotNull PsiClassFinder psiClassFinder,
|
||||||
@NotNull JavaDescriptorResolver javaDescriptorResolver
|
@NotNull JavaDescriptorResolver javaDescriptorResolver
|
||||||
) {
|
) {
|
||||||
super(descriptor, psiDeclarationProvider, javaDescriptorResolver);
|
super(descriptor,
|
||||||
|
psiClass,
|
||||||
|
new ClassPsiDeclarationProvider(psiClass, staticMembersOfPsiClass, psiClassFinder),
|
||||||
|
javaDescriptorResolver);
|
||||||
this.descriptor = descriptor;
|
this.descriptor = descriptor;
|
||||||
|
this.psiClass = psiClass;
|
||||||
|
this.staticMembersOfPsiClass = staticMembersOfPsiClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -56,7 +69,7 @@ public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope
|
|||||||
|
|
||||||
private void initConstructorsIfNeeded() {
|
private void initConstructorsIfNeeded() {
|
||||||
if (constructors == null) {
|
if (constructors == null) {
|
||||||
constructors = javaDescriptorResolver.resolveConstructors(declarationProvider, descriptor);
|
constructors = javaDescriptorResolver.resolveConstructors(psiClass, descriptor);
|
||||||
|
|
||||||
for (ConstructorDescriptor constructor : constructors) {
|
for (ConstructorDescriptor constructor : constructors) {
|
||||||
if (constructor.isPrimary()) {
|
if (constructor.isPrimary()) {
|
||||||
@@ -69,4 +82,13 @@ public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
protected Collection<ClassDescriptor> computeInnerClasses() {
|
||||||
|
if (staticMembersOfPsiClass) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
return javaDescriptorResolver.resolveInnerClasses(psiClass);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-3
@@ -19,28 +19,35 @@ package org.jetbrains.jet.lang.resolve.java.scope;
|
|||||||
import com.intellij.psi.PsiClass;
|
import com.intellij.psi.PsiClass;
|
||||||
import com.intellij.util.containers.ContainerUtil;
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
|
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
public final class JavaClassStaticMembersScope extends JavaClassMembersScope {
|
public final class JavaClassStaticMembersScope extends JavaClassMembersScope {
|
||||||
@NotNull
|
@NotNull
|
||||||
private final FqName packageFQN;
|
private final FqName packageFQN;
|
||||||
|
@NotNull
|
||||||
|
private final PsiClass psiClass;
|
||||||
|
|
||||||
public JavaClassStaticMembersScope(
|
public JavaClassStaticMembersScope(
|
||||||
@NotNull NamespaceDescriptor descriptor,
|
@NotNull NamespaceDescriptor descriptor,
|
||||||
@NotNull ClassPsiDeclarationProvider declarationProvider,
|
|
||||||
@NotNull FqName packageFQN,
|
@NotNull FqName packageFQN,
|
||||||
|
@NotNull PsiClass psiClass,
|
||||||
|
@NotNull PsiClassFinder psiClassFinder,
|
||||||
@NotNull JavaDescriptorResolver javaDescriptorResolver
|
@NotNull JavaDescriptorResolver javaDescriptorResolver
|
||||||
) {
|
) {
|
||||||
super(descriptor, declarationProvider, javaDescriptorResolver);
|
super(descriptor, psiClass, new ClassPsiDeclarationProvider(psiClass, true, psiClassFinder), javaDescriptorResolver);
|
||||||
this.packageFQN = packageFQN;
|
this.packageFQN = packageFQN;
|
||||||
|
this.psiClass = psiClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -52,9 +59,15 @@ public final class JavaClassStaticMembersScope extends JavaClassMembersScope {
|
|||||||
@Override
|
@Override
|
||||||
protected Collection<DeclarationDescriptor> computeAllDescriptors() {
|
protected Collection<DeclarationDescriptor> computeAllDescriptors() {
|
||||||
Collection<DeclarationDescriptor> result = super.computeAllDescriptors();
|
Collection<DeclarationDescriptor> result = super.computeAllDescriptors();
|
||||||
for (PsiClass nested : declarationProvider.getPsiClass().getInnerClasses()) {
|
for (PsiClass nested : psiClass.getInnerClasses()) {
|
||||||
ContainerUtil.addIfNotNull(result, getNamespace(Name.identifier(nested.getName())));
|
ContainerUtil.addIfNotNull(result, getNamespace(Name.identifier(nested.getName())));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
protected Collection<ClassDescriptor> computeInnerClasses() {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-6
@@ -33,6 +33,8 @@ import java.util.Collections;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public final class JavaPackageScope extends JavaBaseScope {
|
public final class JavaPackageScope extends JavaBaseScope {
|
||||||
|
@NotNull
|
||||||
|
private final PsiPackage psiPackage;
|
||||||
@NotNull
|
@NotNull
|
||||||
private final FqName packageFQN;
|
private final FqName packageFQN;
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -40,16 +42,23 @@ public final class JavaPackageScope extends JavaBaseScope {
|
|||||||
|
|
||||||
public JavaPackageScope(
|
public JavaPackageScope(
|
||||||
@NotNull NamespaceDescriptor descriptor,
|
@NotNull NamespaceDescriptor descriptor,
|
||||||
@NotNull PackagePsiDeclarationProvider declarationProvider,
|
@NotNull PsiPackage psiPackage,
|
||||||
@NotNull FqName packageFQN,
|
@NotNull FqName packageFQN,
|
||||||
@NotNull JavaDescriptorResolver javaDescriptorResolver,
|
@NotNull JavaDescriptorResolver javaDescriptorResolver,
|
||||||
@NotNull PsiClassFinder psiClassFinder
|
@NotNull PsiClassFinder psiClassFinder
|
||||||
) {
|
) {
|
||||||
super(descriptor, javaDescriptorResolver, declarationProvider);
|
super(descriptor, javaDescriptorResolver, new PackagePsiDeclarationProvider(psiPackage, psiClassFinder));
|
||||||
|
this.psiPackage = psiPackage;
|
||||||
this.packageFQN = packageFQN;
|
this.packageFQN = packageFQN;
|
||||||
this.psiClassFinder = psiClassFinder;
|
this.psiClassFinder = psiClassFinder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@NotNull
|
||||||
|
public PsiPackage getPsiElement() {
|
||||||
|
return psiPackage;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassifierDescriptor getClassifier(@NotNull Name name) {
|
public ClassifierDescriptor getClassifier(@NotNull Name name) {
|
||||||
ClassDescriptor classDescriptor =
|
ClassDescriptor classDescriptor =
|
||||||
@@ -87,8 +96,6 @@ public final class JavaPackageScope extends JavaBaseScope {
|
|||||||
private Collection<DeclarationDescriptor> computeAllPackageDeclarations() {
|
private Collection<DeclarationDescriptor> computeAllPackageDeclarations() {
|
||||||
Collection<DeclarationDescriptor> result = Sets.newHashSet();
|
Collection<DeclarationDescriptor> result = Sets.newHashSet();
|
||||||
|
|
||||||
PsiPackage psiPackage = ((PackagePsiDeclarationProvider) declarationProvider).getPsiPackage();
|
|
||||||
|
|
||||||
for (PsiPackage psiSubPackage : psiPackage.getSubPackages()) {
|
for (PsiPackage psiSubPackage : psiPackage.getSubPackages()) {
|
||||||
FqName fqName = new FqName(psiSubPackage.getQualifiedName());
|
FqName fqName = new FqName(psiSubPackage.getQualifiedName());
|
||||||
NamespaceDescriptor childNs = javaDescriptorResolver.resolveNamespace(fqName, DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
|
NamespaceDescriptor childNs = javaDescriptorResolver.resolveNamespace(fqName, DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
|
||||||
@@ -127,8 +134,7 @@ public final class JavaPackageScope extends JavaBaseScope {
|
|||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
protected Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
|
protected Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
|
||||||
return javaDescriptorResolver.resolveFunctionGroup(name, (PackagePsiDeclarationProvider) declarationProvider,
|
return javaDescriptorResolver.resolveFunctionGroupForPackage(name, declarationProvider, (NamespaceDescriptor) descriptor);
|
||||||
(NamespaceDescriptor) descriptor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
Reference in New Issue
Block a user