package de.plushnikov.intellij.lombok.psi;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.impl.CheckUtil;
import com.intellij.psi.impl.light.LightMethod;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
/**
* @author Plushnikov Michail
*/
public class LombokLightMethodImpl extends LightMethod implements LombokLightMethod {
private final PsiMethod myMethod;
public LombokLightMethodImpl(@NotNull PsiManager manager, @NotNull PsiMethod valuesMethod, @NotNull PsiClass psiClass) {
super(manager, valuesMethod, psiClass);
myMethod = valuesMethod;
}
@Override
public LombokLightMethod withNavigationElement(PsiElement navigationElement) {
setNavigationElement(navigationElement);
return this;
}
public PsiElement getParent() {
PsiElement result = super.getParent();
result = null != result ? result : getContainingClass();
return result;
}
public PsiFile getContainingFile() {
PsiClass containingClass = getContainingClass();
return containingClass != null ? containingClass.getContainingFile() : null;
}
public PsiElement copy() {
return new LombokLightMethodImpl(myManager, (PsiMethod) myMethod.copy(), getContainingClass());
}
public ASTNode getNode() {
return myMethod.getNode();
}
@Override
public PsiElement replace(@NotNull PsiElement newElement) throws IncorrectOperationException {
// just add new element to the containing class
final PsiClass containingClass = getContainingClass();
if (null != containingClass) {
CheckUtil.checkWritable(containingClass);
return containingClass.add(newElement);
}
return null;
}
@Override
public void delete() throws IncorrectOperationException {
// simple do nothing
}
@Override
public void checkDelete() throws IncorrectOperationException {
// simple do nothing
}
}