| 
					
				 | 
			
			
				@@ -340,12 +340,20 @@ TEST(ReflectionOpsTest, IsInitialized) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   unittest::TestRequired message; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_FALSE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_FALSE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.set_a(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_FALSE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_FALSE(ReflectionOps::IsInitialized(message, true, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.set_b(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_FALSE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_FALSE(ReflectionOps::IsInitialized(message, true, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.set_c(3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_TRUE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST(ReflectionOpsTest, ForeignIsInitialized) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -354,26 +362,35 @@ TEST(ReflectionOpsTest, ForeignIsInitialized) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Starts out initialized because the foreign message is itself an optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // field. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_TRUE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Once we create that field, the message is no longer initialized. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.mutable_optional_message(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_FALSE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_FALSE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Initialize it.  Now we're initialized. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.mutable_optional_message()->set_a(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.mutable_optional_message()->set_b(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.mutable_optional_message()->set_c(3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_TRUE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Add a repeated version of the message.  No longer initialized. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   unittest::TestRequired* sub_message = message.add_repeated_message(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_FALSE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_FALSE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Initialize that repeated version. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   sub_message->set_a(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   sub_message->set_b(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   sub_message->set_c(3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_TRUE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST(ReflectionOpsTest, ExtensionIsInitialized) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -382,42 +399,62 @@ TEST(ReflectionOpsTest, ExtensionIsInitialized) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Starts out initialized because the foreign message is itself an optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // field. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_TRUE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Once we create that field, the message is no longer initialized. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.MutableExtension(unittest::TestRequired::single); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_FALSE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_FALSE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Initialize it.  Now we're initialized. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.MutableExtension(unittest::TestRequired::single)->set_a(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.MutableExtension(unittest::TestRequired::single)->set_b(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.MutableExtension(unittest::TestRequired::single)->set_c(3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_TRUE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Add a repeated version of the message.  No longer initialized. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.AddExtension(unittest::TestRequired::multi); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_FALSE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_FALSE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Initialize that repeated version. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.MutableExtension(unittest::TestRequired::multi, 0)->set_a(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.MutableExtension(unittest::TestRequired::multi, 0)->set_b(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.MutableExtension(unittest::TestRequired::multi, 0)->set_c(3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_TRUE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST(ReflectionOpsTest, OneofIsInitialized) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   unittest::TestRequiredOneof message; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_TRUE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.mutable_foo_message(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_FALSE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_FALSE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.set_foo_int(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_TRUE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.mutable_foo_message(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_FALSE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_FALSE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   message.mutable_foo_message()->set_required_double(0.1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_TRUE(ReflectionOps::IsInitialized(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static std::string FindInitializationErrors(const Message& message) { 
			 |