blob: 275281237a026238a20dd2decf61e089200f3d46 [file] [log] [blame]
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;
}
}