fix ValueParameterDescriptor.index read from class files

(ReadClassDataTest now also checks for indices)
This commit is contained in:
Stepan Koltsov
2012-01-12 01:25:39 +04:00
parent 5e11003ea3
commit 6198fb90f3
2 changed files with 7 additions and 1 deletions
@@ -637,17 +637,20 @@ public class JavaDescriptorResolver {
PsiParameter[] parameters, TypeVariableResolver typeVariableResolver) { PsiParameter[] parameters, TypeVariableResolver typeVariableResolver) {
List<ValueParameterDescriptor> result = new ArrayList<ValueParameterDescriptor>(); List<ValueParameterDescriptor> result = new ArrayList<ValueParameterDescriptor>();
JetType receiverType = null; JetType receiverType = null;
int indexDelta = 0;
for (int i = 0, parametersLength = parameters.length; i < parametersLength; i++) { for (int i = 0, parametersLength = parameters.length; i < parametersLength; i++) {
PsiParameter parameter = parameters[i]; PsiParameter parameter = parameters[i];
JvmMethodParameterMeaning meaning = resolveParameterDescriptor(containingDeclaration, i, parameter, typeVariableResolver); JvmMethodParameterMeaning meaning = resolveParameterDescriptor(containingDeclaration, i + indexDelta, parameter, typeVariableResolver);
if (meaning.kind == JvmMethodParameterKind.TYPE_INFO) { if (meaning.kind == JvmMethodParameterKind.TYPE_INFO) {
// TODO // TODO
--indexDelta;
} else if (meaning.kind == JvmMethodParameterKind.REGULAR) { } else if (meaning.kind == JvmMethodParameterKind.REGULAR) {
result.add(meaning.valueParameterDescriptor); result.add(meaning.valueParameterDescriptor);
} else if (meaning.kind == JvmMethodParameterKind.RECEIVER) { } else if (meaning.kind == JvmMethodParameterKind.RECEIVER) {
if (receiverType != null) { if (receiverType != null) {
throw new IllegalStateException("more then one receiver"); throw new IllegalStateException("more then one receiver");
} }
--indexDelta;
receiverType = meaning.receiverType; receiverType = meaning.receiverType;
} }
} }
@@ -288,6 +288,9 @@ public class ReadClassDataTest extends TestCaseWithTmpdir {
} }
public void serialize(ValueParameterDescriptor valueParameter) { public void serialize(ValueParameterDescriptor valueParameter) {
sb.append("/*");
sb.append(valueParameter.getIndex());
sb.append("*/ ");
if (valueParameter.getVarargElementType() != null) { if (valueParameter.getVarargElementType() != null) {
sb.append("vararg "); sb.append("vararg ");
} }