package de.plushnikov.intellij.lombok.psi;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiIdentifier;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.PsiType;
import com.intellij.psi.impl.CheckUtil;
import com.intellij.psi.impl.light.LightFieldBuilder;
import com.intellij.psi.impl.light.LightIdentifier;
import com.intellij.psi.impl.light.LightModifierList;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
/**
* @author Plushnikov Michail
*/
public class LombokLightFieldBuilder11Impl extends LightFieldBuilder implements LombokLightFieldBuilder {
protected final LightIdentifier myNameIdentifier;
public LombokLightFieldBuilder11Impl(@NotNull PsiManager manager, @NotNull String name, @NotNull PsiType type) {
super(manager, name, type);
myNameIdentifier = new LightIdentifier(manager, name);
}
@Override
public LombokLightFieldBuilder withContainingClass(PsiClass psiClass) {
setContainingClass(psiClass);
return this;
}
@Override
public LombokLightFieldBuilder withModifier(@PsiModifier.ModifierConstant @NotNull @NonNls String modifier) {
((LightModifierList) getModifierList()).addModifier(modifier);
return this;
}
@Override
public LombokLightFieldBuilder withNavigationElement(PsiElement navigationElement) {
setNavigationElement(navigationElement);
return this;
}
@Override
public PsiIdentifier getNameIdentifier() {
return myNameIdentifier;
}
public String toString() {
return "LombokLightFieldBuilder: " + getName();
}
@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
}
}