Do not crash if @GwtIncompatible is used in annotations.

@GwtIcompatible in annotations is considered noop.

Change-Id: Iff75cb012024f8394caab9c2241ed16cb4fc0803
diff --git a/dev/core/src/com/google/gwt/dev/javac/GwtIncompatiblePreprocessor.java b/dev/core/src/com/google/gwt/dev/javac/GwtIncompatiblePreprocessor.java
index 862ed1c..426cb53 100644
--- a/dev/core/src/com/google/gwt/dev/javac/GwtIncompatiblePreprocessor.java
+++ b/dev/core/src/com/google/gwt/dev/javac/GwtIncompatiblePreprocessor.java
@@ -146,14 +146,17 @@
    * Removes all members of a class to leave it as an empty stub.
    */
   private static void stripAllMembers(TypeDeclaration tyDecl) {
+    if (TypeDeclaration.kind(tyDecl.modifiers) == TypeDeclaration.ANNOTATION_TYPE_DECL) {
+      // Do not modify annotations at all.
+      return;
+    }
     tyDecl.superclass = null;
     tyDecl.superInterfaces = new TypeReference[0];
     tyDecl.annotations = new Annotation[0];
     tyDecl.methods = new AbstractMethodDeclaration[0];
     tyDecl.memberTypes = new TypeDeclaration[0];
     tyDecl.fields = new FieldDeclaration[0];
-    if (TypeDeclaration.kind(tyDecl.modifiers) != TypeDeclaration.INTERFACE_DECL &&
-        TypeDeclaration.kind(tyDecl.modifiers) != TypeDeclaration.ENUM_DECL) {
+    if (TypeDeclaration.kind(tyDecl.modifiers) == TypeDeclaration.CLASS_DECL) {
       // Create a default constructor so that the class is proper.
       ConstructorDeclaration constructor = tyDecl.createDefaultConstructor(true, true);
       // Mark only constructor as private so that it can not be instantiated.
diff --git a/dev/core/test/com/google/gwt/dev/javac/GwtIncompatibleJdtCompilerTest.java b/dev/core/test/com/google/gwt/dev/javac/GwtIncompatibleJdtCompilerTest.java
index 261fe79..86bbb6a 100644
--- a/dev/core/test/com/google/gwt/dev/javac/GwtIncompatibleJdtCompilerTest.java
+++ b/dev/core/test/com/google/gwt/dev/javac/GwtIncompatibleJdtCompilerTest.java
@@ -80,6 +80,10 @@
         "GwtIncompatibleWithStaticInnerClass.Child cannot be resolved to a type");
   }
 
+  public void testCompileGwtIncompatibleAnnotation() throws Exception {
+    assertResourcesCompileSuccessfully(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_ANNOTATION_TYPE);
+  }
+
   public static final MockJavaResource GWTINCOMPATIBLE_ANNOTATION = new MockJavaResource(
       "com.google.gwt.GwtIncompatible") {
     @Override
@@ -245,5 +249,16 @@
       "}");
     }
   };
+
+  public static final MockJavaResource GWTINCOMPATIBLE_ANNOTATION_TYPE = new MockJavaResource(
+      "com.google.gwt.GwtIncompatibleAnnotation") {
+    @Override
+    public CharSequence getContent() {
+      return Joiner.on("\n").join("package com.google.gwt;",
+          "@GwtIncompatible(\" not compatible \") ",
+          "public @interface GwtIncompatibleAnnotation {",
+          "}");
+    }
+  };
 }