Assert that declared providers are not TransitiveInfoProviders.

Also fix the remaining violations.

RELNOTES: None.
PiperOrigin-RevId: 163391215
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java
index 38eb63d..f46689c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java
@@ -48,6 +48,10 @@
       Class<? extends T> providerClass, T provider) {
     Preconditions.checkNotNull(providerClass);
     Preconditions.checkNotNull(provider);
+    Preconditions.checkState(!(provider instanceof SkylarkClassObject),
+        "Expose %s as native declared provider",
+        providerClass);
+
     // TODO(arielb): throw an exception if the providerClass is already present?
     // This is enforced by aspects but RuleConfiguredTarget presents violations
     // particularly around LicensesProvider
@@ -57,6 +61,10 @@
 
   public TransitiveInfoProviderMapBuilder put(SkylarkClassObject classObject) {
     Preconditions.checkNotNull(classObject);
+    Preconditions.checkState(!(classObject instanceof TransitiveInfoProvider),
+        "Declared provider %s should not implement TransitiveInfoProvider",
+        classObject.getClass());
+
     providers.put(classObject.getConstructor().getKey(), classObject);
     return this;
   }