[Mobies-commit] [commit] r4090 - UDM/trunk/src/Udm/JavaAPIGen

ksmyth at redhat1.isis.vanderbilt.edu ksmyth at redhat1.isis.vanderbilt.edu
Mon Aug 13 10:31:13 CDT 2012


Author: ksmyth
Date: Mon Aug 13 10:31:12 2012
New Revision: 4090

Log:
Check for empty base classes to fix crash

Modified:
   UDM/trunk/src/Udm/JavaAPIGen/ClassGen.cpp

Modified: UDM/trunk/src/Udm/JavaAPIGen/ClassGen.cpp
==============================================================================
--- UDM/trunk/src/Udm/JavaAPIGen/ClassGen.cpp	Mon Aug 13 10:31:02 2012	(r4089)
+++ UDM/trunk/src/Udm/JavaAPIGen/ClassGen.cpp	Mon Aug 13 10:31:12 2012	(r4090)
@@ -69,26 +69,29 @@
 	  std::copy(basesBases.begin(), basesBases.end(), std::inserter(inheritedBases, inheritedBases.begin()));
   }
 
-  Uml::Class firstBase = *bases.begin();
-  set<Uml::Class> firstBaseAncestors = Uml::AncestorClasses(firstBase);
-  vector<Uml::Class> baseClassesToGenerate;
-  baseClassesToGenerate.resize(inheritedBases.size() + 1);
-  set_difference(inheritedBases.begin(), inheritedBases.end(), firstBaseAncestors.begin(), firstBaseAncestors.end(), baseClassesToGenerate.begin());
-
-  vector<Uml::Class>::iterator basesIt = baseClassesToGenerate.begin();
-  for (; *basesIt; basesIt++)
+  if (bases.size())
   {
-	  // TODO: lowercase this?
-    string pck = Utils::getPackageSignature(*basesIt, m_ns_path, m_package_name);
-	pck = pck.substr(0, pck.length() - 1);
-	pck = Utils::toPackageName(pck);
-	std::stringstream ioutput; // The method declarations for the interface will be in a base interface, so we ignore them
-
-	CG<stringstream> cg(*basesIt, pck, m_output, ioutput, basesIt->name(), m_ns_path);
-	m_output << " // Methods for " << basesIt->name() << endl;
-	cg.accessChildren();
-	cg.accessAttributes();
-	cg.associations();
+	  Uml::Class firstBase = *bases.begin();
+	  set<Uml::Class> firstBaseAncestors = Uml::AncestorClasses(firstBase);
+	  vector<Uml::Class> baseClassesToGenerate;
+	  baseClassesToGenerate.resize(inheritedBases.size() + 1);
+	  set_difference(inheritedBases.begin(), inheritedBases.end(), firstBaseAncestors.begin(), firstBaseAncestors.end(), baseClassesToGenerate.begin());
+
+	  vector<Uml::Class>::iterator basesIt = baseClassesToGenerate.begin();
+	  for (; *basesIt; basesIt++)
+	  {
+		  // TODO: lowercase this?
+		string pck = Utils::getPackageSignature(*basesIt, m_ns_path, m_package_name);
+		pck = pck.substr(0, pck.length() - 1);
+		pck = Utils::toPackageName(pck);
+		std::stringstream ioutput; // The method declarations for the interface will be in a base interface, so we ignore them
+
+		CG<stringstream> cg(*basesIt, pck, m_output, ioutput, basesIt->name(), m_ns_path);
+		m_output << " // Methods for " << basesIt->name() << endl;
+		cg.accessChildren();
+		cg.accessAttributes();
+		cg.associations();
+	  }
   }
 
 


More information about the Mobies-commit mailing list