摘要:原文鏈接如題,有的時候,我們會采用自動生成代碼的方式來完成一些任務,比如根據業(yè)務數(shù)據自動生成調用的供用戶下載使用這樣自動生成的代碼,如果未經格式化處理,基本上是不可讀的正好,我們常用的,快捷鍵就能自動格式化代碼那么,下面這段代碼,就是將的這
原文鏈接:https://gist.github.com/pfmiles/653c8b59e795698c867d
如題,有的時候,我們會采用自動生成java代碼的方式來完成一些任務,比如根據業(yè)務數(shù)據自動生成調用api的sdk供用戶下載、使用;
這樣自動生成的代碼,如果未經格式化處理,基本上是不可讀的;
正好,我們常用的eclipse,快捷鍵"ctrl + shift + F"就能自動格式化java代碼;
那么,下面這段代碼,就是將eclipse的這個功能模塊給“摳”出來多帶帶調用,達到格式化java代碼的目的:
package test; import java.util.Map; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.ToolFactory; import org.eclipse.jdt.core.formatter.CodeFormatter; import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.IDocument; import org.eclipse.text.edits.TextEdit; /** * 調用eclipse jdt core對生成的java源碼進行格式化 * * @author pf-miles 2014-4-16 下午2:48:29 */ public class JavaCodeFormattingUtil { /** * 嘗試對傳入的JavaSourceFile格式化,此操作若成功則將改變傳入對象的內容 */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static void tryFormat(JavaSourceFile src) { Map m = DefaultCodeFormatterConstants.getEclipseDefaultSettings(); m.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_6); m.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_6); m.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_6); m.put(DefaultCodeFormatterConstants.FORMATTER_LINE_SPLIT, "160"); m.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.SPACE); String code = null; IDocument doc = null; try { code = src.getCharContent(true).toString(); CodeFormatter codeFormatter = ToolFactory.createCodeFormatter(m); TextEdit textEdit = codeFormatter.format(CodeFormatter.K_UNKNOWN, code, 0, code.length(), 0, null); if (textEdit != null) { doc = new Document(code); textEdit.apply(doc); src.setCode(doc.get()); } } catch (Exception e) { throw new RuntimeException("Error occured while formatting code: " + src.toUri(), e); } } }
其中“code = src.getCharContent(true).toString();”這一行先不必關心"src"是個什么對象,那是我們自定義的東西,這里的重點只需要得到“code”,然后后面的操作完全是針對"code"這個string形式的java代碼而做;
其中還能對格式化屬性做一些配置, 如:
VERSION_1_6是指對應的java版本;
而DefaultCodeFormatterConstants.FORMATTER_LINE_SPLIT則指一行最多到多長就會自動換行;
DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR是說想要使用什么字符來做縮進,一般都選擇空格或tab;
這些都可以根據需求隨意調整;
當然,上述這些代碼的運行,是需要依賴eclipse的格式化模塊功能庫的,這個庫,目前沒有統(tǒng)一的依賴地址;可以根據類名上網隨便搜一個可用的maven倉庫依賴即可
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64303.html
摘要:強大的表單驗證前端掘金支持非常強大的內置表單驗證,以及。面向對象和面向過程的區(qū)別的種設計模式全解析后端掘金一設計模式的分類總體來說設計模式分為三大類創(chuàng)建型模式,共五種工廠方法模式抽象工廠模式單例模式建造者模式原型模式。 強大的 Angular 表單驗證 - 前端 - 掘金Angular 支持非常強大的內置表單驗證,maxlength、minlength、required 以及 patt...
摘要:今天我來和大家分享一下以及自動化生成工具的開發(fā)經驗。代碼生成工具接著講講代碼生成工具,對于來講,有官方的代碼生成器,還有其他的同類開源項目比如?,F(xiàn)有的代碼生成器沒有可以開箱即用的,都需要去進行不少的修改。 前言 在開發(fā)工作中,經常會遇到新產品、服務上線后,需要將其 API 編寫不同語言的 SDK。但不同語言 SDK 中都有很大一部分內容是用來進行 API 的描述,而且這部分代碼量是最大...
摘要:今天我來和大家分享一下以及自動化生成工具的開發(fā)經驗。代碼生成工具接著講講代碼生成工具,對于來講,有官方的代碼生成器,還有其他的同類開源項目比如?,F(xiàn)有的代碼生成器沒有可以開箱即用的,都需要去進行不少的修改。 前言 在開發(fā)工作中,經常會遇到新產品、服務上線后,需要將其 API 編寫不同語言的 SDK。但不同語言 SDK 中都有很大一部分內容是用來進行 API 的描述,而且這部分代碼量是最大...
摘要:今天我來和大家分享一下以及自動化生成工具的開發(fā)經驗。代碼生成工具接著講講代碼生成工具,對于來講,有官方的代碼生成器,還有其他的同類開源項目比如?,F(xiàn)有的代碼生成器沒有可以開箱即用的,都需要去進行不少的修改。 前言 在開發(fā)工作中,經常會遇到新產品、服務上線后,需要將其 API 編寫不同語言的 SDK。但不同語言 SDK 中都有很大一部分內容是用來進行 API 的描述,而且這部分代碼量是最大...
閱讀 2162·2021-11-12 10:36
閱讀 2155·2021-09-03 10:41
閱讀 2769·2021-08-19 10:57
閱讀 1239·2021-08-17 10:14
閱讀 1496·2019-08-30 15:53
閱讀 1217·2019-08-30 15:43
閱讀 979·2019-08-30 13:16
閱讀 2989·2019-08-29 16:56