fix ValueParameterDescriptor.index read from class files
(ReadClassDataTest now also checks for indices)
This commit is contained in:
+4
-1
@@ -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 ");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user