mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
word completion to work in xml tag body and attribute values
This commit is contained in:
@@ -17,7 +17,6 @@ import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.cache.impl.idCache.IdTableBuilding;
|
||||
import com.intellij.psi.text.BlockSupport;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -276,23 +275,6 @@ abstract class CodeCompletionHandlerBase implements CodeInsightActionHandler {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
private void fillWordCompletionSet (final PsiFile file, final LinkedHashSet lookupSet, final String prefix) {
|
||||
final char [] chars = file.getText().toCharArray();
|
||||
IdTableBuilding.scanWords(new IdTableBuilding.ScanWordProcessor(){
|
||||
public void run(final char[] chars, final int start, final int end) {
|
||||
final int len = end - start;
|
||||
if (len > prefix.length ()) {
|
||||
final String word = String.valueOf(chars, start, len);
|
||||
if (word.startsWith(prefix)) {
|
||||
LookupItemUtil.addLookupItem(lookupSet, word, prefix); // TODO
|
||||
}
|
||||
}
|
||||
}
|
||||
}, chars, 0, chars.length);
|
||||
}
|
||||
|
||||
|
||||
protected LookupData getLookupData(CompletionContext context) {
|
||||
final LinkedHashSet<LookupItem> lookupSet = new LinkedHashSet<LookupItem>();
|
||||
final PsiFile file = context.file;
|
||||
|
||||
@@ -18,6 +18,7 @@ import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.filters.ElementFilter;
|
||||
import com.intellij.psi.filters.TrueFilter;
|
||||
import com.intellij.psi.filters.position.TokenTypeFilter;
|
||||
import com.intellij.psi.filters.getters.XmlAttributeValueGetter;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.xml.*;
|
||||
@@ -64,17 +65,11 @@ public class XmlCompletionData extends CompletionData {
|
||||
}
|
||||
|
||||
{
|
||||
//final CompletionVariant variant = new CompletionVariant(new LeftNeighbour(new TextFilter("/")));
|
||||
//variant.includeScopeClass(XmlToken.class);
|
||||
//variant.addCompletion(">",TailType.NONE);
|
||||
//registerVariant(variant);
|
||||
}
|
||||
|
||||
{
|
||||
//final CompletionVariant variant = new CompletionVariant(new LeftNeighbour(new TextFilter(">")));
|
||||
//variant.includeScopeClass(XmlTag.class, true);
|
||||
//variant.setInsertHandler(new XmlTagInsertHandler());
|
||||
//registerVariant(variant);
|
||||
final CompletionVariant variant = new CompletionVariant(new TokenTypeFilter(XmlTokenType.XML_DATA_CHARACTERS));
|
||||
variant.includeScopeClass(XmlToken.class, true);
|
||||
variant.addCompletion(new WordCompletionData.AllWordsGetter());
|
||||
variant.setInsertHandler(WordCompletionData.ourWordInsertHandler);
|
||||
registerVariant(variant);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package com.intellij.psi.filters.getters;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.filters.ContextGetter;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.xml.XmlAttribute;
|
||||
import com.intellij.xml.XmlAttributeDescriptor;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.codeInsight.completion.CompletionContext;
|
||||
import com.intellij.codeInsight.completion.WordCompletionData;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
@@ -19,18 +20,31 @@ public class XmlAttributeValueGetter implements ContextGetter {
|
||||
public XmlAttributeValueGetter() {}
|
||||
|
||||
public Object[] get(PsiElement context, CompletionContext completionContext) {
|
||||
return getApplicableAttributeVariants(context, completionContext);
|
||||
}
|
||||
|
||||
public static Object[] getApplicableAttributeVariants(PsiElement context, CompletionContext completionContext) {
|
||||
if(context != null)
|
||||
context = PsiTreeUtil.getParentOfType(context, XmlAttribute.class);
|
||||
|
||||
if(context instanceof XmlAttribute){
|
||||
XmlAttributeDescriptor jspTagAttribute = ((XmlAttribute)context).getDescriptor();
|
||||
|
||||
if(jspTagAttribute != null){
|
||||
final String[] values = jspTagAttribute.getEnumeratedValues();
|
||||
if(values == null)
|
||||
return ArrayUtil.EMPTY_OBJECT_ARRAY;
|
||||
|
||||
if((values == null || values.length==0)) {
|
||||
final PsiReference[] references = ((XmlAttribute)context).getValueElement().getReferences();
|
||||
if (references.length == 0) return getAllWordsFromDocument(context,completionContext);
|
||||
}
|
||||
return values;
|
||||
}
|
||||
}
|
||||
return ArrayUtil.EMPTY_OBJECT_ARRAY;
|
||||
return getAllWordsFromDocument(context, completionContext);
|
||||
}
|
||||
|
||||
private static Object[] getAllWordsFromDocument(PsiElement context, CompletionContext completionContext) {
|
||||
WordCompletionData.AllWordsGetter getter = new WordCompletionData.AllWordsGetter();
|
||||
return getter.get(context, completionContext);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user