Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Calling resolve on catch block parameter throws exception. #4240

Closed
tahiat opened this issue Nov 28, 2023 · 1 comment · Fixed by #4279
Closed

Calling resolve on catch block parameter throws exception. #4240

tahiat opened this issue Nov 28, 2023 · 1 comment · Fixed by #4279

Comments

@tahiat
Copy link

tahiat commented Nov 28, 2023

The parsed java file is as below:

package com.examples.input;
public class Test1 {
    void test() {
        try{
            throw new CustomException("This is a custom Exception");
        } catch (CustomException e) {
            System.out.println(e.getMessage());
        }
    }
}

In ModifierVisitor, when trying to resolve the Parameter in method

@Override
 public Visitable visit(Parameter n, Void arg) {
        n.resolve();  // ---> exception thrown here
        return super.visit(n, arg);  
 }

an exception is thrown. Stack trace:

Exception in thread "main" java.lang.UnsupportedOperationException: Unable to find the declaration of type ResolvedParameterDeclaration from Parameter
	at com.github.javaparser.symbolsolver.JavaSymbolSolver.resolveDeclaration(JavaSymbolSolver.java:279)
	at com.github.javaparser.ast.body.Parameter.resolve(Parameter.java:322)
	at com.examples.input.ExceptionVisitor.visit(ExceptionVisitor.java:10)
	at com.examples.input.ExceptionVisitor.visit(ExceptionVisitor.java:7)
	at com.github.javaparser.ast.body.Parameter.accept(Parameter.java:114)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:210)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:53)
	at com.github.javaparser.ast.stmt.CatchClause.accept(CatchClause.java:78)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:1133)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:53)
	at com.github.javaparser.ast.NodeList.accept(NodeList.java:275)
	at com.github.javaparser.ast.visitor.ModifierVisitor.modifyList(ModifierVisitor.java:1172)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:951)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:53)
	at com.github.javaparser.ast.stmt.TryStmt.accept(TryStmt.java:137)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:1133)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:53)
	at com.github.javaparser.ast.NodeList.accept(NodeList.java:275)
	at com.github.javaparser.ast.visitor.ModifierVisitor.modifyList(ModifierVisitor.java:1172)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:171)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:53)
	at com.github.javaparser.ast.stmt.BlockStmt.accept(BlockStmt.java:72)
	at com.github.javaparser.ast.visitor.ModifierVisitor.lambda$visit$60(ModifierVisitor.java:674)
	at java.base/java.util.Optional.map(Optional.java:260)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:674)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:53)
	at com.github.javaparser.ast.body.MethodDeclaration.accept(MethodDeclaration.java:100)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:1133)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:53)
	at com.github.javaparser.ast.NodeList.accept(NodeList.java:275)
	at com.github.javaparser.ast.visitor.ModifierVisitor.modifyList(ModifierVisitor.java:1172)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:246)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:53)
	at com.github.javaparser.ast.body.ClassOrInterfaceDeclaration.accept(ClassOrInterfaceDeclaration.java:97)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:1133)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:53)
	at com.github.javaparser.ast.NodeList.accept(NodeList.java:275)
	at com.github.javaparser.ast.visitor.ModifierVisitor.modifyList(ModifierVisitor.java:1172)
	at com.github.javaparser.ast.visitor.ModifierVisitor.visit(ModifierVisitor.java:310)
	at com.examples.input.TestExecutorClass.main(TestExecutorClass.java:31)

Since the CustomException class is a part of the source code, I believe that should be resolved successfully. Here is the reproducible sample repository

The resolve method here is causing the exception.

Interestingly, if I change the java file like below

package com.examples.input;
public class Test1 {
    void test(CustomException arg) {
        
    }
}

The CustomException arg is successfully resolved in the public Visitable visit(Parameter n, Void arg) method. This give me a sense that problem might be associated with the catch block parameter.

Please let me know I am doing it incorrectly. Any suggestions is appreciated.

@jlerbsc
Copy link
Collaborator

jlerbsc commented Nov 29, 2023

Thank you for reporting this anomaly. Indeed, parameter resolution is currently only carried out on methods and constructors.

Related to #3111

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants