mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
get java language level from the root model when pushers haven't finished yet
This commit is contained in:
@@ -24,8 +24,13 @@ import org.jetbrains.annotations.Nullable;
|
||||
* @author yole
|
||||
*/
|
||||
public class LanguageLevelUtil extends EffectiveLanguageLevelUtil {
|
||||
private LanguageLevelUtil() { }
|
||||
|
||||
/**
|
||||
* @deprecated use {@link com.intellij.psi.impl.JavaPsiImplementationHelper#getEffectiveLanguageLevel(com.intellij.openapi.vfs.VirtualFile)}
|
||||
* todo remove in IDEA 15
|
||||
* @param file
|
||||
* @return
|
||||
*/
|
||||
@NotNull
|
||||
public static LanguageLevel getLanguageLevelForFile(@Nullable VirtualFile file) {
|
||||
if (file == null) return LanguageLevel.HIGHEST;
|
||||
|
||||
+2
-2
@@ -20,12 +20,12 @@ import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
|
||||
import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory;
|
||||
import com.intellij.openapi.fileTypes.SyntaxHighlighterProvider;
|
||||
import com.intellij.openapi.module.LanguageLevelUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.impl.JavaPsiImplementationHelper;
|
||||
import com.intellij.psi.impl.compiled.ClsFileImpl;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -37,7 +37,7 @@ public class JavaSyntaxHighlighterFactory extends SyntaxHighlighterFactory imple
|
||||
@Override
|
||||
@NotNull
|
||||
public SyntaxHighlighter getSyntaxHighlighter(@Nullable Project project, @Nullable VirtualFile file) {
|
||||
return new JavaFileHighlighter(LanguageLevelUtil.getLanguageLevelForFile(file));
|
||||
return new JavaFileHighlighter(project == null ? LanguageLevel.HIGHEST : JavaPsiImplementationHelper.getInstance(project).getEffectiveLanguageLevel(file));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.module.EffectiveLanguageLevelUtil;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -39,6 +40,7 @@ import com.intellij.psi.impl.compiled.ClsClassImpl;
|
||||
import com.intellij.psi.impl.source.codeStyle.ImportHelper;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import gnu.trove.THashSet;
|
||||
@@ -137,9 +139,35 @@ public class JavaPsiImplementationHelperImpl extends JavaPsiImplementationHelper
|
||||
return clsFile;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@NotNull
|
||||
@Override
|
||||
public LanguageLevel getClassesLanguageLevel(VirtualFile virtualFile) {
|
||||
public LanguageLevel getEffectiveLanguageLevel(@Nullable VirtualFile virtualFile) {
|
||||
if (virtualFile == null) return PsiUtil.getLanguageLevel(myProject);
|
||||
|
||||
final VirtualFile folder = virtualFile.getParent();
|
||||
if (folder != null) {
|
||||
final LanguageLevel level = folder.getUserData(LanguageLevel.KEY);
|
||||
if (level != null) return level;
|
||||
}
|
||||
|
||||
final ProjectFileIndex index = ProjectRootManager.getInstance(myProject).getFileIndex();
|
||||
Module module = index.getModuleForFile(virtualFile);
|
||||
if (module != null && index.isInSourceContent(virtualFile)) {
|
||||
return EffectiveLanguageLevelUtil.getEffectiveLanguageLevel(module);
|
||||
}
|
||||
|
||||
LanguageLevel classesLanguageLevel = getClassesLanguageLevel(virtualFile);
|
||||
return classesLanguageLevel != null ? classesLanguageLevel : PsiUtil.getLanguageLevel(myProject);
|
||||
}
|
||||
|
||||
/**
|
||||
* For files under a library source root, returns the language level configured for the corresponding classes root.
|
||||
*
|
||||
* @param virtualFile virtual file for which language level is requested.
|
||||
* @return language level for classes root or null if file is not under a library source root or no matching classes root is found.
|
||||
*/
|
||||
@Nullable
|
||||
private LanguageLevel getClassesLanguageLevel(VirtualFile virtualFile) {
|
||||
final ProjectFileIndex index = ProjectRootManager.getInstance(myProject).getFileIndex();
|
||||
final VirtualFile sourceRoot = index.getSourceRootForFile(virtualFile);
|
||||
final VirtualFile folder = virtualFile.getParent();
|
||||
|
||||
@@ -16,16 +16,25 @@
|
||||
package com.intellij.core;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.JavaPsiImplementationHelper;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public class CoreJavaPsiImplementationHelper extends JavaPsiImplementationHelper {
|
||||
private final Project myProject;
|
||||
|
||||
public CoreJavaPsiImplementationHelper(Project project) {
|
||||
myProject = project;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiClass getOriginalClass(PsiClass psiClass) {
|
||||
return psiClass;
|
||||
@@ -37,9 +46,10 @@ public class CoreJavaPsiImplementationHelper extends JavaPsiImplementationHelper
|
||||
return clsFile;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public LanguageLevel getClassesLanguageLevel(VirtualFile virtualFile) {
|
||||
return null;
|
||||
public LanguageLevel getEffectiveLanguageLevel(@Nullable VirtualFile virtualFile) {
|
||||
return PsiUtil.getLanguageLevel(myProject);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -63,7 +63,7 @@ public class JavaCoreProjectEnvironment extends CoreProjectEnvironment {
|
||||
}
|
||||
|
||||
protected CoreJavaPsiImplementationHelper createJavaPsiImplementationHelper() {
|
||||
return new CoreJavaPsiImplementationHelper();
|
||||
return new CoreJavaPsiImplementationHelper(myProject);
|
||||
}
|
||||
|
||||
protected JavaFileManager createCoreFileManager() {
|
||||
|
||||
@@ -37,14 +37,8 @@ public abstract class JavaPsiImplementationHelper {
|
||||
@NotNull
|
||||
public abstract PsiElement getClsFileNavigationElement(PsiJavaFile clsFile);
|
||||
|
||||
/**
|
||||
* For files under a library source root, returns the language level configured for the corresponding classes root.
|
||||
*
|
||||
* @param virtualFile virtual file for which language level is requested.
|
||||
* @return language level for classes root or null if file is not under a library source root or no matching classes root is found.
|
||||
*/
|
||||
@Nullable
|
||||
public abstract LanguageLevel getClassesLanguageLevel(VirtualFile virtualFile);
|
||||
@NotNull
|
||||
public abstract LanguageLevel getEffectiveLanguageLevel(@Nullable VirtualFile virtualFile);
|
||||
|
||||
public abstract ASTNode getDefaultImportAnchor(PsiImportList list, PsiImportStatementBase statement);
|
||||
|
||||
|
||||
@@ -466,18 +466,7 @@ public abstract class PsiJavaFileBaseImpl extends PsiFileImpl implements PsiJava
|
||||
return LanguageLevelProjectExtension.getInstance(project).getLanguageLevel();
|
||||
}
|
||||
|
||||
final VirtualFile folder = virtualFile.getParent();
|
||||
if (folder != null) {
|
||||
final LanguageLevel level = folder.getUserData(LanguageLevel.KEY);
|
||||
if (level != null) return level;
|
||||
}
|
||||
|
||||
final LanguageLevel classesLanguageLevel = JavaPsiImplementationHelper.getInstance(project).getClassesLanguageLevel(virtualFile);
|
||||
if (classesLanguageLevel != null) {
|
||||
return classesLanguageLevel;
|
||||
}
|
||||
|
||||
return PsiUtil.getLanguageLevel(project);
|
||||
return JavaPsiImplementationHelper.getInstance(project).getEffectiveLanguageLevel(virtualFile);
|
||||
}
|
||||
|
||||
private static class MyCacheBuilder implements CachedValueProvider<MostlySingularMultiMap<String, SymbolCollectingProcessor.ResultWithContext>> {
|
||||
|
||||
Reference in New Issue
Block a user