Appearance
A FindUsagesProvider uses a word scanner to build an index of words in every file. A scanner breaks the text into words and defines the context for each word.
Reference: Find Usages
11.1. Define a Find Usages Provider
The SimpleFindUsagesProvider implements FindUsagesProvider. Using the DefaultWordsScanner ensures the scanner implementation is thread-safe. See the comments in FindUsagesProvider for more information.
java
package org.consulo.sdk.language;
import consulo.annotation.component.ExtensionImpl;
import consulo.language.Language;
import consulo.language.ast.TokenSet;
import consulo.language.cacheBuilder.DefaultWordsScanner;
import consulo.language.cacheBuilder.WordsScanner;
import consulo.language.findUsage.FindUsagesProvider;
import consulo.language.psi.PsiElement;
import consulo.language.psi.PsiNamedElement;
import org.consulo.sdk.language.psi.SimpleProperty;
import org.consulo.sdk.language.psi.SimpleTokenSets;
import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;
@ExtensionImpl
final class SimpleFindUsagesProvider implements FindUsagesProvider {
@Nonnull
@Override
public Language getLanguage() {
return SimpleLanguage.INSTANCE;
}
@Override
public WordsScanner getWordsScanner() {
return new DefaultWordsScanner(new SimpleLexerAdapter(),
SimpleTokenSets.IDENTIFIERS,
SimpleTokenSets.COMMENTS,
TokenSet.EMPTY);
}
@Override
public boolean canFindUsagesFor(@Nonnull PsiElement psiElement) {
return psiElement instanceof PsiNamedElement;
}
@Nullable
@Override
public String getHelpId(@Nonnull PsiElement psiElement) {
return null;
}
@Nonnull
@Override
public String getType(@Nonnull PsiElement element) {
if (element instanceof SimpleProperty) {
return "simple property";
}
return "";
}
@Nonnull
@Override
public String getDescriptiveName(@Nonnull PsiElement element) {
if (element instanceof SimpleProperty) {
return ((SimpleProperty) element).getKey();
}
return "";
}
@Nonnull
@Override
public String getNodeText(@Nonnull PsiElement element, boolean useFullName) {
if (element instanceof SimpleProperty) {
return ((SimpleProperty) element).getKey() +
SimpleAnnotator.SIMPLE_SEPARATOR_STR +
((SimpleProperty) element).getValue();
}
return "";
}
}11.2. Register the Find Usages Provider
The FindUsagesProvider interface is annotated with @ExtensionAPI(ComponentScope.APPLICATION). To register the find usages provider with the Consulo, annotate the SimpleFindUsagesProvider implementation class with @ExtensionImpl.
11.3. Run the Project
Rebuild the project, and run simple_language_plugin in a Development Instance. The IDE now supports Find Usages for any property with a reference:
