Delegation added to overide action (when it is possible)
This commit is contained in:
@@ -145,10 +145,22 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
|
|||||||
StringBuilder bodyBuilder = new StringBuilder("override fun ");
|
StringBuilder bodyBuilder = new StringBuilder("override fun ");
|
||||||
bodyBuilder.append(descriptor.getName());
|
bodyBuilder.append(descriptor.getName());
|
||||||
bodyBuilder.append("(");
|
bodyBuilder.append("(");
|
||||||
|
boolean isAbstractFun = descriptor.getModality() == Modality.ABSTRACT;
|
||||||
|
StringBuilder delegationBuilder = new StringBuilder();
|
||||||
|
if (isAbstractFun) {
|
||||||
|
delegationBuilder.append("throw UnsupportedOperationException()");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
delegationBuilder.append("super<").append(descriptor.getContainingDeclaration().getName());
|
||||||
|
delegationBuilder.append(">.").append(descriptor.getName()).append("(");
|
||||||
|
}
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
for (ValueParameterDescriptor parameterDescriptor : descriptor.getValueParameters()) {
|
for (ValueParameterDescriptor parameterDescriptor : descriptor.getValueParameters()) {
|
||||||
if (!first) {
|
if (!first) {
|
||||||
bodyBuilder.append(",");
|
bodyBuilder.append(",");
|
||||||
|
if (!isAbstractFun) {
|
||||||
|
delegationBuilder.append(",");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
first = false;
|
first = false;
|
||||||
bodyBuilder.append(parameterDescriptor.getName());
|
bodyBuilder.append(parameterDescriptor.getName());
|
||||||
@@ -156,17 +168,25 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
|
|||||||
bodyBuilder.append(DescriptorRenderer.COMPACT.renderTypeWithShortNames(parameterDescriptor.getType()));
|
bodyBuilder.append(DescriptorRenderer.COMPACT.renderTypeWithShortNames(parameterDescriptor.getType()));
|
||||||
|
|
||||||
ImportInsertHelper.addImportDirectiveIfNeeded(parameterDescriptor.getType(), file);
|
ImportInsertHelper.addImportDirectiveIfNeeded(parameterDescriptor.getType(), file);
|
||||||
|
|
||||||
|
if (!isAbstractFun) {
|
||||||
|
delegationBuilder.append(parameterDescriptor.getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
bodyBuilder.append(")");
|
bodyBuilder.append(")");
|
||||||
|
if (!isAbstractFun) {
|
||||||
|
delegationBuilder.append(")");
|
||||||
|
}
|
||||||
final JetType returnType = descriptor.getReturnType();
|
final JetType returnType = descriptor.getReturnType();
|
||||||
final JetStandardLibrary stdlib = JetStandardLibrary.getInstance();
|
final JetStandardLibrary stdlib = JetStandardLibrary.getInstance();
|
||||||
|
|
||||||
if (returnType != null && !stdlib.getTuple0Type().equals(returnType)) {
|
boolean returnsNotUnit = returnType != null && !stdlib.getTuple0Type().equals(returnType);
|
||||||
|
if (returnsNotUnit) {
|
||||||
bodyBuilder.append(" : ").append(DescriptorRenderer.COMPACT.renderTypeWithShortNames(returnType));
|
bodyBuilder.append(" : ").append(DescriptorRenderer.COMPACT.renderTypeWithShortNames(returnType));
|
||||||
ImportInsertHelper.addImportDirectiveIfNeeded(returnType, file);
|
ImportInsertHelper.addImportDirectiveIfNeeded(returnType, file);
|
||||||
}
|
}
|
||||||
|
|
||||||
bodyBuilder.append("{").append("throw UnsupportedOperationException()").append("}");
|
bodyBuilder.append("{").append(returnsNotUnit && !isAbstractFun ? "return " : "").append(delegationBuilder.toString()).append("}");
|
||||||
|
|
||||||
return JetPsiFactory.createFunction(project, bodyBuilder.toString());
|
return JetPsiFactory.createFunction(project, bodyBuilder.toString());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user