EA-36390 Guard rewriting constructor in slice

This commit is contained in:
Nikolay Krasko
2012-09-26 21:40:06 +04:00
parent 0d7544c6a9
commit 7b60c016f9
@@ -446,6 +446,10 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
constructors.add(createPrimaryConstructorForObject(containingClass));
}
else if (psiConstructors.length == 0) {
if (trace.get(BindingContext.CONSTRUCTOR, psiClass) != null) {
constructors.add(trace.get(BindingContext.CONSTRUCTOR, psiClass));
}
else {
// We need to create default constructors for classes and abstract classes.
// Example:
// class Kotlin() : Java() {}
@@ -502,6 +506,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
trace.record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor);
}
}
}
else {
for (PsiMethod psiConstructor : psiConstructors) {
ConstructorDescriptor constructor = resolveConstructor(psiClass, classData, isStatic, psiConstructor);
@@ -527,15 +532,20 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
return null;
}
if (trace.get(BindingContext.CONSTRUCTOR, psiConstructor) != null) {
return trace.get(BindingContext.CONSTRUCTOR, psiConstructor);
}
ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl(
classData.classDescriptor,
Collections.<AnnotationDescriptor>emptyList(), // TODO
false);
String context = "constructor of class " + psiClass.getQualifiedName();
ValueParameterDescriptors valueParameterDescriptors = resolveParameterDescriptors(constructorDescriptor,
constructor.getParameters(),
TypeVariableResolvers.classTypeVariableResolver(
classData.classDescriptor, context));
ValueParameterDescriptors valueParameterDescriptors = resolveParameterDescriptors(
constructorDescriptor, constructor.getParameters(),
TypeVariableResolvers.classTypeVariableResolver(classData.classDescriptor, context));
if (valueParameterDescriptors.receiverType != null) {
throw new IllegalStateException();
}