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));
|
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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user