簡體   English   中英

用於記錄方法參數的想法實時模板

[英]Idea Live Template to Log Method Args

我希望能夠在 Jetbrain 的 Idea 中創建一個實時模板,它將記錄方法的 arguments。我們稱它為“larg”。 它會像這樣工作:

public void get(String one, String two) {
    larg<tab>

去創造

public void get(String one, String two) {
    log.info("get: one = " + one + " two = " + two);

我可以獲取方法名稱,但還沒有弄清楚如何引入方法 arguments。有什么想法嗎?

我遲到了 4 年,但是預定義的模板 soutp 幾乎使用 groovyscript 變量來做到這一點。

這是執行您正在尋找的功能的 groovy 腳本

groovyScript("'\"' + _1.collect { it + ' = [\" + ' + it + ' + \"]'}.join(', ') + '\"'", methodParameters())

現在已經晚了6年,但我找到了一個很好的解決方案。 (我的模板中沒有任何soutp模板) http://artfulonline.blogspot.com.au/2014/03/quick-logging-with-intellij-live.html

看起來目前無法使用實時模板。

來自Jetbrain 的論壇

There is no predefined live template function to do this for you automatically.
You can write a plugin that would provide such a function.

這是我的 groovy 腳本

groovyScript("import com.intellij.psi.*;import com.intellij.psi.util.PsiTreeUtil; def file = PsiDocumentManager.getInstance(_editor.project).getPsiFile(_editor.document); PsiMethod method = PsiTreeUtil.findElementOfClassAtOffset(file, _editor.caretModel.offset, PsiMethod.class, false); PsiParameter[] parameters = method == null ? PsiParameter.EMPTY_ARRAY : method.parameterList.parameters; return parameters.size() == 0 ? '' : '\"' + method.name + ' : ' + parameters.collect { def prefix = it.name + ' = '; def type = it.type; return type instanceof PsiArrayType ? type.componentType instanceof PsiPrimitiveType ? prefix + '\" + java.util.Arrays.toString(' + it.name + ')' : prefix + '\" + java.util.Arrays.deepToString(' + it.name + ')' : prefix + '\" + ' + it.name }.join(' + \", ')", methodParameters())

在 Android Studio in Kotlin 我用它來記錄類名、方法名和參數。
我使用我的名字作為標簽,以便在 logcat 中輕松過濾。 我主要將這些用於調試,我不會以我的名字提交這些消息。

Log.d("MYNAME", "$CLASS_NAME$:$METHOD_NAME$: $PARAMETERS$")

然后參數定義如下。

CLASS_NAME : kotlinClassName()

METHOD_NAME : kotlinFunctionName()

PARAMETERSgroovyScript("'' + _1.collect { it + ' = $' + it}.join(', ') ", functionParameters())

如果在主要活動中使用,這將是結果

 fun aFunctionWithParameters( first: Int, second: String, third: ArrayList<String>){
        Log.d("MYNAME", "MainActivity:aFunctionWithParameters: first = $first, second = $second, third = $third")
    }

我的解決方案基於 Rob 的回答,並根據我的需要進行了編輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM