मैं अपने IntelliJ प्लगइन के लिए स्वत: पूर्णता के साथ एक साधारण टेक्स्ट फ़ील्ड बनाने का प्रयास कर रहा हूं। मुझे लगता है कि यह बहुत आसान होना चाहिए लेकिन अब तक मैं मृत सिरों में चला गया हूं ...

उदा. जहाँ तक मैं समझता हूँ यह काम करना चाहिए:

EditorTextField format = new TextFieldWithCompletion(currentEditor.getProject(),
                provider,
                "",
                true,
                true,
                true);

समस्या प्रदाता है। मैं एक ऐसे प्रदाता को देखने की अपेक्षा करता हूं जो सूची प्रदाता नहीं है। मैं सिर्फ संपादक कर्सर में वर्तमान लाइन से मेल खाते हुए पूर्णता दिखाना चाहता हूं, इसलिए मुझे पूर्ण समापन संवाद चाहिए, न कि केवल विकल्पों की एक छोटी सूची।

मैंने TextFieldWithAutoCompletion को भी देखा लेकिन ऐसा लगता है कि इसे फ्री फॉर्म पूरा करने के बजाय हार्डकोडेड स्ट्रिंग मानों के लिए डिज़ाइन किया गया है।

मैं सिर्फ मानक जावा/कोटलिन पूरा करना चाहता हूं। कोई कस्टम सूची या ऐसा कुछ नहीं। मैंने टेक्स्ट फ़ील्ड के दस्तावेज़ को बदलने के साथ कुछ चर्चा देखी लेकिन मैं इसे काम करने के लिए नहीं मिला। मेरे पास एक PsiExpressionCodeFragment है और मैं उम्मीद करता हूं कि एक पूर्णता प्रदाता होगा जो इसे स्वीकार करता है लेकिन मुझे यह नहीं मिल रहा है।

संदर्भ के लिए मैं जो करना चाहता हूं वह ब्रेकपॉइंट संवाद में सशर्त कथन के समान ही है।

यहां एक और तरीका दिखाया गया है:

JavaCodeFragmentFactory jcff = JavaCodeFragmentFactory.getInstance(currentEditor.getProject());
PsiFile pf = PsiDocumentManager.getInstance(currentEditor.getProject()).getPsiFile(currentEditor.getDocument());
PsiElement psiElement = pf.findElementAt(currentEditor.getCaretModel().getOffset());
PsiExpressionCodeFragment fragment = jcff.createExpressionCodeFragment("", psiElement,null, false);
EditorTextField f = new EditorTextField(PsiDocumentManager.getInstance(currentEditor.getProject()).getDocument(fragment),
        currentEditor.getProject(),
        FileTypes.PLAIN_TEXT, false, true);

यह यूआई को लोड करता है, लेकिन मैं जो भी टाइप करता हूं, वह पॉपअप कोड पूरा नहीं करता है।

5
Shai Almog 22 पद 2019, 14:24

1 उत्तर

सबसे बढ़िया उत्तर

चाल एक संपादक बनाने की है जिसमें दस्तावेज़। और यह दस्तावेज़ एक भाषा और एक साई तत्व संदर्भ को संदर्भित करता है:

JPanel panel = new JPanel();

// Just detect an element under caret for context
PsiFile psiFile = PsiDocumentManager.getInstance(editor.getProject()).getPsiFile(editor.getDocument());
PsiElement element = psiFile.findElementAt(editor.getCaretModel().getOffset());

PsiExpressionCodeFragment code = JavaCodeFragmentFactory.getInstance(editor.getProject()).createExpressionCodeFragment("", element, null, true);
Document document = PsiDocumentManager.getInstance(editor.getProject()).getDocument(code);

EditorTextField myInput = new EditorTextField(document, editor.getProject(), JavaFileType.INSTANCE);
myInput.setPreferredWidth(300);

panel.add(myInput);

return panel;

यहां कैरेट dsa5 पर स्थित होता था, इसलिए dsa5 चर अभी पूरा होने के लिए दिखाई नहीं दे रहा है।

enter image description here

1
Feedforward 24 पद 2019, 19:58