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.
18 * created at Sep 17, 2001
21 package com
.intellij
.refactoring
.changeSignature
;
23 import com
.intellij
.openapi
.diagnostic
.Logger
;
24 import com
.intellij
.psi
.*;
25 import com
.intellij
.refactoring
.util
.CanonicalTypes
;
26 import com
.intellij
.util
.IncorrectOperationException
;
27 import org
.jetbrains
.annotations
.NonNls
;
28 import org
.jetbrains
.annotations
.Nullable
;
30 import java
.util
.ArrayList
;
31 import java
.util
.List
;
33 public class ParameterInfoImpl
implements ParameterInfo
{
34 private static final Logger LOG
= Logger
.getInstance("#com.intellij.refactoring.changeSignature.ParameterInfoImpl");
35 public final int oldParameterIndex
;
36 boolean useAnySingleVariable
;
37 private String name
= "";
38 private CanonicalTypes
.Type myType
;
40 String defaultValue
= "";
42 public ParameterInfoImpl(int oldParameterIndex
) {
43 this.oldParameterIndex
= oldParameterIndex
;
46 public ParameterInfoImpl(int oldParameterIndex
, @NonNls String name
, PsiType aType
) {
48 this.oldParameterIndex
= oldParameterIndex
;
52 public ParameterInfoImpl(int oldParameterIndex
, @NonNls String name
, PsiType aType
, @NonNls String defaultValue
) {
53 this(oldParameterIndex
, name
, aType
, defaultValue
, false);
56 public ParameterInfoImpl(int oldParameterIndex
, @NonNls String name
, PsiType aType
, @NonNls String defaultValue
, boolean useAnyVariable
) {
57 this(oldParameterIndex
, name
, aType
);
58 this.defaultValue
= defaultValue
;
59 useAnySingleVariable
= useAnyVariable
;
62 public int getOldIndex() {
63 return oldParameterIndex
;
66 public void setUseAnySingleVariable(boolean useAnySingleVariable
) {
67 this.useAnySingleVariable
= useAnySingleVariable
;
70 public void updateFromMethod(PsiMethod method
) {
71 if (getTypeWrapper() != null) return;
72 final PsiParameter
[] parameters
= method
.getParameterList().getParameters();
73 LOG
.assertTrue(oldParameterIndex
>= 0 && oldParameterIndex
< parameters
.length
);
74 final PsiParameter parameter
= parameters
[oldParameterIndex
];
75 setName(parameter
.getName());
76 setType(parameter
.getType());
79 public boolean equals(Object o
) {
80 if (this == o
) return true;
81 if (!(o
instanceof ParameterInfoImpl
)) return false;
83 ParameterInfoImpl parameterInfo
= (ParameterInfoImpl
) o
;
85 if (oldParameterIndex
!= parameterInfo
.oldParameterIndex
) return false;
86 if (defaultValue
!= null ?
!defaultValue
.equals(parameterInfo
.defaultValue
) : parameterInfo
.defaultValue
!= null) return false;
87 if (!getName().equals(parameterInfo
.getName())) return false;
88 if (!getTypeText().equals(parameterInfo
.getTypeText())) return false;
93 public int hashCode() {
94 int result
= getName().hashCode();
95 result
= 29 * result
+ getTypeText().hashCode();
99 public String
getTypeText() {
100 if (getTypeWrapper() != null) {
101 return getTypeWrapper().getTypeText();
108 public PsiType
createType(PsiElement context
, final PsiManager manager
) throws IncorrectOperationException
{
109 if (getTypeWrapper() != null) {
110 return getTypeWrapper().getType(context
, manager
);
116 public void setType(PsiType type
) {
117 myType
= CanonicalTypes
.createTypeWrapper(type
);
120 public String
getName() {
124 public CanonicalTypes
.Type
getTypeWrapper() {
128 public void setName(String name
) {
132 public boolean isVarargType() {
133 return getTypeText().endsWith("...");
136 public static ParameterInfoImpl
[] fromMethod(PsiMethod method
) {
137 List
<ParameterInfoImpl
> result
= new ArrayList
<ParameterInfoImpl
>();
138 final PsiParameter
[] parameters
= method
.getParameterList().getParameters();
139 for (int i
= 0; i
< parameters
.length
; i
++) {
140 PsiParameter parameter
= parameters
[i
];
141 result
.add(new ParameterInfoImpl(i
, parameter
.getName(), parameter
.getType()));
143 return result
.toArray(new ParameterInfoImpl
[result
.size()]);
147 public PsiExpression
getValue(final PsiCallExpression expr
) throws IncorrectOperationException
{
148 return JavaPsiFacade
.getInstance(expr
.getProject()).getElementFactory().createExpressionFromText(defaultValue
, expr
);
151 public boolean isUseAnySingleVariable() {
152 return useAnySingleVariable
;
155 public String
getDefaultValue() {
159 public void setDefaultValue(final String defaultValue
) {
160 this.defaultValue
= defaultValue
;