2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com
.intellij
.refactoring
.removemiddleman
.usageInfo
;
18 import com
.intellij
.psi
.*;
19 import com
.intellij
.refactoring
.psi
.MutationUtils
;
20 import com
.intellij
.refactoring
.util
.FixableUsageInfo
;
21 import com
.intellij
.util
.IncorrectOperationException
;
23 public class InlineDelegatingCall
extends FixableUsageInfo
{
24 private final PsiMethodCallExpression expression
;
25 private final String myAccess
;
26 private final String delegatingName
;
27 private final int[] paramaterPermutation
;
29 public InlineDelegatingCall(PsiMethodCallExpression expression
,
30 int[] paramaterPermutation
,
32 String delegatingName
) {
34 this.expression
= expression
;
35 this.paramaterPermutation
= paramaterPermutation
;
37 this.delegatingName
= delegatingName
;
40 public void fixUsage() throws IncorrectOperationException
{
41 final StringBuffer replacementText
= new StringBuffer();
42 final PsiReferenceExpression methodExpression
= expression
.getMethodExpression();
43 final PsiElement qualifier
= methodExpression
.getQualifier();
44 if (qualifier
!= null) {
45 final String qualifierText
= qualifier
.getText();
46 replacementText
.append(qualifierText
+ '.');
48 replacementText
.append(myAccess
).append(".");
49 replacementText
.append(delegatingName
).append('(');
50 final PsiExpressionList argumentList
= expression
.getArgumentList();
51 assert argumentList
!= null;
52 final PsiExpression
[] args
= argumentList
.getExpressions();
54 for (int i
: paramaterPermutation
) {
56 replacementText
.append(", ");
59 final String argText
= args
[i
].getText();
60 replacementText
.append(argText
);
62 replacementText
.append(')');
63 final String replacementTextString
= replacementText
.toString();
64 MutationUtils
.replaceExpression(replacementTextString
, expression
);