Skip to content

Searching about a java package name fails #191

@cmoulliard

Description

@cmoulliard

Issue

Searching about a java package name fails using as location 11 and query com.todo.app.controller when the java project to be analyzed contains a java file TaskController where there is a line with package com.todo.app.controller`

The problem is related to the code of the existing ReferenceSymbolProvider class as we got a class cast exception

// Code
public class ReferenceSymbolProvider implements SymbolProvider, WithQuery {
    private String query;
    
    @Override
    public List<SymbolInformation> get(SearchMatch match) {
        SymbolKind k = convertSymbolKind((IJavaElement) match.getElement());
        List<SymbolInformation> symbols = new ArrayList<>();
        // For Method Calls we will need to do the local variable trick
        try {
            ReferenceMatch m = (ReferenceMatch) match; // We got a Class cast exception

// Error
!MESSAGE unable to convert for variable: java.lang.ClassCastException: class org.eclipse.jdt.core.search.PackageDeclarationMatch cannot be cast to class org.eclipse.jdt.core.search.ReferenceMatch (org.eclipse.jdt.core.search.PackageDeclarationMatch and org.eclipse.jdt.core.search.ReferenceMatch are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @536856f1)

The class cast exception can be fixed using this code

PackageDeclarationMatch m = (PackageDeclarationMatch)match;

but then the code should be reviewed in order to:

  • Handle properly the class type: PackageDeclarationMatch, ReferencenMatch ?, etc
  • Manage the IPackageFragment part of the class SymbolProvider and method default Location getLocation(IJavaElement element, SearchMatch match) to return the location, range for a package discovered

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-kindIndicates an issue or PR lacks a `kind/foo` label and requires one.needs-priorityIndicates an issue or PR lacks a `priority/foo` label and requires one.needs-triageIndicates an issue or PR lacks a `triage/foo` label and requires one.

    Type

    No type

    Projects

    Status

    🆕 New

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions