disable create enum constant when not applicable (IDEA-154293)

This commit is contained in:
Anna.Kozlova
2016-04-08 15:59:17 +02:00
parent 3f384a290c
commit 572b7d8e7e
3 changed files with 69 additions and 3 deletions

View File

@@ -108,14 +108,42 @@ public class CreateEnumConstantFromUsageFix extends CreateVarFromUsageFix implem
if (enumClass != null) {
return Collections.singletonList(enumClass);
}
ExpectedTypeInfo[] typeInfos = CreateFromUsageUtils.guessExpectedTypes(myReferenceExpression, false);
if (myReferenceExpression.isQualified()) {
final PsiClass aClass = getTargetClassByExpectedTypes(myReferenceExpression.getQualifierExpression());
if (aClass != null) {
return Collections.singletonList(aClass);
}
}
else {
final PsiClass targetClass = getTargetClassByExpectedTypes(myReferenceExpression);
if (targetClass != null) {
final PsiFile containingFile = myReferenceExpression.getContainingFile();
if (containingFile instanceof PsiJavaFile) {
final PsiImportList importList = ((PsiJavaFile)containingFile).getImportList();
if (importList != null) {
for (PsiImportStaticStatement statement : importList.getImportStaticStatements()) {
if (statement.isOnDemand() && targetClass.equals(statement.resolveTargetClass())) {
return Collections.singletonList(targetClass);
}
}
}
}
}
}
return Collections.emptyList();
}
private static PsiClass getTargetClassByExpectedTypes(PsiExpression expression) {
ExpectedTypeInfo[] typeInfos = CreateFromUsageUtils.guessExpectedTypes(expression, false);
for (final ExpectedTypeInfo typeInfo : typeInfos) {
final PsiClass psiClass = PsiUtil.resolveClassInClassTypeOnly(typeInfo.getType());
if (psiClass != null && psiClass.isEnum()) {
return Collections.singletonList(psiClass);
return psiClass;
}
}
return Collections.emptyList();
return null;
}
@Override

View File

@@ -0,0 +1,19 @@
// "Create enum constant 'CRIME'" "false"
import java.util.Arrays;
import java.util.List;
class AutomaticTypeInference {
AutomaticTypeInference(List<E> gs) {
}
public static void main(String[] args) {
new AutomaticTypeInference(Arrays.asList(E.ACTION, CRI<caret>ME));
}
enum E {
ACTION;
}
}

View File

@@ -0,0 +1,19 @@
// "Create enum constant 'CRIME'" "false"
import java.util.Arrays;
import java.util.List;
class AutomaticTypeInference {
AutomaticTypeInference(List<E> gs) {
}
{
new AutomaticTypeInference(Arrays.asList(E.ACTION, this.CRI<caret>ME));
}
enum E {
ACTION;
}
}