[java] Use Java 5 features

GitOrigin-RevId: 7db6edf696525b8d22dadf66fe12bd867068a6eb
This commit is contained in:
Tagir Valeev
2024-02-15 14:50:10 +01:00
committed by intellij-monorepo-bot
parent 745a271ea1
commit 6e80ef3cc7
34 changed files with 83 additions and 47 deletions

View File

@@ -25,6 +25,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NotNull;
@@ -41,7 +42,7 @@ public final class SuppressWarningsFoldingBuilder extends FoldingBuilderEx {
if (!(root instanceof PsiJavaFile) || quick || !JavaCodeFoldingSettings.getInstance().isCollapseSuppressWarnings()) {
return FoldingDescriptor.EMPTY_ARRAY;
}
if (!PsiUtil.isLanguageLevel5OrHigher(root)) {
if (!PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, root)) {
return FoldingDescriptor.EMPTY_ARRAY;
}
final List<FoldingDescriptor> result = new ArrayList<>();

View File

@@ -4,6 +4,7 @@ package com.intellij.codeInsight.daemon.impl.quickfix;
import com.intellij.codeInsight.daemon.QuickFixBundle;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.pom.java.JavaFeature;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
@@ -58,7 +59,7 @@ public final class AddTypeArgumentsFix extends MethodArgumentFix {
@Nullable
public static PsiExpression addTypeArguments(@NotNull PsiExpression expression, @Nullable PsiType toType, boolean withShortening) {
if (!PsiUtil.isLanguageLevel5OrHigher(expression)) return null;
if (!PsiUtil.isAvailable(JavaFeature.GENERICS, expression)) return null;
PsiExpression orig = expression;
expression = PsiUtil.skipParenthesizedExprDown(expression);

View File

@@ -155,7 +155,7 @@ public class AddAnnotationPsiFix extends LocalQuickFixOnPsiElement implements Lo
public static boolean isAvailable(@NotNull PsiModifierListOwner modifierListOwner, @NotNull String annotationFQN) {
if (!modifierListOwner.isValid()) return false;
if (!PsiUtil.isLanguageLevel5OrHigher(modifierListOwner)) return false;
if (!PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, modifierListOwner)) return false;
if (modifierListOwner instanceof PsiParameter && ((PsiParameter)modifierListOwner).getTypeElement() == null) {
if (modifierListOwner.getParent() instanceof PsiParameterList &&

View File

@@ -13,6 +13,7 @@ import com.intellij.openapi.projectRoots.JavaSdkVersionUtil;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiVariableEx;
import com.intellij.psi.javadoc.PsiDocComment;
@@ -159,7 +160,7 @@ public final class JavaSuppressionUtil {
@NotNull
private static Collection<String> getInspectionIdsSuppressedInAnnotation(@NotNull PsiModifierListOwner owner) {
if (!PsiUtil.isLanguageLevel5OrHigher(owner)) return Collections.emptyList();
if (!PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, owner)) return Collections.emptyList();
PsiModifierList modifierList = owner.getModifierList();
return getInspectionIdsSuppressedInAnnotation(modifierList);
}
@@ -292,7 +293,7 @@ public final class JavaSuppressionUtil {
JavaSdkVersion version = JavaSdkVersionUtil.getJavaSdkVersion(jdk);
if (version == null) return false;
boolean is_1_5 = version.isAtLeast(JavaSdkVersion.JDK_1_5);
return DaemonCodeAnalyzerSettings.getInstance().isSuppressWarnings() && is_1_5 && PsiUtil.isLanguageLevel5OrHigher(file);
return DaemonCodeAnalyzerSettings.getInstance().isSuppressWarnings() && is_1_5 && PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, file);
}
@Nullable

View File

@@ -2,6 +2,7 @@
package com.intellij.codeInspection.miscGenerics;
import com.intellij.codeInspection.*;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.containers.ContainerUtil;
@@ -21,7 +22,7 @@ public abstract class GenericsInspectionToolBase extends AbstractBaseJavaLocalIn
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
PsiFile file = holder.getFile();
if (!PsiUtil.isLanguageLevel5OrHigher(file)) return PsiElementVisitor.EMPTY_VISITOR;
if (!PsiUtil.isAvailable(JavaFeature.GENERICS, file)) return PsiElementVisitor.EMPTY_VISITOR;
return super.buildVisitor(holder, isOnTheFly);
}

View File

@@ -5,6 +5,7 @@ import com.intellij.codeInsight.daemon.impl.analysis.JavaGenericsUtil;
import com.intellij.codeInspection.util.InspectionMessage;
import com.intellij.java.analysis.JavaAnalysisBundle;
import com.intellij.openapi.util.NullableLazyValue;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.graphInference.PsiPolyExpressionUtil;
import com.intellij.psi.search.GlobalSearchScope;
@@ -45,7 +46,7 @@ public final class SuspiciousMethodCallUtil {
addSingleParameterMethod(patternMethods, collectionClass, "contains", object);
if (PsiUtil.isLanguageLevel5OrHigher(collectionClass)) {
if (PsiUtil.isAvailable(JavaFeature.GENERICS, collectionClass)) {
PsiClassType wildcardCollection = javaPsiFacade.getElementFactory().createType(collectionClass, PsiWildcardType.createUnbounded(manager));
addSingleParameterMethod(patternMethods, collectionClass, "removeAll", wildcardCollection);
addSingleParameterMethod(patternMethods, collectionClass, "retainAll", wildcardCollection);

View File

@@ -23,6 +23,7 @@ import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.codeStyle.VariableKind;
@@ -46,9 +47,7 @@ import org.jetbrains.annotations.PropertyKey;
import java.util.*;
import java.util.function.Consumer;
import static com.intellij.codeInsight.AnnotationUtil.CHECK_EXTERNAL;
import static com.intellij.codeInsight.AnnotationUtil.CHECK_HIERARCHY;
import static com.intellij.codeInsight.AnnotationUtil.CHECK_TYPE;
import static com.intellij.codeInsight.AnnotationUtil.*;
import static com.intellij.patterns.PsiJavaPatterns.psiElement;
import static com.intellij.patterns.PsiJavaPatterns.psiMethod;
import static com.intellij.util.ObjectUtils.tryCast;
@@ -102,7 +101,7 @@ public class NullableStuffInspectionBase extends AbstractBaseJavaLocalInspection
@NotNull
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
final PsiFile file = holder.getFile();
if (!PsiUtil.isLanguageLevel5OrHigher(file) || nullabilityAnnotationsNotAvailable(file)) {
if (!PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, file) || nullabilityAnnotationsNotAvailable(file)) {
return PsiElementVisitor.EMPTY_VISITOR;
}
return new JavaElementVisitor() {

View File

@@ -6,6 +6,7 @@ import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.javadoc.PsiDocComment;
@@ -58,7 +59,7 @@ public final class ComparableImplementedButEqualsNotOverriddenInspection extends
protected void applyFix(@NotNull Project project, @NotNull PsiElement startElement, @NotNull ModPsiUpdater updater) {
final PsiClass aClass = (PsiClass)startElement.getParent();
final @NonNls StringBuilder methodText = new StringBuilder();
if (PsiUtil.isLanguageLevel5OrHigher(aClass)) {
if (PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, aClass)) {
methodText.append("@java.lang.Override ");
}
methodText.append("public ");

View File

@@ -49,7 +49,7 @@ public final class UtilityClassCanBeEnumInspection extends BaseInspection implem
@Override
protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) {
if (!PsiUtil.isLanguageLevel5OrHigher(element)) {
if (!PsiUtil.isAvailable(JavaFeature.ENUMS, element)) {
return;
}
final PsiElement parent = element.getParent();

View File

@@ -18,9 +18,10 @@ package com.siyeh.ig.inheritance;
import com.intellij.codeInsight.daemon.impl.analysis.JavaGenericsUtil;
import com.intellij.codeInspection.CleanupLocalInspectionTool;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.JavaPsiPatternUtil;
@@ -36,6 +37,8 @@ import com.siyeh.ig.psiutils.MethodUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
public final class TypeParameterExtendsFinalClassInspection extends BaseInspection implements CleanupLocalInspectionTool {
@Override
@@ -102,8 +105,8 @@ public final class TypeParameterExtendsFinalClassInspection extends BaseInspecti
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isLanguageLevel5OrHigher(file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.GENERICS);
}
@Override

View File

@@ -895,7 +895,7 @@ public class JavaKeywordCompletion {
if (PsiUtil.isAvailable(JavaFeature.RECORDS, myPosition)) {
keywords.add(PsiKeyword.RECORD);
}
if (PsiUtil.isLanguageLevel5OrHigher(myPosition)) {
if (PsiUtil.isAvailable(JavaFeature.ENUMS, myPosition)) {
keywords.add(PsiKeyword.ENUM);
}
String className = recommendClassName();

View File

@@ -10,6 +10,7 @@ import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.NotNullLazyValue;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.filters.ElementFilter;
import com.intellij.psi.filters.getters.ExpectedTypesGetter;
@@ -155,7 +156,7 @@ public final class JavaCompletionProcessor implements PsiScopeProcessor, Element
return true;
}
if (element instanceof PsiMethod method && PsiTypesUtil.isGetClass(method) && PsiUtil.isLanguageLevel5OrHigher(myElement)) {
if (element instanceof PsiMethod method && PsiTypesUtil.isGetClass(method) && PsiUtil.isAvailable(JavaFeature.GENERICS, myElement)) {
PsiType patchedType = PsiTypesUtil.createJavaLangClassType(myElement, myQualifierType, false);
if (patchedType != null) {
element = new LightMethodBuilder(element.getManager(), method.getName()).

View File

@@ -3,8 +3,12 @@ package com.intellij.codeInsight.daemon.impl.quickfix;
import com.intellij.codeInsight.daemon.QuickFixBundle;
import com.intellij.ide.highlighter.JavaFileType;
import com.intellij.modcommand.*;
import com.intellij.modcommand.ActionContext;
import com.intellij.modcommand.ModCommand;
import com.intellij.modcommand.Presentation;
import com.intellij.modcommand.PsiBasedModCommandAction;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
@@ -113,7 +117,7 @@ public class CreateTypeParameterFromUsageFix extends PsiBasedModCommandAction<Ps
private record Context(@NotNull List<PsiNameIdentifierOwner> placesToAdd, @NotNull String typeName) {
@Nullable
static Context from(@NotNull PsiJavaCodeReferenceElement element, boolean findFirstOnly) {
if (!PsiUtil.isLanguageLevel5OrHigher(element)) return null;
if (!PsiUtil.isAvailable(JavaFeature.GENERICS, element)) return null;
if (element.isQualified()) return null;
PsiElement container =
PsiTreeUtil.getParentOfType(element, PsiReferenceList.class, PsiClass.class, PsiMethod.class, PsiClassInitializer.class,

View File

@@ -73,7 +73,7 @@ public class DefaultQuickFixProvider extends UnresolvedReferenceQuickFixProvider
SurroundWithQuotesAnnotationParameterValueFix.register(registrar, ref);
if (PsiUtil.isLanguageLevel5OrHigher(ref)) {
if (PsiUtil.isAvailable(JavaFeature.GENERICS, ref)) {
registrar.register(new CreateTypeParameterFromUsageFix(ref).asIntention());
}
}
@@ -103,8 +103,10 @@ public class DefaultQuickFixProvider extends UnresolvedReferenceQuickFixProvider
}
result.add(new CreateClassFromUsageFix(ref, CreateClassKind.INTERFACE));
if (PsiUtil.isLanguageLevel5OrHigher(ref)) {
if (PsiUtil.isAvailable(JavaFeature.ENUMS, ref)) {
result.add(new CreateClassFromUsageFix(ref, CreateClassKind.ENUM));
}
if (PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, ref)) {
result.add(new CreateClassFromUsageFix(ref, CreateClassKind.ANNOTATION));
}
if (PsiUtil.isAvailable(JavaFeature.RECORDS, ref)) {

View File

@@ -20,6 +20,7 @@ import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packageDependencies.DependencyValidationManager;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.impl.light.LightJavaModule;
import com.intellij.psi.search.GlobalSearchScope;
@@ -324,7 +325,7 @@ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix {
@NotNull
private static ThreeState isReferenceToAnnotation(final @NotNull PsiElement psiElement) {
if (psiElement.getLanguage() == JavaLanguage.INSTANCE && !PsiUtil.isLanguageLevel5OrHigher(psiElement)) {
if (psiElement.getLanguage() == JavaLanguage.INSTANCE && !PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, psiElement)) {
return ThreeState.NO;
}
UElement uElement = UastContextKt.toUElement(psiElement);

View File

@@ -17,6 +17,7 @@ import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.util.NlsSafe;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiModificationTracker;
import com.intellij.psi.util.PsiTreeUtil;
@@ -43,7 +44,7 @@ abstract class StaticImportMemberFix<T extends PsiMember, R extends PsiElement>
ApplicationManager.getApplication().assertReadAccessAllowed();
Project project = file.getProject();
myReferencePointer = SmartPointerManager.getInstance(project).createSmartPsiElementPointer(reference);
if (!PsiUtil.isLanguageLevel5OrHigher(file)
if (!PsiUtil.isAvailable(JavaFeature.STATIC_IMPORTS, file)
|| !(file instanceof PsiJavaFile)
|| getElement() == null
|| !reference.isValid()

View File

@@ -5,6 +5,7 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
@@ -82,7 +83,7 @@ public class GenerateEqualsHelper implements Runnable {
private static boolean shouldAddOverrideAnnotation(PsiElement context) {
JavaCodeStyleSettings style = JavaCodeStyleSettings.getInstance(context.getContainingFile());
return style.INSERT_OVERRIDE_ANNOTATION && PsiUtil.isLanguageLevel5OrHigher(context);
return style.INSERT_OVERRIDE_ANNOTATION && PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, context);
}
@Override

View File

@@ -110,7 +110,7 @@ public final class OverrideImplementUtil extends OverrideImplementExploreUtil {
if (superMethod.isConstructor() || superMethod.hasModifierProperty(PsiModifier.STATIC)) {
return false;
}
if (!PsiUtil.isLanguageLevel5OrHigher(targetClass)) {
if (!PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, targetClass)) {
return false;
}
if (targetClass.isRecord() && superMethod.getParameterList().isEmpty()) {

View File

@@ -14,6 +14,7 @@ import com.intellij.openapi.editor.colors.EditorColors;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.wm.WindowManager;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
@@ -50,7 +51,7 @@ public final class AddOnDemandStaticImportAction extends PsiUpdateModCommandActi
*/
@Nullable
public static PsiClass getClassToPerformStaticImport(@NotNull PsiElement element) {
if (!PsiUtil.isLanguageLevel5OrHigher(element)) return null;
if (!PsiUtil.isAvailable(JavaFeature.STATIC_IMPORTS, element)) return null;
if (!(element instanceof PsiIdentifier) || !(element.getParent() instanceof PsiJavaCodeReferenceElement refExpr)) {
return null;
}

View File

@@ -10,6 +10,7 @@ import com.intellij.modcommand.PsiUpdateModCommandAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.codeStyle.ImportHelper;
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl;
@@ -57,7 +58,7 @@ public final class AddSingleMemberStaticImportAction extends PsiUpdateModCommand
*/
@Nullable
public static ImportAvailability getStaticImportClass(@NotNull PsiElement element) {
if (!PsiUtil.isLanguageLevel5OrHigher(element)) return null;
if (!PsiUtil.isAvailable(JavaFeature.STATIC_IMPORTS, element)) return null;
if (element instanceof PsiIdentifier) {
final PsiElement parent = element.getParent();
if (parent instanceof PsiMethodReferenceExpression) return null;

View File

@@ -10,6 +10,7 @@ import com.intellij.modcommand.ModCommandAction;
import com.intellij.modcommand.Presentation;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.codeStyle.VariableKind;
@@ -169,7 +170,7 @@ public final class CollapseIntoLoopAction implements ModCommandAction {
static @Nullable LoopModel from(@NotNull ActionContext context) {
PsiFile file = context.file();
if (!(file instanceof PsiJavaFile) || !PsiUtil.isLanguageLevel5OrHigher(file)) return null;
if (!(file instanceof PsiJavaFile) || !PsiUtil.isAvailable(JavaFeature.FOR_EACH, file)) return null;
TextRange range = context.selection();
boolean mayTrimTail;
List<PsiStatement> statements;

View File

@@ -9,6 +9,7 @@ import com.intellij.modcommand.Presentation;
import com.intellij.modcommand.PsiUpdateModCommandAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
@@ -64,7 +65,7 @@ public final class ConcatenationToMessageFormatAction extends PsiUpdateModComman
}
PsiExpression formatArgument = factory.createExpressionFromText(expressionText, null);
argumentList.add(formatArgument);
if (PsiUtil.isLanguageLevel5OrHigher(context.file())) {
if (PsiUtil.isAvailable(JavaFeature.VARARGS, context.file())) {
for (PsiExpression arg : args) {
argumentList.add(arg);
}

View File

@@ -8,6 +8,7 @@ import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.Presentation;
import com.intellij.modcommand.PsiUpdateModCommandAction;
import com.intellij.openapi.editor.Document;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.util.PsiTreeUtil;
@@ -59,9 +60,10 @@ public final class CreateSwitchIntention extends PsiUpdateModCommandAction<PsiEx
if (resolvedClass == null) {
return false;
}
return (PsiUtil.isLanguageLevel5OrHigher(context) &&
(resolvedClass.isEnum() || isSuitablePrimitiveType(PsiPrimitiveType.getUnboxedType(type))))
|| (PsiUtil.isLanguageLevel7OrHigher(context) && CommonClassNames.JAVA_LANG_STRING.equals(resolvedClass.getQualifiedName()));
return (PsiUtil.isAvailable(JavaFeature.ENUMS, context) &&
(resolvedClass.isEnum() || isSuitablePrimitiveType(PsiPrimitiveType.getUnboxedType(type)))) ||
(PsiUtil.isAvailable(JavaFeature.STRING_SWITCH, context) &&
CommonClassNames.JAVA_LANG_STRING.equals(resolvedClass.getQualifiedName()));
}
return isSuitablePrimitiveType(type);
}

View File

@@ -2,7 +2,11 @@
package com.intellij.codeInsight.intention.impl;
import com.intellij.java.JavaBundle;
import com.intellij.modcommand.*;
import com.intellij.modcommand.ActionContext;
import com.intellij.modcommand.ModCommand;
import com.intellij.modcommand.Presentation;
import com.intellij.modcommand.PsiBasedModCommandAction;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.ObjectUtils;
@@ -36,7 +40,7 @@ public final class ExpandStaticImportAction extends PsiBasedModCommandAction<Psi
@Override
protected @Nullable Presentation getPresentation(@NotNull ActionContext context, @NotNull PsiIdentifier element) {
if (!PsiUtil.isLanguageLevel5OrHigher(element) || !(element.getParent() instanceof PsiJavaCodeReferenceElement referenceElement)) {
if (!PsiUtil.isAvailable(JavaFeature.STATIC_IMPORTS, element) || !(element.getParent() instanceof PsiJavaCodeReferenceElement referenceElement)) {
return null;
}
final PsiImportStaticStatement importStatement = getImportStaticStatement(referenceElement);

View File

@@ -9,6 +9,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
@@ -89,7 +90,7 @@ public final class ExtractSetFromComparisonChainAction implements ModCommandActi
String initializer = MessageFormat.format(pattern, fieldInitializer, elementType.getCanonicalText());
String modifiers = cls.isInterface() ? "" : "private static final ";
String type = CommonClassNames.JAVA_UTIL_SET +
(PsiUtil.isLanguageLevel5OrHigher(cls) ? "<" + elementType.getCanonicalText() + ">" : "");
(PsiUtil.isAvailable(JavaFeature.GENERICS, cls) ? "<" + elementType.getCanonicalText() + ">" : "");
PsiField field = factory.createFieldFromText(modifiers + type + " " + name + "=" + initializer + ";", cls);
field = (PsiField)cls.add(field);
RemoveRedundantTypeArgumentsUtil.removeRedundantTypeArguments(field);
@@ -134,13 +135,13 @@ public final class ExtractSetFromComparisonChainAction implements ModCommandActi
if (!type.equalsToText(CommonClassNames.JAVA_LANG_STRING)) {
return INITIALIZER_ENUM_SET;
}
if (PsiUtil.isLanguageLevel9OrHigher(containingClass)) {
if (PsiUtil.isAvailable(JavaFeature.COLLECTION_FACTORIES, containingClass)) {
return INITIALIZER_FORMAT_JAVA9;
}
if (JavaPsiFacade.getInstance(containingClass.getProject()).findClass(GUAVA_IMMUTABLE_SET, containingClass.getResolveScope()) != null) {
return INITIALIZER_FORMAT_GUAVA;
}
if (PsiUtil.isLanguageLevel5OrHigher(containingClass)) {
if (PsiUtil.isAvailable(JavaFeature.GENERICS, containingClass)) {
return INITIALIZER_FORMAT_JAVA5;
}
return INITIALIZER_FORMAT_JAVA2;

View File

@@ -20,6 +20,7 @@ import com.intellij.codeInspection.util.InspectionMessage;
import com.intellij.lang.xml.XMLLanguage;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.util.PsiUtil;
@@ -95,7 +96,7 @@ public class JavaClassReferenceSet {
if (ch == LT || ch == COMMA) {
if (!allowGenericsCalculated) {
allowGenerics = !isStaticImport && PsiUtil.isLanguageLevel5OrHigher(element);
allowGenerics = !isStaticImport && PsiUtil.isAvailable(JavaFeature.STATIC_IMPORTS, element);
allowGenericsCalculated = true;
}

View File

@@ -22,6 +22,7 @@ import com.intellij.codeInspection.options.OptPane;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.intellij.psi.util.PsiUtil;
@@ -125,7 +126,7 @@ public final class CloneableImplementsCloneInspection extends BaseInspection {
}
@NonNls final StringBuilder methodText = new StringBuilder();
final JavaCodeStyleSettings codeStyleSettings = JavaCodeStyleSettings.getInstance(aClass.getContainingFile());
if (PsiUtil.isLanguageLevel5OrHigher(aClass) && codeStyleSettings.INSERT_OVERRIDE_ANNOTATION) {
if (PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, aClass) && codeStyleSettings.INSERT_OVERRIDE_ANNOTATION) {
methodText.append("@java.lang.Override ");
}
final String className = aClass.getName();

View File

@@ -20,6 +20,7 @@ import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.intellij.psi.util.PsiUtil;
@@ -88,7 +89,7 @@ public final class CloneableClassInSecureContextInspection extends BaseInspectio
return;
}
@NonNls final StringBuilder methodText = new StringBuilder();
if (PsiUtil.isLanguageLevel5OrHigher(aClass) &&
if (PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, aClass) &&
JavaCodeStyleSettings.getInstance(aClass.getContainingFile()).INSERT_OVERRIDE_ANNOTATION) {
methodText.append("@java.lang.Override ");
}

View File

@@ -407,7 +407,7 @@ public class AnnotationUtil {
public static boolean isAnnotatingApplicable(@NotNull PsiElement elt, @NotNull String annotationFQN) {
final Project project = elt.getProject();
return PsiUtil.isLanguageLevel5OrHigher(elt) &&
return PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, elt) &&
JavaPsiFacade.getInstance(project).findClass(annotationFQN, elt.getResolveScope()) != null;
}

View File

@@ -259,7 +259,7 @@ public final class PsiImplUtil {
if (classClass == null) {
return new PsiClassReferenceType(new LightClassReference(manager, "Class", "java.lang.Class", resolveScope), null);
}
if (!PsiUtil.isLanguageLevel5OrHigher(classAccessExpression)) {
if (!PsiUtil.isAvailable(JavaFeature.GENERICS, classAccessExpression)) {
//Raw java.lang.Class
return JavaPsiFacade.getElementFactory(manager.getProject()).createType(classClass);
}

View File

@@ -20,6 +20,7 @@ import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.patterns.PsiJavaPatterns;
import com.intellij.patterns.compiler.PatternCompiler;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.search.GlobalSearchScope;
@@ -237,7 +238,7 @@ public final class JavaLanguageInjectionSupport extends AbstractLanguageInjectio
};
final boolean addAnnotation = ProgressManager.getInstance().run(task)
&& PsiUtil.isLanguageLevel5OrHigher(modifierListOwner)
&& PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, modifierListOwner)
&& modifierListOwner.getModifierList() != null;
final PsiElement statement = PsiTreeUtil.getParentOfType(host, PsiStatement.class, PsiField.class);
if (!addAnnotation && statement == null) return false;

View File

@@ -37,6 +37,7 @@ import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.ui.ComponentValidator;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.ValidationInfo;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.intellij.psi.search.GlobalSearchScope;
@@ -106,7 +107,7 @@ public class GenerateToStringActionHandlerImpl implements GenerateToStringAction
LOG.debug("Displaying member chooser dialog");
final MemberChooser<PsiElementClassMember<?>> chooser =
new MemberChooser<>(dialogMembers, true, true, project, PsiUtil.isLanguageLevel5OrHigher(clazz), header) {
new MemberChooser<>(dialogMembers, true, true, project, PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, clazz), header) {
@Override
protected @NotNull String getHelpId() {
return "editing.altInsert.tostring";

View File

@@ -7,6 +7,7 @@ import com.intellij.lang.Language;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
@@ -239,7 +240,7 @@ public class GrPullUpHelper implements PullUpHelper<MemberInfo> {
anchor != null ? (GrMethod)myTargetSuperClass.addBefore(methodCopy, anchor) : (GrMethod)myTargetSuperClass.add(methodCopy);
JavaCodeStyleSettings styleSettings = JavaCodeStyleSettings.getInstance(method.getContainingFile());
if (styleSettings.INSERT_OVERRIDE_ANNOTATION) {
if (PsiUtil.isLanguageLevel5OrHigher(mySourceClass) && !myTargetSuperClass.isInterface() ||
if (PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, mySourceClass) && !myTargetSuperClass.isInterface() ||
PsiUtil.isLanguageLevel6OrHigher(mySourceClass)) {
new AddAnnotationFix(CommonClassNames.JAVA_LANG_OVERRIDE, method)
.invoke(method.getProject(), null, mySourceClass.getContainingFile());

View File

@@ -28,6 +28,7 @@ import com.intellij.openapi.util.NlsSafe;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.text.HtmlChunk;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
@@ -510,7 +511,7 @@ public final class I18nInspection extends AbstractBaseUastLocalInspectionTool im
List<LocalQuickFix> fixes = new ArrayList<>();
if (sourcePsi instanceof PsiLiteralExpression && PsiUtil.isLanguageLevel5OrHigher(sourcePsi)) {
if (sourcePsi instanceof PsiLiteralExpression && PsiUtil.isAvailable(JavaFeature.ANNOTATIONS, sourcePsi)) {
final JavaPsiFacade facade = JavaPsiFacade.getInstance(myHolder.getProject());
for (PsiModifierListOwner element : nonNlsTargets) {
if (NlsInfo.forModifierListOwner(element).getNlsStatus() == ThreeState.UNSURE) {