]> OCCT Git - occt-wok.git/commitdiff
No comments
authorcas <cas@opencascade.com>
Mon, 15 Nov 1999 18:00:27 +0000 (18:00 +0000)
committercas <cas@opencascade.com>
Mon, 15 Nov 1999 18:00:27 +0000 (18:00 +0000)
src/CPPJini/CPPJini.cxx
src/CPPJini/CPPJini.hxx
src/CPPJini/CPPJini_MPV.cxx
src/CPPJini/CPPJini_Template.edl
src/CPPJini/CPPJini_Transient.cxx

index 3ba67f4343e900b99cdaecd143b372995f1e0abe..08ba79159e5e74652ab70a323074f19bf14252cd 100755 (executable)
@@ -30,6 +30,155 @@ Handle(MS_HSequenceOfExternMet) SeqOfExternMet = new MS_HSequenceOfExternMet;
 Handle(TCollection_HAsciiString) CPPJini_InterfaceName;
 Handle(TCollection_HAsciiString) CPPJini_ErrorArgument = new TCollection_HAsciiString("%error%");
 
+Handle( TCollection_HAsciiString ) CPPJini_DotReplace ( char*, char = '_' );
+
+class CPPJini_ClientInfo {
+
+ public:
+
+  CPPJini_ClientInfo (
+   const Handle( MS_MetaSchema            )&,
+   const Handle( TCollection_HAsciiString )&
+  );
+ ~CPPJini_ClientInfo () {};
+
+  int HasComplete (  const Handle( TCollection_HAsciiString )& name  ) const {
+   return myMaps[ 0 ].Contains ( name );
+  }
+
+  int HasIncomplete (  const Handle( TCollection_HAsciiString )& name  ) const {
+   return myMaps[ 1 ].Contains ( name );
+  }
+
+  int HasSemicomplete (  const Handle( TCollection_HAsciiString )& name  ) const {
+   return myMaps[ 2 ].Contains ( name );
+  }
+
+  const Handle( TCollection_HAsciiString )& Name () const { return myName; }
+
+ private:
+
+  Handle( TCollection_HAsciiString ) myName;
+  WOKTools_MapOfHAsciiString         myMaps[ 3 ];  
+};
+
+CPPJini_ClientInfo :: CPPJini_ClientInfo (
+                       const Handle( MS_MetaSchema            )& ms,
+                       const Handle( TCollection_HAsciiString )& name
+                      ) {
+
+ Handle( MS_Client ) clt = ms -> GetClient ( name );
+
+ if (  clt.IsNull ()  )
+
+  ErrorMsg << "CPPJini" << "Client " << name << " was not found" << endm;
+
+ else {
+
+  Handle( MS_HSequenceOfExternMet ) xtern = new MS_HSequenceOfExternMet ();
+  Handle( MS_HSequenceOfMemberMet ) membr = new MS_HSequenceOfMemberMet ();
+
+  clt -> ComputeTypes (
+          xtern, membr, myMaps[ 0 ], myMaps[ 1 ], myMaps[ 2 ]
+         );
+
+  InfoMsg << "CPPJini" << "Using client: " << name << endm;
+
+ }  // end else
+
+ myName = new TCollection_HAsciiString ( name );
+
+}  // end CPPJini_ClientInfo :: CPPJini_ClientInfo
+
+static Standard_Integer     s_Length;
+static CPPJini_ClientInfo** s_CltInfo;
+
+static Standard_Boolean CPPJini_CheckClients (
+                         const Handle( TCollection_HAsciiString )& className,
+                         Standard_Integer                          idx,
+                         Handle( TCollection_HAsciiString )&       cltName,
+                         Standard_Boolean&                         fDuplicate
+                        ) {
+
+ Standard_Boolean retVal = Standard_False;
+ Standard_Boolean fCond;
+ Standard_Integer i;
+
+ fDuplicate = Standard_False;
+
+ for ( i = 0; i < s_Length; ++i ) {
+
+  switch ( idx ) {
+
+   case 0:
+
+    fCond = s_CltInfo[ i ] -> HasComplete ( className );
+
+   break;
+
+   case 1:
+
+    fCond = s_CltInfo[ i ] -> HasIncomplete ( className );
+
+   break;
+
+   default:
+
+    fCond = s_CltInfo[ i ] -> HasSemicomplete ( className );
+
+  }  // end switch
+
+  if ( fCond ) {
+
+   if ( !retVal ) {
+
+    cltName = new TCollection_HAsciiString (  s_CltInfo[ i ] -> Name ()  );
+    retVal = Standard_True;
+
+   } else {
+
+    fDuplicate = Standard_True;
+    break;
+
+   }  // end else
+
+  }  // end if
+
+ }  // end for
+ return retVal;
+
+}  // end CPPJini_CheckClients
+
+Standard_Boolean CPPJini_HasComplete (
+                  const Handle( TCollection_HAsciiString )& className,
+                  Handle( TCollection_HAsciiString )&       cltName,
+                  Standard_Boolean&                         fDuplicate
+                 ) {
+
+ return CPPJini_CheckClients ( className, 0, cltName, fDuplicate );
+
+}  // end CPPJini_HasIncomplete
+
+Standard_Boolean CPPJini_HasIncomplete (
+                  const Handle( TCollection_HAsciiString )& className,
+                  Handle( TCollection_HAsciiString )&       cltName,
+                  Standard_Boolean&                         fDuplicate
+                 ) {
+
+ return CPPJini_CheckClients ( className, 1, cltName, fDuplicate );
+
+}  // end CPPJini_HasIncomplete
+
+Standard_Boolean CPPJini_HasSemicomplete (
+                  const Handle( TCollection_HAsciiString )& className,
+                  Handle( TCollection_HAsciiString )&       cltName,
+                  Standard_Boolean&                         fDuplicate
+                 ) {
+
+ return CPPJini_CheckClients ( className, 2, cltName, fDuplicate );
+
+}  // end CPPJini_HasIncomplete
+
 // Standard Extractor API : list the EDL files used by this program
 //
 Handle(TColStd_HSequenceOfHAsciiString) CPPJini_TemplatesUsed()
