suggest to increase language level for unresolved var references

IDEA-188912
This commit is contained in:
Anna.Kozlova
2018-03-26 19:25:26 +02:00
parent 52b713bda5
commit fccb200100
2 changed files with 54 additions and 0 deletions
@@ -0,0 +1,53 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.codeInsight.daemon.impl.analysis;
import com.intellij.codeInsight.daemon.QuickFixActionRegistrar;
import com.intellij.codeInsight.intention.QuickFixFactory;
import com.intellij.codeInsight.quickfix.UnresolvedReferenceQuickFixProvider;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NotNull;
public class LocalVariableTypeInferenceUnresolvedFixProvider extends UnresolvedReferenceQuickFixProvider<PsiJavaCodeReferenceElement> {
@Override
public void registerFixes(@NotNull PsiJavaCodeReferenceElement ref, @NotNull QuickFixActionRegistrar registrar) {
PsiElement typeElement = ref.getParent();
PsiElement parent = typeElement instanceof PsiTypeElement ? typeElement.getParent() : null;
boolean increaseLanguageLevel = true;
LanguageLevel targetLanguageLevel;
if (parent instanceof PsiParameter && ((PsiParameter)parent).getDeclarationScope() instanceof PsiLambdaExpression) {
//early-draft specification support to be enabled after release
if (LanguageLevel.HIGHEST.isAtLeast(LanguageLevel.JDK_X)) {
targetLanguageLevel = LanguageLevel.JDK_X;
}
else if (ApplicationManager.getApplication().isEAP()) {
targetLanguageLevel = LanguageLevel.JDK_X;
//show module options with ability to explicitly agree with legal notice
increaseLanguageLevel = false;
}
else {
return;
}
}
else {
targetLanguageLevel = LanguageLevel.JDK_10;
}
if (PsiUtil.getLanguageLevel(ref).isAtLeast(targetLanguageLevel)) return;
if (!PsiKeyword.VAR.equals(ref.getReferenceName())) return;
if (increaseLanguageLevel) {
registrar.register(QuickFixFactory.getInstance().createIncreaseLanguageLevelFix(targetLanguageLevel));
}
registrar.register(QuickFixFactory.getInstance().createShowModulePropertiesFix(ref));
}
@NotNull
@Override
public Class<PsiJavaCodeReferenceElement> getReferenceClass() {
return PsiJavaCodeReferenceElement.class;
}
}
@@ -2798,6 +2798,7 @@
bundle="com.siyeh.InspectionGadgetsBundle" key="inspection.constant.expression.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.code.style.issues"
implementationClass="com.siyeh.ig.style.ConstantExpressionInspection"/>
<codeInsight.unresolvedReferenceQuickFixProvider implementation="com.intellij.codeInsight.daemon.impl.analysis.LocalVariableTypeInferenceUnresolvedFixProvider"/>
</extensions>
</idea-plugin>