From 992bd945101180d17a684089ff4ae5e7fa292c22 Mon Sep 17 00:00:00 2001 From: Manindra Moharana Date: Fri, 8 Aug 2014 12:39:02 +0530 Subject: [PATCH] Further work on #2755 --- .../mode/experimental/ASTGenerator.java | 2 +- .../mode/experimental/CompletionPanel.java | 15 +++++-- .../mode/experimental/TextArea.java | 40 +++++++++++-------- 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/pdex/src/processing/mode/experimental/ASTGenerator.java b/pdex/src/processing/mode/experimental/ASTGenerator.java index f830dd0a2..3d6b41539 100644 --- a/pdex/src/processing/mode/experimental/ASTGenerator.java +++ b/pdex/src/processing/mode/experimental/ASTGenerator.java @@ -1088,7 +1088,7 @@ public class ASTGenerator { String label = cc.getLabel(); int x = label.lastIndexOf(')'); cc.setLabel(cc.getElementName() + "(...)" + label.substring(x + 1)); - cc.setCompletionString(cc.getElementName()); + cc.setCompletionString(cc.getElementName() + "("); ignoredSome = true; continue; } diff --git a/pdex/src/processing/mode/experimental/CompletionPanel.java b/pdex/src/processing/mode/experimental/CompletionPanel.java index 4745a9974..96f219588 100644 --- a/pdex/src/processing/mode/experimental/CompletionPanel.java +++ b/pdex/src/processing/mode/experimental/CompletionPanel.java @@ -214,7 +214,7 @@ public class CompletionPanel { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { insertSelection(); - hide(); + //hide(); } } }); @@ -295,12 +295,19 @@ public class CompletionPanel { textarea.setCaretPosition(insertionPosition + selectedSuggestion.length()); } - //log("Suggestion inserted: " + System.currentTimeMillis()); + log("Suggestion inserted: " + System.currentTimeMillis()); + if (((CompletionCandidate) completionList.getSelectedValue()) + .getLabel().contains("...")) { + // log("No hide"); + // Why not hide it? Coz this is the case of + // overloaded methods. See #2755 + } else { + hide(); + } return true; } catch (BadLocationException e1) { e1.printStackTrace(); - } - catch (Exception e) { + } catch (Exception e) { e.printStackTrace(); } hide(); diff --git a/pdex/src/processing/mode/experimental/TextArea.java b/pdex/src/processing/mode/experimental/TextArea.java index c5c8b2066..26f3155ae 100644 --- a/pdex/src/processing/mode/experimental/TextArea.java +++ b/pdex/src/processing/mode/experimental/TextArea.java @@ -159,12 +159,14 @@ public class TextArea extends JEditTextArea { } } } - else if(evt.getKeyCode() == KeyEvent.VK_ENTER){ + else if(evt.getKeyCode() == KeyEvent.VK_ENTER && evt.getID() == KeyEvent.KEY_PRESSED){ if (suggestion != null) { if (suggestion.isVisible()) { if (suggestion.insertSelection()) { - hideSuggestion(); // Kill it! + //hideSuggestion(); // Kill it! evt.consume(); + // Still try to show suggestions after inserting, coz #2755 + prepareSuggestions(evt); return; } } @@ -243,22 +245,27 @@ public class TextArea extends JEditTextArea { return; } - SwingWorker worker = new SwingWorker() { - protected Object doInBackground() throws Exception { - // errorCheckerService.runManualErrorCheck(); - // Provide completions only if it's enabled - if (ExperimentalMode.codeCompletionsEnabled - && (!ExperimentalMode.ccTriggerEnabled || suggestion.isVisible())) { - log("[KeyEvent]" + evt2.getKeyChar() + " |Prediction started"); - log("Typing: " + fetchPhrase(evt2)); - } - return null; - } - }; - worker.execute(); + prepareSuggestions(evt2); } + } - + /** + * Kickstart auto-complete suggestions + * @param evt - KeyEvent + */ + private void prepareSuggestions(final KeyEvent evt){ + SwingWorker worker = new SwingWorker() { + protected Object doInBackground() throws Exception { + // Provide completions only if it's enabled + if (ExperimentalMode.codeCompletionsEnabled + && (!ExperimentalMode.ccTriggerEnabled || suggestion.isVisible())) { + log("[KeyEvent]" + evt.getKeyChar() + " |Prediction started"); + log("Typing: " + fetchPhrase(evt)); + } + return null; + } + }; + worker.execute(); } /** @@ -360,6 +367,7 @@ public class TextArea extends JEditTextArea { if (!(Character.isLetterOrDigit(s.charAt(x)) || s.charAt(x) == '_' || s.charAt(x) == '(' || s.charAt(x) == '.')) { log("Char before caret isn't a letter/digit/_(. so no predictions"); + hideSuggestion(); return null; }