From baa0bc5ba97c43478ce362de9a1f13a1d170fe37 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 21 Mar 2011 17:48:24 +0300 Subject: [PATCH] Java constructors supported --- .../resolve/java/JavaDescriptorResolver.java | 38 +++++++++---------- .../jet/lang/types/JetTypeInferrer.java | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/idea/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index a09f40c8f34..365a79c9c4e 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -5,6 +5,7 @@ import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.resolve.WritableFunctionGroup; import org.jetbrains.jet.lang.types.*; import java.util.*; @@ -53,7 +54,6 @@ public class JavaDescriptorResolver { return null; } classDescriptor = createJavaClassDescriptor(psiClass); - classDescriptorCache.put(qualifiedName, classDescriptor); } return classDescriptor; } @@ -66,31 +66,31 @@ public class JavaDescriptorResolver { Collections.emptyList(), // TODO name ); + + WritableFunctionGroup constructors = new WritableFunctionGroup(""); classDescriptor.initialize( // TODO modifierList == null ? false : modifierList.hasModifierProperty(PsiModifier.FINAL), Collections.emptyList(), getSupertypes(psiClass), new JavaClassMembersScope(classDescriptor, psiClass, semanticServices, false), - new FunctionGroup() { - @NotNull - @Override - public String getName() { - throw new UnsupportedOperationException(); // TODO - } - - @NotNull - @Override - public Collection getPossiblyApplicableFunctions(@NotNull List typeArguments, @NotNull List positionedValueArgumentTypes) { - throw new UnsupportedOperationException(); // TODO - } - - @Override - public boolean isEmpty() { - throw new UnsupportedOperationException(); // TODO - } - } + constructors ); + + classDescriptorCache.put(psiClass.getQualifiedName(), classDescriptor); + + // NOTE: this writes into constructors after it is remembered by the classDescriptor + PsiMethod[] psiConstructors = psiClass.getConstructors(); + for (PsiMethod constructor : psiConstructors) { + ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl( + classDescriptor, + Collections.emptyList(), // TODO + false); + constructorDescriptor.initialize(resolveParameterDescriptors(constructorDescriptor, constructor.getParameterList().getParameters())); + constructors.addFunction( + constructorDescriptor); + } + semanticServices.getTrace().recordDeclarationResolution(psiClass, classDescriptor); return classDescriptor; } diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index 087444ff0ff..7a14683c121 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -766,7 +766,7 @@ public class JetTypeInferrer { List valueArgumentTypes = new ArrayList(); for (JetExpression valueArgument : positionedValueArguments) { - valueArgumentTypes.add(getType(scope, valueArgument, false)); + valueArgumentTypes.add(safeGetType(scope, valueArgument, false)); } FunctionDescriptor functionDescriptor = overloadDomain.getFunctionDescriptorForPositionedArguments(types, valueArgumentTypes);