EA-36390 Guard rewriting constructor in slice
This commit is contained in:
+14
-4
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user