@@ -45,8 +194,10 @@ Handle(TColStd_HSequenceOfHAsciiString) CPPJini_TemplatesUsed()
 void CPPJini_Init(const Handle(MS_MetaSchema)& aMeta,
                  const Handle(TCollection_HAsciiString)& aName, 
                  const Handle(MS_HSequenceOfExternMet)& SeqOfEM,
-                 const Handle(MS_HSequenceOfMemberMet)& SeqOfMM)
-{
+                 const Handle(MS_HSequenceOfMemberMet)& SeqOfMM,
+                  const Handle(TColStd_HSequenceOfHAsciiString)& use
+                 ) {
+
   Handle(MS_Client) client;
   
   SeqOfMemberMet = SeqOfMM;
@@ -59,6 +210,25 @@ void CPPJini_Init(const Handle(MS_MetaSchema)& aMeta,
     ErrorMsg << "CPPJini" << "Init : Client " << aName << " not found..." << endm;
     Standard_NoSuchObject::Raise();
   }
+
+ Standard_Integer i;
+ Standard_Integer useLen = use -> Length ();
+
+ if ( s_Length ) {
+
+  for ( i = 0; i < s_Length; ++i ) delete s_CltInfo[ i ];
+
+  delete [] s_CltInfo;
+
+ }  // end if
+
+ s_Length  = useLen;
+ s_CltInfo = new CPPJini_ClientInfo*[ s_Length ];
+
+ for ( i = 0; i < s_Length; ++i )
+
+  s_CltInfo[ i ] = new CPPJini_ClientInfo (  aMeta, use -> Value ( i + 1 )  );
+
 }
 
 Handle(TCollection_HAsciiString)& CPPJini_TransientRootName() 
