/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.intentions; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiCodeBlock; import com.intellij.psi.PsiFile; import com.intellij.psi.impl.source.codeStyle.CodeEditUtil; import gw.lang.reflect.module.IModule; import gw.plugin.ij.lang.psi.api.statements.params.IGosuParameterList; import gw.plugin.ij.lang.psi.impl.AbstractGosuClassFileImpl; import gw.plugin.ij.lang.psi.impl.statements.typedef.members.GosuMethodBaseImpl; import gw.plugin.ij.lang.psi.impl.statements.typedef.members.GosuMethodImpl; import gw.plugin.ij.lang.psi.util.GosuPsiParseUtil; import gw.plugin.ij.util.GosuModuleUtil; import org.jetbrains.annotations.NotNull; public class ObsoleteConstructorFix extends BaseIntentionAction { private final GosuMethodImpl method; public ObsoleteConstructorFix(GosuMethodImpl method) { this.method = method; } @NotNull @Override public String getText() { return "Fix obsolete constructor syntax"; } @NotNull @Override public String getFamilyName() { return getText(); } public void invokeImpl(@NotNull final Project project, final Editor editor, @NotNull final PsiFile file) { final IModule module = GosuModuleUtil.findModuleForPsiElement(method); final GosuMethodBaseImpl constructor = (GosuMethodBaseImpl) GosuPsiParseUtil.parseDeclaration("construct(){}", method.getManager(), module); CodeEditUtil.saveWhitespacesInfo(method.getNode()); CodeEditUtil.setOldIndentation(constructor.getNode(), CodeEditUtil.getOldIndentation(method.getNode())); final PsiCodeBlock oldBody = method.getBody(); if (oldBody != null) { constructor.getBody().replace(oldBody); } final IGosuParameterList oldParameters = method.getParameterList(); constructor.getParameterList().replace(oldParameters); method.replace(constructor); ((AbstractGosuClassFileImpl) file).reparseGosuFromPsi(); } }