2015-12-17 8 views
8

私はintellij用のプラグインを開発しており、xsdに基づいてxmlエディタにカスタム提案を追加したいと思います。今まで私はxsdファイルから必要な提案を得ることができます。Intellij Completion Contributor

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の完了貢献を実装しているが、これはどんな提案を提供していませんでした。カスタム言語を実装すると機能します。私の目的は、カーソル位置のコンテキストを表示し、それに基づいて提案を提供することです。ユーザーが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) { 
         } 
        } 

       } 
      } 
    ); 
    } 
    } 

で見つかりましたcpmpletion resultsetを使用します。これはスカラー言語でも実装できます。 com.intellij.codeInsight.completion.CompletionContributor用のプラグインのXMLで完了貢献を登録する

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

のJavaDocは、よくある質問が含まれています。 last questionアドレスのデバッグが正常に完了しません。

私のケースでは、問題はlanguage="Java"でしたが、すべてのキャップは期待されていました。