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)); constructors.add(createPrimaryConstructorForObject(containingClass));
} }
else if (psiConstructors.length == 0) { 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. // We need to create default constructors for classes and abstract classes.
// Example: // Example:
// class Kotlin() : Java() {} // class Kotlin() : Java() {}
@@ -502,6 +506,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
trace.record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor); trace.record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor);
} }
} }
}
else { else {
for (PsiMethod psiConstructor : psiConstructors) { for (PsiMethod psiConstructor : psiConstructors) {
ConstructorDescriptor constructor = resolveConstructor(psiClass, classData, isStatic, psiConstructor); ConstructorDescriptor constructor = resolveConstructor(psiClass, classData, isStatic, psiConstructor);
@@ -527,15 +532,20 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
return null; return null;
} }
if (trace.get(BindingContext.CONSTRUCTOR, psiConstructor) != null) {
return trace.get(BindingContext.CONSTRUCTOR, psiConstructor);
}
ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl( ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl(
classData.classDescriptor, classData.classDescriptor,
Collections.<AnnotationDescriptor>emptyList(), // TODO Collections.<AnnotationDescriptor>emptyList(), // TODO
false); false);
String context = "constructor of class " + psiClass.getQualifiedName(); String context = "constructor of class " + psiClass.getQualifiedName();
ValueParameterDescriptors valueParameterDescriptors = resolveParameterDescriptors(constructorDescriptor, ValueParameterDescriptors valueParameterDescriptors = resolveParameterDescriptors(
constructor.getParameters(), constructorDescriptor, constructor.getParameters(),
TypeVariableResolvers.classTypeVariableResolver( TypeVariableResolvers.classTypeVariableResolver(classData.classDescriptor, context));
classData.classDescriptor, context));
if (valueParameterDescriptors.receiverType != null) { if (valueParameterDescriptors.receiverType != null) {
throw new IllegalStateException(); throw new IllegalStateException();
} }