@@ -2,15 +2,37 @@ package de.cawolf.quickmock.intention.service
22
33import com.intellij.openapi.project.Project
44import com.intellij.psi.PsiElement
5+ import com.intellij.psi.PsiFile
6+ import com.intellij.psi.PsiFileFactory
57import com.intellij.psi.tree.IElementType
6- import com.jetbrains.php.lang.psi.PhpPsiElementFactory
8+ import com.jetbrains.php.lang.PhpFileType
79import com.jetbrains.php.lang.psi.elements.Parameter
10+ import com.jetbrains.php.lang.psi.visitors.PhpElementVisitor
811
912class AddArguments {
1013 fun invoke (psiElementAtCursor : PsiElement , parameter : MutableList <Parameter >, project : Project ) {
1114 val parameterListType = IElementType .enumerate { it -> it.toString() == " Parameter list" }.first()
12- val joinedParameterNames = parameter.joinToString { it -> " \$ this->" + it.name }
13- val newParameterList = PhpPsiElementFactory .createFromText (project, parameterListType, " f($joinedParameterNames );" )
15+ val joinedParameterNames = parameter.joinToString { it -> " \$ this->" + it.name + " ->reveal() " }
16+ val newParameterList = createFirstFromText (project, parameterListType, " f($joinedParameterNames );" )
1417 psiElementAtCursor.prevSibling.replace(newParameterList)
1518 }
19+
20+ private fun createFirstFromText (p : Project , elementType : IElementType , text : String ): PsiElement {
21+ var ret = arrayOf<PsiElement >()
22+ createDummyFile(p, text).accept(object : PhpElementVisitor () {
23+ override fun visitElement (element : PsiElement ? ) {
24+ val node = element!! .node
25+ if (node != null && node.elementType == = elementType) {
26+ ret + = element
27+ }
28+
29+ element.acceptChildren(this )
30+ }
31+ })
32+ return ret[0 ]
33+ }
34+
35+ private fun createDummyFile (p : Project , fileText : String ): PsiFile =
36+ PsiFileFactory .getInstance(p).createFileFromText(" DUMMY__." + PhpFileType .INSTANCE .defaultExtension, PhpFileType .INSTANCE , " <?php\n $fileText " , System .currentTimeMillis(), false )
37+
1638}
0 commit comments