diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java
index 788e43356a4b..87ec266694b2 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java
@@ -90,11 +90,11 @@ public class ExpectedTypeUtils {
operatorAssignmentOps.add(JavaTokenType.GTGTGTEQ);
}
- private final PsiExpression wrappedExpression;
+ @NotNull private final PsiExpression wrappedExpression;
private final boolean calculateTypeForComplexReferences;
private PsiType expectedType = null;
- ExpectedTypeVisitor(PsiExpression wrappedExpression, boolean calculateTypeForComplexReferences) {
+ ExpectedTypeVisitor(@NotNull PsiExpression wrappedExpression, boolean calculateTypeForComplexReferences) {
this.wrappedExpression = wrappedExpression;
this.calculateTypeForComplexReferences = calculateTypeForComplexReferences;
}
@@ -116,6 +116,17 @@ public class ExpectedTypeUtils {
expectedType = variable.getType();
}
+ @Override
+ public void visitAssertStatement(PsiAssertStatement statement) {
+ final PsiExpression condition = statement.getAssertCondition();
+ if (wrappedExpression == condition) {
+ expectedType = PsiType.BOOLEAN;
+ }
+ else {
+ expectedType = TypeUtils.getStringType(statement);
+ }
+ }
+
@Override
public void visitArrayInitializerExpression(PsiArrayInitializerExpression initializer) {
final PsiType type = initializer.getType();
@@ -268,6 +279,22 @@ public class ExpectedTypeUtils {
}
}
+ @Override
+ public void visitSwitchStatement(PsiSwitchStatement statement) {
+ final PsiExpression expression = statement.getExpression();
+ if (expression == null) {
+ return;
+ }
+ final PsiType type = expression.getType();
+ final PsiPrimitiveType unboxedType = PsiPrimitiveType.getUnboxedType(type);
+ if (unboxedType != null) {
+ expectedType = unboxedType;
+ }
+ else {
+ expectedType = type;
+ }
+ }
+
@Override
public void visitWhileStatement(@NotNull PsiWhileStatement whileStatement) {
expectedType = PsiType.BOOLEAN;
@@ -376,6 +403,11 @@ public class ExpectedTypeUtils {
}
}
+ @Override
+ public void visitInstanceOfExpression(PsiInstanceOfExpression expression) {
+ expectedType = TypeUtils.getObjectType(expression);
+ }
+
@Override
public void visitDeclarationStatement(PsiDeclarationStatement declaration) {
final PsiElement[] declaredElements = declaration.getDeclaredElements();
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/AutoUnboxing.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/AutoUnboxing.java
index e68c7989aaee..457f01e7d329 100644
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/AutoUnboxing.java
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/AutoUnboxing.java
@@ -40,4 +40,17 @@ public class AutoUnboxing {
private boolean noWarn(Integer i1, Integer i2) {
return i1 == i2;
}
+
+ void m(Boolean b) {
+ assert b;
+ }
+
+ void n(Integer i) {
+ switch(i) {
+ case 1: break;
+ case 2: break;
+ case 3: break;
+ default:
+ }
+ }
}
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/expected.xml
index ef9303806410..6723165f616c 100644
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/expected.xml
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/expected.xml
@@ -64,7 +64,6 @@
Auto-unboxing <code>Boolean.TRUE</code> #loc
-
AutoUnboxing.java
37
@@ -72,4 +71,18 @@
Auto-unboxing <code>Integer.valueOf(2)</code> #loc
+
+ AutoUnboxing.java
+ 45
+ Auto-unboxing
+ Auto-unboxing <code>b</code> #loc
+
+
+
+ AutoUnboxing.java
+ 49
+ Auto-unboxing
+ Auto-unboxing <code>i</code> #loc
+
+
\ No newline at end of file