private boolean isValidInnerBaseClass(Element t) {
			ElementKind kind = t.getKind();
			if (kind != ElementKind.CLASS
					&& kind != ElementKind.INTERFACE) {
				protoclass()
						.report()
						.withElement(t)
						.warning(About.INCOMPAT,
								"Inner type %s is %s - not supported as Builder extend/super type",
								t.getSimpleName(),
								kind.name().toLowerCase());

				return false;
			}

			Set<Modifier> modifiers = t.getModifiers();

			if (!modifiers.contains(Modifier.STATIC)
					|| modifiers.contains(Modifier.PRIVATE)) {
				protoclass()
						.report()
						.withElement(t)
						.warning(About.INCOMPAT,
								"Inner type %s should be static non-private to be supported as Builder extend/super type",
								t.getSimpleName());

				return false;
			}

			if (kind == ElementKind.CLASS
					&& !hasAccessibleConstructor(t)) {
				protoclass()
						.report()
						.withElement(t)
						.warning(About.INCOMPAT,
								"%s should have non-private no-argument constructor to be supported as Builder extend/super type",
								t.getSimpleName());

				return false;
			}

			return true;
		}
Used to determine if the inner class we're looking for is revelant
given the annotations on the prototype class.  For example, there's
no point in doing anything with an Modifiable inner class if it's
not setup with the Value.Modifiable annotation.
value-processor/src/org/immutables/value/processor/meta/Constitution.java