package de.plushnikov.intellij.plugin.psi;
import com.intellij.lang.Language;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiIdentifier;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiType;
import com.intellij.psi.impl.light.LightModifierList;
import com.intellij.psi.impl.light.LightParameter;
import com.intellij.psi.impl.light.LightVariableBuilder;
import de.plushnikov.intellij.plugin.util.ReflectionUtil;
import org.jetbrains.annotations.NotNull;
/**
* @author Plushnikov Michail
*/
public class LombokLightParameter extends LightParameter {
private String myName;
private final LombokLightIdentifier myNameIdentifier;
public LombokLightParameter(@NotNull String name, @NotNull PsiType type, PsiElement declarationScope, Language language) {
super(name, type, declarationScope, language);
myName = name;
PsiManager manager = declarationScope.getManager();
myNameIdentifier = new LombokLightIdentifier(manager, name);
ReflectionUtil.setFinalFieldPerReflection(LightVariableBuilder.class, this, LightModifierList.class,
new LombokLightModifierList(manager, language));
}
@NotNull
@Override
public String getName() {
return myName;
}
@Override
public PsiElement setName(@NotNull String name) {
myName = name;
myNameIdentifier.setText(name);
return this;
}
@Override
public PsiIdentifier getNameIdentifier() {
return myNameIdentifier;
}
@Override
public TextRange getTextRange() {
TextRange r = super.getTextRange();
return r == null ? TextRange.EMPTY_RANGE : r;
}
public LombokLightParameter setModifiers(String... modifiers) {
LombokLightModifierList modifierList = new LombokLightModifierList(getManager(), getLanguage(), modifiers);
ReflectionUtil.setFinalFieldPerReflection(LightVariableBuilder.class, this, LightModifierList.class, modifierList);
return this;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
LombokLightParameter that = (LombokLightParameter) o;
return getType().isValid() == that.getType().isValid() && getType().equals(that.getType());
}
@Override
public int hashCode() {
return getType().hashCode();
}
}