redhat-developer / redhat-developer/vscode-java

Extension causes `bad class file` and `ClassNotFoundException` in Maven build

Open
#322 5 comments 3 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug ls-error/crash
Dominant language
TypeScript
Stars
2.3k
Forks
546
Avg merge
20h 1m
Merged PRs (30d)
11

Description

I have a Maven project with submodules. When I open it in VS Code with this extension installed everything seems to work perfectly (code completion, javadoc, go to definition...). But when I run mvn clean install externally extension starts throwing tens of BadLocationExceptions (displayed in Output tab).

Moreover maven build fails! I can see some bad class file errors from maven-compiler-plugin and bellow TypeNotPresentException caused by ClassNotFoundException from some test run by maven-surefire-plugin. When I close VS Code Maven build works.

Environment
  • Operating System: Window 10
  • JDK version: 1.8.0_112
  • Visual Studio Code version: 1.17.0
  • Java extension version: 0.11.0
Steps To Reproduce
  1. clone https://github.com/vojtechhabarta/typescript-generator.git
  2. open folder in VS Code
  3. check that it works
  4. run mvn clean install
  5. build fails with TypeNotPresentException in tests

BadLocationException in VS Code Output window:

org.eclipse.jface.text.BadLocationException
	at org.eclipse.jface.text.ListLineTracker.getLineOffset(ListLineTracker.java:191)
	at org.eclipse.jface.text.AbstractLineTracker.getLineOffset(AbstractLineTracker.java:157)
	at org.eclipse.jface.text.AbstractDocument.getLineOffset(AbstractDocument.java:873)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.convertRange(WorkspaceDiagnosticsHandler.java:164)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.toDiagnostic(WorkspaceDiagnosticsHandler.java:144)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.lambda$0(WorkspaceDiagnosticsHandler.java:129)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.toDiagnosticsArray(WorkspaceDiagnosticsHandler.java:131)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.visit(WorkspaceDiagnosticsHandler.java:115)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:64)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:75)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:75)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:75)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:75)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:75)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:75)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:75)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:75)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:75)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:75)
	at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:48)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceDiagnosticsHandler.resourceChanged(WorkspaceDiagnosticsHandler.java:62)
	at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:299)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:289)
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:152)
	at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:374)
	at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1469)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:157)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:232)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)

Sample error in maven-compiler-plugin:

cz/habarta/typescript/generator/ext/AxiosClientExtensionTest.java:[4,39] cannot access cz.habarta.typescript.generator.Input
  bad class file: ...\typescript-generator\typescript-generator-core\target\classes\cz\habarta\typescript\generator\Input.class
    unable to access file: ...\typescript-generator\typescript-generator-core\target\classes\cz\habarta\typescript\generator\Input.class (The system cannot find the file specified)
    Please remove or make sure it appears in the correct subdirectory of the classpath.

Sample error from test in maven-surefire-plugin:

java.lang.TypeNotPresentException: Type ImmutableRectangle not present
	at sun.reflect.annotation.TypeNotPresentExceptionProxy.generateException(TypeNotPresentExceptionProxy.java:46)
	at sun.reflect.annotation.AnnotationInvocationHandler.invoke(AnnotationInvocationHandler.java:84)
	at com.sun.proxy.$Proxy24.as(Unknown Source)
	at com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector.findSerializationType(JacksonAnnotationIntrospector.java:758)
	at com.fasterxml.jackson.databind.AnnotationIntrospector.refineSerializationType(AnnotationIntrospector.java:843)
	at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:152)
	at cz.habarta.typescript.generator.parser.Jackson2Parser.getBeanHelper(Jackson2Parser.java:243)
	at cz.habarta.typescript.generator.parser.Jackson2Parser.parseBean(Jackson2Parser.java:70)
	at cz.habarta.typescript.generator.parser.Jackson2Parser.parseClass(Jackson2Parser.java:63)
	at cz.habarta.typescript.generator.parser.ModelParser.parseQueue(ModelParser.java:67)
	at cz.habarta.typescript.generator.parser.ModelParser.parseModel(ModelParser.java:36)
	at cz.habarta.typescript.generator.TypeScriptGenerator.generateTypeScript(TypeScriptGenerator.java:51)
	at cz.habarta.typescript.generator.TypeScriptGenerator.generateTypeScript(TypeScriptGenerator.java:43)
	at cz.habarta.typescript.generator.TypeScriptGenerator.generateTypeScript(TypeScriptGenerator.java:38)
	at cz.habarta.typescript.generator.ImmutablesTest.testImmutables(ImmutablesTest.java:17)
	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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:367)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:290)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:242)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
Caused by: java.lang.ClassNotFoundException: ImmutableRectangle
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:348)
	at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114)
	at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125)
	at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
	at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:439)
	at sun.reflect.annotation.AnnotationParser.parseClassValue(AnnotationParser.java:420)
	at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:349)
	at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286)
	at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120)
	at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72)
	at java.lang.Class.createAnnotationData(Class.java:3521)
	at java.lang.Class.annotationData(Class.java:3510)
	at java.lang.Class.getAnnotation(Class.java:3415)
	at cz.habarta.typescript.generator.parser.JaxrsApplicationParser.tryParse(JaxrsApplicationParser.java:78)
	at cz.habarta.typescript.generator.parser.ModelParser.parseQueue(ModelParser.java:55)
	... 29 more

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the issue by opening typescript-generator in VS Code and running mvn clean install, then compare the build with VS Code closed. Start at WorkspaceDiagnosticsHandler.convertRange and the reported AxiosClientExtensionTest and ImmutablesTest failures; done means the Maven build passes with the extension active and no BadLocationException appears.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, typescript, vscode
Domain
build-system, devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.