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);