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

NPE: DoubleBraceInitialization #1040

Closed
ben-manes opened this issue May 29, 2018 · 1 comment · Fixed by #1108
Closed

NPE: DoubleBraceInitialization #1040

ben-manes opened this issue May 29, 2018 · 1 comment · Fixed by #1108

Comments

@ben-manes
Copy link

I'm re-enabling error-prone on an Android application, since it seems to have been turned off some time ago. It crashed on the following code block. Looks like it should be changed to Collections.emptyMap() on our side.

private Map<String, Object> getBarcodeConstants() {
  return Collections.unmodifiableMap(new HashMap<String, Object>() {
    {
      // @TODO add barcode types
    }
  });
}
  return Collections.unmodifiableMap(new HashMap<String, Object>() {
                                      ^
Please report this at https://github.com/google/error-prone/issues/new and include the following:

error-prone version: 2.3.1
BugPattern: DoubleBraceInitialization
Stack Trace:
java.lang.NullPointerException
  at com.google.errorprone.bugpatterns.DoubleBraceInitialization$CollectionTypes.maybeFix(DoubleBraceInitialization.java:178)
  at com.google.errorprone.bugpatterns.DoubleBraceInitialization.matchNewClass(DoubleBraceInitialization.java:227)
  at com.google.errorprone.scanner.ErrorProneScanner.visitNewClass(ErrorProneScanner.java:949)
  at com.google.errorprone.scanner.ErrorProneScanner.visitNewClass(ErrorProneScanner.java:145)
  at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1705)
  at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
  at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
  at com.sun.source.util.TreeScanner.visitMethodInvocation(TreeScanner.java:509)
  at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:910)
  at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:145)
  at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1644)
  at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  at com.sun.source.util.TreeScanner.visitReturn(TreeScanner.java:469)
  at com.google.errorprone.scanner.ErrorProneScanner.visitReturn(ErrorProneScanner.java:1018)
  at com.google.errorprone.scanner.ErrorProneScanner.visitReturn(ErrorProneScanner.java:145)
  at com.sun.tools.javac.tree.JCTree$JCReturn.accept(JCTree.java:1548)
  at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
  at com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:248)
  at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:527)
  at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:145)
  at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1026)
  at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
  at com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:206)
  at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:895)
  at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:145)
  at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:898)
  at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
  at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
  at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
  at com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:187)
  at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:587)
  at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:145)
  at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:808)
  at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
  at com.sun.source.util.TreeScanner.visitNewClass(TreeScanner.java:526)
  at com.google.errorprone.scanner.ErrorProneScanner.visitNewClass(ErrorProneScanner.java:955)
  at com.google.errorprone.scanner.ErrorProneScanner.visitNewClass(ErrorProneScanner.java:145)
  at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1705)
  at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
  at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
  at com.sun.source.util.TreeScanner.visitMethodInvocation(TreeScanner.java:509)
  at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:910)
  at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:145)
  at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1644)
  at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  at com.sun.source.util.TreeScanner.visitReturn(TreeScanner.java:469)
  at com.google.errorprone.scanner.ErrorProneScanner.visitReturn(ErrorProneScanner.java:1018)
  at com.google.errorprone.scanner.ErrorProneScanner.visitReturn(ErrorProneScanner.java:145)
  at com.sun.tools.javac.tree.JCTree$JCReturn.accept(JCTree.java:1548)
  at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
  at com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:248)
  at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:527)
  at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:145)
  at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1026)
  at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
  at com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:206)
  at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:895)
  at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:145)
  at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:898)
  at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
  at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
  at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
  at com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:187)
  at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:587)
  at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:145)
  at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:808)
  at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
  at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
  at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
  at com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:144)
  at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:602)
  at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:145)
  at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:591)
  at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:56)
  at com.google.errorprone.scanner.Scanner.scan(Scanner.java:64)
  at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
  at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:152)
  at com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:120)
  at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1404)
  at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1353)
  at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:952)
  at com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100)
  at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142)
  at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96)
  at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90)
  at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:137)
  at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:108)
  at com.google.errorprone.ErrorProneCompiler.run(ErrorProneCompiler.java:118)
  at com.google.errorprone.ErrorProneCompiler.compile(ErrorProneCompiler.java:65)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at net.ltgt.gradle.errorprone.ErrorProneCompiler.execute(ErrorProneCompiler.java:66)
  at net.ltgt.gradle.errorprone.ErrorProneCompiler.execute(ErrorProneCompiler.java:23)
  at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:98)
  at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:51)
  at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:37)
  at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:35)
  at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:25)
  at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringDecorator.execute(IncrementalResultStoringDecorator.java:41)
  at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringDecorator.execute(IncrementalResultStoringDecorator.java:27)
  at org.gradle.api.internal.tasks.compile.incremental.IncrementalAnnotationProcessingCompiler.execute(IncrementalAnnotationProcessingCompiler.java:50)
  at org.gradle.api.internal.tasks.compile.incremental.IncrementalAnnotationProcessingCompiler.execute(IncrementalAnnotationProcessingCompiler.java:36)
  at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:156)
  at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:126)
  at com.android.build.gradle.tasks.factory.AndroidJavaCompile.compile(AndroidJavaCompile.java:125)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
  at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
  at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
  at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
  at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:124)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
  at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:113)
  at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:95)
  at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:73)
  at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
  at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
  at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
  at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
  at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
  at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
  at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
  at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
  at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
  at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
  at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
  at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
  at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:256)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
  at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:249)
  at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:238)
  at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
  at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
  at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
  at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
  at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:663)
  at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:597)
  at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
  at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
  at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
  at java.lang.Thread.run(Thread.java:748)
@graememorgan
Copy link
Member

Thanks for the report, Ben. This'll be fixed in the next release.

ronshapiro pushed a commit that referenced this issue Sep 4, 2018
The previous code assumes that unmodifiableFoo(new Foo<> {{ }}) must be assigned to a variable, rather than returned by a function (or, who knows, it could just be a statement).

Fixes #1040

RELNOTES: Fix NPE in DoubleBraceInitialization.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211413826
@ronshapiro ronshapiro mentioned this issue Sep 4, 2018
ronshapiro pushed a commit that referenced this issue Sep 4, 2018
The previous code assumes that unmodifiableFoo(new Foo<> {{ }}) must be assigned to a variable, rather than returned by a function (or, who knows, it could just be a statement).

Fixes #1040

RELNOTES: Fix NPE in DoubleBraceInitialization.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211413826
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants