cleanup
- aggressive green-ification - injectors regenerated
This commit is contained in:
+5
-17
@@ -18,17 +18,12 @@
|
|||||||
package org.jetbrains.jet.di;
|
package org.jetbrains.jet.di;
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaBridgeConfiguration;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinderImpl;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaTypeTransformer;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorSignatureResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
|
|
||||||
import javax.annotation.PreDestroy;
|
import javax.annotation.PreDestroy;
|
||||||
|
|
||||||
/* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */
|
/* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */
|
||||||
@@ -44,7 +39,6 @@ public class InjectorForJavaDescriptorResolver {
|
|||||||
private PsiClassFinderImpl psiClassFinder;
|
private PsiClassFinderImpl psiClassFinder;
|
||||||
private JavaTypeTransformer javaTypeTransformer;
|
private JavaTypeTransformer javaTypeTransformer;
|
||||||
private JavaDescriptorSignatureResolver javaDescriptorSignatureResolver;
|
private JavaDescriptorSignatureResolver javaDescriptorSignatureResolver;
|
||||||
private NamespaceFactoryImpl namespaceFactory;
|
|
||||||
|
|
||||||
public InjectorForJavaDescriptorResolver(
|
public InjectorForJavaDescriptorResolver(
|
||||||
@NotNull Project project,
|
@NotNull Project project,
|
||||||
@@ -62,7 +56,6 @@ public class InjectorForJavaDescriptorResolver {
|
|||||||
this.psiClassFinder = new PsiClassFinderImpl();
|
this.psiClassFinder = new PsiClassFinderImpl();
|
||||||
this.javaTypeTransformer = new JavaTypeTransformer();
|
this.javaTypeTransformer = new JavaTypeTransformer();
|
||||||
this.javaDescriptorSignatureResolver = new JavaDescriptorSignatureResolver();
|
this.javaDescriptorSignatureResolver = new JavaDescriptorSignatureResolver();
|
||||||
this.namespaceFactory = new NamespaceFactoryImpl();
|
|
||||||
|
|
||||||
javaBridgeConfiguration.setBuiltinsScopeExtensionMode(builtinsScopeExtensionMode);
|
javaBridgeConfiguration.setBuiltinsScopeExtensionMode(builtinsScopeExtensionMode);
|
||||||
javaBridgeConfiguration.setJavaSemanticServices(javaSemanticServices);
|
javaBridgeConfiguration.setJavaSemanticServices(javaSemanticServices);
|
||||||
@@ -74,7 +67,6 @@ public class InjectorForJavaDescriptorResolver {
|
|||||||
this.javaSemanticServices.setTypeTransformer(javaTypeTransformer);
|
this.javaSemanticServices.setTypeTransformer(javaTypeTransformer);
|
||||||
|
|
||||||
this.javaDescriptorResolver.setJavaDescriptorSignatureResolver(javaDescriptorSignatureResolver);
|
this.javaDescriptorResolver.setJavaDescriptorSignatureResolver(javaDescriptorSignatureResolver);
|
||||||
this.javaDescriptorResolver.setNamespaceFactory(namespaceFactory);
|
|
||||||
this.javaDescriptorResolver.setProject(project);
|
this.javaDescriptorResolver.setProject(project);
|
||||||
this.javaDescriptorResolver.setPsiClassFinder(psiClassFinder);
|
this.javaDescriptorResolver.setPsiClassFinder(psiClassFinder);
|
||||||
this.javaDescriptorResolver.setSemanticServices(javaSemanticServices);
|
this.javaDescriptorResolver.setSemanticServices(javaSemanticServices);
|
||||||
@@ -88,10 +80,6 @@ public class InjectorForJavaDescriptorResolver {
|
|||||||
javaDescriptorSignatureResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
javaDescriptorSignatureResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||||
javaDescriptorSignatureResolver.setJavaSemanticServices(javaSemanticServices);
|
javaDescriptorSignatureResolver.setJavaSemanticServices(javaSemanticServices);
|
||||||
|
|
||||||
namespaceFactory.setConfiguration(javaBridgeConfiguration);
|
|
||||||
namespaceFactory.setModuleDescriptor(moduleDescriptor);
|
|
||||||
namespaceFactory.setTrace(bindingTrace);
|
|
||||||
|
|
||||||
javaBridgeConfiguration.init();
|
javaBridgeConfiguration.init();
|
||||||
|
|
||||||
psiClassFinder.initialize();
|
psiClassFinder.initialize();
|
||||||
|
|||||||
+5
-17
@@ -17,18 +17,13 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.di;
|
package org.jetbrains.jet.di;
|
||||||
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaBridgeConfiguration;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinderImpl;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode;
|
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaTypeTransformer;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorSignatureResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
|
|
||||||
import javax.annotation.PreDestroy;
|
import javax.annotation.PreDestroy;
|
||||||
|
|
||||||
/* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */
|
/* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */
|
||||||
@@ -44,7 +39,6 @@ public class InjectorForJavaSemanticServices {
|
|||||||
private final Project project;
|
private final Project project;
|
||||||
private JavaTypeTransformer javaTypeTransformer;
|
private JavaTypeTransformer javaTypeTransformer;
|
||||||
private JavaDescriptorSignatureResolver javaDescriptorSignatureResolver;
|
private JavaDescriptorSignatureResolver javaDescriptorSignatureResolver;
|
||||||
private NamespaceFactoryImpl namespaceFactory;
|
|
||||||
|
|
||||||
public InjectorForJavaSemanticServices(
|
public InjectorForJavaSemanticServices(
|
||||||
@NotNull BuiltinsScopeExtensionMode builtinsScopeExtensionMode,
|
@NotNull BuiltinsScopeExtensionMode builtinsScopeExtensionMode,
|
||||||
@@ -60,7 +54,6 @@ public class InjectorForJavaSemanticServices {
|
|||||||
this.project = project;
|
this.project = project;
|
||||||
this.javaTypeTransformer = new JavaTypeTransformer();
|
this.javaTypeTransformer = new JavaTypeTransformer();
|
||||||
this.javaDescriptorSignatureResolver = new JavaDescriptorSignatureResolver();
|
this.javaDescriptorSignatureResolver = new JavaDescriptorSignatureResolver();
|
||||||
this.namespaceFactory = new NamespaceFactoryImpl();
|
|
||||||
|
|
||||||
this.javaSemanticServices.setDescriptorResolver(javaDescriptorResolver);
|
this.javaSemanticServices.setDescriptorResolver(javaDescriptorResolver);
|
||||||
this.javaSemanticServices.setPsiClassFinder(psiClassFinder);
|
this.javaSemanticServices.setPsiClassFinder(psiClassFinder);
|
||||||
@@ -68,7 +61,6 @@ public class InjectorForJavaSemanticServices {
|
|||||||
this.javaSemanticServices.setTypeTransformer(javaTypeTransformer);
|
this.javaSemanticServices.setTypeTransformer(javaTypeTransformer);
|
||||||
|
|
||||||
this.javaDescriptorResolver.setJavaDescriptorSignatureResolver(javaDescriptorSignatureResolver);
|
this.javaDescriptorResolver.setJavaDescriptorSignatureResolver(javaDescriptorSignatureResolver);
|
||||||
this.javaDescriptorResolver.setNamespaceFactory(namespaceFactory);
|
|
||||||
this.javaDescriptorResolver.setProject(project);
|
this.javaDescriptorResolver.setProject(project);
|
||||||
this.javaDescriptorResolver.setPsiClassFinder(psiClassFinder);
|
this.javaDescriptorResolver.setPsiClassFinder(psiClassFinder);
|
||||||
this.javaDescriptorResolver.setSemanticServices(javaSemanticServices);
|
this.javaDescriptorResolver.setSemanticServices(javaSemanticServices);
|
||||||
@@ -86,10 +78,6 @@ public class InjectorForJavaSemanticServices {
|
|||||||
javaDescriptorSignatureResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
javaDescriptorSignatureResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||||
javaDescriptorSignatureResolver.setJavaSemanticServices(javaSemanticServices);
|
javaDescriptorSignatureResolver.setJavaSemanticServices(javaSemanticServices);
|
||||||
|
|
||||||
namespaceFactory.setConfiguration(javaBridgeConfiguration);
|
|
||||||
namespaceFactory.setModuleDescriptor(moduleDescriptor);
|
|
||||||
namespaceFactory.setTrace(bindingTrace);
|
|
||||||
|
|
||||||
javaBridgeConfiguration.init();
|
javaBridgeConfiguration.init();
|
||||||
|
|
||||||
psiClassFinder.initialize();
|
psiClassFinder.initialize();
|
||||||
|
|||||||
+6
-29
@@ -17,39 +17,17 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.di;
|
package org.jetbrains.jet.di;
|
||||||
|
|
||||||
import org.jetbrains.jet.lang.resolve.TopDownAnalyzer;
|
|
||||||
import org.jetbrains.jet.lang.resolve.TopDownAnalysisContext;
|
|
||||||
import org.jetbrains.jet.lang.resolve.BodyResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
|
|
||||||
import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
|
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode;
|
import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode;
|
||||||
import org.jetbrains.jet.lang.ModuleConfiguration;
|
import org.jetbrains.jet.lang.ModuleConfiguration;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaBridgeConfiguration;
|
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinderImpl;
|
|
||||||
import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl;
|
|
||||||
import org.jetbrains.jet.lang.resolve.DeclarationResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
|
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
|
||||||
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
|
||||||
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver;
|
import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.ImportsResolver;
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver;
|
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
||||||
import org.jetbrains.jet.lang.resolve.OverloadResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.OverrideResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.ScriptBodyResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaTypeTransformer;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorSignatureResolver;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import javax.annotation.PreDestroy;
|
import javax.annotation.PreDestroy;
|
||||||
|
|
||||||
/* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */
|
/* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */
|
||||||
@@ -163,7 +141,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
|||||||
this.moduleConfiguration.setProject(project);
|
this.moduleConfiguration.setProject(project);
|
||||||
|
|
||||||
javaDescriptorResolver.setJavaDescriptorSignatureResolver(javaDescriptorSignatureResolver);
|
javaDescriptorResolver.setJavaDescriptorSignatureResolver(javaDescriptorSignatureResolver);
|
||||||
javaDescriptorResolver.setNamespaceFactory(namespaceFactory);
|
|
||||||
javaDescriptorResolver.setProject(project);
|
javaDescriptorResolver.setProject(project);
|
||||||
javaDescriptorResolver.setPsiClassFinder(psiClassFinder);
|
javaDescriptorResolver.setPsiClassFinder(psiClassFinder);
|
||||||
javaDescriptorResolver.setSemanticServices(javaSemanticServices);
|
javaDescriptorResolver.setSemanticServices(javaSemanticServices);
|
||||||
|
|||||||
+85
-85
@@ -100,7 +100,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
final boolean staticMembers;
|
final boolean staticMembers;
|
||||||
final boolean kotlin;
|
final boolean kotlin;
|
||||||
final ClassOrNamespaceDescriptor classOrNamespaceDescriptor;
|
final ClassOrNamespaceDescriptor classOrNamespaceDescriptor;
|
||||||
private List<String> alternativeSignatureErrors;
|
|
||||||
|
|
||||||
protected ResolverScopeData(@Nullable PsiClass psiClass, @Nullable PsiPackage psiPackage, @Nullable FqName fqName, boolean staticMembers, @NotNull ClassOrNamespaceDescriptor descriptor) {
|
protected ResolverScopeData(@Nullable PsiClass psiClass, @Nullable PsiPackage psiPackage, @Nullable FqName fqName, boolean staticMembers, @NotNull ClassOrNamespaceDescriptor descriptor) {
|
||||||
checkPsiClassIsNotJet(psiClass);
|
checkPsiClassIsNotJet(psiClass);
|
||||||
@@ -134,29 +133,19 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
this.classOrNamespaceDescriptor = null;
|
this.classOrNamespaceDescriptor = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isPositive() {
|
|
||||||
return this.classOrNamespaceDescriptor != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public PsiElement getPsiPackageOrPsiClass() {
|
public PsiElement getPsiPackageOrPsiClass() {
|
||||||
if (psiPackage != null) {
|
if (psiPackage != null) {
|
||||||
return psiPackage;
|
return psiPackage;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
assert psiClass != null;
|
||||||
return psiClass;
|
return psiClass;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<Name, NamedMembers> namedMembersMap;
|
private Map<Name, NamedMembers> namedMembersMap;
|
||||||
|
|
||||||
public void addAlternativeSignatureError(@NotNull String errorMessage) {
|
|
||||||
if (alternativeSignatureErrors == null) {
|
|
||||||
alternativeSignatureErrors = new ArrayList<String>();
|
|
||||||
}
|
|
||||||
alternativeSignatureErrors.add(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public abstract List<TypeParameterDescriptor> getTypeParameters();
|
public abstract List<TypeParameterDescriptor> getTypeParameters();
|
||||||
}
|
}
|
||||||
@@ -269,7 +258,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
|
|
||||||
protected Project project;
|
protected Project project;
|
||||||
protected JavaSemanticServices semanticServices;
|
protected JavaSemanticServices semanticServices;
|
||||||
private NamespaceFactory namespaceFactory;
|
|
||||||
private BindingTrace trace;
|
private BindingTrace trace;
|
||||||
private PsiClassFinder psiClassFinder;
|
private PsiClassFinder psiClassFinder;
|
||||||
private JavaDescriptorSignatureResolver javaDescriptorSignatureResolver;
|
private JavaDescriptorSignatureResolver javaDescriptorSignatureResolver;
|
||||||
@@ -279,11 +267,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
this.project = project;
|
this.project = project;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject
|
|
||||||
public void setNamespaceFactory(NamespaceFactoryImpl namespaceFactory) {
|
|
||||||
this.namespaceFactory = namespaceFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public void setSemanticServices(JavaSemanticServices semanticServices) {
|
public void setSemanticServices(JavaSemanticServices semanticServices) {
|
||||||
this.semanticServices = semanticServices;
|
this.semanticServices = semanticServices;
|
||||||
@@ -375,9 +358,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private ResolverClassData createJavaClassDescriptor(@NotNull final PsiClass psiClass, List<Runnable> taskList) {
|
private ResolverClassData createJavaClassDescriptor(@NotNull final PsiClass psiClass, List<Runnable> taskList) {
|
||||||
FqName fqName = new FqName(psiClass.getQualifiedName());
|
final String qualifiedName = psiClass.getQualifiedName();
|
||||||
|
assert qualifiedName != null;
|
||||||
|
|
||||||
|
FqName fqName = new FqName(qualifiedName);
|
||||||
if (classDescriptorCache.containsKey(fqName)) {
|
if (classDescriptorCache.containsKey(fqName)) {
|
||||||
throw new IllegalStateException(psiClass.getQualifiedName());
|
throw new IllegalStateException(qualifiedName);
|
||||||
}
|
}
|
||||||
|
|
||||||
checkPsiClassIsNotJet(psiClass);
|
checkPsiClassIsNotJet(psiClass);
|
||||||
@@ -423,7 +409,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
classData.classDescriptor.createTypeConstructor();
|
classData.classDescriptor.createTypeConstructor();
|
||||||
classData.classDescriptor.setScopeForMemberLookup(new JavaClassMembersScope(semanticServices, classData));
|
classData.classDescriptor.setScopeForMemberLookup(new JavaClassMembersScope(semanticServices, classData));
|
||||||
|
|
||||||
javaDescriptorSignatureResolver.initializeTypeParameters(classData.typeParameters, classData.classDescriptor, "class " + psiClass.getQualifiedName());
|
javaDescriptorSignatureResolver.initializeTypeParameters(classData.typeParameters, classData.classDescriptor, "class " + qualifiedName);
|
||||||
|
|
||||||
// TODO: ugly hack: tests crash if initializeTypeParameters called with class containing proper supertypes
|
// TODO: ugly hack: tests crash if initializeTypeParameters called with class containing proper supertypes
|
||||||
supertypes.addAll(getSupertypes(new PsiClassWrapper(psiClass), classData, classData.getTypeParameters()));
|
supertypes.addAll(getSupertypes(new PsiClassWrapper(psiClass), classData, classData.getTypeParameters()));
|
||||||
@@ -447,6 +433,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
PsiClass psiClass = classData.psiClass;
|
PsiClass psiClass = classData.psiClass;
|
||||||
|
|
||||||
ClassDescriptorFromJvmBytecode containingClass = classData.classDescriptor;
|
ClassDescriptorFromJvmBytecode containingClass = classData.classDescriptor;
|
||||||
|
assert psiClass != null;
|
||||||
TypeVariableResolver resolverForTypeParameters = TypeVariableResolvers.classTypeVariableResolver(
|
TypeVariableResolver resolverForTypeParameters = TypeVariableResolvers.classTypeVariableResolver(
|
||||||
containingClass, "class " + psiClass.getQualifiedName());
|
containingClass, "class " + psiClass.getQualifiedName());
|
||||||
|
|
||||||
@@ -497,6 +484,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
varargElementType = semanticServices.getTypeTransformer().transformToType(((PsiArrayType) returnType).getComponentType(), resolverForTypeParameters);
|
varargElementType = semanticServices.getTypeTransformer().transformToType(((PsiArrayType) returnType).getComponentType(), resolverForTypeParameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert returnType != null;
|
||||||
valueParameters.add(new ValueParameterDescriptorImpl(
|
valueParameters.add(new ValueParameterDescriptorImpl(
|
||||||
constructorDescriptor,
|
constructorDescriptor,
|
||||||
i,
|
i,
|
||||||
@@ -534,6 +522,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
private ConstructorDescriptor resolveConstructor(PsiClass psiClass, ResolverClassData classData, boolean aStatic, PsiMethod psiConstructor) {
|
private ConstructorDescriptor resolveConstructor(PsiClass psiClass, ResolverClassData classData, boolean aStatic, PsiMethod psiConstructor) {
|
||||||
PsiMethodWrapper constructor = new PsiMethodWrapper(psiConstructor);
|
PsiMethodWrapper constructor = new PsiMethodWrapper(psiConstructor);
|
||||||
|
|
||||||
|
//noinspection deprecation
|
||||||
if (constructor.getJetConstructor().hidden()) {
|
if (constructor.getJetConstructor().hidden()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -564,7 +553,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private PsiClass getInnerClassClassObject(@NotNull PsiClass outer) {
|
private static PsiClass getInnerClassClassObject(@NotNull PsiClass outer) {
|
||||||
for (PsiClass inner : outer.getInnerClasses()) {
|
for (PsiClass inner : outer.getInnerClasses()) {
|
||||||
if (inner.getName().equals(JvmAbi.CLASS_OBJECT_CLASS_NAME)) {
|
if (inner.getName().equals(JvmAbi.CLASS_OBJECT_CLASS_NAME)) {
|
||||||
return inner;
|
return inner;
|
||||||
@@ -575,7 +564,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO
|
* TODO
|
||||||
* @see #createJavaNamespaceDescriptor(com.intellij.psi.PsiClass)
|
//* @see #createJavaNamespaceDescriptor(PsiClass)
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
private MutableClassDescriptorLite createClassObjectDescriptor(@NotNull ClassDescriptor containing, @NotNull PsiClass psiClass) {
|
private MutableClassDescriptorLite createClassObjectDescriptor(@NotNull ClassDescriptor containing, @NotNull PsiClass psiClass) {
|
||||||
@@ -601,7 +590,9 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
FqName fqName = new FqName(classObjectPsiClass.getQualifiedName());
|
final String qualifiedName = classObjectPsiClass.getQualifiedName();
|
||||||
|
assert qualifiedName != null;
|
||||||
|
FqName fqName = new FqName(qualifiedName);
|
||||||
ResolverClassData classData = new ClassDescriptorFromJvmBytecode(
|
ResolverClassData classData = new ClassDescriptorFromJvmBytecode(
|
||||||
containing, ClassKind.CLASS_OBJECT, classObjectPsiClass, fqName, this)
|
containing, ClassKind.CLASS_OBJECT, classObjectPsiClass, fqName, this)
|
||||||
.getResolverBinaryClassData();
|
.getResolverBinaryClassData();
|
||||||
@@ -677,11 +668,15 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private ClassOrNamespaceDescriptor resolveParentDescriptor(@NotNull PsiClass psiClass) {
|
private ClassOrNamespaceDescriptor resolveParentDescriptor(@NotNull PsiClass psiClass) {
|
||||||
FqName fqName = new FqName(psiClass.getQualifiedName());
|
final String qualifiedName = psiClass.getQualifiedName();
|
||||||
|
assert qualifiedName != null;
|
||||||
|
FqName fqName = new FqName(qualifiedName);
|
||||||
|
|
||||||
PsiClass containingClass = psiClass.getContainingClass();
|
PsiClass containingClass = psiClass.getContainingClass();
|
||||||
if (containingClass != null) {
|
if (containingClass != null) {
|
||||||
FqName containerFqName = new FqName(containingClass.getQualifiedName());
|
final String containingClassQualifiedName = containingClass.getQualifiedName();
|
||||||
|
assert containingClassQualifiedName != null;
|
||||||
|
FqName containerFqName = new FqName(containingClassQualifiedName);
|
||||||
ClassDescriptor clazz = resolveClass(containerFqName, DescriptorSearchRule.INCLUDE_KOTLIN);
|
ClassDescriptor clazz = resolveClass(containerFqName, DescriptorSearchRule.INCLUDE_KOTLIN);
|
||||||
if (clazz == null) {
|
if (clazz == null) {
|
||||||
throw new IllegalStateException("PsiClass not found by name " + containerFqName + ", required to be container declaration of " + fqName);
|
throw new IllegalStateException("PsiClass not found by name " + containerFqName + ", required to be container declaration of " + fqName);
|
||||||
@@ -773,8 +768,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
private void transformSupertypeList(List<JetType> result, PsiClassType[] extendsListTypes, TypeVariableResolver typeVariableResolver) {
|
private void transformSupertypeList(List<JetType> result, PsiClassType[] extendsListTypes, TypeVariableResolver typeVariableResolver) {
|
||||||
for (PsiClassType type : extendsListTypes) {
|
for (PsiClassType type : extendsListTypes) {
|
||||||
PsiClass resolved = type.resolve();
|
PsiClass resolved = type.resolve();
|
||||||
if (resolved != null && JvmStdlibNames.JET_OBJECT.getFqName().equalsTo(resolved.getQualifiedName())) {
|
if (resolved != null) {
|
||||||
continue;
|
final String qualifiedName = resolved.getQualifiedName();
|
||||||
|
assert qualifiedName != null;
|
||||||
|
if (JvmStdlibNames.JET_OBJECT.getFqName().equalsTo(qualifiedName)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JetType transform = semanticServices.getTypeTransformer().transformToType(type, JavaTypeTransformer.TypeUsage.SUPERTYPE, typeVariableResolver);
|
JetType transform = semanticServices.getTypeTransformer().transformToType(type, JavaTypeTransformer.TypeUsage.SUPERTYPE, typeVariableResolver);
|
||||||
@@ -931,25 +930,27 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
private final JvmMethodParameterKind kind;
|
private final JvmMethodParameterKind kind;
|
||||||
private final JetType receiverType;
|
private final JetType receiverType;
|
||||||
private final ValueParameterDescriptor valueParameterDescriptor;
|
private final ValueParameterDescriptor valueParameterDescriptor;
|
||||||
private final Object typeInfo;
|
|
||||||
|
|
||||||
private JvmMethodParameterMeaning(JvmMethodParameterKind kind, JetType receiverType, ValueParameterDescriptor valueParameterDescriptor, Object typeInfo) {
|
private JvmMethodParameterMeaning(
|
||||||
|
JvmMethodParameterKind kind,
|
||||||
|
JetType receiverType,
|
||||||
|
ValueParameterDescriptor valueParameterDescriptor
|
||||||
|
) {
|
||||||
this.kind = kind;
|
this.kind = kind;
|
||||||
this.receiverType = receiverType;
|
this.receiverType = receiverType;
|
||||||
this.valueParameterDescriptor = valueParameterDescriptor;
|
this.valueParameterDescriptor = valueParameterDescriptor;
|
||||||
this.typeInfo = typeInfo;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static JvmMethodParameterMeaning receiver(@NotNull JetType receiverType) {
|
public static JvmMethodParameterMeaning receiver(@NotNull JetType receiverType) {
|
||||||
return new JvmMethodParameterMeaning(JvmMethodParameterKind.RECEIVER, receiverType, null, null);
|
return new JvmMethodParameterMeaning(JvmMethodParameterKind.RECEIVER, receiverType, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static JvmMethodParameterMeaning regular(@NotNull ValueParameterDescriptor valueParameterDescriptor) {
|
public static JvmMethodParameterMeaning regular(@NotNull ValueParameterDescriptor valueParameterDescriptor) {
|
||||||
return new JvmMethodParameterMeaning(JvmMethodParameterKind.REGULAR, null, valueParameterDescriptor, null);
|
return new JvmMethodParameterMeaning(JvmMethodParameterKind.REGULAR, null, valueParameterDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static JvmMethodParameterMeaning typeInfo(@NotNull Object typeInfo) {
|
public static JvmMethodParameterMeaning typeInfo() {
|
||||||
return new JvmMethodParameterMeaning(JvmMethodParameterKind.TYPE_INFO, null, null, typeInfo);
|
return new JvmMethodParameterMeaning(JvmMethodParameterKind.TYPE_INFO, null, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -958,7 +959,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
PsiParameterWrapper parameter, TypeVariableResolver typeVariableResolver) {
|
PsiParameterWrapper parameter, TypeVariableResolver typeVariableResolver) {
|
||||||
|
|
||||||
if (parameter.getJetTypeParameter().isDefined()) {
|
if (parameter.getJetTypeParameter().isDefined()) {
|
||||||
return JvmMethodParameterMeaning.typeInfo(new Object());
|
return JvmMethodParameterMeaning.typeInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
PsiType psiType = parameter.getPsiParameter().getType();
|
PsiType psiType = parameter.getPsiParameter().getType();
|
||||||
@@ -1018,7 +1019,8 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
|
|
||||||
public Set<VariableDescriptor> resolveFieldGroupByName(@NotNull Name fieldName, @NotNull ResolverScopeData scopeData) {
|
public Set<VariableDescriptor> resolveFieldGroupByName(@NotNull Name fieldName, @NotNull ResolverScopeData scopeData) {
|
||||||
|
|
||||||
if (scopeData.psiClass == null) {
|
final PsiClass psiClass = scopeData.psiClass;
|
||||||
|
if (psiClass == null) {
|
||||||
return Collections.emptySet();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1029,8 +1031,9 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
return Collections.emptySet();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final String qualifiedName = psiClass.getQualifiedName();
|
||||||
resolveNamedGroupProperties(scopeData.classOrNamespaceDescriptor, scopeData, namedMembers, fieldName,
|
resolveNamedGroupProperties(scopeData.classOrNamespaceDescriptor, scopeData, namedMembers, fieldName,
|
||||||
"class or namespace " + scopeData.psiClass.getQualifiedName());
|
"class or namespace " + qualifiedName);
|
||||||
|
|
||||||
return namedMembers.propertyDescriptors;
|
return namedMembers.propertyDescriptors;
|
||||||
}
|
}
|
||||||
@@ -1039,6 +1042,8 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
public Set<VariableDescriptor> resolveFieldGroup(@NotNull ResolverScopeData scopeData) {
|
public Set<VariableDescriptor> resolveFieldGroup(@NotNull ResolverScopeData scopeData) {
|
||||||
|
|
||||||
getResolverScopeData(scopeData);
|
getResolverScopeData(scopeData);
|
||||||
|
final PsiClass psiClass = scopeData.psiClass;
|
||||||
|
assert psiClass != null;
|
||||||
|
|
||||||
Set<VariableDescriptor> descriptors = Sets.newHashSet();
|
Set<VariableDescriptor> descriptors = Sets.newHashSet();
|
||||||
Map<Name, NamedMembers> membersForProperties = scopeData.namedMembersMap;
|
Map<Name, NamedMembers> membersForProperties = scopeData.namedMembersMap;
|
||||||
@@ -1046,14 +1051,15 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
NamedMembers namedMembers = entry.getValue();
|
NamedMembers namedMembers = entry.getValue();
|
||||||
Name propertyName = entry.getKey();
|
Name propertyName = entry.getKey();
|
||||||
|
|
||||||
resolveNamedGroupProperties(scopeData.classOrNamespaceDescriptor, scopeData, namedMembers, propertyName, "class or namespace " + scopeData.psiClass.getQualifiedName());
|
resolveNamedGroupProperties(scopeData.classOrNamespaceDescriptor, scopeData, namedMembers, propertyName,
|
||||||
|
"class or namespace " + psiClass.getQualifiedName());
|
||||||
descriptors.addAll(namedMembers.propertyDescriptors);
|
descriptors.addAll(namedMembers.propertyDescriptors);
|
||||||
}
|
}
|
||||||
|
|
||||||
return descriptors;
|
return descriptors;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object key(TypeSource typeSource) {
|
private static Object key(TypeSource typeSource) {
|
||||||
if (typeSource == null) {
|
if (typeSource == null) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@@ -1065,7 +1071,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object psiTypeToKey(PsiType psiType) {
|
private static Object psiTypeToKey(PsiType psiType) {
|
||||||
if (psiType instanceof PsiClassType) {
|
if (psiType instanceof PsiClassType) {
|
||||||
return ((PsiClassType) psiType).getClassName();
|
return ((PsiClassType) psiType).getClassName();
|
||||||
}
|
}
|
||||||
@@ -1076,11 +1082,11 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
return Pair.create("[", psiTypeToKey(((PsiArrayType) psiType).getComponentType()));
|
return Pair.create("[", psiTypeToKey(((PsiArrayType) psiType).getComponentType()));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw new IllegalStateException("" + psiType.getClass());
|
throw new IllegalStateException(psiType.getClass().toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object propertyKeyForGrouping(PropertyAccessorData propertyAccessor) {
|
private static Object propertyKeyForGrouping(PropertyAccessorData propertyAccessor) {
|
||||||
Object type = key(propertyAccessor.getType());
|
Object type = key(propertyAccessor.getType());
|
||||||
Object receiverType = key(propertyAccessor.getReceiverType());
|
Object receiverType = key(propertyAccessor.getReceiverType());
|
||||||
return Pair.create(type, receiverType);
|
return Pair.create(type, receiverType);
|
||||||
@@ -1368,17 +1374,28 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
@NotNull ResolverScopeData scopeData,
|
@NotNull ResolverScopeData scopeData,
|
||||||
boolean isStatic
|
boolean isStatic
|
||||||
) {
|
) {
|
||||||
boolean isEnum = scopeData.psiClass.isEnum();
|
final PsiClass psiClass = scopeData.psiClass;
|
||||||
|
assert psiClass != null;
|
||||||
|
|
||||||
|
boolean isEnum = psiClass.isEnum();
|
||||||
if (isEnum && isStatic) {
|
if (isEnum && isStatic) {
|
||||||
return resolveClass(new FqName(scopeData.psiClass.getQualifiedName())).getClassObjectDescriptor();
|
final String qualifiedName = psiClass.getQualifiedName();
|
||||||
|
assert qualifiedName != null;
|
||||||
|
final ClassDescriptor classDescriptor = resolveClass(new FqName(qualifiedName));
|
||||||
|
assert classDescriptor != null;
|
||||||
|
final ClassDescriptor classObjectDescriptor = classDescriptor.getClassObjectDescriptor();
|
||||||
|
assert classObjectDescriptor != null;
|
||||||
|
return classObjectDescriptor;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return owner;
|
return owner;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resolveNamedGroupFunctions(@NotNull ClassOrNamespaceDescriptor owner, PsiClass psiClass,
|
private void resolveNamedGroupFunctions(
|
||||||
TypeSubstitutor typeSubstitutorForGenericSuperclasses, NamedMembers namedMembers, Name methodName, ResolverScopeData scopeData) {
|
@NotNull ClassOrNamespaceDescriptor owner, PsiClass psiClass,
|
||||||
|
NamedMembers namedMembers, Name methodName, ResolverScopeData scopeData
|
||||||
|
) {
|
||||||
if (namedMembers.functionDescriptors != null) {
|
if (namedMembers.functionDescriptors != null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1434,7 +1451,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Set<SimpleFunctionDescriptor> getFunctionsFromSupertypes(ResolverScopeData scopeData, Name methodName) {
|
private static Set<SimpleFunctionDescriptor> getFunctionsFromSupertypes(ResolverScopeData scopeData, Name methodName) {
|
||||||
Set<SimpleFunctionDescriptor> r = Sets.newLinkedHashSet();
|
Set<SimpleFunctionDescriptor> r = Sets.newLinkedHashSet();
|
||||||
for (JetType supertype : getSupertypes(scopeData)) {
|
for (JetType supertype : getSupertypes(scopeData)) {
|
||||||
for (FunctionDescriptor function : supertype.getMemberScope().getFunctions(methodName)) {
|
for (FunctionDescriptor function : supertype.getMemberScope().getFunctions(methodName)) {
|
||||||
@@ -1444,7 +1461,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Set<PropertyDescriptor> getPropertiesFromSupertypes(ResolverScopeData scopeData, Name propertyName) {
|
private static Set<PropertyDescriptor> getPropertiesFromSupertypes(ResolverScopeData scopeData, Name propertyName) {
|
||||||
Set<PropertyDescriptor> r = new HashSet<PropertyDescriptor>();
|
Set<PropertyDescriptor> r = new HashSet<PropertyDescriptor>();
|
||||||
for (JetType supertype : getSupertypes(scopeData)) {
|
for (JetType supertype : getSupertypes(scopeData)) {
|
||||||
for (VariableDescriptor property : supertype.getMemberScope().getProperties(propertyName)) {
|
for (VariableDescriptor property : supertype.getMemberScope().getProperties(propertyName)) {
|
||||||
@@ -1454,7 +1471,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getResolverScopeData(@NotNull ResolverScopeData scopeData) {
|
private static void getResolverScopeData(@NotNull ResolverScopeData scopeData) {
|
||||||
if (scopeData.namedMembersMap == null) {
|
if (scopeData.namedMembersMap == null) {
|
||||||
scopeData.namedMembersMap = JavaDescriptorResolverHelper.getNamedMembers(scopeData);
|
scopeData.namedMembersMap = JavaDescriptorResolverHelper.getNamedMembers(scopeData);
|
||||||
}
|
}
|
||||||
@@ -1469,9 +1486,8 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
|
|
||||||
NamedMembers namedMembers = namedMembersMap.get(methodName);
|
NamedMembers namedMembers = namedMembersMap.get(methodName);
|
||||||
if (namedMembers != null && namedMembers.methods != null) {
|
if (namedMembers != null && namedMembers.methods != null) {
|
||||||
TypeSubstitutor typeSubstitutor = typeSubstitutorForGenericSupertypes(scopeData);
|
|
||||||
|
|
||||||
resolveNamedGroupFunctions(scopeData.classOrNamespaceDescriptor, scopeData.psiClass, typeSubstitutor, namedMembers, methodName, scopeData);
|
resolveNamedGroupFunctions(scopeData.classOrNamespaceDescriptor, scopeData.psiClass, namedMembers, methodName, scopeData);
|
||||||
|
|
||||||
return namedMembers.functionDescriptors;
|
return namedMembers.functionDescriptors;
|
||||||
}
|
}
|
||||||
@@ -1480,17 +1496,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private TypeSubstitutor createSubstitutorForGenericSupertypes(@Nullable ClassDescriptor classDescriptor) {
|
|
||||||
TypeSubstitutor typeSubstitutor;
|
|
||||||
if (classDescriptor != null) {
|
|
||||||
typeSubstitutor = SubstitutionUtils.buildDeepSubstitutor(classDescriptor.getDefaultType());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
typeSubstitutor = TypeSubstitutor.EMPTY;
|
|
||||||
}
|
|
||||||
return typeSubstitutor;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ValueParameterDescriptors resolveParameterDescriptors(DeclarationDescriptor containingDeclaration,
|
private ValueParameterDescriptors resolveParameterDescriptors(DeclarationDescriptor containingDeclaration,
|
||||||
List<PsiParameterWrapper> parameters, TypeVariableResolver typeVariableResolver) {
|
List<PsiParameterWrapper> parameters, TypeVariableResolver typeVariableResolver) {
|
||||||
List<ValueParameterDescriptor> result = new ArrayList<ValueParameterDescriptor>();
|
List<ValueParameterDescriptor> result = new ArrayList<ValueParameterDescriptor>();
|
||||||
@@ -1534,9 +1539,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final PsiMethod psiMethod = method.getPsiMethod();
|
||||||
|
final PsiClass containingClass = psiMethod.getContainingClass();
|
||||||
if (scopeData.kotlin) {
|
if (scopeData.kotlin) {
|
||||||
// TODO: unless maybe class explicitly extends Object
|
// TODO: unless maybe class explicitly extends Object
|
||||||
String ownerClassName = method.getPsiMethod().getContainingClass().getQualifiedName();
|
assert containingClass != null;
|
||||||
|
String ownerClassName = containingClass.getQualifiedName();
|
||||||
if (OBJECT_FQ_NAME.getFqName().equals(ownerClassName)) {
|
if (OBJECT_FQ_NAME.getFqName().equals(ownerClassName)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -1544,16 +1552,19 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
|
|
||||||
SimpleFunctionDescriptorImpl functionDescriptorImpl = new SimpleFunctionDescriptorImpl(
|
SimpleFunctionDescriptorImpl functionDescriptorImpl = new SimpleFunctionDescriptorImpl(
|
||||||
scopeData.classOrNamespaceDescriptor,
|
scopeData.classOrNamespaceDescriptor,
|
||||||
resolveAnnotations(method.getPsiMethod()),
|
resolveAnnotations(psiMethod),
|
||||||
Name.identifier(method.getName()),
|
Name.identifier(method.getName()),
|
||||||
DescriptorKindUtils.flagsToKind(method.getJetMethod().kind())
|
DescriptorKindUtils.flagsToKind(method.getJetMethod().kind())
|
||||||
);
|
);
|
||||||
|
|
||||||
String context = "method " + method.getName() + " in class " + psiClass.getQualifiedName();
|
String context = "method " + method.getName() + " in class " + psiClass.getQualifiedName();
|
||||||
|
|
||||||
List<TypeParameterDescriptor> methodTypeParameters = javaDescriptorSignatureResolver.resolveMethodTypeParameters(method, functionDescriptorImpl);
|
List<TypeParameterDescriptor> methodTypeParameters = javaDescriptorSignatureResolver.resolveMethodTypeParameters(method,
|
||||||
|
functionDescriptorImpl);
|
||||||
|
|
||||||
TypeVariableResolver methodTypeVariableResolver = TypeVariableResolvers.typeVariableResolverFromTypeParameters(methodTypeParameters, functionDescriptorImpl, context);
|
TypeVariableResolver methodTypeVariableResolver = TypeVariableResolvers.typeVariableResolverFromTypeParameters(methodTypeParameters,
|
||||||
|
functionDescriptorImpl,
|
||||||
|
context);
|
||||||
|
|
||||||
|
|
||||||
ValueParameterDescriptors valueParameterDescriptors = resolveParameterDescriptors(functionDescriptorImpl, method.getParameters(), methodTypeVariableResolver);
|
ValueParameterDescriptors valueParameterDescriptors = resolveParameterDescriptors(functionDescriptorImpl, method.getParameters(), methodTypeVariableResolver);
|
||||||
@@ -1575,21 +1586,21 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
valueParameterDescriptors.descriptors,
|
valueParameterDescriptors.descriptors,
|
||||||
returnType,
|
returnType,
|
||||||
resolveModality(method, method.isFinal()),
|
resolveModality(method, method.isFinal()),
|
||||||
resolveVisibility(method.getPsiMethod(), method.getJetMethod()),
|
resolveVisibility(psiMethod, method.getJetMethod()),
|
||||||
/*isInline = */ false
|
/*isInline = */ false
|
||||||
);
|
);
|
||||||
|
|
||||||
if (functionDescriptorImpl.getKind() == CallableMemberDescriptor.Kind.DECLARATION) {
|
if (functionDescriptorImpl.getKind() == CallableMemberDescriptor.Kind.DECLARATION) {
|
||||||
BindingContextUtils.recordFunctionDeclarationToDescriptor(tempTrace, method.getPsiMethod(), functionDescriptorImpl);
|
BindingContextUtils.recordFunctionDeclarationToDescriptor(tempTrace, psiMethod, functionDescriptorImpl);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (method.getPsiMethod().getContainingClass() != psiClass && !method.isStatic()) {
|
if (containingClass != psiClass && !method.isStatic()) {
|
||||||
throw new IllegalStateException("non-static method in subclass");
|
throw new IllegalStateException("non-static method in subclass");
|
||||||
}
|
}
|
||||||
return functionDescriptorImpl;
|
return functionDescriptorImpl;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isEnumSpecialMethod(@NotNull FunctionDescriptor functionDescriptor) {
|
private static boolean isEnumSpecialMethod(@NotNull FunctionDescriptor functionDescriptor) {
|
||||||
List<ValueParameterDescriptor> methodTypeParameters = functionDescriptor.getValueParameters();
|
List<ValueParameterDescriptor> methodTypeParameters = functionDescriptor.getValueParameters();
|
||||||
String methodName = functionDescriptor.getName().getName();
|
String methodName = functionDescriptor.getName().getName();
|
||||||
JetType nullableString = TypeUtils.makeNullable(JetStandardLibrary.getInstance().getStringType());
|
JetType nullableString = TypeUtils.makeNullable(JetStandardLibrary.getInstance().getStringType());
|
||||||
@@ -1791,7 +1802,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private CompileTimeConstant<?> getCompileTimeConstFromLiteralExpression(PsiLiteralExpression value) {
|
private static CompileTimeConstant<?> getCompileTimeConstFromLiteralExpression(PsiLiteralExpression value) {
|
||||||
Object literalValue = value.getValue();
|
Object literalValue = value.getValue();
|
||||||
if (literalValue instanceof String) {
|
if (literalValue instanceof String) {
|
||||||
return new StringValue((String) literalValue);
|
return new StringValue((String) literalValue);
|
||||||
@@ -1827,14 +1838,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
|
|
||||||
getResolverScopeData(scopeData);
|
getResolverScopeData(scopeData);
|
||||||
|
|
||||||
TypeSubstitutor substitutorForGenericSupertypes = typeSubstitutorForGenericSupertypes(scopeData);
|
|
||||||
|
|
||||||
List<FunctionDescriptor> functions = new ArrayList<FunctionDescriptor>();
|
List<FunctionDescriptor> functions = new ArrayList<FunctionDescriptor>();
|
||||||
|
|
||||||
for (Map.Entry<Name, NamedMembers> entry : scopeData.namedMembersMap.entrySet()) {
|
for (Map.Entry<Name, NamedMembers> entry : scopeData.namedMembersMap.entrySet()) {
|
||||||
Name methodName = entry.getKey();
|
Name methodName = entry.getKey();
|
||||||
NamedMembers namedMembers = entry.getValue();
|
NamedMembers namedMembers = entry.getValue();
|
||||||
resolveNamedGroupFunctions(scopeData.classOrNamespaceDescriptor, scopeData.psiClass, substitutorForGenericSupertypes,
|
resolveNamedGroupFunctions(scopeData.classOrNamespaceDescriptor, scopeData.psiClass,
|
||||||
namedMembers, methodName, scopeData);
|
namedMembers, methodName, scopeData);
|
||||||
functions.addAll(namedMembers.functionDescriptors);
|
functions.addAll(namedMembers.functionDescriptors);
|
||||||
}
|
}
|
||||||
@@ -1842,7 +1851,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
return functions;
|
return functions;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Collection<JetType> getSupertypes(ResolverScopeData scope) {
|
private static Collection<JetType> getSupertypes(ResolverScopeData scope) {
|
||||||
if (scope instanceof ResolverClassData) {
|
if (scope instanceof ResolverClassData) {
|
||||||
return ((ResolverClassData) scope).classDescriptor.getSupertypes();
|
return ((ResolverClassData) scope).classDescriptor.getSupertypes();
|
||||||
}
|
}
|
||||||
@@ -1854,15 +1863,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private TypeSubstitutor typeSubstitutorForGenericSupertypes(ResolverScopeData scopeData) {
|
|
||||||
if (scopeData instanceof ResolverClassData) {
|
|
||||||
return createSubstitutorForGenericSupertypes(((ResolverClassData) scopeData).getClassDescriptor());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return TypeSubstitutor.EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private JetType makeReturnType(PsiType returnType, PsiMethodWrapper method,
|
private JetType makeReturnType(PsiType returnType, PsiMethodWrapper method,
|
||||||
@NotNull TypeVariableResolver typeVariableResolver) {
|
@NotNull TypeVariableResolver typeVariableResolver) {
|
||||||
|
|
||||||
|
|||||||
+6
-17
@@ -18,7 +18,7 @@ package org.jetbrains.jet.lang.resolve.java;
|
|||||||
|
|
||||||
import com.intellij.psi.PsiField;
|
import com.intellij.psi.PsiField;
|
||||||
import com.intellij.psi.PsiMethod;
|
import com.intellij.psi.PsiMethod;
|
||||||
import com.intellij.psi.PsiParameter;
|
import com.intellij.psi.PsiType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.resolve.java.prop.PropertyNameUtils;
|
import org.jetbrains.jet.lang.resolve.java.prop.PropertyNameUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.prop.PropertyParseResult;
|
import org.jetbrains.jet.lang.resolve.java.prop.PropertyParseResult;
|
||||||
@@ -40,7 +40,7 @@ class JavaDescriptorResolverHelper {
|
|||||||
private final boolean staticMembers;
|
private final boolean staticMembers;
|
||||||
private final boolean kotlin;
|
private final boolean kotlin;
|
||||||
|
|
||||||
private Map<Name, NamedMembers> namedMembersMap = new HashMap<Name, NamedMembers>();
|
private final Map<Name, NamedMembers> namedMembersMap = new HashMap<Name, NamedMembers>();
|
||||||
|
|
||||||
private Builder(PsiClassWrapper psiClass, boolean staticMembers, boolean kotlin) {
|
private Builder(PsiClassWrapper psiClass, boolean staticMembers, boolean kotlin) {
|
||||||
this.psiClass = psiClass;
|
this.psiClass = psiClass;
|
||||||
@@ -156,17 +156,12 @@ class JavaDescriptorResolverHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: what if returnType == null?
|
// TODO: what if returnType == null?
|
||||||
TypeSource propertyType = new TypeSource(method.getJetMethod().propertyType(), method.getReturnType(), method.getPsiMethod());
|
final PsiType returnType = method.getReturnType();
|
||||||
|
assert returnType != null;
|
||||||
|
TypeSource propertyType = new TypeSource(method.getJetMethod().propertyType(), returnType, method.getPsiMethod());
|
||||||
|
|
||||||
members.addPropertyAccessor(new PropertyAccessorData(method, true, propertyType, receiverType));
|
members.addPropertyAccessor(new PropertyAccessorData(method, true, propertyType, receiverType));
|
||||||
}
|
}
|
||||||
else if (!kotlin && false) {
|
|
||||||
if (method.getParameters().size() == 0) {
|
|
||||||
TypeSource propertyType = new TypeSource("", method.getReturnType(), method.getPsiMethod());
|
|
||||||
members.addPropertyAccessor(new PropertyAccessorData(method, true, propertyType, null));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (propertyParseResult != null && !propertyParseResult.isGetter()) {
|
else if (propertyParseResult != null && !propertyParseResult.isGetter()) {
|
||||||
|
|
||||||
@@ -201,13 +196,6 @@ class JavaDescriptorResolverHelper {
|
|||||||
|
|
||||||
members.addPropertyAccessor(new PropertyAccessorData(method, false, propertyType, receiverType));
|
members.addPropertyAccessor(new PropertyAccessorData(method, false, propertyType, receiverType));
|
||||||
}
|
}
|
||||||
else if (!kotlin && false) {
|
|
||||||
if (method.getParameters().size() == 1) {
|
|
||||||
PsiParameter psiParameter = method.getParameters().get(0).getPsiParameter();
|
|
||||||
TypeSource propertyType = new TypeSource("", psiParameter.getType(), psiParameter);
|
|
||||||
members.addPropertyAccessor(new PropertyAccessorData(method, false, propertyType, null));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!method.getJetMethod().hasPropertyFlag()) {
|
if (!method.getJetMethod().hasPropertyFlag()) {
|
||||||
@@ -222,6 +210,7 @@ class JavaDescriptorResolverHelper {
|
|||||||
@NotNull
|
@NotNull
|
||||||
static Map<Name, NamedMembers> getNamedMembers(@NotNull JavaDescriptorResolver.ResolverScopeData resolverScopeData) {
|
static Map<Name, NamedMembers> getNamedMembers(@NotNull JavaDescriptorResolver.ResolverScopeData resolverScopeData) {
|
||||||
if (resolverScopeData.psiClass != null) {
|
if (resolverScopeData.psiClass != null) {
|
||||||
|
@SuppressWarnings("ConstantConditions")
|
||||||
Builder builder = new Builder(new PsiClassWrapper(resolverScopeData.psiClass), resolverScopeData.staticMembers, resolverScopeData.kotlin);
|
Builder builder = new Builder(new PsiClassWrapper(resolverScopeData.psiClass), resolverScopeData.staticMembers, resolverScopeData.kotlin);
|
||||||
builder.run();
|
builder.run();
|
||||||
return builder.namedMembersMap;
|
return builder.namedMembersMap;
|
||||||
|
|||||||
Reference in New Issue
Block a user