mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
store original provider
GitOrigin-RevId: fe8e980f91a36aa6973cde5a961aa3961fa457f9
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d754aff8ad
commit
4d34b046a6
+20
-25
@@ -52,14 +52,16 @@ public class InjectedFileViewProvider extends MultiplePsiFilesPerDocumentFileVie
|
||||
private final Language myLanguage;
|
||||
private static final ThreadLocal<Boolean> disabledTemporarily = ThreadLocal.withInitial(() -> false);
|
||||
private boolean myPatchingLeaves;
|
||||
protected final AbstractFileViewProvider myOriginalProvider;
|
||||
|
||||
private InjectedFileViewProvider(@NotNull PsiManager psiManager,
|
||||
@NotNull VirtualFileWindow virtualFile,
|
||||
@NotNull DocumentWindowImpl documentWindow,
|
||||
@NotNull Language language) {
|
||||
@NotNull VirtualFileWindow virtualFile,
|
||||
@NotNull DocumentWindowImpl documentWindow,
|
||||
@NotNull Language language, AbstractFileViewProvider original) {
|
||||
super(psiManager, (VirtualFile)virtualFile, true);
|
||||
myDocumentWindow = documentWindow;
|
||||
myLanguage = language;
|
||||
myOriginalProvider = original;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -147,7 +149,7 @@ public class InjectedFileViewProvider extends MultiplePsiFilesPerDocumentFileVie
|
||||
@NotNull
|
||||
@Override
|
||||
public Set<Language> getLanguages() {
|
||||
FileViewProvider original = getOriginalProvider(this);
|
||||
FileViewProvider original = myOriginalProvider;
|
||||
Set<Language> languages = original.getLanguages();
|
||||
Language base = original.getBaseLanguage();
|
||||
return ContainerUtil.map2Set(languages, (language) -> language == base ? myLanguage : language);
|
||||
@@ -226,47 +228,40 @@ public class InjectedFileViewProvider extends MultiplePsiFilesPerDocumentFileVie
|
||||
}
|
||||
}
|
||||
|
||||
private static FileViewProvider getOriginalProvider(FileViewProvider provider) {
|
||||
if (provider instanceof InjectedFileViewProvider) {
|
||||
return ((AbstractFileViewProvider)provider).getManager().getFileManager().createFileViewProvider(provider.getVirtualFile(), false);
|
||||
}
|
||||
return provider;
|
||||
}
|
||||
|
||||
public final void forceCachedPsi(@NotNull PsiFile psiFile) {
|
||||
myRoots.put(psiFile.getLanguage(), (PsiFileImpl)psiFile);
|
||||
getManager().getFileManager().setViewProvider(getVirtualFile(), this);
|
||||
}
|
||||
|
||||
static InjectedFileViewProvider create(PsiManager manager,
|
||||
static InjectedFileViewProvider create(PsiManagerEx manager,
|
||||
VirtualFileWindowImpl file,
|
||||
DocumentWindowImpl window,
|
||||
Language language) {
|
||||
return ((PsiManagerEx)manager).getFileManager().createFileViewProvider(file, false) instanceof TemplateLanguageFileViewProvider ?
|
||||
new Template(manager, file, window, language) :
|
||||
new InjectedFileViewProvider(manager, file, window, language);
|
||||
AbstractFileViewProvider original = (AbstractFileViewProvider)manager.getFileManager().createFileViewProvider(file, false);
|
||||
return original instanceof TemplateLanguageFileViewProvider ?
|
||||
new Template(manager, file, window, language, original) :
|
||||
new InjectedFileViewProvider(manager, file, window, language, original);
|
||||
}
|
||||
|
||||
private static final class Template extends InjectedFileViewProvider implements TemplateLanguageFileViewProvider {
|
||||
private Template(@NotNull PsiManager psiManager,
|
||||
@NotNull VirtualFileWindow virtualFile,
|
||||
@NotNull DocumentWindowImpl documentWindow, @NotNull Language language) {
|
||||
super(psiManager, virtualFile, documentWindow, language);
|
||||
private Template(@NotNull PsiManagerEx psiManager,
|
||||
@NotNull VirtualFileWindow virtualFile,
|
||||
@NotNull DocumentWindowImpl documentWindow,
|
||||
@NotNull Language language,
|
||||
AbstractFileViewProvider original) {
|
||||
super(psiManager, virtualFile, documentWindow, language, original);
|
||||
assert myOriginalProvider instanceof TemplateLanguageFileViewProvider;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Language getTemplateDataLanguage() {
|
||||
FileViewProvider provider = getOriginalProvider(this);
|
||||
assert provider instanceof TemplateLanguageFileViewProvider;
|
||||
return ((TemplateLanguageFileViewProvider)provider).getTemplateDataLanguage();
|
||||
return ((TemplateLanguageFileViewProvider)myOriginalProvider).getTemplateDataLanguage();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IElementType getContentElementType(Language language, PsiFile file) {
|
||||
FileViewProvider provider = getOriginalProvider(this);
|
||||
assert provider instanceof TemplateLanguageFileViewProvider;
|
||||
return ((TemplateLanguageFileViewProvider)provider).getContentElementType(language, file);
|
||||
return ((TemplateLanguageFileViewProvider)myOriginalProvider).getContentElementType(language, file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -665,7 +665,7 @@ class InjectionRegistrarImpl extends MultiHostRegistrarImpl implements MultiHost
|
||||
@NotNull String fileName, @NotNull PsiDocumentManagerBase documentManager) {
|
||||
VirtualFileWindowImpl virtualFile = new VirtualFileWindowImpl(fileName, hostVirtualFile, documentWindow, language, decodedChars);
|
||||
Language finalLanguage = forcedLanguage == null ? LanguageSubstitutors.getInstance().substituteLanguage(language, virtualFile, project) : forcedLanguage;
|
||||
InjectedFileViewProvider viewProvider = InjectedFileViewProvider.create(PsiManager.getInstance(project), virtualFile, documentWindow, finalLanguage);
|
||||
InjectedFileViewProvider viewProvider = InjectedFileViewProvider.create(PsiManagerEx.getInstanceEx(project), virtualFile, documentWindow, finalLanguage);
|
||||
Set<Language> languages = viewProvider.getLanguages();
|
||||
ASTNode[] parsedNodes = new ASTNode[languages.size()];
|
||||
int i = 0;
|
||||
|
||||
Reference in New Issue
Block a user