package com.intellij.dupLocator.equivalence; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.psi.PsiElement; import com.intellij.psi.tree.TokenSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * @author Eugene.Kudelevsky */ public abstract class EquivalenceDescriptorProvider { public static final ExtensionPointName<EquivalenceDescriptorProvider> EP_NAME = ExtensionPointName.create("com.intellij.equivalenceDescriptorProvider"); // for using in tests only !!! public static boolean ourUseDefaultEquivalence = false; public abstract boolean isMyContext(@NotNull PsiElement context); @Nullable public abstract EquivalenceDescriptor buildDescriptor(@NotNull PsiElement element); // by default only PsiWhitespace ignored public TokenSet getIgnoredTokens() { return TokenSet.EMPTY; } @Nullable public static EquivalenceDescriptorProvider getInstance(@NotNull PsiElement context) { if (ourUseDefaultEquivalence) { return null; } for (EquivalenceDescriptorProvider descriptorProvider : EP_NAME.getExtensions()) { if (descriptorProvider.isMyContext(context)) { return descriptorProvider; } } return null; } }