package org.angularjs.service;
import com.intellij.codeHighlighting.TextEditorHighlightingPassRegistrar;
import com.intellij.lang.javascript.service.JSLanguageService;
import com.intellij.lang.javascript.service.JSLanguageServiceProvider;
import com.intellij.lang.javascript.service.highlighting.JSLanguageServiceHighlightingPassFactory;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.source.html.HtmlFileImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.Optional;
public class Angular2HighlightingPassFactory extends JSLanguageServiceHighlightingPassFactory {
@Nullable
private final Angular2LanguageServiceProvider myProvider;
public Angular2HighlightingPassFactory(Project project,
@NotNull TextEditorHighlightingPassRegistrar highlightingPassRegistrar) {
super(project, highlightingPassRegistrar);
Optional<JSLanguageServiceProvider> providerOptional = Arrays.stream(JSLanguageServiceProvider.getProviders(project))
.filter(el -> el instanceof Angular2LanguageServiceProvider)
.findAny();
myProvider = providerOptional.isPresent() ? (Angular2LanguageServiceProvider)providerOptional.get() : null;
}
@Nullable
@Override
protected JSLanguageService getService() {
return myProvider != null ? myProvider.getService() : null;
}
@Override
protected boolean isAcceptablePsiFile(@NotNull PsiFile file) {
//fast check
if (!(super.isAcceptablePsiFile(file) || file instanceof HtmlFileImpl)) {
return false;
}
VirtualFile virtualFile = file.getVirtualFile();
return virtualFile != null && virtualFile.isInLocalFileSystem();
}
}