package com.siberika.idea.pascal.editor.formatter;
import com.google.common.collect.Iterables;
import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiErrorElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.siberika.idea.pascal.lang.psi.PasNamedIdent;
import com.siberika.idea.pascal.lang.psi.PasTypeDecl;
import com.siberika.idea.pascal.lang.psi.PasTypes;
import com.siberika.idea.pascal.lang.psi.PascalVariableDeclaration;
import com.siberika.idea.pascal.util.DocUtil;
import static com.siberika.idea.pascal.editor.formatter.PascalSmartEnterProcessor.getChildEndOffset;
/**
* Author: George Bakhtadze
* Date: 12/07/2016
*/
public class PascalCompleteIdent {
public static void completeIdent(Editor editor, PascalVariableDeclaration el) {
/**
* name => name: _;
*/
PsiErrorElement error = PsiTreeUtil.findChildOfType(el, PsiErrorElement.class);
PasTypeDecl typeDecl = el.getTypeDecl();
if ((null == typeDecl) || (error != null)) {
int colonPos = getChildEndOffset(PasTypes.COLON, el);
String colonStr = colonPos >= 0 ? "" : ": ";
String rparenStr = ";";
PasNamedIdent last = Iterables.getLast(el.getNamedIdentList(), null);
if (last != null) {
int offs = colonPos >= 0 ? colonPos + 1 : last.getTextRange().getEndOffset();
if ((colonPos >= 0) && (typeDecl != null)) {
offs = typeDecl.getTextRange().getEndOffset();
}
DocUtil.adjustDocument(editor, offs, colonStr + DocUtil.PLACEHOLDER_CARET + rparenStr);
}
}
}
}