IDEA-154289 PsiClass and view provider can never agree on language

This commit is contained in:
peter
2016-04-26 09:53:21 +02:00
parent 45ca5aca75
commit 5a16d4daa2
3 changed files with 19 additions and 4 deletions
@@ -16,6 +16,8 @@
package com.intellij.psi;
import com.intellij.ide.highlighter.JavaClassFileType;
import com.intellij.lang.Language;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileType;
@@ -51,6 +53,12 @@ public class ClassFileViewProvider extends SingleRootFileViewProvider {
super(manager, file, eventSystemEnabled, JavaClassFileType.INSTANCE);
}
@NotNull
@Override
public Language getBaseLanguage() {
return JavaLanguage.INSTANCE;
}
@Override
protected PsiFile createFile(@NotNull Project project, @NotNull VirtualFile file, @NotNull FileType fileType) {
FileIndexFacade fileIndex = ServiceManager.getService(project, FileIndexFacade.class);
@@ -15,6 +15,7 @@
*/
package com.intellij.psi;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.application.ex.PathManagerEx;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.io.IoTestUtil;
@@ -100,6 +101,12 @@ public class ClsPsiTest extends LightIdeaTestCase {
assertFalse(aClass.isDeprecated());
}
public void testViewProviderHasJavaLanguage() {
PsiJavaFile file = getFile("MyClass");
assertEquals(JavaLanguage.INSTANCE, file.getLanguage());
assertEquals(JavaLanguage.INSTANCE, file.getViewProvider().getBaseLanguage());
}
public void testClassMembers() {
PsiClass aClass = getFile("MyClass").getClasses()[0];
@@ -293,12 +293,12 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi
}
public List<PsiFile> getCachedPsiFiles() {
return ContainerUtil.createMaybeSingletonList(getCachedPsi(myBaseLanguage));
return ContainerUtil.createMaybeSingletonList(getCachedPsi(getBaseLanguage()));
}
@NotNull
public List<FileElement> getKnownTreeRoots() {
PsiFile psiFile = getCachedPsi(myBaseLanguage);
PsiFile psiFile = getCachedPsi(getBaseLanguage());
if (!(psiFile instanceof PsiFileImpl)) return Collections.emptyList();
FileElement element = ((PsiFileImpl)psiFile).getTreeElement();
return ContainerUtil.createMaybeSingletonList(element);
@@ -457,7 +457,7 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi
@NotNull
@Override
public SingleRootFileViewProvider createCopy(@NotNull final VirtualFile copy) {
return new SingleRootFileViewProvider(getManager(), copy, false, myBaseLanguage);
return new SingleRootFileViewProvider(getManager(), copy, false, getBaseLanguage());
}
@Override
@@ -572,7 +572,7 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi
}
public void markInvalidated() {
PsiFile psiFile = getCachedPsi(myBaseLanguage);
PsiFile psiFile = getCachedPsi(getBaseLanguage());
if (psiFile instanceof PsiFileEx) {
((PsiFileEx)psiFile).markInvalidated();
}