Skip to content

Commit

Permalink
Fix possible ClassCastException trying to complete typeparam
Browse files Browse the repository at this point in the history
  • Loading branch information
mickaelistria committed Jan 31, 2025
1 parent c5c2663 commit 85c34b8
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -223,8 +223,9 @@ public char[][] getExpectedTypesSignatures() {
return null;
}
var res = this.expectedTypes.getExpectedTypes().stream() //
.map(ITypeBinding::getQualifiedName) //
.map(name -> Signature.createTypeSignature(name, true))
.map(binding -> binding.isTypeVariable() ?
'T' + binding.getQualifiedName() + ';' :
Signature.createTypeSignature(binding.getQualifiedName(), true))
.map(String::toCharArray) //
.toArray(char[][]::new);
return res.length == 0 ? null : res;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@
import org.eclipse.jdt.core.dom.MethodInvocation;
import org.eclipse.jdt.core.dom.MethodRef;
import org.eclipse.jdt.core.dom.Modifier;
import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
import org.eclipse.jdt.core.dom.ModuleDeclaration;
import org.eclipse.jdt.core.dom.Name;
import org.eclipse.jdt.core.dom.NormalAnnotation;
Expand Down Expand Up @@ -126,6 +125,7 @@
import org.eclipse.jdt.core.dom.VariableDeclarationExpression;
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
import org.eclipse.jdt.core.search.IJavaSearchConstants;
import org.eclipse.jdt.core.search.SearchEngine;
Expand Down Expand Up @@ -1988,11 +1988,10 @@ private void publishFromScope(Bindings scope) {
private void completeConstructor(ITypeBinding typeBinding, ASTNode referencedFrom, IJavaProject javaProject) {
// compute type hierarchy
boolean isArray = typeBinding.isArray();
IType typeHandle = ((IType)typeBinding.getJavaElement());
AbstractTypeDeclaration enclosingType = (AbstractTypeDeclaration) DOMCompletionUtil.findParent(referencedFrom, new int[] { ASTNode.TYPE_DECLARATION, ASTNode.ENUM_DECLARATION, ASTNode.RECORD_DECLARATION, ASTNode.ANNOTATION_TYPE_DECLARATION });
ITypeBinding enclosingTypeBinding = enclosingType.resolveBinding();
IType enclosingTypeElement = (IType) enclosingTypeBinding.getJavaElement();
if (typeHandle != null) {
if (typeBinding.getJavaElement() instanceof IType typeHandle) {
try {
ITypeHierarchy newTypeHierarchy = typeHandle.newTypeHierarchy(javaProject, null);
ASTParser parser = ASTParser.newParser(AST.getJLSLatest());
Expand Down Expand Up @@ -2154,6 +2153,9 @@ public void acceptTypeNameMatch(org.eclipse.jdt.core.search.TypeNameMatch match)
}

private void processMembers(ASTNode referencedFrom, ITypeBinding typeBinding, Bindings scope, boolean isStaticContext) {
if (typeBinding == null) {
return;
}
AbstractTypeDeclaration parentType = (AbstractTypeDeclaration)DOMCompletionUtil.findParent(referencedFrom, new int[] {ASTNode.ANNOTATION_TYPE_DECLARATION, ASTNode.TYPE_DECLARATION, ASTNode.ENUM_DECLARATION, ASTNode.RECORD_DECLARATION});
if (parentType == null) {
return;
Expand Down

0 comments on commit 85c34b8

Please sign in to comment.