@@ -886,6 +1056,12 @@ void   CPPJini_ArgumentBuilder(const Handle(MS_MetaSchema)& aMeta,
            ArgsInCall->AssignCat("the_");                    
            ArgsInCall->AssignCat(aSeqP->Value(i)->Name());
            if (aSeqP->Value(i)->IsOut()) {
+              api -> AddVariable (
+                      "%FromInterface",
+                      CPPJini_DotReplace (
+                       CPPJini_InterfaceName -> ToCString (), '/'
+                      ) -> ToCString ()
+                     );
              api->Apply("%MetOut","TransientSetValue");
              ArgsOut->AssignCat(api->GetVariableValue("%MetOut"));
            }
@@ -1136,7 +1312,12 @@ void   CPPJini_ReturnBuilder(const Handle(MS_MetaSchema)& aMeta,
          api->AddVariable("%FromInterface","jcas");
        }
        else {
-         api->AddVariable("%FromInterface",CPPJini_InterfaceName->ToCString());
+         api -> AddVariable (
+                  "%FromInterface",
+                  CPPJini_DotReplace (
+                   CPPJini_InterfaceName -> ToCString (), '/'
+                  ) -> ToCString ()
+                 );
        }
        if (aClass->IsTransient()) {
          api->Apply("%Return","ReturnHandle");
@@ -1166,7 +1347,12 @@ void   CPPJini_ReturnBuilder(const Handle(MS_MetaSchema)& aMeta,
          api->AddVariable("%FromInterface","jcas");
        }
        else {
-         api->AddVariable("%FromInterface",CPPJini_InterfaceName->ToCString());
+         api -> AddVariable (
+                  "%FromInterface",
+                  CPPJini_DotReplace (
+                   CPPJini_InterfaceName -> ToCString (), '/'
+                  ) -> ToCString ()
+                 );
        }
        if (m->IsRefReturn()) {
          api->Apply("%Return","ReturnValueRef");
@@ -1253,7 +1439,10 @@ void CPPJini_MethodBuilder(const Handle(MS_MetaSchema)& aMeta,
   
   
   api->AddVariable("%ClassName",className->ToCString());
-  api->AddVariable("%MethodName",methodName->ToCString());
+  api -> AddVariable (
+          "%MethodName",
+          CPPJini_DotReplace (  methodName -> ToCString ()  ) -> ToCString ()
+         );;
   
   if ((m->IsKind(STANDARD_TYPE(MS_InstMet))) ||
       (m->IsKind(STANDARD_TYPE(MS_Construc)))) {
@@ -1316,7 +1505,10 @@ void CPPJini_MethodBuilder(const Handle(MS_MetaSchema)& aMeta,
 
   
   
-  api->AddVariable("%MethodName",metname->ToCString());
+  api -> AddVariable (
+          "%MethodName",
+          CPPJini_DotReplace (  metname -> ToCString ()  ) -> ToCString ()
+         );
   api->AddVariable("%Return",RetInDecl->ToCString());
 
   api->AddVariable("%ClassName",className->ToCString());
@@ -1372,7 +1564,7 @@ void CPPJini_TypeExtract(const Handle(MS_MetaSchema)& aMeta,
              const Standard_CString Mode)
 {
 
-  InfoMsg << "CPPJini" << "Extract " << aName->ToCString() << endm;
+//  InfoMsg << "CPPJini" << "Extract " << aName->ToCString() << endm;
   Handle(MS_Type)              srcType;
   Handle(MS_Package)           srcPackage;
 
@@ -1548,6 +1740,43 @@ void CPPJini_Extract(const Handle(MS_MetaSchema)& aMeta,
       Standard_NoSuchObject::Raise();
     }
     
+    Standard_Boolean                   fDuplicate;
+    Handle( TCollection_HAsciiString ) cltName;
+
+    if ( theMode == CPPJini_INCOMPLETE ) {
+
+     if (  CPPJini_HasIncomplete ( aTypeName, cltName, fDuplicate )  ) {
+
+      InfoMsg << "CPPJini" << "Skipping " << aTypeName
+              << " (already defined in " << cltName << ")" << endm;
+
+      if ( fDuplicate )
+
+       WarningMsg << "CPPJini" << cltName << " defined in more than one client declared in 'usues' statement"
+                  << endm;
+
+      return;
+
+     }  // end if
+
+    } else if ( theMode == CPPJini_COMPLETE ) {
+
+     if (  CPPJini_HasComplete ( aTypeName, cltName, fDuplicate )  ) {
+
+      InfoMsg << "CPPJini" << "Skipping " << aTypeName
+              << " (already defined in " << cltName << ")" << endm;
+
+      if ( fDuplicate )
+
+       WarningMsg << "CPPJini" << cltName << " defined in more than one client declared in 'uses' statement"
+                  << endm;
+
+      return;
+
+     }  // end if
+
+    }  // end if
+
     CPPJini_TypeExtract(aMeta,aTypeName,edlsfullpath,outdir,outfile,theMode,Mode);
   }
   else {
@@ -1556,3 +1785,13 @@ void CPPJini_Extract(const Handle(MS_MetaSchema)& aMeta,
   }
 }
 
+Handle( TCollection_HAsciiString ) CPPJini_DotReplace ( char* str, char c ) {
+
+ Handle( TCollection_HAsciiString ) retVal = new TCollection_HAsciiString ( str );
+
+ retVal -> ChangeAll ( '.', c );
+
+ return retVal;
+
+}  // end CPPJini_DotReplace
+
index d3b1e4f42825a971215844325a574bfc107479dd..02f76cfc0fb51264bd43e76741df2a644143d906 100755 (executable)
@@ -47,8 +47,10 @@ extern "C" {
        void Standard_EXPORT CPPJini_Init(const Handle(MS_MetaSchema)&,
                            const Handle(TCollection_HAsciiString)&, 
                            const Handle(MS_HSequenceOfExternMet)&,
-                           const Handle(MS_HSequenceOfMemberMet)&);
-       
+                           const Handle(MS_HSequenceOfMemberMet)&,
+                            const Handle( TColStd_HSequenceOfHAsciiString )&
+                           );
+
        void Standard_EXPORT CPPJini_Extract(const Handle(MS_MetaSchema)& ams,
                               const Handle(TCollection_HAsciiString)& atypename,
                               const Handle(TColStd_HSequenceOfHAsciiString)& edlsfullpath,
index 19a371a0297bfcbaa1baa52c5619397fb7b1924b..8af4113ade24a5e4e41e9a08da6967598793fedc 100755 (executable)
@@ -1,3 +1,4 @@
+#define CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR 0
 // CLE
 //    
 // 10/1995
 
 #include <WOKTools_Messages.hxx>
 
+extern Standard_Boolean CPPJini_HasComplete (
+                         const Handle( TCollection_HAsciiString )&,
+                         Handle( TCollection_HAsciiString       )&,
+                         Standard_Boolean&
+                        );
+
+extern Standard_Boolean CPPJini_HasIncomplete (
+                         const Handle( TCollection_HAsciiString )&,
+                         Handle( TCollection_HAsciiString       )&,
+                         Standard_Boolean&
+                        );
+
+extern Standard_Boolean CPPJini_HasSemicomplete (
+                         const Handle( TCollection_HAsciiString )&,
+                         Handle( TCollection_HAsciiString       )&,
+                         Standard_Boolean&
+                        );
+
 Handle(TCollection_HAsciiString)& CPPJini_MPVRootName();
 
+extern Handle( TCollection_HAsciiString ) CPPJini_DotReplace ( char*, char = '_' );
+
 void CPPJini_MethodUsedTypes(const Handle(MS_MetaSchema)& aMeta,
                               const Handle(MS_Method)& aMethod,
                               const Handle(TColStd_HSequenceOfHAsciiString)& List,
@@ -145,9 +166,9 @@ void CPPJini_MPVClass(const Handle(MS_MetaSchema)& aMeta,
       methods = theClass->GetMethods();
     }
     
-
+#if CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR
     Standard_Boolean mustCreateEmptyConst = !CPPJini_HaveEmptyConstructor(aMeta,theClass->FullName(),methods);
-
+#endif  // CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR
 
     if (MustBeComplete != CPPJini_INCOMPLETE) {
       CPPJini_DataMapOfAsciiStringInteger mapnames;
@@ -179,12 +200,12 @@ void CPPJini_MPVClass(const Handle(MS_MetaSchema)& aMeta,
     }
 
     api->AddVariable("%Class",theClass->FullName()->ToCString());
-
+#if CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR
     if (mustCreateEmptyConst) {
       api->Apply(VJMethod,"EmptyConstructorHeader");
       publics->AssignCat(api->GetVariableValue(VJMethod));
     }
-
+#endif  // CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR
     
     Handle(TCollection_HAsciiString) namefinal = new TCollection_HAsciiString("Java_");
     namefinal->AssignCat(CPPJini_InterfaceName);
@@ -192,7 +213,10 @@ void CPPJini_MPVClass(const Handle(MS_MetaSchema)& aMeta,
     namefinal->AssignCat(CPPJini_UnderScoreReplace(theClass->FullName()));
     namefinal->AssignCat("_FinalizeValue");
 
-    api->AddVariable("%MethodName",namefinal->ToCString());
+    api -> AddVariable (
+            "%MethodName",
+            CPPJini_DotReplace (  namefinal -> ToCString ()  ) -> ToCString ()
+           );
 
     api->Apply(VJMethod,"FinalizeForValue");
     Supplement->Append(api->GetVariableValue(VJMethod));
@@ -210,7 +234,35 @@ void CPPJini_MPVClass(const Handle(MS_MetaSchema)& aMeta,
            api->Apply("%Includes","IncludeJCas");
          }
          else {
-           api->Apply("%Includes","Include");
+
+            Handle( TCollection_HAsciiString ) aClt;
+            Standard_Boolean                   fDup;
+            Standard_Boolean                   fPush = Standard_False;
+
+            if (  CPPJini_HasComplete (
+                   List -> Value ( i ), aClt, fDup
+                  ) ||
+                  CPPJini_HasIncomplete (
+                   List -> Value ( i ), aClt, fDup
+                  ) ||
+                  CPPJini_HasSemicomplete (
+                   List -> Value ( i ), aClt, fDup
+                  )
+            ) {
+
+             fPush = Standard_True;
+             api -> AddVariable (  "%Interface", aClt -> ToCString ()  );
+
+            }  // end if
+
+             api->Apply("%Includes","Include");
+
+            if ( fPush )
+
+             api -> AddVariable (
+                     "%Interface", CPPJini_InterfaceName -> ToCString ()
+                    );
+
          }
          publics->AssignCat(api->GetVariableValue("%Includes"));
        }
@@ -224,7 +276,34 @@ void CPPJini_MPVClass(const Handle(MS_MetaSchema)& aMeta,
            api->Apply("%Includes","ShortDecJCas");
          }
          else {
-           api->Apply("%Includes","ShortDec");
+            Handle( TCollection_HAsciiString ) aClt;
+            Standard_Boolean                   fDup;
+            Standard_Boolean                   fPush = Standard_False;
+
+            if (  CPPJini_HasComplete (
+                   List -> Value ( i ), aClt, fDup
+                  ) ||
+                  CPPJini_HasIncomplete (
+                   List -> Value ( i ), aClt, fDup
+                  ) ||
+                  CPPJini_HasSemicomplete (
+                   List -> Value ( i ), aClt, fDup
+                  )
+            ) {
+
+             fPush = Standard_True;
+             api -> AddVariable (  "%Interface", aClt -> ToCString ()  );
+
+            }  // end if
+
+             api->Apply("%Includes","ShortDec");
+
+            if ( fPush )
+
+             api -> AddVariable (
+                     "%Interface", CPPJini_InterfaceName -> ToCString ()
+                    );
+
          }
          publics->AssignCat(api->GetVariableValue("%Includes"));
        }
@@ -235,12 +314,34 @@ void CPPJini_MPVClass(const Handle(MS_MetaSchema)& aMeta,
 
     // we create the inheritance
     //
-    if (theClass->GetInheritsNames()->Length() == 0) {
-      api->AddVariable("%Inherits",CPPJini_MPVRootName()->ToCString());
-    }
-    else {
-      api->AddVariable("%Inherits",CPPJini_GetFullJavaType(theClass->GetInheritsNames()->Value(1))->ToCString());
-    }
+    Handle( TCollection_HAsciiString ) aClt;
+    Standard_Boolean                   fDup;
+
+    if (  CPPJini_HasComplete (
+           theClass -> FullName (), aClt, fDup
+          ) ||
+          CPPJini_HasIncomplete (
+           theClass -> FullName (), aClt, fDup
+          ) ||
+          CPPJini_HasSemicomplete (
+           theClass -> FullName (), aClt, fDup
+          )
+    ) {
+
+     aClt -> AssignCat ( "." );
+     aClt -> AssignCat (  theClass -> FullName ()  );
+     api -> AddVariable (  "%Inherits", aClt -> ToCString ()  );
+
+    } else {
+
+     if (theClass->GetInheritsNames()->Length() == 0) {
+       api->AddVariable("%Inherits",CPPJini_MPVRootName()->ToCString());
+     }
+     else {
+       api->AddVariable("%Inherits",CPPJini_GetFullJavaType(theClass->GetInheritsNames()->Value(1))->ToCString());
+     }
+
+    }  // end else
 
     api->AddVariable("%Class",theClass->FullName()->ToCString());
 
index 5af2e8ccfce01332d7c401aede79aec21ad9c362..65499233cb2db6276a3df6febef865da0cf1094e 100755 (executable)
@@ -411,11 +411,10 @@ $%ClassName* the_this = (%ClassName*) jcas_GetHandle(env,theobj);
 
 -- out argument
 
-@template TransientSetValue(%ClassName,%ArgName) is
-$Handle(%ClassName)* theprevious_%ArgName = (Handle(%ClassName)*) jcas_GetHandle(env,%ArgName);
-$if (theprevious_%ArgName) delete theprevious_%ArgName;
-$Handle(%ClassName)* thenew_%ArgName = new Handle(%ClassName);
-$(*thenew_%ArgName) = the_%ArgName;
+@template TransientSetValue(%ClassName,%ArgName,%FromInterface) is
+$if ( !%ArgName ) %ArgName = jcas_CreateObject (
+$                             env, "%FromInterface/%ClassName", %ArgName
+$                            );
 $jcas_SetHandle(env,%ArgName,thenew_%ArgName);
 @end;
 
index da7b38bcbc7a3ee4c4697c66f52641684ac5c9c7..7909053c8e14543b1dfaaacd8e0d6c1c6a364814 100755 (executable)
@@ -1,3 +1,4 @@
+#define CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR 0
 // CLE
 //    
 // 10/1995
 #include <CPPJini_DataMapOfAsciiStringInteger.hxx>
 #include <TColStd_Array1OfInteger.hxx>
 
+extern Standard_Boolean CPPJini_HasComplete (
+                         const Handle( TCollection_HAsciiString )&,
+                         Handle( TCollection_HAsciiString       )&,
+                         Standard_Boolean&
+                        );
+
+extern Standard_Boolean CPPJini_HasIncomplete (
+                         const Handle( TCollection_HAsciiString )&,
+                         Handle( TCollection_HAsciiString       )&,
+                         Standard_Boolean&
+                        );
+
+extern Standard_Boolean CPPJini_HasSemicomplete (
+                         const Handle( TCollection_HAsciiString )&,
+                         Handle( TCollection_HAsciiString       )&,
+                         Standard_Boolean&
+                        );
+
 void CPPJini_MethodUsedTypes(const Handle(MS_MetaSchema)& aMeta,
                               const Handle(MS_Method)& aMethod,
                               const Handle(TColStd_HSequenceOfHAsciiString)& List,
@@ -151,9 +170,9 @@ void CPPJini_TransientClass(const Handle(MS_MetaSchema)& aMeta,
     else if (MustBeComplete == CPPJini_COMPLETE){
       methods = theClass->GetMethods();
     }
-
+#if CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR
     Standard_Boolean mustCreateEmptyConst = !CPPJini_HaveEmptyConstructor(aMeta,theClass->FullName(),methods);
-
+#endif
     if (MustBeComplete != CPPJini_INCOMPLETE) {
       if (methods->Length() > 0)  {
        CPPJini_DataMapOfAsciiStringInteger mapnames;
@@ -185,12 +204,12 @@ void CPPJini_TransientClass(const Handle(MS_MetaSchema)& aMeta,
        }
       }
     }
-
+#if CPPJini_CREATE_EMPTY_JAVA_CONSTRUCTOR
     if (mustCreateEmptyConst) {
       api->Apply(VJMethod,"EmptyConstructorHeader");
       publics->AssignCat(api->GetVariableValue(VJMethod));
     }
-
+#endif
     api->AddVariable("%Methods",publics->ToCString());
 
     publics->Clear();
@@ -204,7 +223,33 @@ void CPPJini_TransientClass(const Handle(MS_MetaSchema)& aMeta,
            api->Apply("%Includes","IncludeJCas");
          }
          else {
-           api->Apply("%Includes","Include");
+            Handle( TCollection_HAsciiString ) aClt;
+            Standard_Boolean                   fDup;
+            Standard_Boolean                   fPush = Standard_False;
+
+            if (  CPPJini_HasComplete (
+                   List -> Value ( i ), aClt, fDup
+                  ) ||
+                  CPPJini_HasIncomplete (
+                   List -> Value ( i ), aClt, fDup
+                  ) ||
+                  CPPJini_HasSemicomplete (
+                   List -> Value ( i ), aClt, fDup
+                  )
+            ) {
+
+             fPush = Standard_True;
+             api -> AddVariable (  "%Interface", aClt -> ToCString ()  );
+
+            }  // end if
+
+             api->Apply("%Includes","Include");
+
+            if ( fPush )
+
+             api -> AddVariable (
+                     "%Interface", CPPJini_InterfaceName -> ToCString ()
+                    );
          }
          publics->AssignCat(api->GetVariableValue("%Includes"));
        }
@@ -218,7 +263,33 @@ void CPPJini_TransientClass(const Handle(MS_MetaSchema)& aMeta,
            api->Apply("%Includes","ShortDecJCas");
          }
          else {
+            Handle( TCollection_HAsciiString ) aClt;
+            Standard_Boolean                   fDup;
+            Standard_Boolean                   fPush = Standard_False;
+
+            if (  CPPJini_HasComplete (
+                   List -> Value ( i ), aClt, fDup
+                  ) ||
+                  CPPJini_HasIncomplete (
+                   List -> Value ( i ), aClt, fDup
+                  ) ||
+                  CPPJini_HasSemicomplete (
+                   List -> Value ( i ), aClt, fDup
+                  )
+            ) {
+
+             fPush = Standard_True;
+             api -> AddVariable (  "%Interface", aClt -> ToCString ()  );
+
+            }  // end if
+
            api->Apply("%Includes","ShortDec");
+
+            if ( fPush )
+
+             api -> AddVariable (
+                     "%Interface", CPPJini_InterfaceName -> ToCString ()
+                    );
          }
          publics->AssignCat(api->GetVariableValue("%Includes"));
        }
@@ -229,7 +300,27 @@ void CPPJini_TransientClass(const Handle(MS_MetaSchema)& aMeta,
 
     // we create the inheritance
     //
-    api->AddVariable("%Inherits",CPPJini_GetFullJavaType(theClass->GetInheritsNames()->Value(1))->ToCString());
+    Handle( TCollection_HAsciiString ) aClt;
+    Standard_Boolean                   fDup;
+
+    if (  CPPJini_HasComplete (
+           theClass -> GetInheritsNames ()-> Value ( 1 ), aClt, fDup
+          ) ||
+          CPPJini_HasIncomplete (
+           theClass -> GetInheritsNames ()-> Value ( 1 ), aClt, fDup
+          ) ||
+          CPPJini_HasSemicomplete (
+           theClass -> GetInheritsNames () -> Value ( 1 ), aClt, fDup
+          )
+    ) {
+
+     aClt -> AssignCat ( "." );
+     aClt -> AssignCat (  theClass -> GetInheritsNames () -> Value ( 1 )  );
+     api -> AddVariable (  "%Inherits", aClt -> ToCString ()  );
+
+   } else
+
+     api->AddVariable("%Inherits",CPPJini_GetFullJavaType(theClass->GetInheritsNames()->Value(1))->ToCString());
 
     api->AddVariable("%Class",theClass->FullName()->ToCString());