2017-04-08 31 views
0

X ++編輯器中是否有一個函數,可讓您在實現後自動提取接口?AX2012中的自動提取接口X ++代碼編輯器

同樣,Visual Studio中有這樣一個函數,它通過爲實現接口所需的所有方法提供方法存根來自動提取已實現的接口。

回答

1

不,沒有這樣的功能。

但是你可以寫一個。請參閱以下示例代碼。 並添加Action menu item\Menus\SysContextMenu

或者你可以添加方法\Classes\EditorScripts

public static void main(Args _args) 
{ 
    #macrolib.AOT 

    SysContextMenuAOT menuAot; 
    TreeNode tn; 
    DictClass dc; 
    DictMethod dm; 
    int i, j; 
    str dmName; 
    str intSrc, intParams; 

    TreeNode itnRoot, itnChild; 

    if (!SysContextMenu::startedFrom(_args)) 
    { 
     throw error(Error::wrongUseOfFunction(funcName())); 
    } 

    menuAot = _args.parmObject(); 
    tn = menuAot.getFirstNode(); 

    dc = new DictClass(className2Id(tn.AOTname())); 
    if (!dc) 
    { 
     throw error(Error::wrongUseOfFunction(funcName())); 
    } 

    for (i = 1; i <= dc.objectMethodCnt(); i++) 
    { 
     dm = dc.objectMethodObject(i); 
     dmName = dm.name(); 
     if (dm.isStatic() 
      || dm.isDelegate() 
      || dm.accessSpecifier() != AccessSpecifier::public 
      || dm.name() == identifierStr(classDeclaration) 
     ) 
     { 
      continue; 
     } 

     if (!itnRoot) 
     { 
      itnRoot = TreeNode::findNode(#ClassesPath).AOTadd("I" + dc.name()); 
      itnRoot.AOTsave(); 

      itnChild = itnRoot.AOTfirstChild(); 
      itnChild.AOTsetSource(strFmt('public interface I%1\n{\n}', dc.name())); 
     } 

     itnChild = itnRoot.AOTadd(dm.name()); 
     intParams = ''; 
     for (j = 1; j <= dm.parameterCnt(); j++) 
     { 
      if (j > 1) 
      { 
       intParams+= ', '; 
      } 
      intParams+= strFmt('%1 %2', extendedTypeId2DisplayName(dm.parameterType(j), dm.parameterId(j)), dm.parameterName(j)); 
     } 
     intSrc = strFmt('public %1 %2(%3)\n{\n}', extendedTypeId2DisplayName(dm.returnType(), dm.returnId()), dm.name(), intParams); 
     itnChild.AOTsetSource(intSrc); 
    } 

    if (itnRoot) 
    { 
     itnRoot.AOTcompile(); 
     itnRoot.AOTrestore(); 
     itnRoot.AOTnewWindow(); 
     itnRoot.AOTedit(); 
    } 
} 
+0

大,謝謝你爲榜樣! – Stef