ÉîÈëÃ÷È·JavaParser£ºJava´úÂëÆÊÎöµÄ¸ïÃüÕß
ÔÚÏÖ´úÈí¼þ¿ª·¢ÖУ¬´úÂëÖÊÁ¿ÓëЧÂÊÒѳÉΪȨºâÒ»¿î×ÓÄ¿ÀֳɵÄÖ÷Òª±ê³ß¡£Java×÷ΪÌìÏÂÉÏ×îÊ¢Ðеıà³ÌÓïÑÔÖ®Ò»£¬Åãͬ×ÅÖØ´óµÄ´úÂë¿â£¬Ò²´øÀ´ÁËά»¤ÓëÓÅ»¯µÄÖØ´óÌôÕ½¡£¹Å°åµÄÊÖ¶¯Éó²éºÍ¾²Ì¬ÆÊÎö¹¤¾ßËäÈ»ÄÜÌṩһ¶¨×ÊÖú£¬µ«ÔÚÃæÁÙÖØ´óµÄ´úÂë½á¹¹¡¢¶à±äµÄÐèÇóʱ£¬¾³£Á¦ÓÐδ´þ¡£
´Ëʱ£¬JavaParserµÄ·ºÆð£¬ËƺõΪJava¿ª·¢ÕßµãÁÁÁËһյеĵÆËþ£¬¿ªÆôÁË´úÂëÆÊÎöÓë×Ô¶¯»¯Öع¹µÄÐÂʱ´ú¡£
ʲôÊÇJavaParser£¿JavaParserÊÇÒ»¸ö¿ªÔ´µÄJava¿â£¬Äܹ»½«JavaÔ´´úÂëÆÊÎöΪÁýͳÓï·¨Ê÷£¨AST£©£¬²¢ÉÁ¿ª·¢Õß¿ÉÒÔ¶ÔÕâЩAST¾ÙÐÐÉî¶È²Ù×÷¡£Õâ²»µ«Òâζ×ÅÄã¿ÉÒÔÉîÈëÃ÷È·´úÂëµÄ½á¹¹£¬»¹¿ÉÒÔʵÏÖ×Ô¶¯»¯µÄ´úÂëˢС¢ÆÊÎöºÍÖØ¹¹¡£²î±ðÓڹŰåµÄÕýÔòÆ¥Åä»òÕß¼òÆÓµÄÎı¾²Ù×÷£¬JavaParserÒԽṹ»¯µÄ·½·¨´¦Öóͷ£´úÂ룬ʹµÃ¶ÔÖØ´ó´úÂëµÄ²Ù×÷±äµÃÇáËÉÓä¿ì¡£
ΪʲôѡÔñJavaParser£¿JavaParserµÄ×î´óÓÅÊÆÔÚÓÚÆäǿʢµÄÆÊÎöºÍ²Ù×÷ÄÜÁ¦¡£ËüÖ§³ÖÏÕЩËùÓÐJavaÓï·¨ÌØÕ÷£¬´Ó¼òÆÓµÄ±äÁ¿ÉùÃ÷µ½ÖØ´óµÄ·ºÐÍ¡¢×¢½â¡¢Lambda±í´ïʽµÈ£¬¶¼ÄÜ׼ȷʶ±ð¡£Ëü»¹ÌṩÁ˸»ºñµÄAPI£¬ÈÃÄã¿ÉÒÔÏñ²Ù×÷Ê÷×´½á¹¹Ò»Ñù£¬ËæÒâÔöɾ¸Ä²é´úÂëÔªËØ¡£
ÀýÈ磬µ±ÄãÐèÒª¶ÔÏîÄ¿ÖеÄËùÓÐÒªÁì¾ÙÐÐÍ³Ò»ÖØÃüÃû£¬»òÕßÔÚ´úÂëÖÐ×Ô¶¯²åÈëÐÔÄÜ¼à¿Øµã£¬JavaParser¶¼ÄܰïÄãÇáËÉʵÏÖ¡£
ÏÖʵӦÓó¡¾°¸»ºñ¶àÑùÔÚÏÖʵ¿ª·¢ÖУ¬JavaParserµÄÓ¦Óó¡¾°º¸ÇÁ˾²Ì¬´úÂëÆÊÎö¡¢×Ô¶¯»¯Öع¹¡¢´úÂëǨáã¡¢ÎĵµÌìÉú¡¢µ¥Î»²âÊÔÌìÉúµÈ¶à¸ö·½Ãæ¡£ºÃ±È£¬Ðí¶à¹«Ë¾»áÓÃJavaParser¿ª·¢¹¤¾ß×Ô¶¯¼ì²â´úÂëÖеÄDZÔÚΣº¦ºÍ·×ÆçÖÂÖ®´¦£¬´Ó¶øÌáǰԤ¾¯£¬×èÖ¹ºóÆÚ·ºÆðÄÑÒÔά»¤µÄbug¡£
ʹÓÃJavaParser¾ÙÐдúÂëÖØ¹¹£¬Äܹ»´ó´ó½ÚÔ¼È˹¤ºÄʱ£¬Ìá¸ß´úÂëÖÊÁ¿ºÍÒ»ÖÂÐÔ¡£ÀýÈ磬ΪÁËÓ¦¶ÔJava°æ±¾Éý¼¶´øÀ´µÄAPI±ä»»£¬¿ÉÒÔÅúÁ¿Ð޸ĶÔÓ¦µÄÒªÁìŲÓ㬴Ӷø×èÖ¹ÖØ¸´·±ËöµÄÊÖ¶¯Ð޸ġ£
ʵս°¸Àý£ºÓÃJavaParserʵÏÖ¼òÆÓµÄ´úÂë±ä»»¼ÙÉèÄãÊÖÍ·ÓÐÒ»¸öÏîÄ¿£¬ÐèÒªÅúÁ¿¸øËùÓеÄpublicÒªÁìÌí¼Ó×¢ÊÍ˵Ã÷£¬¹Å°åÊÖ¶ÎÐèÒªÖð¸ö·¿ªÎļþ£¬ÊÖ¶¯Ìí¼Ó£¬ÎÞÒÉÊÇ·±ËöÇÒÈÝÒ×ÍÉ»¯¡£½èÖúJavaParser£¬Ö»Ð輸ÐдúÂ룬¾ÍÄÜʵÏÖÅúÁ¿»¯×Ô¶¯´¦Öóͷ£¡£
µÚÒ»²½£¬¼ÓÔØÔ´´úÂëÎļþ£¬ÆÊÎö³ÉAST£»µÚ¶þ²½£¬±éÀúËùÓеÄÀàºÍÒªÁì½Úµã£¬ÕÒµ½ÇкÏÌõ¼þµÄÒªÁ죻µÚÈý²½£¬ÎªÃ¿¸öÄ¿µÄÒªÁì²åÈë×¢ÊÍ»òÆäËûÐ޸컽«Ð޸ĺóµÄAST·´Ð´³ÉÔ´Â룬ÁýÕÖÔÎļþ»òÌìÉúÐÂÎļþ¡£
ÕâÖ»ÊÇJavaParserÓ¦Óõıùɽһ½Ç¡£ËüµÄǿʢģ¿é»¯Éè¼ÆºÍ¸»ºñµÄAPI£¬ÉÁ¿ª·¢Õß¿ÉÒÔÆ¾Ö¤ÏêϸÐèÇó¹¹½¨¸öÐÔ»¯µÄ´úÂëÆÊÎöºÍ±ä»»¹¤¾ß¡£
δÀ´Ç÷ÊÆ£ºJavaParserµÄÒ»Á¬ÑݽøÓ뿪ԴÉçÇøµÄʵÁ¦Ëæ×ÅJavaÓïÑÔÐÂÌØÕ÷µÄÒ»Ö±ÍÆ³ö£¬JavaParserÒ²ÔÚÒ»Ö±¸üУ¬ÔöÇ¿¶ÔÐÂÓï·¨µÄÖ§³Ö£¬²¢Öð²½ÍêÉÆÆäÐÔÄܺÍÒ×ÓÃÐÔ¡£´ÓСÎÒ˽¼Ò¿ª·¢Õßµ½ÆóÒµÍŶӣ¬Ô½À´Ô½¶àµÄÏîÄ¿×îÏÈÒýÈëJavaParser£¬Íƶ¯ÆäÉú̬²ýÊ¢¡£
¿ªÔ´ÉçÇø»îÔ¾£¬Öڶ࿪·¢ÕßТ˳²å¼þ¡¢Ê¾ÀýºÍÍêÉÆÎĵµ£¬ÎªJavaParserµÄδÀ´ÌṩÁ˼áʵµÄ»ù´¡¡£
×ܵÄÀ´¿´£¬JavaParser²»µ«ÊÇÒ»¿îÊÖÒÕ¹¤¾ß£¬¸üÊÇÒ»ÖÖÍ·ÄÔ£ºÓýṹ»¯¡¢×Ô¶¯»¯µÄ·½·¨£¬Ã÷È·ºÍÓÅ»¯¿·¢k8¹ú¼Ê´úÂë¡£¹ØÓÚ×·Çó¸ßЧ¡¢Çå½à´úÂëµÄJava¿ª·¢Õß¶øÑÔ£¬Ëü¾ø¶ÔÖµµÃÉîÈë̽Ë÷ºÍÓ¦Óá£
JavaParserÔÚÏÖʵ¿ª·¢ÖеÄÉî¶Èʵ¼ùÓëδÀ´Õ¹Íû
ÉÏÒ»²¿·ÖÎÒÃÇÏÈÈÝÁËJavaParserµÄ»ù´¡ÔÀí¡¢½¹µãÓÅÊÆÓëÓ¦Óó¡¾°µÄÁÉÀ«¿ÉÄÜ¡£ÔÚÕâÒ»²¿·Ö£¬ÎÒÃǽ«ÉîÈë̽ÌÖJavaParserµÄʵսӦÓü¼ÇÉ£¬Á¬ÏµÏêϸ°¸Àý£¬°ïÄã¸üºÃµØÕÆÎÕÕâ°ÑÀûÆ÷£¬ÈÃÄãµÄ±à³Ì֮·Խ·¢Ë³³©¡£²¢ÇÒ£¬»¹»áÕ¹ÍûJavaParserδÀ´µÄÉú³¤Æ«Ïò£¬ÈÃÄãǰհÊÖÒÕÇ÷ÊÆ£¬Ìáǰ½á¹¹¡£
ÆÊÎöÓë¹¹½¨ASTÃ÷È·Ô´ÂëÖеÄÓï·¨Ê÷ÊÇʹÓÃJavaParserµÄ»ù´¡¡£Í¨¹ýJavaParser.parse()ÒªÁì¿ÉÒÔ½«Ô´ÂëÆÊÎö³ÉCompilationUnit¹¤¾ß£¬ÕâÊÇËùÓвÙ×÷µÄÆðµã¡£ÕÆÎÕÕâ¸ö°ì·¨ºó£¬Äã¾Í¿ÉÒÔÆ¾Ö¤ÐèÇó¹ýÂË¡¢Ð޸ĺÍÐÂÔö´úÂëÔªËØ¡£
½Úµã±éÀúÓë²Ù×÷ʹÓÃJavaParserµÄVisitorģʽ£¬¿ÉÒÔÇáËɱéÀúASTÖеÄËùÓнڵ㡣ͨ¹ý¼ÌÐøVoidVisitorAdapter»òGenericVisitorAdapter£¬¿ÉÒÔ½ç˵×Ô½ç˵µÄ»á¼ûÂß¼¡£ÕÛÏß±éÀúµÄ»ù´¡ÊÇÃ÷È·AST½á¹¹ÖеÄÀà¡¢ÒªÁì¡¢±äÁ¿µÈ½Úµã£¬ÎÞаʹÓÃÕâЩ½Ó¿Ú£¬µÖ´ï¾«×¼¿ØÖƵÄЧ¹û¡£
´úÂëÐÞ¸ÄÓ뷴дÐÞ¸ÄASTºó£¬¿ÉÒÔʹÓÃModifierVisitorʵÏÖÁ´Ê½²Ù×÷£¬È·±£ÔÚÒ»´Î±éÀúÖÐÍê³É¶àÏî±ä»»¡£Íê³ÉÐ޸ĺó£¬Å²ÓÃtoString()»òдÈëÎļþ£¬¾Í¿ÉÒÔ»ñµÃ¸üкóµÄÔ´Âë¡£
×Ô¶¯Ìí¼Ó×¢ÊÍ£º¹ØÓÚ´óÐÍÒÅÁôÏîÄ¿£¬¿ª·¢Õß¾³£Ïë¿ìËÙÌí¼ÓÒªÁì˵Ã÷¡£JavaParser¿ÉÒÔ×Ô¶¯Ê¶±ðËùÓй«¹²ÒªÁ죬ΪËüÃÇÅúÁ¿²åÈë×Ô½ç˵עÊÍ£¬ïÔÌÈ˹¤¼ç¸º¡£
APIǨá㣺ÏîÄ¿Éý¼¶Ä³¸öÒÀÀµºó£¬APIŲÓ÷½·¨¿ÉÄܱ¬·¢×ª±ä¡£ÓÃJavaParserɨÃèÌØ¶¨µÄŲÓÃģʽ£¬×Ô¶¯ÐÞ¸ÄΪеÄAPIŲÓã¬×èÖ¹³õ¼¶¹ýʧ¡£
´úÂë¹æ·¶¼ì²â£ºÁ¬ÏµAST£¬¿ª·¢¶¨ÖÆ»¯µÄ´úÂëÆø¸Å¼ì²â¹¤¾ß¡£ºÃ±È¼ì²âÊÇ·ñÿ¸öÀà¶¼½ç˵ÁËJavaDoc£¬ÊÇ·ñ±£´æÎ´Ê¹ÓõıäÁ¿µÈ£¬´ÓȪԴÉÏÌáÉý´úÂëÖÊÁ¿¡£
ÐÔÄÜÓÅ»¯£ºÆÊÎö´úÂëÖеĺÄʱµã»òÖØ¸´Å²Ó㬽«ÐÔÄÜÆ¿¾±´úÂëÓñê¼Ç»òÓÅ»¯½¨Òé×Ô¶¯²åÈ룬×ÊÖú¿ª·¢ÍŶӾÙÐÐÐÔÄܵ÷ÓÅ¡£
¹¹½¨¸ßЧµÄJavaParser¿ª·¢Á÷³ÌΪÁË×î´óÏÞ¶ÈʩչJavaParserµÄDZÁ¦£¬¿ÉÒÔ¹¹½¨Ò»Ì×ÍêÕûµÄ¿ª·¢Á÷³Ì£º
Á¬ÏµIDE²å¼þ»òÏÂÁîÐй¤¾ß£¬ÅúÁ¿´¦Öóͷ£Ô´Â룻×Ô¶¯»¯¾ç±¾¼¯³Éµ½CI/CD¹ÜµÀÖУ¬È·±£Ã¿´ÎÌá½»¶¼¾Óɾ²Ì¬ÆÊÎö£»Êä³öÏêϸµÄÆÊÎö±¨¸æ»òÖØ¹¹½¨Ò飬¸¨Öú¾öÒ飻ʹÓÃJavaParserÓëÆäËû¹¤¾ßÁ¬Ïµ£¬ºÃ±ÈÁ¬ÏµSpotBugs¡¢CheckstyleµÈ£¬×é³É¸üǿʢµÄ¾²Ì¬ÆÊÎöÉú̬¡£
δÀ´Õ¹Íû£ºJavaParserµÄÒ»Á¬ÑݽøÓëÁ¢ÒìδÀ´£¬JavaParser½«ÔÚÖ§³Ö¸üÖØ´óµÄÓï·¨¡¢ÐÂÌØÕ÷·½ÃæÒ»Ö±Í»ÆÆ¡£ÀýÈ磬ÅãͬJavaÐÂ°æ±¾ÍÆ³ö£¬JavaParserÐèÒª¿ìËÙÊÊÅ䣬֧³ÖLambda¡¢PatternMatchingµÈÐÂÓï·¨¡£ÐÔÄÜÓÅ»¯Ò²»áÒ»Á¬¾ÙÐУ¬È·±£´ó¹æÄ£ÏîÄ¿µÄ¸ßЧÔËÐС£
¿ªÔ´ÉçÇøµÄʵÁ¦ÊÇÍÆ¶¯ÆäÉú³¤µÄÒªº¦¡£¼ÓÈëJavaParserµÄÉú̬Ȧ£¬²»µ«¿ÉÒÔ¼ÓÈëÔ´ÂëТ˳£¬»¹¿ÉÒÔ»ñµÃ´ó×ÚÊÊÓòå¼þºÍÍØÕ¹°ü¡£ÕâЩ¶¼½«¼«´óÌáÉý¿ª·¢ÕßµÄÊÂÇéЧÂÊ£¬ÈÃJavaParser²»µ«½öÊÇÒ»¸ö¹¤¾ß£¬¸ü³ÉΪÖÇÄÜ»¯´úÂëÑÝÁ·¡¢×Ô¶¯ÐÞ¸´µÄ½¹µãÒýÇæ¡£
ÈôÊÇÄãÊÇÈȰ®ÊÖÒյĿª·¢Õß¡¢¼Ü¹¹Ê¦£¬ÉõÖÁÊÇÍŶÓÖÎÀíÕߣ¬Éî¶ÈÊìϤJavaParser¡¢ÕÆÎÕÆä¸ß¼¶Ó¦Ó㬽«¼«´óµØÔöÇ¿ÄãµÄÏîÄ¿¾ºÕùÁ¦¡£Î´À´ÒÑÀ´£¬´úÂëÖÇÄÜ»¯ÖØËÜ£¬JavaParserÕýÕ¾ÔÚ·ç¿ÚÀ˼⣬ÆÚ´ýÄãµÄ¼ÓÈë¡£
×ܶøÑÔÖ®£¬JavaParser²»µ«ÊÇÒ»¸ö¸Ä±ä¿ª·¢Ä£Ê½µÄÀûÆ÷£¬¸üÊÇÒ»ÖÖǰհÐÔ£¬Õ¹Íû×ÅJavaÉú̬µÄÁ¢ÒìÓëÀå¸ï¡£ÈÃÎÒÃÇÅäºÏÆÚ´ý£¬JavaParserÔÚһֱǰ½øµÄõè¾¶ÉÏ£¬´ø¸øÎÒÃǸü¶à¾ªÏ²Óë¿ÉÄÜ¡£