blob: 6a0ce20770514fb86d2749db464a617472374311 [file] [log] [blame]
package com.intellij.codeInsight;
import com.intellij.codeInsight.generation.GenerateEqualsHelper;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiField;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.testFramework.LightCodeInsightTestCase;
import java.util.ArrayList;
/**
* @author yole
*/
public abstract class GenerateEqualsTestCase extends LightCodeInsightTestCase {
protected void doTest(int[] equals, int[] hashCode, int[] nonNull, boolean insertOverride) throws Exception {
configureByFile("/codeInsight/generateEquals/before" + getTestName(false) + ".java");
performTest(equals, hashCode, nonNull, insertOverride);
checkResultByFile("/codeInsight/generateEquals/after" + getTestName(false) + ".java");
}
private static void performTest(int[] equals, int[] hashCode, int[] nonNull, boolean insertOverride) {
CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject()).clone();
settings.GENERATE_FINAL_LOCALS = true;
settings.INSERT_OVERRIDE_ANNOTATION = insertOverride;
CodeStyleSettingsManager.getInstance(getProject()).setTemporarySettings(settings);
try {
PsiElement element = getFile().findElementAt(getEditor().getCaretModel().getOffset());
if (element == null) return;
PsiClass aClass = PsiTreeUtil.getParentOfType(element, PsiClass.class);
if (aClass == null) return;
PsiField[] fields = aClass.getFields();
new GenerateEqualsHelper(getProject(), aClass, getIndexed(fields, equals), getIndexed(fields, hashCode), getIndexed(fields, nonNull),
false)
.invoke();
FileDocumentManager.getInstance().saveAllDocuments();
}
finally {
CodeStyleSettingsManager.getInstance(getProject()).dropTemporarySettings();
}
}
private static PsiField[] getIndexed(PsiField[] fields, int[] indices) {
ArrayList<PsiField> result = new ArrayList<PsiField>();
for (int indice : indices) {
result.add(fields[indice]);
}
return result.toArray(new PsiField[result.size()]);
}
}