/plugins/PHPParser/tags/v1_2_1/src/gatchan/phpparser/sidekick/PHPSideKickCompletion.java

# · Java · 105 lines · 90 code · 11 blank · 4 comment · 30 complexity · f69d7c0e7b1ba3bf064f63ac1dd26edc MD5 · raw file

  1. package gatchan.phpparser.sidekick;
  2. import gatchan.phpparser.project.itemfinder.PHPItemCellRenderer;
  3. import net.sourceforge.phpdt.internal.compiler.ast.ClassDeclaration;
  4. import net.sourceforge.phpdt.internal.compiler.ast.ClassHeader;
  5. import net.sourceforge.phpdt.internal.compiler.ast.MethodDeclaration;
  6. import net.sourceforge.phpdt.internal.compiler.ast.MethodHeader;
  7. import net.sourceforge.phpdt.internal.compiler.parser.Outlineable;
  8. import org.gjt.sp.jedit.jEdit;
  9. import org.gjt.sp.jedit.textarea.Selection;
  10. import sidekick.SideKickCompletion;
  11. import javax.swing.*;
  12. import java.util.List;
  13. /** @author Matthieu Casanova */
  14. public class PHPSideKickCompletion extends SideKickCompletion {
  15. private String lastWord;
  16. public PHPSideKickCompletion(String word, String lastWord) {
  17. super(jEdit.getActiveView(), word);
  18. this.lastWord = lastWord;
  19. }
  20. public void addItem(Object item, String word) {
  21. boolean caseSensitive = !(item instanceof MethodDeclaration);
  22. if (item.toString().regionMatches(caseSensitive, 0, word, 0, word.length())) {
  23. if (!items.contains(item)) {
  24. items.add(item);
  25. }
  26. }
  27. }
  28. public ListCellRenderer getRenderer() {
  29. return new PHPItemCellRenderer();
  30. }
  31. public int getItemsCount() {
  32. return items.size();
  33. }
  34. public void addOutlineableList(List items, String word) {
  35. for (int i = 0; i < items.size(); i++) {
  36. addItem(items.get(i), word);
  37. }
  38. }
  39. public void insert(int index) {
  40. Object object = items.get(index);
  41. String insertText;
  42. int caret = textArea.getCaretPosition();
  43. if (text.length() != 0) {
  44. Selection selection = textArea.getSelectionAtOffset(caret);
  45. if (selection == null) {
  46. selection = new Selection.Range(caret - text.length(), caret);
  47. } else {
  48. int start = selection.getStart();
  49. int end = selection.getEnd();
  50. selection = new Selection.Range(start - text.length(), end);
  51. }
  52. textArea.setSelection(selection);
  53. }
  54. if (object instanceof Outlineable) {
  55. insertText = ((Outlineable) object).getName();
  56. if (object instanceof MethodDeclaration || (object instanceof ClassDeclaration && "new".equals(lastWord))) {
  57. insertText += "()";
  58. caret--; //to go between the parenthesis
  59. }
  60. } else if (object instanceof ClassHeader) {
  61. insertText = ((ClassHeader) object).getName();
  62. if ("new".equals(lastWord)) {
  63. insertText += "()";
  64. caret--; //to go between the parenthesis
  65. }
  66. } else if (object instanceof MethodHeader) {
  67. insertText = ((MethodHeader) object).getName();
  68. } else {
  69. insertText = (String) object;
  70. }
  71. caret += insertText.length();
  72. textArea.setSelectedText(insertText);
  73. // textArea.setCaretPosition(caret);
  74. }
  75. public int getTokenLength() {
  76. return text.length();
  77. }
  78. public boolean handleKeystroke(int selectedIndex, char keyChar) {
  79. if (keyChar == '\n' || keyChar == ' ' || keyChar == '\t') {
  80. insert(selectedIndex);
  81. if (keyChar == ' ') {
  82. //inserting the space after the insertion
  83. textArea.userInput(' ');
  84. } else if (keyChar == '\t') {
  85. //removing the end of the word
  86. textArea.deleteWord();
  87. }
  88. return false;
  89. } else {
  90. textArea.userInput(keyChar);
  91. return true;
  92. }
  93. }
  94. }