Inform malformed inner-class attribute regardless of minification.

Change-Id: I8f906ad7fc7c351d6b19863ee890f834a5f79682
diff --git a/src/main/java/com/android/tools/r8/graph/DexClass.java b/src/main/java/com/android/tools/r8/graph/DexClass.java
index 692acae..a301563 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClass.java
@@ -806,21 +806,20 @@
   public boolean isLocalClass() {
     InnerClassAttribute innerClass = getInnerClassAttributeForThisClass();
     // The corresponding enclosing-method attribute might be not available, e.g., CF version 50.
-    return innerClass != null
-        && innerClass.getOuter() == null
-        && innerClass.isNamed();
+    return innerClass != null && innerClass.getOuter() == null && innerClass.isNamed();
   }
 
   public boolean isMemberClass() {
     InnerClassAttribute innerClass = getInnerClassAttributeForThisClass();
-    return innerClass != null
-        && innerClass.getOuter() != null
-        && innerClass.isNamed();
+    boolean isMember = innerClass != null && innerClass.getOuter() != null && innerClass.isNamed();
+    assert !isMember || getEnclosingMethod() == null;
+    return isMember;
   }
 
   public boolean isAnonymousClass() {
     InnerClassAttribute innerClass = getInnerClassAttributeForThisClass();
     // The corresponding enclosing-method attribute might be not available, e.g., CF version 50.
+    // We can't rely on outer type either because it's not null prior to 51 and null since 51.
     return innerClass != null && innerClass.isAnonymous();
   }
 
diff --git a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
index 665e3d5..16e9d44 100644
--- a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
@@ -243,9 +243,7 @@
     public void visitInnerClass(String name, String outerName, String innerName, int access) {
       if (outerName != null && innerName != null) {
         String separator = DescriptorUtils.computeInnerClassSeparator(outerName, name, innerName);
-        if (separator == null
-            && !application.options.isMinifying()
-            && getMajorVersion() < V9) {
+        if (separator == null && getMajorVersion() < V9) {
           application.options.reporter.info(
               new StringDiagnostic(
                   StringUtils.lines(
diff --git a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
index dfb21da..725b435 100644
--- a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
@@ -320,6 +320,7 @@
 
   public static String computeInnerClassSeparator(
       String outerDescriptor, String innerDescriptor, String innerName) {
+    assert innerName != null && !innerName.isEmpty();
     // outer-internal<separator>inner-name == inner-internal
     if (outerDescriptor.length() + innerName.length() > innerDescriptor.length()) {
       return null;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/reflection/InnerClassNameTestRunner.java b/src/test/java/com/android/tools/r8/ir/optimize/reflection/InnerClassNameTestRunner.java
index bc6e13c..1a52d7e 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/reflection/InnerClassNameTestRunner.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/reflection/InnerClassNameTestRunner.java
@@ -170,14 +170,10 @@
       case UNDERBAR_SEPARATOR:
       case NON_NESTED_INNER:
       case WRONG_REPACKAGE:
-        if (!minify) {
-          result
-              .assertInfoMessageThatMatches(containsString("Malformed inner-class attribute"))
-              .assertInfoMessageThatMatches(containsString(config.getOuterTypeRaw()))
-              .assertInfoMessageThatMatches(containsString(config.getInnerTypeRaw()));
-        } else {
-          result.assertNoMessages();
-        }
+        result
+            .assertInfoMessageThatMatches(containsString("Malformed inner-class attribute"))
+            .assertInfoMessageThatMatches(containsString(config.getOuterTypeRaw()))
+            .assertInfoMessageThatMatches(containsString(config.getInnerTypeRaw()));
         break;
       default:
         throw new Unreachable("Unexpected test configuration: " + config);