Skip to content

Commit f1c2e75

Browse files
committed
Improve converter & binding for IMemberValuePair
1 parent 485d20d commit f1c2e75

File tree

4 files changed

+29
-8
lines changed

4 files changed

+29
-8
lines changed

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavacBindingResolver.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,11 @@
4646
import com.sun.tools.javac.api.JavacTaskImpl;
4747
import com.sun.tools.javac.api.JavacTrees;
4848
import com.sun.tools.javac.code.Attribute;
49-
import com.sun.tools.javac.code.Attribute.Compound;
5049
import com.sun.tools.javac.code.Symbol;
50+
import com.sun.tools.javac.code.Symtab;
51+
import com.sun.tools.javac.code.TypeTag;
52+
import com.sun.tools.javac.code.Types;
53+
import com.sun.tools.javac.code.Attribute.Compound;
5154
import com.sun.tools.javac.code.Symbol.ClassSymbol;
5255
import com.sun.tools.javac.code.Symbol.MethodSymbol;
5356
import com.sun.tools.javac.code.Symbol.ModuleSymbol;
@@ -56,7 +59,6 @@
5659
import com.sun.tools.javac.code.Symbol.TypeSymbol;
5760
import com.sun.tools.javac.code.Symbol.TypeVariableSymbol;
5861
import com.sun.tools.javac.code.Symbol.VarSymbol;
59-
import com.sun.tools.javac.code.Symtab;
6062
import com.sun.tools.javac.code.Type.ArrayType;
6163
import com.sun.tools.javac.code.Type.ClassType;
6264
import com.sun.tools.javac.code.Type.ErrorType;
@@ -68,12 +70,12 @@
6870
import com.sun.tools.javac.code.Type.ModuleType;
6971
import com.sun.tools.javac.code.Type.PackageType;
7072
import com.sun.tools.javac.code.Type.TypeVar;
71-
import com.sun.tools.javac.code.TypeTag;
72-
import com.sun.tools.javac.code.Types;
7373
import com.sun.tools.javac.tree.JCTree;
74+
import com.sun.tools.javac.tree.TreeInfo;
7475
import com.sun.tools.javac.tree.JCTree.JCAnnotatedType;
7576
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
7677
import com.sun.tools.javac.tree.JCTree.JCArrayTypeTree;
78+
import com.sun.tools.javac.tree.JCTree.JCAssign;
7779
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
7880
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
7981
import com.sun.tools.javac.tree.JCTree.JCExpression;
@@ -94,7 +96,6 @@
9496
import com.sun.tools.javac.tree.JCTree.JCTypeParameter;
9597
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
9698
import com.sun.tools.javac.tree.JCTree.JCWildcard;
97-
import com.sun.tools.javac.tree.TreeInfo;
9899
import com.sun.tools.javac.util.Context;
99100
import com.sun.tools.javac.util.Names;
100101

@@ -1572,6 +1573,15 @@ IAnnotationBinding resolveAnnotationImpl(Annotation annotation) {
15721573
}
15731574
return null;
15741575
}
1576+
@Override
1577+
IMemberValuePairBinding resolveMemberValuePair(MemberValuePair memberValuePair) {
1578+
resolve();
1579+
if (this.converter.domToJavac.get(memberValuePair) instanceof JCAssign assign &&
1580+
assign.lhs instanceof JCIdent ident && ident.sym instanceof MethodSymbol methodSymbol) {
1581+
return this.bindings.getMemberValuePairBinding(methodSymbol, null);
1582+
}
1583+
return null;
1584+
}
15751585

15761586
@Override
15771587
IBinding resolveReference(MethodRef ref) {

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavacConverter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,9 @@
4949
import com.sun.tools.javac.parser.ParserFactory;
5050
import com.sun.tools.javac.parser.Tokens.Comment;
5151
import com.sun.tools.javac.parser.Tokens.Comment.CommentStyle;
52-
import com.sun.tools.javac.tree.DCTree.DCDocComment;
5352
import com.sun.tools.javac.tree.JCTree;
53+
import com.sun.tools.javac.tree.TreeInfo;
54+
import com.sun.tools.javac.tree.DCTree.DCDocComment;
5455
import com.sun.tools.javac.tree.JCTree.JCAnnotatedType;
5556
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
5657
import com.sun.tools.javac.tree.JCTree.JCAnyPattern;
@@ -125,7 +126,6 @@
125126
import com.sun.tools.javac.tree.JCTree.JCWildcard;
126127
import com.sun.tools.javac.tree.JCTree.JCYield;
127128
import com.sun.tools.javac.tree.JCTree.Tag;
128-
import com.sun.tools.javac.tree.TreeInfo;
129129
import com.sun.tools.javac.util.Context;
130130
import com.sun.tools.javac.util.JCDiagnostic;
131131
import com.sun.tools.javac.util.Log;
@@ -3217,6 +3217,7 @@ private Annotation convert(JCAnnotation javac) {
32173217
if( expr instanceof JCAssign jcass) {
32183218
if( jcass.lhs instanceof JCIdent jcid ) {
32193219
final MemberValuePair pair = new MemberValuePair(this.ast);
3220+
commonSettings(pair, jcass);
32203221
final SimpleName simpleName = new SimpleName(this.ast);
32213222
commonSettings(simpleName, jcid);
32223223
simpleName.internalSetIdentifier(new String(jcid.getName().toString()));

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/internal/javac/dom/JavacMemberValuePairBinding.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public IJavaElement getJavaElement() {
8585
public String getKey() {
8686
// as of writing, not yet implemented for ECJ
8787
// @see org.eclipse.jdt.core.dom.MemberValuePairBinding.getKey
88-
return null;
88+
return Integer.toString(System.identityHashCode(this.method));
8989
}
9090

9191
@Override

org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/ExpectedTypes.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,16 @@ private void computeExpectedTypes(){
136136
return;
137137
}
138138
}
139+
if (parent2.getLocationInParent() == MemberValuePair.VALUE_PROPERTY && parent2.getParent() instanceof MemberValuePair mvp) {
140+
var binding = mvp.resolveMemberValuePairBinding();
141+
if (binding != null) {
142+
var methodBinding = binding.getMethodBinding();
143+
if (methodBinding != null) {
144+
this.expectedTypes.add(methodBinding.getReturnType());
145+
break;
146+
}
147+
}
148+
}
139149
parent2 = parent2.getParent();
140150
}
141151
ASTNode parent = parent2;

0 commit comments

Comments
 (0)