diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java index 4743aa32742..5186b105c45 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java @@ -18,17 +18,12 @@ package org.jetbrains.jet.di; 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.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; /* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */ @@ -44,7 +39,6 @@ public class InjectorForJavaDescriptorResolver { private PsiClassFinderImpl psiClassFinder; private JavaTypeTransformer javaTypeTransformer; private JavaDescriptorSignatureResolver javaDescriptorSignatureResolver; - private NamespaceFactoryImpl namespaceFactory; public InjectorForJavaDescriptorResolver( @NotNull Project project, @@ -62,7 +56,6 @@ public class InjectorForJavaDescriptorResolver { this.psiClassFinder = new PsiClassFinderImpl(); this.javaTypeTransformer = new JavaTypeTransformer(); this.javaDescriptorSignatureResolver = new JavaDescriptorSignatureResolver(); - this.namespaceFactory = new NamespaceFactoryImpl(); javaBridgeConfiguration.setBuiltinsScopeExtensionMode(builtinsScopeExtensionMode); javaBridgeConfiguration.setJavaSemanticServices(javaSemanticServices); @@ -74,7 +67,6 @@ public class InjectorForJavaDescriptorResolver { this.javaSemanticServices.setTypeTransformer(javaTypeTransformer); this.javaDescriptorResolver.setJavaDescriptorSignatureResolver(javaDescriptorSignatureResolver); - this.javaDescriptorResolver.setNamespaceFactory(namespaceFactory); this.javaDescriptorResolver.setProject(project); this.javaDescriptorResolver.setPsiClassFinder(psiClassFinder); this.javaDescriptorResolver.setSemanticServices(javaSemanticServices); @@ -88,10 +80,6 @@ public class InjectorForJavaDescriptorResolver { javaDescriptorSignatureResolver.setJavaDescriptorResolver(javaDescriptorResolver); javaDescriptorSignatureResolver.setJavaSemanticServices(javaSemanticServices); - namespaceFactory.setConfiguration(javaBridgeConfiguration); - namespaceFactory.setModuleDescriptor(moduleDescriptor); - namespaceFactory.setTrace(bindingTrace); - javaBridgeConfiguration.init(); psiClassFinder.initialize(); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaSemanticServices.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaSemanticServices.java index 089ee8c19f7..be5df75673f 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaSemanticServices.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaSemanticServices.java @@ -17,18 +17,13 @@ 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 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.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; /* 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 JavaTypeTransformer javaTypeTransformer; private JavaDescriptorSignatureResolver javaDescriptorSignatureResolver; - private NamespaceFactoryImpl namespaceFactory; public InjectorForJavaSemanticServices( @NotNull BuiltinsScopeExtensionMode builtinsScopeExtensionMode, @@ -60,7 +54,6 @@ public class InjectorForJavaSemanticServices { this.project = project; this.javaTypeTransformer = new JavaTypeTransformer(); this.javaDescriptorSignatureResolver = new JavaDescriptorSignatureResolver(); - this.namespaceFactory = new NamespaceFactoryImpl(); this.javaSemanticServices.setDescriptorResolver(javaDescriptorResolver); this.javaSemanticServices.setPsiClassFinder(psiClassFinder); @@ -68,7 +61,6 @@ public class InjectorForJavaSemanticServices { this.javaSemanticServices.setTypeTransformer(javaTypeTransformer); this.javaDescriptorResolver.setJavaDescriptorSignatureResolver(javaDescriptorSignatureResolver); - this.javaDescriptorResolver.setNamespaceFactory(namespaceFactory); this.javaDescriptorResolver.setProject(project); this.javaDescriptorResolver.setPsiClassFinder(psiClassFinder); this.javaDescriptorResolver.setSemanticServices(javaSemanticServices); @@ -86,10 +78,6 @@ public class InjectorForJavaSemanticServices { javaDescriptorSignatureResolver.setJavaDescriptorResolver(javaDescriptorResolver); javaDescriptorSignatureResolver.setJavaSemanticServices(javaSemanticServices); - namespaceFactory.setConfiguration(javaBridgeConfiguration); - namespaceFactory.setModuleDescriptor(moduleDescriptor); - namespaceFactory.setTrace(bindingTrace); - javaBridgeConfiguration.init(); psiClassFinder.initialize(); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java index 9d7a9c45df7..47f03877a46 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -17,39 +17,17 @@ 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 org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; -import org.jetbrains.jet.lang.resolve.BindingTrace; -import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode; import org.jetbrains.jet.lang.ModuleConfiguration; -import org.jetbrains.jet.lang.resolve.java.JavaBridgeConfiguration; -import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; -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.descriptors.ModuleDescriptor; +import org.jetbrains.jet.lang.resolve.*; 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.ImportsResolver; -import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver; -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 org.jetbrains.jet.lang.resolve.java.*; +import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; + import javax.annotation.PreDestroy; /* 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); javaDescriptorResolver.setJavaDescriptorSignatureResolver(javaDescriptorSignatureResolver); - javaDescriptorResolver.setNamespaceFactory(namespaceFactory); javaDescriptorResolver.setProject(project); javaDescriptorResolver.setPsiClassFinder(psiClassFinder); javaDescriptorResolver.setSemanticServices(javaSemanticServices); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 67559b6e05b..6b9fa859607 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -100,7 +100,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes final boolean staticMembers; final boolean kotlin; final ClassOrNamespaceDescriptor classOrNamespaceDescriptor; - private List alternativeSignatureErrors; protected ResolverScopeData(@Nullable PsiClass psiClass, @Nullable PsiPackage psiPackage, @Nullable FqName fqName, boolean staticMembers, @NotNull ClassOrNamespaceDescriptor descriptor) { checkPsiClassIsNotJet(psiClass); @@ -134,29 +133,19 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes this.classOrNamespaceDescriptor = null; } - public boolean isPositive() { - return this.classOrNamespaceDescriptor != null; - } - @NotNull public PsiElement getPsiPackageOrPsiClass() { if (psiPackage != null) { return psiPackage; } else { + assert psiClass != null; return psiClass; } } private Map namedMembersMap; - public void addAlternativeSignatureError(@NotNull String errorMessage) { - if (alternativeSignatureErrors == null) { - alternativeSignatureErrors = new ArrayList(); - } - alternativeSignatureErrors.add(errorMessage); - } - @NotNull public abstract List getTypeParameters(); } @@ -269,7 +258,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes protected Project project; protected JavaSemanticServices semanticServices; - private NamespaceFactory namespaceFactory; private BindingTrace trace; private PsiClassFinder psiClassFinder; private JavaDescriptorSignatureResolver javaDescriptorSignatureResolver; @@ -279,11 +267,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes this.project = project; } - @Inject - public void setNamespaceFactory(NamespaceFactoryImpl namespaceFactory) { - this.namespaceFactory = namespaceFactory; - } - @Inject public void setSemanticServices(JavaSemanticServices semanticServices) { this.semanticServices = semanticServices; @@ -375,9 +358,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes @NotNull private ResolverClassData createJavaClassDescriptor(@NotNull final PsiClass psiClass, List taskList) { - FqName fqName = new FqName(psiClass.getQualifiedName()); + final String qualifiedName = psiClass.getQualifiedName(); + assert qualifiedName != null; + + FqName fqName = new FqName(qualifiedName); if (classDescriptorCache.containsKey(fqName)) { - throw new IllegalStateException(psiClass.getQualifiedName()); + throw new IllegalStateException(qualifiedName); } checkPsiClassIsNotJet(psiClass); @@ -423,7 +409,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes classData.classDescriptor.createTypeConstructor(); 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 supertypes.addAll(getSupertypes(new PsiClassWrapper(psiClass), classData, classData.getTypeParameters())); @@ -447,6 +433,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes PsiClass psiClass = classData.psiClass; ClassDescriptorFromJvmBytecode containingClass = classData.classDescriptor; + assert psiClass != null; TypeVariableResolver resolverForTypeParameters = TypeVariableResolvers.classTypeVariableResolver( containingClass, "class " + psiClass.getQualifiedName()); @@ -497,6 +484,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes varargElementType = semanticServices.getTypeTransformer().transformToType(((PsiArrayType) returnType).getComponentType(), resolverForTypeParameters); } + assert returnType != null; valueParameters.add(new ValueParameterDescriptorImpl( constructorDescriptor, i, @@ -534,6 +522,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes private ConstructorDescriptor resolveConstructor(PsiClass psiClass, ResolverClassData classData, boolean aStatic, PsiMethod psiConstructor) { PsiMethodWrapper constructor = new PsiMethodWrapper(psiConstructor); + //noinspection deprecation if (constructor.getJetConstructor().hidden()) { return null; } @@ -564,7 +553,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes } @Nullable - private PsiClass getInnerClassClassObject(@NotNull PsiClass outer) { + private static PsiClass getInnerClassClassObject(@NotNull PsiClass outer) { for (PsiClass inner : outer.getInnerClasses()) { if (inner.getName().equals(JvmAbi.CLASS_OBJECT_CLASS_NAME)) { return inner; @@ -575,7 +564,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes /** * TODO - * @see #createJavaNamespaceDescriptor(com.intellij.psi.PsiClass) + //* @see #createJavaNamespaceDescriptor(PsiClass) */ @Nullable private MutableClassDescriptorLite createClassObjectDescriptor(@NotNull ClassDescriptor containing, @NotNull PsiClass psiClass) { @@ -601,7 +590,9 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes 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( containing, ClassKind.CLASS_OBJECT, classObjectPsiClass, fqName, this) .getResolverBinaryClassData(); @@ -677,11 +668,15 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes @NotNull 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(); 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); if (clazz == null) { 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 result, PsiClassType[] extendsListTypes, TypeVariableResolver typeVariableResolver) { for (PsiClassType type : extendsListTypes) { PsiClass resolved = type.resolve(); - if (resolved != null && JvmStdlibNames.JET_OBJECT.getFqName().equalsTo(resolved.getQualifiedName())) { - continue; + if (resolved != null) { + 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); @@ -931,25 +930,27 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes private final JvmMethodParameterKind kind; private final JetType receiverType; 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.receiverType = receiverType; this.valueParameterDescriptor = valueParameterDescriptor; - this.typeInfo = typeInfo; } 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) { - return new JvmMethodParameterMeaning(JvmMethodParameterKind.REGULAR, null, valueParameterDescriptor, null); + return new JvmMethodParameterMeaning(JvmMethodParameterKind.REGULAR, null, valueParameterDescriptor); } - public static JvmMethodParameterMeaning typeInfo(@NotNull Object typeInfo) { - return new JvmMethodParameterMeaning(JvmMethodParameterKind.TYPE_INFO, null, null, typeInfo); + public static JvmMethodParameterMeaning typeInfo() { + return new JvmMethodParameterMeaning(JvmMethodParameterKind.TYPE_INFO, null, null); } } @@ -958,7 +959,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes PsiParameterWrapper parameter, TypeVariableResolver typeVariableResolver) { if (parameter.getJetTypeParameter().isDefined()) { - return JvmMethodParameterMeaning.typeInfo(new Object()); + return JvmMethodParameterMeaning.typeInfo(); } PsiType psiType = parameter.getPsiParameter().getType(); @@ -1018,7 +1019,8 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes public Set resolveFieldGroupByName(@NotNull Name fieldName, @NotNull ResolverScopeData scopeData) { - if (scopeData.psiClass == null) { + final PsiClass psiClass = scopeData.psiClass; + if (psiClass == null) { return Collections.emptySet(); } @@ -1029,8 +1031,9 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes return Collections.emptySet(); } + final String qualifiedName = psiClass.getQualifiedName(); resolveNamedGroupProperties(scopeData.classOrNamespaceDescriptor, scopeData, namedMembers, fieldName, - "class or namespace " + scopeData.psiClass.getQualifiedName()); + "class or namespace " + qualifiedName); return namedMembers.propertyDescriptors; } @@ -1039,6 +1042,8 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes public Set resolveFieldGroup(@NotNull ResolverScopeData scopeData) { getResolverScopeData(scopeData); + final PsiClass psiClass = scopeData.psiClass; + assert psiClass != null; Set descriptors = Sets.newHashSet(); Map membersForProperties = scopeData.namedMembersMap; @@ -1046,14 +1051,15 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes NamedMembers namedMembers = entry.getValue(); 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); } return descriptors; } - private Object key(TypeSource typeSource) { + private static Object key(TypeSource typeSource) { if (typeSource == null) { 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) { return ((PsiClassType) psiType).getClassName(); } @@ -1076,11 +1082,11 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes return Pair.create("[", psiTypeToKey(((PsiArrayType) psiType).getComponentType())); } 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 receiverType = key(propertyAccessor.getReceiverType()); return Pair.create(type, receiverType); @@ -1368,17 +1374,28 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes @NotNull ResolverScopeData scopeData, boolean isStatic ) { - boolean isEnum = scopeData.psiClass.isEnum(); + final PsiClass psiClass = scopeData.psiClass; + assert psiClass != null; + + boolean isEnum = psiClass.isEnum(); 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 { return owner; } } - private void resolveNamedGroupFunctions(@NotNull ClassOrNamespaceDescriptor owner, PsiClass psiClass, - TypeSubstitutor typeSubstitutorForGenericSuperclasses, NamedMembers namedMembers, Name methodName, ResolverScopeData scopeData) { + private void resolveNamedGroupFunctions( + @NotNull ClassOrNamespaceDescriptor owner, PsiClass psiClass, + NamedMembers namedMembers, Name methodName, ResolverScopeData scopeData + ) { if (namedMembers.functionDescriptors != null) { return; } @@ -1434,7 +1451,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes } } - private Set getFunctionsFromSupertypes(ResolverScopeData scopeData, Name methodName) { + private static Set getFunctionsFromSupertypes(ResolverScopeData scopeData, Name methodName) { Set r = Sets.newLinkedHashSet(); for (JetType supertype : getSupertypes(scopeData)) { for (FunctionDescriptor function : supertype.getMemberScope().getFunctions(methodName)) { @@ -1444,7 +1461,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes return r; } - private Set getPropertiesFromSupertypes(ResolverScopeData scopeData, Name propertyName) { + private static Set getPropertiesFromSupertypes(ResolverScopeData scopeData, Name propertyName) { Set r = new HashSet(); for (JetType supertype : getSupertypes(scopeData)) { for (VariableDescriptor property : supertype.getMemberScope().getProperties(propertyName)) { @@ -1454,7 +1471,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes return r; } - private void getResolverScopeData(@NotNull ResolverScopeData scopeData) { + private static void getResolverScopeData(@NotNull ResolverScopeData scopeData) { if (scopeData.namedMembersMap == null) { scopeData.namedMembersMap = JavaDescriptorResolverHelper.getNamedMembers(scopeData); } @@ -1469,9 +1486,8 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes NamedMembers namedMembers = namedMembersMap.get(methodName); 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; } @@ -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, List parameters, TypeVariableResolver typeVariableResolver) { List result = new ArrayList(); @@ -1534,9 +1539,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes return null; } + final PsiMethod psiMethod = method.getPsiMethod(); + final PsiClass containingClass = psiMethod.getContainingClass(); if (scopeData.kotlin) { // 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)) { return null; } @@ -1544,16 +1552,19 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes SimpleFunctionDescriptorImpl functionDescriptorImpl = new SimpleFunctionDescriptorImpl( scopeData.classOrNamespaceDescriptor, - resolveAnnotations(method.getPsiMethod()), + resolveAnnotations(psiMethod), Name.identifier(method.getName()), DescriptorKindUtils.flagsToKind(method.getJetMethod().kind()) ); String context = "method " + method.getName() + " in class " + psiClass.getQualifiedName(); - List methodTypeParameters = javaDescriptorSignatureResolver.resolveMethodTypeParameters(method, functionDescriptorImpl); + List 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); @@ -1575,21 +1586,21 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes valueParameterDescriptors.descriptors, returnType, resolveModality(method, method.isFinal()), - resolveVisibility(method.getPsiMethod(), method.getJetMethod()), + resolveVisibility(psiMethod, method.getJetMethod()), /*isInline = */ false ); 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"); } return functionDescriptorImpl; } - private boolean isEnumSpecialMethod(@NotNull FunctionDescriptor functionDescriptor) { + private static boolean isEnumSpecialMethod(@NotNull FunctionDescriptor functionDescriptor) { List methodTypeParameters = functionDescriptor.getValueParameters(); String methodName = functionDescriptor.getName().getName(); JetType nullableString = TypeUtils.makeNullable(JetStandardLibrary.getInstance().getStringType()); @@ -1791,7 +1802,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes } @Nullable - private CompileTimeConstant getCompileTimeConstFromLiteralExpression(PsiLiteralExpression value) { + private static CompileTimeConstant getCompileTimeConstFromLiteralExpression(PsiLiteralExpression value) { Object literalValue = value.getValue(); if (literalValue instanceof String) { return new StringValue((String) literalValue); @@ -1827,14 +1838,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes getResolverScopeData(scopeData); - TypeSubstitutor substitutorForGenericSupertypes = typeSubstitutorForGenericSupertypes(scopeData); - List functions = new ArrayList(); for (Map.Entry entry : scopeData.namedMembersMap.entrySet()) { Name methodName = entry.getKey(); NamedMembers namedMembers = entry.getValue(); - resolveNamedGroupFunctions(scopeData.classOrNamespaceDescriptor, scopeData.psiClass, substitutorForGenericSupertypes, + resolveNamedGroupFunctions(scopeData.classOrNamespaceDescriptor, scopeData.psiClass, namedMembers, methodName, scopeData); functions.addAll(namedMembers.functionDescriptors); } @@ -1842,7 +1851,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes return functions; } - private Collection getSupertypes(ResolverScopeData scope) { + private static Collection getSupertypes(ResolverScopeData scope) { if (scope instanceof ResolverClassData) { 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, @NotNull TypeVariableResolver typeVariableResolver) { diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java index 73706745fe7..6aa2140a69e 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java @@ -18,7 +18,7 @@ package org.jetbrains.jet.lang.resolve.java; import com.intellij.psi.PsiField; import com.intellij.psi.PsiMethod; -import com.intellij.psi.PsiParameter; +import com.intellij.psi.PsiType; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.resolve.java.prop.PropertyNameUtils; import org.jetbrains.jet.lang.resolve.java.prop.PropertyParseResult; @@ -40,7 +40,7 @@ class JavaDescriptorResolverHelper { private final boolean staticMembers; private final boolean kotlin; - private Map namedMembersMap = new HashMap(); + private final Map namedMembersMap = new HashMap(); private Builder(PsiClassWrapper psiClass, boolean staticMembers, boolean kotlin) { this.psiClass = psiClass; @@ -156,17 +156,12 @@ class JavaDescriptorResolverHelper { } // 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)); } - 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()) { @@ -201,13 +196,6 @@ class JavaDescriptorResolverHelper { 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()) { @@ -222,6 +210,7 @@ class JavaDescriptorResolverHelper { @NotNull static Map getNamedMembers(@NotNull JavaDescriptorResolver.ResolverScopeData resolverScopeData) { if (resolverScopeData.psiClass != null) { + @SuppressWarnings("ConstantConditions") Builder builder = new Builder(new PsiClassWrapper(resolverScopeData.psiClass), resolverScopeData.staticMembers, resolverScopeData.kotlin); builder.run(); return builder.namedMembersMap;