package de.plushnikov.intellij.plugin.processor.modifier;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiField;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
/**
* @author Florian Böhm
*/
public class UtilityClassModifierTest extends LightCodeInsightFixtureTestCase {
@Override
protected String getTestDataPath() {
return "testData/augment/modifier";
}
@Override
public void setUp() throws Exception {
super.setUp();
myFixture.addClass("package lombok.experimental;\npublic @interface UtilityClass { }");
}
public void testUtilityClassModifiersField() {
PsiFile file = myFixture.configureByFile(getTestName(false) + ".java");
PsiField field = PsiTreeUtil.getParentOfType(file.findElementAt(myFixture.getCaretOffset()), PsiField.class);
assertNotNull(field);
assertNotNull(field.getModifierList());
PsiElement parent = field.getParent();
assertNotNull(parent);
assertTrue(parent instanceof PsiClass);
PsiClass parentClass = (PsiClass) parent;
assertNotNull(parentClass.getModifierList());
assertTrue("@UtilityClass should make parent class final", parentClass.getModifierList().hasModifierProperty(PsiModifier.FINAL));
assertTrue("@UtilityClass should make field static", field.getModifierList().hasModifierProperty(PsiModifier.STATIC));
}
public void testUtilityClassModifiersInnerClass() {
PsiFile file = myFixture.configureByFile(getTestName(false) + ".java");
PsiClass innerClass = PsiTreeUtil.getParentOfType(file.findElementAt(myFixture.getCaretOffset()), PsiClass.class);
assertNotNull(innerClass);
assertNotNull(innerClass.getModifierList());
PsiElement parent = innerClass.getParent();
assertNotNull(parent);
assertTrue(parent instanceof PsiClass);
PsiClass parentClass = (PsiClass) parent;
assertNotNull(parentClass.getModifierList());
assertTrue("@UtilityClass should make parent class final", ((PsiClass) innerClass.getParent()).getModifierList().hasModifierProperty(PsiModifier.FINAL));
assertTrue("@UtilityClass should make inner class static", innerClass.getModifierList().hasModifierProperty(PsiModifier.STATIC));
}
public void testUtilityClassModifiersMethod() {
PsiFile file = myFixture.configureByFile(getTestName(false) + ".java");
PsiMethod method = PsiTreeUtil.getParentOfType(file.findElementAt(myFixture.getCaretOffset()), PsiMethod.class);
assertNotNull(method);
assertNotNull(method.getModifierList());
PsiElement parent = method.getParent();
assertNotNull(parent);
assertTrue(parent instanceof PsiClass);
PsiClass parentClass = (PsiClass) parent;
assertNotNull(parentClass.getModifierList());
assertTrue("@UtilityClass should make parent class final", ((PsiClass) method.getParent()).getModifierList().hasModifierProperty(PsiModifier.FINAL));
assertTrue("@UtilityClass should make method static", method.getModifierList().hasModifierProperty(PsiModifier.STATIC));
}
}