Bug 560422 - Converted callout-set-to-field has wrong type
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/ISourceElementRequestor.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/ISourceElementRequestor.java
index 60f4905..09b117c 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/ISourceElementRequestor.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/ISourceElementRequestor.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2018 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -276,7 +276,7 @@
public boolean isOverride;
public int declaredModifiers;
public boolean isSetter;
- public char[] rightReturnType;
+ public char[] fieldType;
public char[] rightSelector;
}
public static class CallinInfo extends MappingInfo {
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementNotifier.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementNotifier.java
index 25db8d6..a050b40 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementNotifier.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementNotifier.java
@@ -445,6 +445,10 @@
return (!spec.hasSignature || spec.returnType == null) ?
null : CharOperation.concatWith(spec.returnType.getParameterizedTypeName(), '.');
}
+private char[] firstParameterTypeName(MethodSpec spec) {
+ return (!spec.hasSignature || spec.arguments == null || spec.arguments.length < 1) ?
+ null : CharOperation.concatWith(spec.arguments[0].type.getParameterizedTypeName(), '.');
+}
public void notifySourceElementRequestor(AbstractMethodMappingDeclaration mapping)
{
@@ -492,7 +496,7 @@
// base field spec:
info.rightSelector= baseSelector;
- info.rightReturnType= baseReturnTypeName;
+ info.fieldType= info.isSetter ? firstParameterTypeName(callout.baseMethodSpec) : baseReturnTypeName;
info.annotations = mapping.annotations;
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnitStructureRequestor.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnitStructureRequestor.java
index 376c934..ff89590 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnitStructureRequestor.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnitStructureRequestor.java
@@ -1165,8 +1165,8 @@
if (calloutInfo.rightSelector != null) {
IFieldAccessSpec baseField = new FieldData(
new String(calloutInfo.rightSelector),
- calloutInfo.rightReturnType != null
- ? Signature.createTypeSignature(calloutInfo.rightReturnType, false)
+ calloutInfo.fieldType != null
+ ? Signature.createTypeSignature(calloutInfo.fieldType, false)
: new String(),
calloutInfo.isSetter);
info.setBaseField(baseField);