2015-12-17 7 views
8

मैं इंटेलिज के लिए एक प्लगइन विकसित कर रहा हूं और मैं xsd के आधार पर xml संपादक को कस्टम सुझाव जोड़ना चाहता हूं। अब तक मैं xsd फ़ाइल से आवश्यक सुझाव प्राप्त कर सकता हूं।इंटेलिज पूर्णता योगदानकर्ता

मैं के रूप में

import com.intellij.codeInsight.completion.*; 
import com.intellij.codeInsight.lookup.LookupElementBuilder; 
import com.intellij.patterns.PlatformPatterns; 
import com.intellij.psi.xml.XmlElementType; 
import com.intellij.util.ProcessingContext; 
import com.intellij.lang.xml.*; 
import org.jetbrains.annotations.NotNull; 


public class SimpleCompletionContributor extends CompletionContributor { 
    public SimpleCompletionContributor() { 
     extend(CompletionType.BASIC,PlatformPatterns.psiElement(XmlElementType.XML_ATTRIBUTE_VALUE).withLanguage(XMLLanguage.INSTANCE), 
      new CompletionProvider<CompletionParameters>() { 
       public void addCompletions(@NotNull CompletionParameters parameters, 
              ProcessingContext context, 
              @NotNull CompletionResultSet resultSet) { 
        resultSet.addElement(LookupElementBuilder.create("Hello")); 
       } 
      } 
     ); 
    } 
} 

इस प्रकार एक्सएमएल के लिए एक पूरा होने के योगदान को लागू किया है, लेकिन यह कोई सुझाव नहीं प्रदान की थी। लेकिन जब मैं कस्टम भाषा लागू करता हूं तो यह काम करता है। मेरा उद्देश्य कर्सर की स्थिति के संदर्भ को देखना और इसके आधार पर सुझाव देना है। एक उदाहरण के रूप में जब उपयोगकर्ता xml फ़ाइल प्लगइन पर एक टैग शुरू करता है तो कोड को पूर्ण होने के रूप में गुण प्रदान करना चाहिए। मैं इस कस्टम भाषा में नया हूं।

तो क्या कोई इस पूर्णता योगदानकर्ता के साथ मेरी सहायता कर सकता है?

+0

आपने इस योगदानकर्ता को plugin.xml में कैसे पंजीकृत किया? –

+0

मैं जोड़ता हूं –

उत्तर

1

अंत में मैं इस समस्या

यहाँ

मेरी कोड

import com.intellij.codeInsight.completion.*; 
import com.intellij.codeInsight.lookup.LookupElementBuilder; 
import com.intellij.patterns.PlatformPatterns; 
import com.intellij.util.ProcessingContext; 
import org.jetbrains.annotations.NotNull; 

public class ScalaXMLCompletionContributor extends CompletionContributor { 

public ScalaXMLCompletionContributor() { 
    final RelativeNodes rlt = new RelativeNodes();//this is a class to get siblings and children from a sample xml file generated by a given xsd 

    /*if the parameter position is an xml attribute provide attributes using given xsd*/ 
    extend(CompletionType.BASIC, 
      PlatformPatterns.psiElement(), new CompletionProvider<CompletionParameters>() { 
       public void addCompletions(@NotNull CompletionParameters parameters,//completion parameters contain details of the curser position 
              ProcessingContext context, 
              @NotNull CompletionResultSet resultSet) {//result set contains completion details to suggest 
        if (parameters.getPosition().getContext().toString() == "XmlAttribute") {//check whether scala text editors position is an xml attribute position eg: <name | 
         try { 
          String[] suggestions = rlt.getAttribute(parameters.getPosition().getParent().getParent().getFirstChild().getNextSibling().getText().replaceFirst("IntellijIdeaRulezzz", ""));//extract text from completion parameter and get required suggestions from RelativeNodes 

          int i = 0; 
          do { 
           resultSet.addElement(LookupElementBuilder.create(suggestions[i]));//add suggestions to resultset to suggest in editor 
           i++; 

          } while (suggestions[i] != null); 


         } catch (NullPointerException e) { 
         } 
        } 

       } 
      } 
    ); 
    } 
    } 

इस मामले हम कर्सर की स्थिति और पूरा मापदंडों से स्थिति curser से संबंधित टोकन प्राप्त कर सकते हैं और हम सुझाव इंजेक्षन कर सकते हैं में है हल करने के लिए एक रास्ता मिल गया cpmpletion परिणाम का उपयोग कर। इसे स्कैला भाषा में भी लागू किया जा सकता है।

प्लगइन एक्सएमएल में पूरा योगदान रजिस्टर करने के लिए com.intellij.codeInsight.completion.CompletionContributor पूछे जाने वाले प्रश्न शामिल

<extensions defaultExtensionNs="com.intellij"> 
<completion.contributor language="Scala" implementationClass="com.hsr.ScalaXMLCompletionContributor"/> 
</extensions> 
1

JavaDoc के लिए। last question डिबगिंग को पूरा करने के लिए काम नहीं कर रहा है।

मेरे मामले में समस्या language="Java" थी, जबकि सभी कैप्स अपेक्षित थे।