diff --git a/idea/src/org/jetbrains/jet/lang/resolve/java/JavaClassDescriptor.java b/idea/src/org/jetbrains/jet/lang/resolve/java/JavaClassDescriptor.java index 57e319b3e57..1c1be399d68 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/java/JavaClassDescriptor.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/java/JavaClassDescriptor.java @@ -66,7 +66,7 @@ public class JavaClassDescriptor extends MutableDeclarationDescriptor implements @Override public boolean hasConstructors() { - return constructors.isEmpty(); + return !constructors.isEmpty(); } @NotNull 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 80507102658..b55ad550a58 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -78,13 +78,12 @@ public class JavaDescriptorResolver { ); classDescriptor.setName(name); - WritableFunctionGroup constructors = new WritableFunctionGroup(""); List supertypes = new ArrayList(); classDescriptor.setTypeConstructor(new TypeConstructorImpl( classDescriptor, Collections.emptyList(), // TODO // TODO - modifierList == null ? false : modifierList.hasModifierProperty(PsiModifier.FINAL), + psiClass.hasModifierProperty(PsiModifier.FINAL), name, resolveTypeParameters(psiClass.getTypeParameters()), supertypes @@ -95,16 +94,29 @@ public class JavaDescriptorResolver { // UGLY HACK supertypes.addAll(getSupertypes(psiClass)); - // 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())); - classDescriptor.addConstructor(constructorDescriptor); - semanticServices.getTrace().recordDeclarationResolution(constructor, constructorDescriptor); + + if (psiConstructors.length == 0) { + if (!psiClass.hasModifierProperty(PsiModifier.ABSTRACT) && !psiClass.isInterface()) { + ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl( + classDescriptor, + Collections.emptyList(), + false); + constructorDescriptor.initialize(Collections.emptyList()); + classDescriptor.addConstructor(constructorDescriptor); + semanticServices.getTrace().recordDeclarationResolution(psiClass, constructorDescriptor); + } + } + else { + for (PsiMethod constructor : psiConstructors) { + ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl( + classDescriptor, + Collections.emptyList(), // TODO + false); + constructorDescriptor.initialize(resolveParameterDescriptors(constructorDescriptor, constructor.getParameterList().getParameters())); + classDescriptor.addConstructor(constructorDescriptor); + semanticServices.getTrace().recordDeclarationResolution(constructor, constructorDescriptor); + } } semanticServices.getTrace().recordDeclarationResolution(psiClass, classDescriptor);