close
The Wayback Machine - https://web.archive.org/web/20201119121239/https://github.com/uber/piranha/issues/105
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

[PiranhaJava] Integrate piranha to our microservice #105

Open
cnarsimharaju opened this issue Oct 27, 2020 · 6 comments
Open

[PiranhaJava] Integrate piranha to our microservice #105

cnarsimharaju opened this issue Oct 27, 2020 · 6 comments
Labels

Comments

@cnarsimharaju
Copy link

@cnarsimharaju cnarsimharaju commented Oct 27, 2020

We are working on integrating piranha to our micro-service. we followed the steps mentioned in the Readme file. We are using lombok in our service. When we ran the build, below error is observed.

Stack Trace:

`[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project qb-billing-service-app: Compilation failure

[ERROR] /Users/ssathyamurthy/dev/qb-billing-service/app/src/main/java/com/intuit/billingcomm/billing/integration/IAMTicketClientIntegration.java:[76,42] error: An unhandled exception was thrown by the Error Prone static analysis plugin.

[ERROR] Please report this at https://github.com/google/error-prone/issues/new and include the following:
[ERROR]
[ERROR] error-prone version: 2.4.0
[ERROR] BugPattern: Piranha
[ERROR] Stack Trace:
[ERROR] java.lang.ClassCastException: com.sun.tools.javac.tree.JCTree$JCBinary cannot be cast to com.sun.source.tree.ParenthesizedTree
[ERROR] at com.uber.piranha.XPFlagCleaner.matchIf(XPFlagCleaner.java:1021)
[ERROR] at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:451)
[ERROR] at com.google.errorprone.scanner.ErrorProneScanner.visitIf(ErrorProneScanner.java:655)
[ERROR] at com.google.errorprone.scanner.ErrorProneScanner.visitIf(ErrorProneScanner.java:152)
[ERROR] at com.sun.tools.javac.tree.JCTree$JCIf.accept(JCTree.java:1427)
[ERROR] at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[ERROR] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[ERROR] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[ERROR] at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
[ERROR] at com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:248)
[ERROR] at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:522)
[ERROR] at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:152)
[ERROR] at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1026)
[ERROR] at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[ERROR] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[ERROR] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[ERROR] at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
[ERROR] at com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:206)
[ERROR] at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:742)
[ERROR] at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:152)
[ERROR] at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:898)
[ERROR] at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[ERROR] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[ERROR] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[ERROR] at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
[ERROR] at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
[ERROR] at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
[ERROR] at com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:187)
[ERROR] at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:550)
[ERROR] at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:152)
[ERROR] at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:808)
[ERROR] at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[ERROR] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[ERROR] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[ERROR] at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
[ERROR] at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
[ERROR] at com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:144)
[ERROR] at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:562)
[ERROR] at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:152)
[ERROR] at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:591)
[ERROR] at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:56)
[ERROR] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:58)
[ERROR] at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
[ERROR] at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:152)
[ERROR] at com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:120)
[ERROR] at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1404)
[ERROR] at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1353)
[ERROR] at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:946)
[ERROR] at com.sun.tools.javac.main.Main.compile(Main.java:302)
[ERROR] at com.sun.tools.javac.main.Main.compile(Main.java:162)
[ERROR] at com.sun.tools.javac.Main.compile(Main.java:57)
[ERROR] at com.sun.tools.javac.Main.main(Main.java:43)
[ERROR] `

Our Code where this issue in seen
@Override public @NonNull IAMTicket createAndRenewOfflineTicket(@NonNull String realmID) throws IAMTicketClientException {

@mkr-plse
Copy link
Collaborator

@mkr-plse mkr-plse commented Oct 27, 2020

Can you share the conditional branch (if) in this method implementation?

@sivacoder
Copy link
Contributor

@sivacoder sivacoder commented Oct 27, 2020

Surprisingly, there are no branching statements in this method. Complete code is

@Override
public @NonNull
IAMTicket createAndRenewOfflineTicket(@NonNull String realmID) throws Exception {
Ticket ticket = new Ticket();
Request request;
try {
request = new Request().build();
Header header = client.getHeader(request);
ticket.setTicket(header)
} catch (Exception e) {
throw e;
}
return iamTicket;
}

@cnarsimharaju
Copy link
Author

@cnarsimharaju cnarsimharaju commented Oct 27, 2020

@mkr-plse It is complaining at the function definition i.e

@Override public @NonNull IAMTicket createAndRenewOfflineTicket(@NonNull String realmID) throw..

@mkr-plse
Copy link
Collaborator

@mkr-plse mkr-plse commented Oct 27, 2020

Looks like a lombok+errorprone related issue.

@lazaroclapp
Copy link
Collaborator

@lazaroclapp lazaroclapp commented Oct 28, 2020

Lombok modifies the AST in memory during compilation, causing a number of issues when Error Prone tries to associate AST nodes back to the corresponding source code. In this case, it's almost certain that Lombok is adding a conditional to the AST that doesn't exist in the source, and there is something in that conditional that Piranha is trying to report/delete. Unfortunately, since the conditional itself doesn't exist in the code, it can't be reported on or deleted.

In general, there is no reasonable way to make Piranha refactor code that was injected by Lombok. Our best bet would be to:

  1. Require lombok.addLombokGeneratedAnnotation = true as part to the Lombok configuration
  2. Modify Piranha to skip syntactic scopes (e.g. methods, classes), marked as @lombok.Generated

That will still sometimes fail to clean up flag usages inside java classes that use Lombok (since Lombok can move user code and nest it inside its own generated structures), but it will avoid an outright compiler crash. Doing any better than that would require encoding knowledge of (potentially many) relevant Lombok transformations inside Piranha.

@lazaroclapp
Copy link
Collaborator

@lazaroclapp lazaroclapp commented Oct 28, 2020

Can you provide a delombok-ed version of the full compilation unit (i.e. the .java file)?

See these instructions.

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

Successfully merging a pull request may close this issue.

None yet
4 participants
You can’t perform that action at this time.