Git Product home page Git Product logo

meghanada-server's Introduction

Meghanada-Server

Join the chat at https://gitter.im/mopemope/meghanada-server Patreon Github

A Java IDE Server for your editor. Java IDE-like features to your favourite text editor.

Since we already have LSP, this product is no longer necessary, right?

This project is almost never used. This is because there is a useful product lsp-java. Please use it.

Features

Some planned and implemented features:

  • Server supports a network connection
  • Gradle and Maven and Eclipse project support
  • Run build tool task
  • Compile your project
  • Support annotaion processor
  • Analyze java source (hooks into build)
  • Code completion
  • Optimize import
  • Jump declaration (without source)
  • Run junit test (include test runner)
  • Search references
  • Full-featured text search (default off)

Meghanada-Server support only emacs client (meghanada-mode)

The Meghanada architecture is almost the same as ensime. It is client server model.

Meghanada updates any information when saving and compile the java file.

Building

Requirement

  • JDK 8 or later.

If your project were maven project, It needs maven and add mvn command your $PATH.

Build jar

./gradlew clean goJF check shadowJar

Usage Server

See help.

java -jar path/to/meghanada.jar --help
usage: meghanada server
    --gradle-version <arg>   set use gradle version
 -h,--help                   show help
 -l,--log <arg>              log file location. default:
                             /tmp/meghanada_server.log
    --output <arg>           output format (sexp, csv, json). default:
                             sexp
 -p,--port <arg>             set server port. default: 55555
 -r,--project <arg>          set project root path. default: current path
 -v,--verbose                show verbose message (DEBUG)
    --version                show version information
 -vv,--traceVerbose          show verbose message (TRACE)

Run Server

java -jar path/to/meghanada.jar

Recommend settings jvm args.

java -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -Xverify:none -Xms256m -Dfile.encoding=UTF-8 -jar path/to/meghanada.jar

Meghanada-Server is required JDK 8 or later (not JRE). It used Compiler API.

Contributing

Contributions are extremely welcome!

Please check execute the following command before contributing. then please push PR to dev branch.

./gradlew clean goJF check

Customize project manually

  • Write .meghanada.conf on project root.

example:

# This is an annotated reference of the options that may be set in a
# .meghanada.conf file.
#

# Set JAVA_HOME
# Type: string
java-home = "/usr/lib/jvm/default

# Set java version
# Type: string
#
# It is same effect following code.
# System.setProperty("java.specification.version", val);
java-version = "1.8"

# Set source compatibility
# Type: string
compile-source = "1.8"

# Set target compatibility
# Type: string
compile-target = "1.8"

java11-javac-args = [
                 "--add-exports",
                 "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
                 "--add-exports",
                 "jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
                 "--add-exports",
                 "jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
                 "--add-exports",
                 "jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
                 "--add-exports",
                 "jdk.compiler/com.sun.tools.javac.resources=ALL-UNNAMED",
                 "--add-exports",
                 "jdk.compiler/com.sun.tools.javac.resources=ALL-UNNAMED",
                 "--add-exports",
                 "java.management/sun.management=ALL-UNNAMED",
]

# Set dependencies file list (jar filepath)
# Type: string list
dependencies = ["/home/user/.m2/repository/org/apache/maven/maven-model/3.3.9/maven-model-3.3.9.jar", "/home/user/.m2/repository/org/codehaus/plexus/plexus-utils/3.0.22/plexus-utils-3.0.22.jar", "/home/user/.m2/repository/org/apache/commons/commons-lang3/3.4/commons-lang3-3.4.jar" ... ]

# Set test dependencies file list (jar filepath)
# Type: string list
test-dependencies = ["/home/ma2/.m2/repository/junit/junit/4.12/junit-4.12.jar" ... ]

# Set source directories
# Type: string list
sources = ["src/main/java"]

# Set resource directories
# Type: string list
resources = ["src/main/resources"]

# Set classes output directory
# Type: string
output = "build/main/classes"

# Set test source directories
# Type: string list
test-sources = ["src/test/java"]

# Set testt resource directories
# Type: string list
test-resources = ["src/test/resources"]

# Set test classes output directory
# Type: string
test-output = "build/test/classes"

License

GPL v3, See LICENSE file.

meghanada-server's People

Contributors

abby-ma2 avatar dspearson avatar gitter-badger avatar iocanel avatar jypma avatar liuchong avatar mopemope avatar renovate[bot] avatar roman avatar vpxyz avatar xqliu avatar yangwen0228 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

meghanada-server's Issues

Server craches with NullPointerException with incomplete source files

When I am developing a function and adding a new one and the syntax is temporarily wrong (because I am still editing) it seems the server is crashing with the following error:

Caused by: java.lang.NullPointerException
	at meghanada.project.Project.parseFile(Project.java:323) ~[meghanada-0.7.5.jar:?]
	at meghanada.cache.JavaSourceLoader.load(JavaSourceLoader.java:109) ~[meghanada-0.7.5.jar:?]
	at meghanada.cache.JavaSourceLoader.load(JavaSourceLoader.java:22) ~[meghanada-0.7.5.jar:?]
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3716) ~[meghanada-0.7.5.jar:?]
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2424) ~[meghanada-0.7.5.jar:?]
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2298) ~[meghanada-0.7.5.jar:?]
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2211) ~[meghanada-0.7.5.jar:?]
	at com.google.common.cache.LocalCache.get(LocalCache.java:4154) ~[meghanada-0.7.5.jar:?]
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4158) ~[meghanada-0.7.5.jar:?]
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5147) ~[meghanada-0.7.5.jar:?]
	at meghanada.cache.GlobalCache.getSource(GlobalCache.java:176) ~[meghanada-0.7.5.jar:?]
	at meghanada.utils.FileUtils.getSource(FileUtils.java:374) ~[meghanada-0.7.5.jar:?]
	at meghanada.docs.declaration.DeclarationSearcher.searchDeclaration(DeclarationSearcher.java:221) ~[meghanada-0.7.5.jar:?]
	at meghanada.session.Session.showDeclaration(Session.java:634) ~[meghanada-0.7.5.jar:?]
	at meghanada.server.CommandHandler.showDeclaration(CommandHandler.java:281) ~[meghanada-0.7.5.jar:?]
	... 11 more
[2017-05-14 10:31:18,587][INFO ][EmacsServer   : 145] lambda$acceptConnectio - client disconnect
[2017-05-14 10:25:03,515][INFO ][Main          : 114] main                   - Meghanada-Server Version:0.7.5-d441072

Is this a bug or is it not feasible to have it run during editing, it might be my emacs settings continuously saving the file when I pause for a bit.

Is there any way to set javac args?

For example, I want to set the language Java lint displays, so I can use javac -J-Duser.language=en. I have put export JAVA_TOOL_OPTIONS='-Duser.language=en' into my bashrc, but it doesn't work.

How can I make it? Thank you so much!

Can't deal with my pom.xml which can run in idea.

java.lang.NullPointerException: neither pomFile nor modelSource can be null
at org.apache.maven.model.building.DefaultModelBuilder.readModel(DefaultModelBuilder.java:518) ~[meghanada-0.8.3.jar:?]


4.0.0

<artifactId>backend_consumer</artifactId>
<name>backend_consumer</name>
<description>Backend consumer project for Spring Boot</description>

<dependencies>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-consul-discovery</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-config</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-ribbon</artifactId>
	</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
</dependencies>
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.0.0.M3</version>
</parent>

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	<java.version>1.8</java.version>
	<spring-cloud.version>Finchley.M1</spring-cloud.version>
</properties>

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>${spring-cloud.version}</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>

<repositories>
	<repository>
		<id>spring-snapshots</id>
		<name>Spring Snapshots</name>
		<url>https://repo.spring.io/snapshot</url>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
	</repository>
	<repository>
		<id>spring-milestones</id>
		<name>Spring Milestones</name>
		<url>https://repo.spring.io/milestone</url>
		<snapshots>
			<enabled>false</enabled>
		</snapshots>
	</repository>
</repositories>

<pluginRepositories>
	<pluginRepository>
		<id>spring-snapshots</id>
		<name>Spring Snapshots</name>
		<url>https://repo.spring.io/snapshot</url>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
	</pluginRepository>
	<pluginRepository>
		<id>spring-milestones</id>
		<name>Spring Milestones</name>
		<url>https://repo.spring.io/milestone</url>
		<snapshots>
			<enabled>false</enabled>
		</snapshots>
	</pluginRepository>
</pluginRepositories>

Smart completion of variable/field based on method return type

Dear,

I am thinking about how to implement sort of smart completion, for example,

If we have below code

String a = "ABC";
int b = a.

Then in this scenario, we might have two kind of completion, described below:

  • "Simple completion" which is just the same as current behavior,
  • "Smart completion", which is only fetch back all the possible candidate which with return type int or Integer

I am not sure whether company is possible to support these two kind of completion?

And also, I saw that the parameter pass to the server from emacs is just a#, which just ignored the part before a. (which is b=, from which we could get return type), so the information is not enough to generate the smart completion candidate.

I am not so familiar with company mode, could you please help on decide whether it's possible to define two kinds of completion mode for company?

But I might be able to do something on the **meghanada--grab-symbol-cons ** part and also pass the variable information to backend server, also do something to filter out only candidates with correct return type.

Thanks :)

BindException at server start

Hi,

Sometimes, the Meghanada server fails to start and throws the following exception:

Exception in thread "main" java.net.BindException: Address already in use (Bind failed)
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.(ServerSocket.java:237)
at meghanada.server.emacs.EmacsServer.(EmacsServer.java:56)
at meghanada.Main.createServer(Main.java:153)
at meghanada.Main.main(Main.java:126)

This happens for example when 2 java projects are opened in their own emacs session. On a server, it can even happen when there is only a single Java project opened.

Regards

java.lang.IllegalArgumentException: 无效的源发行版: ${java.version}

when I start meghanda server ,I got this error, and everything works fine except "extract local variables, auto import .
java.lang.IllegalArgumentException: 无效的源发行版: ${java.version}
at com.sun.tools.javac.main.OptionHelper$GrumpyHelper.error(OptionHelper.java:103) ~[?:?]
at com.sun.tools.javac.main.Option$11.process(Option.java:204) ~[?:?]
at com.sun.tools.javac.api.JavacTool.processOptions(JavacTool.java:217) ~[?:?]
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:156) ~[?:?]
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:107) ~[?:?]
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:64) ~[?:?]
at meghanada.compiler.SimpleJavaCompiler.compileFiles(SimpleJavaCompiler.java:61) ~[meghanada-0.2.4.jar:?]
at meghanada.project.Project.compileJava(Project.java:207) ~[meghanada-0.2.4.jar:?]
at meghanada.session.subscribe.CacheEventSubscriber.lambda$on$0(CacheEventSubscriber.java:45) ~[meghanada-0.2.4.jar:?]
at meghanada.config.Config.timeItF(Config.java:86) [meghanada-0.2.4.jar:?]
at meghanada.session.subscribe.CacheEventSubscriber.on(CacheEventSubscriber.java:43) [meghanada-0.2.4.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_101]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_101]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_101]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_101]
at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:95) [meghanada-0.2.4.jar:?]
at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:154) [meghanada-0.2.4.jar:?]
at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:80) [meghanada-0.2.4.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_101]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_101]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_101]

request.modelResolver cannot be null

Server is crashing with following error:

[2017-05-11 23:30:37,767][INFO ][Main : 114] main - Meghanada-Server Version:0.7.5-d441072 [2017-05-11 23:30:37,835][INFO ][MavenProject : 73] parseProject - running maven. resolve dependencies ... [2017-05-11 23:30:39,866][ERROR][EmacsServer : 70] startServer - Catching java.lang.NullPointerException: request.modelResolver cannot be null (parent POM org.springframework.boot:spring-boot-starter-parent:1.5.3.RELEASE and POM com.alexafshar:springangularone:0.0.1-SNAPSHOT (/home/asqrd/Work/code/java/springangularone/pom.xml)) at org.apache.commons.lang3.Validate.notNull(Validate.java:225) ~[meghanada-0.7.5.jar:?] at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:1045) ~[meghanada-0.7.5.jar:?] at org.apache.maven.model.building.DefaultModelBuilder.readParent(DefaultModelBuilder.java:829) ~[meghanada-0.7.5.jar:?] at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:331) ~[meghanada-0.7.5.jar:?] at meghanada.project.maven.POMParser.parsePom(POMParser.java:64) ~[meghanada-0.7.5.jar:?] at meghanada.project.maven.MavenProject.parseProject(MavenProject.java:93) ~[meghanada-0.7.5.jar:?] at meghanada.session.Session.loadProject(Session.java:169) ~[meghanada-0.7.5.jar:?] at meghanada.session.Session.findProject(Session.java:99) ~[meghanada-0.7.5.jar:?] at meghanada.session.Session.createSession(Session.java:75) ~[meghanada-0.7.5.jar:?] at meghanada.session.Session.createSession(Session.java:70) ~[meghanada-0.7.5.jar:?] at meghanada.server.emacs.EmacsServer.startServer(EmacsServer.java:65) [meghanada-0.7.5.jar:?] at meghanada.Main.main(Main.java:116) [meghanada-0.7.5.jar:?] [2017-05-11 23:30:39,869][INFO ][Main : 43] lambda$main$1 - shutdown server

I am testing a small spring-boot app, here is the pom.xml:


	<groupId>com.alexafshar</groupId>
	<artifactId>springangularone</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springangularone</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>

		<dependency>
			<groupId>org.webjars</groupId>
			<artifactId>angularjs</artifactId>
			<version>1.6.2</version>
		</dependency>

		<dependency>
			<groupId>org.webjars</groupId>
			<artifactId>webjars-locator</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>

			</plugin>
			<plugin>
			  <groupId>org.ensime.maven.plugins</groupId>
			  <artifactId>ensime-maven</artifactId>
			  <version>1.1.0</version>
			</plugin>
		</plugins>
	</build>


</project>
`
Gradle is working fantastic (last update really sped up indexing, so cheers for that!), so I am also including a snippet of my zshrc file:
`export MEGHANADA_MAVEN_PATH=$HOME/.sdkman/candidates/maven/current/bin/mvn
export PATH=$PATH:$MEGHANADA_MAVEN_PATH`

Please let me know if anyone has similiar issue, or you can identify mine. And thanks for this project, It is my best bet for kicking intellij to the curb!

<M-.> showDeclaration java.lang.NullPointerException: null

After I press the < m - .> show Declaration , emacs crash, 100% CPU.

I want to goto declaration interface.
image

it's interface.
image

server.log

[2017-03-24 16:36:01,051][ERROR][CommandHandler: 288] showDeclaration - Catching
java.lang.NullPointerException: null
at meghanada.utils.ClassNameUtils.vaArgsToArray(ClassNameUtils.java:435) ~[meghanada-0.7.0.jar:?]
at meghanada.utils.ClassName.(ClassName.java:16) ~[meghanada-0.7.0.jar:?]
at meghanada.reflect.asm.CachedASMReflector.reflect(CachedASMReflector.java:342) ~[meghanada-0.7.0.jar:?]
at meghanada.reflect.asm.CachedASMReflector.reflectMethodStream(CachedASMReflector.java:376) ~[meghanada-0.7.0.jar:?]
at meghanada.docs.declaration.DeclarationSearcher.lambda$searchMethodCall$7(DeclarationSearcher.java:120) ~[meghanada-0.7.0.jar:?]
at java.util.Optional.map(Optional.java:215) ~[?:1.8.0_111]
at meghanada.docs.declaration.DeclarationSearcher.searchMethodCall(DeclarationSearcher.java:115) ~[meghanada-0.7.0.jar:?]
at meghanada.docs.declaration.DeclarationSearcher.lambda$null$12(DeclarationSearcher.java:218) ~[meghanada-0.7.0.jar:?]
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[?:1.8.0_111]
at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1351) ~[?:1.8.0_111]
at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126) ~[?:1.8.0_111]
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498) ~[?:1.8.0_111]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) ~[?:1.8.0_111]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[?:1.8.0_111]
at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152) ~[?:1.8.0_111]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:1.8.0_111]
at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464) ~[?:1.8.0_111]
at meghanada.docs.declaration.DeclarationSearcher.lambda$searchDeclaration$13(DeclarationSearcher.java:220) ~[meghanada-0.7.0.jar:?]
at java.util.Optional.flatMap(Optional.java:241) ~[?:1.8.0_111]
at meghanada.docs.declaration.DeclarationSearcher.searchDeclaration(DeclarationSearcher.java:217) ~[meghanada-0.7.0.jar:?]
at meghanada.session.Session.showDeclaration(Session.java:595) ~[meghanada-0.7.0.jar:?]
at meghanada.server.CommandHandler.showDeclaration(CommandHandler.java:281) ~[meghanada-0.7.0.jar:?]
at meghanada.server.emacs.EmacsServer.lambda$dispatch$17(EmacsServer.java:245) ~[meghanada-0.7.0.jar:?]
at com.leacox.motif.matching.Matching1.lambda$get$15(Matching1.java:45) ~[meghanada-0.7.0.jar:?]
at com.leacox.motif.matching.Pattern$1.apply(Pattern.java:40) ~[meghanada-0.7.0.jar:?]
at com.leacox.motif.matching.FluentMatchingR.getMatch(FluentMatchingR.java:118) ~[meghanada-0.7.0.jar:?]
at meghanada.server.emacs.EmacsServer.dispatch(EmacsServer.java:277) ~[meghanada-0.7.0.jar:?]
at meghanada.server.emacs.EmacsServer.lambda$acceptConnection$2(EmacsServer.java:125) ~[meghanada-0.7.0.jar:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_111]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_111]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_111]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_111]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_111]
[2017-03-24 16:36:01,059][ERROR][EmacsServer : 138] lambda$acceptConnectio - Catching

slf4j conflicts with log4j?

Hello,

My spring boot project uses gradle for build and slf4j for logging, when I run meghanada-run-junit-test-case command, it throws this
Exception in thread "main" java.lang.ClassCastException: org.apache.logging.slf4j.SLF4JLoggerContext cannot be cast to org.apache.logging.log4j.core.LoggerContext

My project has not log4j dependency, I can run meghanada-run-task to run the gradle test task without any problem. The test can also be run under IntelliJ fine, so I guess it's meghanada introduced the log4j package?

Tried to include compile group: 'org.slf4j', name: 'log4j-over-slf4j', version: '1.7.25' package into my project but it doesn't solve the issue.

Compile message: null

I have a problem when trying to compile using the meghanada-server:

[2017-10-12 17:06:13,203][INFO ][Main          : 125] main                   - Meghanada-Server Version:0.8.3-507f400
[2017-10-12 17:06:24,076][INFO ][Session       : 164] loadProject            - load project from cache. projectRoot:root
[2017-10-12 17:06:24,178][INFO ][EmacsServer   : 308] startServer            - Start server Listen localhost:55555
[2017-10-12 17:06:24,182][INFO ][EmacsServer   : 329] accept                 - client connected
[2017-10-12 17:06:24,565][INFO ][Config        : 115] timeItF                - create class index ... read 2 jars. elapsed:382.9 ms
[2017-10-12 17:06:24,577][INFO ][CacheEventSubs:  66] analyze                - start analyze sources ...
[2017-10-12 17:06:25,708][ERROR][Project       : 310] compileJava            - Catching
java.util.NoSuchElementException: null
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_101]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_101]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_101]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_101]
	at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:598) ~[?:1.8.0_101]
	at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677) ~[?:1.8.0_101]
	at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:735) ~[?:1.8.0_101]
	at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:160) ~[?:1.8.0_101]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:174) ~[?:1.8.0_101]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233) ~[?:1.8.0_101]
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[?:1.8.0_101]
	at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:583) ~[?:1.8.0_101]
	at meghanada.analyze.TreeAnalyzer.analyze(TreeAnalyzer.java:456) ~[meghanada-0.8.3.jar:?]
	at meghanada.analyze.JavaAnalyzer.runAnalyzeAndCompile(JavaAnalyzer.java:172) ~[meghanada-0.8.3.jar:?]
	at meghanada.analyze.JavaAnalyzer.analyzeAndCompile(JavaAnalyzer.java:126) ~[meghanada-0.8.3.jar:?]
	at meghanada.project.Project.compileJava(Project.java:295) ~[meghanada-0.8.3.jar:?]
	at meghanada.project.gradle.GradleProject.compileJava(GradleProject.java:473) ~[meghanada-0.8.3.jar:?]
	at meghanada.project.gradle.GradleProject.compileJava(GradleProject.java:463) ~[meghanada-0.8.3.jar:?]
	at meghanada.session.subscribe.CacheEventSubscriber.lambda$analyze$3(CacheEventSubscriber.java:71) ~[meghanada-0.8.3.jar:?]
	at meghanada.config.Config.timeItF(Config.java:111) [meghanada-0.8.3.jar:?]
	at meghanada.session.subscribe.CacheEventSubscriber.analyze(CacheEventSubscriber.java:67) [meghanada-0.8.3.jar:?]
	at meghanada.session.subscribe.CacheEventSubscriber.on(CacheEventSubscriber.java:31) [meghanada-0.8.3.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_101]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_101]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_101]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_101]
	at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) [meghanada-0.8.3.jar:?]
	at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) [meghanada-0.8.3.jar:?]
	at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) [meghanada-0.8.3.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_101]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_101]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_101]
Caused by: java.util.NoSuchElementException: No value present
	at java.util.Optional.get(Optional.java:135) ~[?:1.8.0_101]
	at meghanada.analyze.TreeAnalyzer.analyzeIdent(TreeAnalyzer.java:1543) ~[meghanada-0.8.3.jar:?]
	at meghanada.analyze.TreeAnalyzer.analyzeParsedTree(TreeAnalyzer.java:637) ~[meghanada-0.8.3.jar:?]
	at meghanada.analyze.TreeAnalyzer.analyzeParsedTree(TreeAnalyzer.java:861) ~[meghanada-0.8.3.jar:?]
	at meghanada.analyze.TreeAnalyzer.analyzeTopLevelClass(TreeAnalyzer.java:506) ~[meghanada-0.8.3.jar:?]
	at meghanada.analyze.TreeAnalyzer.analyzeCompilationUnitTree(TreeAnalyzer.java:430) ~[meghanada-0.8.3.jar:?]
	at meghanada.analyze.TreeAnalyzer.analyzeUnit(TreeAnalyzer.java:486) ~[meghanada-0.8.3.jar:?]
	at meghanada.analyze.TreeAnalyzer.tryAnalyzeUnit(TreeAnalyzer.java:466) ~[meghanada-0.8.3.jar:?]
	at meghanada.analyze.TreeAnalyzer.lambda$analyze$5(TreeAnalyzer.java:456) ~[meghanada-0.8.3.jar:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[?:1.8.0_101]
	at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[?:1.8.0_101]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[?:1.8.0_101]
	at java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:291) ~[?:1.8.0_101]
	at java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:731) ~[?:1.8.0_101]
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) ~[?:1.8.0_101]
	at java.util.concurrent.ForkJoinPool$WorkQueue.execLocalTasks(ForkJoinPool.java:1040) ~[?:1.8.0_101]
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1058) ~[?:1.8.0_101]
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) ~[?:1.8.0_101]
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) ~[?:1.8.0_101]
[2017-10-12 17:06:25,778][WARN ][CacheEventSubs:  85] lambda$analyze$3       - compile message  null

It seems like the problem arises from:

String className = currentClass.get().name;

Where there is no check for if currentClass has a value.

Is this a bug in the implementation, or is it me who are using the tool wrong?

NullPointerException during call to showDeclaration

I got another NullPointer exception during my random browsing through my code, not sure at what point showDeclaration is triggered, but here is my stack trace:

[2017-05-17 16:13:06,396][ERROR][CommandHandler: 292] showDeclaration        - Catching
java.lang.NullPointerException: null
	at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:770) ~[meghanada-0.7.6.jar:?]
	at com.google.common.base.Joiner.toString(Joiner.java:454) ~[meghanada-0.7.6.jar:?]
	at com.google.common.base.Joiner.appendTo(Joiner.java:106) ~[meghanada-0.7.6.jar:?]
	at com.google.common.base.Joiner.appendTo(Joiner.java:154) ~[meghanada-0.7.6.jar:?]
	at com.google.common.base.Joiner.join(Joiner.java:197) ~[meghanada-0.7.6.jar:?]
	at com.google.common.base.Joiner.join(Joiner.java:187) ~[meghanada-0.7.6.jar:?]
	at meghanada.docs.declaration.DeclarationSearcher.lambda$searchMethodCall$8(DeclarationSearcher.java:166) ~[meghanada-0.7.6.jar:?]
	at java.util.Optional.map(Optional.java:215) ~[?:1.8.0_121]
	at meghanada.docs.declaration.DeclarationSearcher.searchMethodCall(DeclarationSearcher.java:131) ~[meghanada-0.7.6.jar:?]
	at meghanada.docs.declaration.DeclarationSearcher.lambda$null$13(DeclarationSearcher.java:258) ~[meghanada-0.7.6.jar:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[?:1.8.0_121]
	at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1351) ~[?:1.8.0_121]
	at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126) ~[?:1.8.0_121]
	at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498) ~[?:1.8.0_121]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) ~[?:1.8.0_121]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[?:1.8.0_121]
	at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152) ~[?:1.8.0_121]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:1.8.0_121]
	at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464) ~[?:1.8.0_121]
	at meghanada.docs.declaration.DeclarationSearcher.lambda$searchDeclaration$14(DeclarationSearcher.java:260) ~[meghanada-0.7.6.jar:?]
	at java.util.Optional.flatMap(Optional.java:241) ~[?:1.8.0_121]
	at meghanada.docs.declaration.DeclarationSearcher.searchDeclaration(DeclarationSearcher.java:254) ~[meghanada-0.7.6.jar:?]
	at meghanada.session.Session.showDeclaration(Session.java:668) ~[meghanada-0.7.6.jar:?]
	at meghanada.server.CommandHandler.showDeclaration(CommandHandler.java:285) ~[meghanada-0.7.6.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$dispatch$14(EmacsServer.java:184) ~[meghanada-0.7.6.jar:?]
	at com.leacox.motif.matching.Matching1.lambda$get$15(Matching1.java:45) ~[meghanada-0.7.6.jar:?]
	at com.leacox.motif.matching.Pattern$1.apply(Pattern.java:40) ~[meghanada-0.7.6.jar:?]
	at com.leacox.motif.matching.FluentMatchingR.getMatch(FluentMatchingR.java:118) ~[meghanada-0.7.6.jar:?]
	at meghanada.server.emacs.EmacsServer.dispatch(EmacsServer.java:226) ~[meghanada-0.7.6.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$acceptConnection$22(EmacsServer.java:306) ~[meghanada-0.7.6.jar:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_121]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_121]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
[2017-05-17 16:13:06,413][ERROR][EmacsServer   : 319] lambda$acceptConnectio - Catching
meghanada.server.CommandException: java.lang.NullPointerException
	at meghanada.server.CommandHandler.showDeclaration(CommandHandler.java:293) ~[meghanada-0.7.6.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$dispatch$14(EmacsServer.java:184) ~[meghanada-0.7.6.jar:?]
	at com.leacox.motif.matching.Matching1.lambda$get$15(Matching1.java:45) ~[meghanada-0.7.6.jar:?]
	at com.leacox.motif.matching.Pattern$1.apply(Pattern.java:40) ~[meghanada-0.7.6.jar:?]
	at com.leacox.motif.matching.FluentMatchingR.getMatch(FluentMatchingR.java:118) ~[meghanada-0.7.6.jar:?]
	at meghanada.server.emacs.EmacsServer.dispatch(EmacsServer.java:226) ~[meghanada-0.7.6.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$acceptConnection$22(EmacsServer.java:306) ~[meghanada-0.7.6.jar:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_121]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_121]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
Caused by: java.lang.NullPointerException
	at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:770) ~[meghanada-0.7.6.jar:?]
	at com.google.common.base.Joiner.toString(Joiner.java:454) ~[meghanada-0.7.6.jar:?]
	at com.google.common.base.Joiner.appendTo(Joiner.java:106) ~[meghanada-0.7.6.jar:?]
	at com.google.common.base.Joiner.appendTo(Joiner.java:154) ~[meghanada-0.7.6.jar:?]
	at com.google.common.base.Joiner.join(Joiner.java:197) ~[meghanada-0.7.6.jar:?]
	at com.google.common.base.Joiner.join(Joiner.java:187) ~[meghanada-0.7.6.jar:?]
	at meghanada.docs.declaration.DeclarationSearcher.lambda$searchMethodCall$8(DeclarationSearcher.java:166) ~[meghanada-0.7.6.jar:?]
	at java.util.Optional.map(Optional.java:215) ~[?:1.8.0_121]
	at meghanada.docs.declaration.DeclarationSearcher.searchMethodCall(DeclarationSearcher.java:131) ~[meghanada-0.7.6.jar:?]
	at meghanada.docs.declaration.DeclarationSearcher.lambda$null$13(DeclarationSearcher.java:258) ~[meghanada-0.7.6.jar:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[?:1.8.0_121]
	at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1351) ~[?:1.8.0_121]
	at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126) ~[?:1.8.0_121]
	at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498) ~[?:1.8.0_121]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) ~[?:1.8.0_121]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[?:1.8.0_121]
	at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152) ~[?:1.8.0_121]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:1.8.0_121]
	at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464) ~[?:1.8.0_121]
	at meghanada.docs.declaration.DeclarationSearcher.lambda$searchDeclaration$14(DeclarationSearcher.java:260) ~[meghanada-0.7.6.jar:?]
	at java.util.Optional.flatMap(Optional.java:241) ~[?:1.8.0_121]
	at meghanada.docs.declaration.DeclarationSearcher.searchDeclaration(DeclarationSearcher.java:254) ~[meghanada-0.7.6.jar:?]
	at meghanada.session.Session.showDeclaration(Session.java:668) ~[meghanada-0.7.6.jar:?]
	at meghanada.server.CommandHandler.showDeclaration(CommandHandler.java:285) ~[meghanada-0.7.6.jar:?]
	... 11 more
[2017-05-17 16:13:06,420][INFO ][EmacsServer   : 326] lambda$acceptConnectio - client disconnect

Meghanada server uses ~400% CPU for 21 minutes while analyzing project

When I invoke meghanada-server for my Java project, it uses all of my 4 cores for 21.77 minutes while analyzing the project. Unfortunately that means I can almost never enable it while running on battery on my laptop or else it will be depleted very quickly.

Is there any way to speed this up? Or, could the analysis be cached somehow so it doesn't have to re-analyze when I restart Emacs?

I'm happy to provide the entire log, if that helps, the final message is:

[2016-10-03 14:00:38,267][INFO ][CacheEventSubs:  66] on                     - project analyzed elapsed:21.77 min

NPE CommandHandler showDeclaration on dev

Note: I've tested with the dev branch and copied the jar to 0.7.5.jar to make things easier

Caused by: java.lang.NullPointerException
	at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:770) ~[meghanada-0.7.5.jar:?]
	at com.google.common.base.Joiner.toString(Joiner.java:454) ~[meghanada-0.7.5.jar:?]
	at com.google.common.base.Joiner.appendTo(Joiner.java:106) ~[meghanada-0.7.5.jar:?]
	at com.google.common.base.Joiner.appendTo(Joiner.java:154) ~[meghanada-0.7.5.jar:?]
	at com.google.common.base.Joiner.join(Joiner.java:197) ~[meghanada-0.7.5.jar:?]
	at com.google.common.base.Joiner.join(Joiner.java:187) ~[meghanada-0.7.5.jar:?]
	at meghanada.docs.declaration.DeclarationSearcher.lambda$searchMethodCall$8(DeclarationSearcher.java:141) ~[meghanada-0.7.5.jar:?]
	at meghanada.docs.declaration.DeclarationSearcher$$Lambda$289/1849122699.apply(Unknown Source) ~[?:?]
	at java.util.Optional.map(Optional.java:215) ~[?:1.8.0_51]
	at meghanada.docs.declaration.DeclarationSearcher.searchMethodCall(DeclarationSearcher.java:116) ~[meghanada-0.7.5.jar:?]
	at meghanada.docs.declaration.DeclarationSearcher$$Lambda$279/516879897.apply(Unknown Source) ~[?:?]
	at meghanada.docs.declaration.DeclarationSearcher.lambda$searchDeclaration$13(DeclarationSearcher.java:222) ~[meghanada-0.7.5.jar:?]
	at meghanada.docs.declaration.DeclarationSearcher$$Lambda$283/580245792.apply(Unknown Source) ~[?:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[?:1.8.0_51]
	at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1351) ~[?:1.8.0_51]
	at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126) ~[?:1.8.0_51]
	at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:529) ~[?:1.8.0_51]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:516) ~[?:1.8.0_51]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502) ~[?:1.8.0_51]
	at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152) ~[?:1.8.0_51]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:1.8.0_51]
	at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464) ~[?:1.8.0_51]
	at meghanada.docs.declaration.DeclarationSearcher.lambda$searchDeclaration$14(DeclarationSearcher.java:224) ~[meghanada-0.7.5.jar:?]
	at meghanada.docs.declaration.DeclarationSearcher$$Lambda$282/803597157.apply(Unknown Source) ~[?:?]
	at java.util.Optional.flatMap(Optional.java:241) ~[?:1.8.0_51]
	at meghanada.docs.declaration.DeclarationSearcher.searchDeclaration(DeclarationSearcher.java:221) ~[meghanada-0.7.5.jar:?]
	at meghanada.session.Session.showDeclaration(Session.java:642) ~[meghanada-0.7.5.jar:?]
	at meghanada.server.CommandHandler.showDeclaration(CommandHandler.java:281) ~[meghanada-0.7.5.jar:?]
	... 14 more
[2017-05-16 00:48:30,161][INFO ][EmacsServer   : 148] lambda$acceptConnectio - client disconnect

IllegalArgumentException when parsing project

When I try to load up my project with megahanada, I get the following stacktrace from the server:

[2017-11-27 14:15:01,987][INFO ][Main          : 125] main                   - Meghanada-Server Version:0.8.3-507f400
[2017-11-27 14:15:03,639][INFO ][GradleProject : 139] parseProject           - loading gradle project:/home/hinmanm/es/elasticsearch/core/build.gradle
Downloading https://services.gradle.org/distributions/gradle-4.0.1-bin.zip
................................................................
Unzipping /home/hinmanm/.gradle/wrapper/dists/gradle-4.0.1-bin/82ajq2mkcvzmyzskx3tahg8op/gradle-4.0.1-bin.zip to /home/hinmanm/.gradle/wrapper/dists/gradle-4.0.1-bin/82ajq2mkcvzmyzskx3tahg8op
Set executable permissions for: /home/hinmanm/.gradle/wrapper/dists/gradle-4.0.1-bin/82ajq2mkcvzmyzskx3tahg8op/gradle-4.0.1/bin/gradle
[2017-11-27 14:17:17,655][INFO ][Session       : 192] loadProject            - loaded project:/home/hinmanm/es/elasticsearch/core elapsed:2.234 min
[2017-11-27 14:17:17,853][INFO ][EmacsServer   : 308] startServer            - Start server Listen localhost:55555
[2017-11-27 14:17:17,860][INFO ][EmacsServer   : 329] accept                 - client connected
[2017-11-27 14:17:17,924][INFO ][GradleProject : 139] parseProject           - loading gradle project:/home/hinmanm/es/elasticsearch/core/cli/build.gradle
[2017-11-27 14:17:25,435][INFO ][Session       : 192] loadProject            - loaded project:/home/hinmanm/es/elasticsearch/core/cli elapsed:7.512 s
[2017-11-27 14:17:25,436][INFO ][ProjectDepende: 157] lambda$getProjectOutpu - skip build project core-cli
[2017-11-27 14:17:25,438][INFO ][ProjectDepende: 157] lambda$getProjectOutpu - skip build project core-cli
[2017-11-27 14:17:25,498][INFO ][GradleProject : 139] parseProject           - loading gradle project:/home/hinmanm/es/elasticsearch/client/rest/build.gradle
[2017-11-27 14:17:35,450][INFO ][Session       : 192] loadProject            - loaded project:/home/hinmanm/es/elasticsearch/client/rest elapsed:9.952 s
[2017-11-27 14:17:35,451][INFO ][ProjectDepende: 157] lambda$getProjectOutpu - skip build project client-rest
[2017-11-27 14:17:35,736][INFO ][GradleProject : 139] parseProject           - loading gradle project:/home/hinmanm/es/elasticsearch/test/framework/build.gradle
[2017-11-27 14:17:41,215][INFO ][Session       : 192] loadProject            - loaded project:/home/hinmanm/es/elasticsearch/test/framework elapsed:5.480 s
[2017-11-27 14:17:41,224][INFO ][ProjectDepende: 157] lambda$getProjectOutpu - skip build project test-framework
[2017-11-27 14:17:41,232][INFO ][ProjectDepende: 157] lambda$getProjectOutpu - skip build project core-cli
[2017-11-27 14:17:41,753][INFO ][Config        : 115] timeItF                - create class index ... read 79 jars. elapsed:517.0 ms
[2017-11-27 14:17:41,766][ERROR][Session       :  34] lambda$new$0           - java.lang.IllegalArgumentException
java.lang.RuntimeException: java.lang.IllegalArgumentException
	at meghanada.config.Config.timeItF(Config.java:113) ~[meghanada-0.8.3.jar:?]
	at meghanada.session.subscribe.CacheEventSubscriber.analyze(CacheEventSubscriber.java:55) ~[meghanada-0.8.3.jar:?]
	at meghanada.session.subscribe.CacheEventSubscriber.on(CacheEventSubscriber.java:31) ~[meghanada-0.8.3.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_111]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_111]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_111]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_111]
	at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) ~[meghanada-0.8.3.jar:?]
	at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) ~[meghanada-0.8.3.jar:?]
	at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) [meghanada-0.8.3.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_111]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_111]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_111]
Caused by: java.lang.IllegalArgumentException
	at org.objectweb.asm.ClassReader.<init>(Unknown Source) ~[meghanada-0.8.3.jar:?]
	at org.objectweb.asm.ClassReader.<init>(Unknown Source) ~[meghanada-0.8.3.jar:?]
	at org.objectweb.asm.ClassReader.<init>(Unknown Source) ~[meghanada-0.8.3.jar:?]
	at meghanada.reflect.asm.ASMReflector.readClassIndex(ASMReflector.java:146) ~[meghanada-0.8.3.jar:?]
	at meghanada.reflect.asm.ASMReflector.lambda$getClasses$4(ASMReflector.java:310) ~[meghanada-0.8.3.jar:?]
	at meghanada.utils.FunctionUtils.lambda$wrapIOConsumer$2(FunctionUtils.java:34) ~[meghanada-0.8.3.jar:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[?:1.8.0_111]
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) ~[?:1.8.0_111]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[?:1.8.0_111]
	at java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:291) ~[?:1.8.0_111]
	at java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:731) ~[?:1.8.0_111]
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) ~[?:1.8.0_111]
	at java.util.concurrent.ForkJoinPool.helpComplete(ForkJoinPool.java:1870) ~[?:1.8.0_111]
	at java.util.concurrent.ForkJoinPool.externalHelpComplete(ForkJoinPool.java:2467) ~[?:1.8.0_111]
	at java.util.concurrent.ForkJoinTask.externalAwaitDone(ForkJoinTask.java:324) ~[?:1.8.0_111]
	at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:405) ~[?:1.8.0_111]
	at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:734) ~[?:1.8.0_111]
	at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:160) ~[?:1.8.0_111]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:174) ~[?:1.8.0_111]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233) ~[?:1.8.0_111]
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[?:1.8.0_111]
	at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:583) ~[?:1.8.0_111]
	at meghanada.reflect.asm.ASMReflector.getClasses(ASMReflector.java:297) ~[meghanada-0.8.3.jar:?]
	at meghanada.reflect.asm.CachedASMReflector.lambda$createClassIndexes$1(CachedASMReflector.java:150) ~[meghanada-0.8.3.jar:?]
	at meghanada.utils.FunctionUtils.lambda$wrapIOConsumer$2(FunctionUtils.java:34) ~[meghanada-0.8.3.jar:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[?:1.8.0_111]
	at java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1548) ~[?:1.8.0_111]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[?:1.8.0_111]
	at java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:291) ~[?:1.8.0_111]
	at java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:731) ~[?:1.8.0_111]
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) ~[?:1.8.0_111]
	at java.util.concurrent.ForkJoinPool.helpComplete(ForkJoinPool.java:1870) ~[?:1.8.0_111]
	at java.util.concurrent.ForkJoinPool.externalHelpComplete(ForkJoinPool.java:2467) ~[?:1.8.0_111]
	at java.util.concurrent.ForkJoinTask.externalAwaitDone(ForkJoinTask.java:324) ~[?:1.8.0_111]
	at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:405) ~[?:1.8.0_111]
	at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:734) ~[?:1.8.0_111]
	at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:160) ~[?:1.8.0_111]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:174) ~[?:1.8.0_111]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233) ~[?:1.8.0_111]
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[?:1.8.0_111]
	at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:583) ~[?:1.8.0_111]
	at meghanada.reflect.asm.CachedASMReflector.createClassIndexes(CachedASMReflector.java:132) ~[meghanada-0.8.3.jar:?]
	at meghanada.session.subscribe.CacheEventSubscriber.lambda$analyze$2(CacheEventSubscriber.java:59) ~[meghanada-0.8.3.jar:?]
	at meghanada.config.Config.timeItF(Config.java:111) ~[meghanada-0.8.3.jar:?]
	... 12 more

Sorry it's not much to go on, the only thing I've done was meghanada-client-connect

meghanada-run-junit-test-case results in: java.lang.NoSuchMethodError: org.apache.logging.log4j.Logger.debug(Ljava/lang/String;Ljava/lang/Object;)V

14:46:07.867 [main] DEBUG meghanada.reflect.asm.CachedASMReflector - start createClassIndexes
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.logging.log4j.Logger.debug(Ljava/lang/String;Ljava/lang/Object;)V
at meghanada.config.Config.(Config.java:61)
at meghanada.config.Config.load(Config.java:77)
at meghanada.reflect.asm.ASMReflector.(ASMReflector.java:63)
at meghanada.reflect.asm.ASMReflector.getInstance(ASMReflector.java:68)
at meghanada.reflect.asm.CachedASMReflector.lambda$createClassIndexes$1(CachedASMReflector.java:149)
at meghanada.utils.FunctionUtils.lambda$wrapIOConsumer$2(FunctionUtils.java:34)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1553)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:291)
at java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:731)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:401)
at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:734)
at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:160)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:583)
at meghanada.reflect.asm.CachedASMReflector.createClassIndexes(CachedASMReflector.java:133)
at meghanada.junit.TestRunner.(TestRunner.java:43)
at meghanada.junit.TestRunner.main(TestRunner.java:50)

Proposal: create the .meghanada directory outside the project directory

The idea is to create the .meghanada directory in a path different form te project root so that destructive commands like git clean -fdx won't cause problems.

Let's say the project is located in ~/Projects/javaproject, absolute path /home/user1/Projects/javaproject.
What I propose is to have the .meghanada directory be located at ~/.cache/meghanada/home/user1/Projects/javaproject. Another option would be /tmp/meghanada/home/user1/Projects/javaproject.

This is how I imagine it:

  1. A variable in emacs: (setq meghanada-directory-in-project t) which by default is t to control this behaviour.
  2. A variable in emacs: (setq meghanada-direcotry-path "~/cache/meghanada") that controlls the location of the direcotry. Default location TBD.
  3. A cli argument --dir-in-project with values true or false which controlls the behaviour on the server.
  4. A cli argument --dir-path with te path of the directory in case 3. is false.
  5. A fallback, in case the path is too long revert to creating it in the same directory. This is highly unlinkely to happen but in case it does the server should at least try to work.

I would love for this behaviour to be the default but because of 5) controlling this behaviour from my emacs config seems reasonable.

I am willing to submit PR's with the implementation. But note that I am not an emacs/java expert so it will take some time and it will need some carefull reviews.

ParseProblemException when trying to jump to a declaration.

When I try to jump to the declaration of a private member of a class, meghanada server reports an exception, and the client loses the connection to the server.

Following is the stacktrace:

[2017-05-18 12:45:19,562][ERROR][CommandHandler: 203] jumpDeclaration - Catching
com.github.javaparser.ParseProblemException: (line 25,col 92) Parse error. Found "null", expected one of "!=" "%" "%=" "&" "&&" "&=" ")" "" "=" "+" "+=" "," "-" "-=" "->" "/" "/=" "::" "<" "<<=" "<=" "=" "==" ">" ">=" ">>=" ">>>=" "?" "^" "^=" "instanceof" "|" "|=" "||"
Problem stacktrace :
com.github.javaparser.GeneratedJavaParser.generateParseException(GeneratedJavaParser.java:9873)
com.github.javaparser.GeneratedJavaParser.jj_consume_token(GeneratedJavaParser.java:9729)
com.github.javaparser.GeneratedJavaParser.Arguments(GeneratedJavaParser.java:3440)
com.github.javaparser.GeneratedJavaParser.AllocationExpression(GeneratedJavaParser.java:3521)
com.github.javaparser.GeneratedJavaParser.PrimaryPrefix(GeneratedJavaParser.java:3145)
com.github.javaparser.GeneratedJavaParser.PrimaryExpression(GeneratedJavaParser.java:2862)
com.github.javaparser.GeneratedJavaParser.PostfixExpression(GeneratedJavaParser.java:2766)
com.github.javaparser.GeneratedJavaParser.UnaryExpressionNotPlusMinus(GeneratedJavaParser.java:2751)
com.github.javaparser.GeneratedJavaParser.UnaryExpression(GeneratedJavaParser.java:2658)
com.github.javaparser.GeneratedJavaParser.MultiplicativeExpression(GeneratedJavaParser.java:2549)
com.github.javaparser.GeneratedJavaParser.AdditiveExpression(GeneratedJavaParser.java:2511)
com.github.javaparser.GeneratedJavaParser.ShiftExpression(GeneratedJavaParser.java:2475)
com.github.javaparser.GeneratedJavaParser.RelationalExpression(GeneratedJavaParser.java:2425)
com.github.javaparser.GeneratedJavaParser.InstanceOfExpression(GeneratedJavaParser.java:2405)
com.github.javaparser.GeneratedJavaParser.EqualityExpression(GeneratedJavaParser.java:2367)
com.github.javaparser.GeneratedJavaParser.AndExpression(GeneratedJavaParser.java:2345)
com.github.javaparser.GeneratedJavaParser.ExclusiveOrExpression(GeneratedJavaParser.java:2324)
com.github.javaparser.GeneratedJavaParser.InclusiveOrExpression(GeneratedJavaParser.java:2303)
com.github.javaparser.GeneratedJavaParser.ConditionalAndExpression(GeneratedJavaParser.java:2282)
com.github.javaparser.GeneratedJavaParser.ConditionalOrExpression(GeneratedJavaParser.java:2261)
com.github.javaparser.GeneratedJavaParser.ConditionalExpression(GeneratedJavaParser.java:2242)
com.github.javaparser.GeneratedJavaParser.Expression(GeneratedJavaParser.java:2075)
com.github.javaparser.GeneratedJavaParser.VariableInitializer(GeneratedJavaParser.java:1019)
com.github.javaparser.GeneratedJavaParser.VariableDeclarator(GeneratedJavaParser.java:940)
com.github.javaparser.GeneratedJavaParser.FieldDeclaration(GeneratedJavaParser.java:912)
com.github.javaparser.GeneratedJavaParser.ClassOrInterfaceBodyDeclaration(GeneratedJavaParser.java:856)
com.github.javaparser.GeneratedJavaParser.ClassOrInterfaceBody(GeneratedJavaParser.java:783)
com.github.javaparser.GeneratedJavaParser.ClassOrInterfaceDeclaration(GeneratedJavaParser.java:436)
com.github.javaparser.GeneratedJavaParser.CompilationUnit(GeneratedJavaParser.java:195)
com.github.javaparser.JavaParser.parse(JavaParser.java:125)
com.github.javaparser.JavaParser.simplifiedParse(JavaParser.java:393)
com.github.javaparser.JavaParser.parse(JavaParser.java:252)
meghanada.location.LocationSearcher.searchLocationFromFile(LocationSearcher.java:87)
meghanada.location.LocationSearcher.searchLocationFromDecompileFile(LocationSearcher.java:636)
meghanada.location.LocationSearcher.lambda$getLocationFromSrcOrDecompile$22(LocationSearcher.java:577)
meghanada.utils.FunctionUtils.lambda$wrapIO$1(FunctionUtils.java:24)
java.util.Optional.orElseGet(Optional.java:267)
meghanada.location.LocationSearcher.getLocationFromSrcOrDecompile(LocationSearcher.java:576)
meghanada.location.LocationSearcher.searchFromDependency(LocationSearcher.java:551)
meghanada.location.LocationSearcher.lambda$null$18(LocationSearcher.java:479)
meghanada.utils.FunctionUtils.lambda$wrapIO$1(FunctionUtils.java:24)
java.util.Optional.orElseGet(Optional.java:267)
meghanada.location.LocationSearcher.lambda$getFQCNLocation$19(LocationSearcher.java:479)
meghanada.utils.FunctionUtils.lambda$wrapIO$1(FunctionUtils.java:24)
java.util.Optional.orElseGet(Optional.java:267)
meghanada.location.LocationSearcher.getFQCNLocation(LocationSearcher.java:474)
meghanada.location.LocationSearcher.lambda$searchLocalVariable$1(LocationSearcher.java:277)
java.util.Optional.map(Optional.java:215)
meghanada.location.LocationSearcher.searchLocalVariable(LocationSearcher.java:266)
meghanada.location.LocationSearcher.lambda$searchDeclarationLocation$4(LocationSearcher.java:313)
java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1351)
java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
meghanada.location.LocationSearcher.searchDeclarationLocation(LocationSearcher.java:315)
meghanada.session.Session.jumpDeclaration(Session.java:605)
meghanada.server.CommandHandler.jumpDeclaration(CommandHandler.java:197)
meghanada.server.emacs.EmacsServer.lambda$dispatch$13(EmacsServer.java:176)
com.leacox.motif.matching.Matching1.lambda$get$15(Matching1.java:45)
com.leacox.motif.matching.Pattern$1.apply(Pattern.java:40)
com.leacox.motif.matching.FluentMatchingR.getMatch(FluentMatchingR.java:118)
meghanada.server.emacs.EmacsServer.dispatch(EmacsServer.java:226)
meghanada.server.emacs.EmacsServer.lambda$acceptConnection$22(EmacsServer.java:306)
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
java.util.concurrent.FutureTask.run(FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)

at com.github.javaparser.JavaParser.simplifiedParse(JavaParser.java:397) ~[meghanada-0.7.6.jar:?]
at com.github.javaparser.JavaParser.parse(JavaParser.java:252) ~[meghanada-0.7.6.jar:?]
at meghanada.location.LocationSearcher.searchLocationFromFile(LocationSearcher.java:87) ~[meghanada-0.7.6.jar:?]
at meghanada.location.LocationSearcher.searchLocationFromDecompileFile(LocationSearcher.java:636) ~[meghanada-0.7.6.jar:?]
at meghanada.location.LocationSearcher.lambda$getLocationFromSrcOrDecompile$22(LocationSearcher.java:577) ~[meghanada-0.7.6.jar:?]
at meghanada.utils.FunctionUtils.lambda$wrapIO$1(FunctionUtils.java:24) ~[meghanada-0.7.6.jar:?]
at java.util.Optional.orElseGet(Optional.java:267) ~[?:1.8.0_121]
at meghanada.location.LocationSearcher.getLocationFromSrcOrDecompile(LocationSearcher.java:576) ~[meghanada-0.7.6.jar:?]
at meghanada.location.LocationSearcher.searchFromDependency(LocationSearcher.java:551) ~[meghanada-0.7.6.jar:?]
at meghanada.location.LocationSearcher.lambda$null$18(LocationSearcher.java:479) ~[meghanada-0.7.6.jar:?]
at meghanada.utils.FunctionUtils.lambda$wrapIO$1(FunctionUtils.java:24) ~[meghanada-0.7.6.jar:?]
at java.util.Optional.orElseGet(Optional.java:267) ~[?:1.8.0_121]
at meghanada.location.LocationSearcher.lambda$getFQCNLocation$19(LocationSearcher.java:479) ~[meghanada-0.7.6.jar:?]
at meghanada.utils.FunctionUtils.lambda$wrapIO$1(FunctionUtils.java:24) ~[meghanada-0.7.6.jar:?]
at java.util.Optional.orElseGet(Optional.java:267) ~[?:1.8.0_121]
at meghanada.location.LocationSearcher.getFQCNLocation(LocationSearcher.java:474) ~[meghanada-0.7.6.jar:?]
at meghanada.location.LocationSearcher.lambda$searchLocalVariable$1(LocationSearcher.java:277) ~[meghanada-0.7.6.jar:?]
at java.util.Optional.map(Optional.java:215) ~[?:1.8.0_121]
at meghanada.location.LocationSearcher.searchLocalVariable(LocationSearcher.java:266) ~[meghanada-0.7.6.jar:?]
at meghanada.location.LocationSearcher.lambda$searchDeclarationLocation$4(LocationSearcher.java:313) ~[meghanada-0.7.6.jar:?]
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[?:1.8.0_121]
at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1351) ~[?:1.8.0_121]
at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126) ~[?:1.8.0_121]
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498) ~[?:1.8.0_121]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) ~[?:1.8.0_121]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[?:1.8.0_121]
at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152) ~[?:1.8.0_121]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:1.8.0_121]
at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464) ~[?:1.8.0_121]
at meghanada.location.LocationSearcher.searchDeclarationLocation(LocationSearcher.java:315) ~[meghanada-0.7.6.jar:?]
at meghanada.session.Session.jumpDeclaration(Session.java:605) ~[meghanada-0.7.6.jar:?]
at meghanada.server.CommandHandler.jumpDeclaration(CommandHandler.java:197) ~[meghanada-0.7.6.jar:?]
at meghanada.server.emacs.EmacsServer.lambda$dispatch$13(EmacsServer.java:176) ~[meghanada-0.7.6.jar:?]
at com.leacox.motif.matching.Matching1.lambda$get$15(Matching1.java:45) ~[meghanada-0.7.6.jar:?]
at com.leacox.motif.matching.Pattern$1.apply(Pattern.java:40) ~[meghanada-0.7.6.jar:?]
at com.leacox.motif.matching.FluentMatchingR.getMatch(FluentMatchingR.java:118) ~[meghanada-0.7.6.jar:?]
at meghanada.server.emacs.EmacsServer.dispatch(EmacsServer.java:226) ~[meghanada-0.7.6.jar:?]
at meghanada.server.emacs.EmacsServer.lambda$acceptConnection$22(EmacsServer.java:306) ~[meghanada-0.7.6.jar:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_121]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_121]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_121]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_121]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]

Null pointer exception everywhere

Hi folks,
I have tried the server on both macos and windows 10. I seem to get this same error.

I tried the server on a maven and gradle project, neither seem to be working.

I am using it with spacemacs.

meghanada-server_error

Allow overriding gradle version to hardcode a specific version

I work on a project that requires gradle 2.13 due to bugs introduced in later gradle versions, however, when I try to run the server I get:

Caused by: org.gradle.api.GradleException: Gradle 2.13 is required to build elasticsearch
    at build_da97v8nh3ew8kq4jfh1zxmavb.run(/home/hinmanm/es/elasticsearch/buildSrc/build.gradle:33)
    at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:90)
    ... 83 more

Because it uses gradle 3.0 from the wrapper.

It would be great if there were a way to tell meghanada to use gradle from the $PATH rather than the gradle from the wrapper, so the version I need to use explicitly will work.

Don't use IPv6 on Linux

On Linux, the JVM prefers to listen on IPv6 which your emacs isn't able to connect to. My workaround is to set following environment variable before running meghanada-server:

_JAVA_OPTIONS=-Djava.net.preferIPv4Stack=true

It would be best if the server listened on IPv4 by default. But ideally, on Linux/OSX it should simply use a Unix domain socket for communication.

Have meghanada completely separate gradle build for server and regular gradle invocations

I've noticed that sometimes when I invoke gradle at the command line to run a test, or do something else, it seems to mess with the gradle that meghanada is running, cleaning up build files or something, which causes the server to crash.

Here's an example log I saw today:

java.io.UncheckedIOException: meghanada.project.ProjectParseException: java.lang.RuntimeException: org.gradle.tooling.BuildException: Could not fetch model of type 'IdeaProject' using Gradle distribution 'https://services.gradle.org/distributions/gradle-3.3-bin.zip'.
	at meghanada.project.ProjectDependency.getDependencyFilePath(ProjectDependency.java:148) ~[meghanada-0.7.5.jar:?]
	at meghanada.session.subscribe.CacheEventSubscriber.lambda$analyze$3(CacheEventSubscriber.java:74) ~[meghanada-0.7.5.jar:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[?:1.8.0_111]
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[?:1.8.0_111]
	at java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1548) ~[?:1.8.0_111]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[?:1.8.0_111]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[?:1.8.0_111]
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[?:1.8.0_111]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[?:1.8.0_111]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:1.8.0_111]
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[?:1.8.0_111]
	at meghanada.session.subscribe.CacheEventSubscriber.analyze(CacheEventSubscriber.java:73) ~[meghanada-0.7.5.jar:?]
	at meghanada.session.subscribe.CacheEventSubscriber.on(CacheEventSubscriber.java:34) ~[meghanada-0.7.5.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_111]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_111]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_111]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_111]
	at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) ~[meghanada-0.7.5.jar:?]
	at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) ~[meghanada-0.7.5.jar:?]
	at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) [meghanada-0.7.5.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_111]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_111]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_111]
Caused by: meghanada.project.ProjectParseException: java.lang.RuntimeException: org.gradle.tooling.BuildException: Could not fetch model of type 'IdeaProject' using Gradle distribution 'https://services.gradle.org/distributions/gradle-3.3-bin.zip'.
	at meghanada.project.gradle.GradleProject.parseProject(GradleProject.java:104) ~[meghanada-0.7.5.jar:?]
	at meghanada.session.Session.loadProject(Session.java:169) ~[meghanada-0.7.5.jar:?]
	at meghanada.session.Session.findProject(Session.java:96) ~[meghanada-0.7.5.jar:?]
	at meghanada.project.ProjectDependency.getDependencyFilePath(ProjectDependency.java:130) ~[meghanada-0.7.5.jar:?]
	... 22 more
Caused by: java.lang.RuntimeException: org.gradle.tooling.BuildException: Could not fetch model of type 'IdeaProject' using Gradle distribution 'https://services.gradle.org/distributions/gradle-3.3-bin.zip'.
	at meghanada.config.Config.debugTimeItF(Config.java:123) ~[meghanada-0.7.5.jar:?]
	at meghanada.project.gradle.GradleProject.parseProject(GradleProject.java:86) ~[meghanada-0.7.5.jar:?]
	at meghanada.session.Session.loadProject(Session.java:169) ~[meghanada-0.7.5.jar:?]
	at meghanada.session.Session.findProject(Session.java:96) ~[meghanada-0.7.5.jar:?]
	at meghanada.project.ProjectDependency.getDependencyFilePath(ProjectDependency.java:130) ~[meghanada-0.7.5.jar:?]
	... 22 more
Caused by: org.gradle.tooling.BuildException: Could not fetch model of type 'IdeaProject' using Gradle distribution 'https://services.gradle.org/distributions/gradle-3.3-bin.zip'.
	at org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:51) ~[meghanada-0.7.5.jar:?]
	at org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:29) ~[meghanada-0.7.5.jar:?]
	at org.gradle.tooling.internal.consumer.ResultHandlerAdapter.onFailure(ResultHandlerAdapter.java:41) ~[meghanada-0.7.5.jar:?]
	at org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor$1$1.run(DefaultAsyncConsumerActionExecutor.java:57) ~[meghanada-0.7.5.jar:?]
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) ~[meghanada-0.7.5.jar:?]
	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) ~[meghanada-0.7.5.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:1.8.0_111]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[?:1.8.0_111]
	at java.lang.Thread.run(Thread.java:745) ~[?:1.8.0_111]
	at org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:46) ~[meghanada-0.7.5.jar:?]
	at org.gradle.tooling.internal.consumer.DefaultModelBuilder.get(DefaultModelBuilder.java:50) ~[meghanada-0.7.5.jar:?]
	at org.gradle.tooling.internal.consumer.DefaultProjectConnection.getModel(DefaultProjectConnection.java:41) ~[meghanada-0.7.5.jar:?]
	at meghanada.project.gradle.GradleProject.lambda$parseProject$0(GradleProject.java:87) ~[meghanada-0.7.5.jar:?]
	at meghanada.config.Config.debugTimeItF(Config.java:121) ~[meghanada-0.7.5.jar:?]
	at meghanada.project.gradle.GradleProject.parseProject(GradleProject.java:86) ~[meghanada-0.7.5.jar:?]
	at meghanada.session.Session.loadProject(Session.java:169) ~[meghanada-0.7.5.jar:?]
	at meghanada.session.Session.findProject(Session.java:96) ~[meghanada-0.7.5.jar:?]
	at meghanada.project.ProjectDependency.getDependencyFilePath(ProjectDependency.java:130) ~[meghanada-0.7.5.jar:?]
	... 22 more
Caused by: org.gradle.internal.exceptions.LocationAwareException: Build file '/home/hinmanm/es/elasticsearch/benchmarks/build.gradle' line: 31
A problem occurred evaluating project ':benchmarks'.
	at org.gradle.initialization.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:74) ~[?:?]
	at org.gradle.initialization.MultipleBuildFailuresExceptionAnalyser.transform(MultipleBuildFailuresExceptionAnalyser.java:47) ~[?:?]
	at org.gradle.initialization.StackTraceSanitizingExceptionAnalyser.transform(StackTraceSanitizingExceptionAnalyser.java:30) ~[?:?]
	at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:122) ~[?:?]
	at org.gradle.initialization.DefaultGradleLauncher.getBuildAnalysis(DefaultGradleLauncher.java:107) ~[?:?]
	at org.gradle.launcher.exec.GradleBuildController.configure(GradleBuildController.java:79) ~[?:?]
	at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:52) ~[?:?]
	at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) ~[?:?]
	at org.gradle.tooling.internal.provider.runner.RunAsBuildOperationBuildActionRunner$1.execute(RunAsBuildOperationBuildActionRunner.java:43) ~[?:?]
	at org.gradle.tooling.internal.provider.runner.RunAsBuildOperationBuildActionRunner$1.execute(RunAsBuildOperationBuildActionRunner.java:40) ~[?:?]
	at org.gradle.internal.Transformers$4.transform(Transformers.java:169) ~[meghanada-0.7.5.jar:?]
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106) ~[?:?]
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:56) ~[?:?]
	at org.gradle.tooling.internal.provider.runner.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:40) ~[?:?]
	at org.gradle.tooling.internal.provider.runner.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:75) ~[?:?]
	at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) ~[?:?]
	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41) ~[?:?]
	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26) ~[?:?]
	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75) ~[?:?]
	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:49) ~[?:?]
	at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:44) ~[?:?]
	at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:29) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:47) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72) ~[?:?]
	at org.gradle.util.Swapper.swap(Swapper.java:38) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50) ~[?:?]
	at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297) ~[?:?]
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) ~[meghanada-0.7.5.jar:?]
	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) ~[meghanada-0.7.5.jar:?]
Caused by: org.gradle.api.GradleScriptException: A problem occurred evaluating project ':benchmarks'.
	at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:92) ~[?:?]
	at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$2.run(DefaultScriptPluginFactory.java:176) ~[?:?]
	at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:77) ~[?:?]
	at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:181) ~[?:?]
	at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:39) ~[?:?]
	at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26) ~[?:?]
	at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34) ~[?:?]
	at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:70) ~[?:?]
	at org.gradle.configuration.project.LifecycleProjectEvaluator.access$000(LifecycleProjectEvaluator.java:33) ~[?:?]
	at org.gradle.configuration.project.LifecycleProjectEvaluator$1.execute(LifecycleProjectEvaluator.java:53) ~[?:?]
	at org.gradle.configuration.project.LifecycleProjectEvaluator$1.execute(LifecycleProjectEvaluator.java:50) ~[?:?]
	at org.gradle.internal.Transformers$4.transform(Transformers.java:169) ~[meghanada-0.7.5.jar:?]
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106) ~[?:?]
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:61) ~[?:?]
	at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:50) ~[?:?]
	at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:628) ~[?:?]
	at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:129) ~[?:?]
	at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:35) ~[?:?]
	at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:62) ~[?:?]
	at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:38) ~[?:?]
	at org.gradle.initialization.DefaultGradleLauncher$1.execute(DefaultGradleLauncher.java:161) ~[?:?]
	at org.gradle.initialization.DefaultGradleLauncher$1.execute(DefaultGradleLauncher.java:158) ~[?:?]
	at org.gradle.internal.Transformers$4.transform(Transformers.java:169) ~[meghanada-0.7.5.jar:?]
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106) ~[?:?]
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:56) ~[?:?]
	at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:158) ~[?:?]
	at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:119) ~[?:?]
	at org.gradle.initialization.DefaultGradleLauncher.getBuildAnalysis(DefaultGradleLauncher.java:107) ~[?:?]
	at org.gradle.launcher.exec.GradleBuildController.configure(GradleBuildController.java:79) ~[?:?]
	at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:52) ~[?:?]
	at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) ~[?:?]
	at org.gradle.tooling.internal.provider.runner.RunAsBuildOperationBuildActionRunner$1.execute(RunAsBuildOperationBuildActionRunner.java:43) ~[?:?]
	at org.gradle.tooling.internal.provider.runner.RunAsBuildOperationBuildActionRunner$1.execute(RunAsBuildOperationBuildActionRunner.java:40) ~[?:?]
	at org.gradle.internal.Transformers$4.transform(Transformers.java:169) ~[meghanada-0.7.5.jar:?]
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106) ~[?:?]
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:56) ~[?:?]
	at org.gradle.tooling.internal.provider.runner.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:40) ~[?:?]
	at org.gradle.tooling.internal.provider.runner.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:75) ~[?:?]
	at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) ~[?:?]
	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41) ~[?:?]
	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26) ~[?:?]
	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75) ~[?:?]
	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:49) ~[?:?]
	at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:44) ~[?:?]
	at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:29) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:47) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72) ~[?:?]
	at org.gradle.util.Swapper.swap(Swapper.java:38) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) ~[?:?]
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) ~[?:?]
	at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50) ~[?:?]
	at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297) ~[?:?]
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) ~[meghanada-0.7.5.jar:?]
	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) ~[meghanada-0.7.5.jar:?]
Caused by: java.lang.NoClassDefFoundError: org/elasticsearch/gradle/BuildPlugin$_configureRepositories_closure6
	at org.elasticsearch.gradle.BuildPlugin.configureRepositories(BuildPlugin.groovy:304) ~[?:?]
	at org.elasticsearch.gradle.BuildPlugin$configureRepositories$1.callStatic(Unknown Source) ~[?:?]
	at org.elasticsearch.gradle.BuildPlugin.apply(BuildPlugin.groovy:77) ~[?:?]
	at org.elasticsearch.gradle.BuildPlugin.apply(BuildPlugin.groovy) ~[?:?]
	at org.gradle.api.internal.plugins.ImperativeOnlyPluginApplicator.applyImperative(ImperativeOnlyPluginApplicator.java:35) ~[?:?]
	at org.gradle.api.internal.plugins.RuleBasedPluginApplicator.applyImperative(RuleBasedPluginApplicator.java:43) ~[?:?]
	at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:139) ~[?:?]
	at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:112) ~[?:?]
	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyType(DefaultObjectConfigurationAction.java:113) ~[?:?]
	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:36) ~[?:?]
	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:80) ~[?:?]
	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:136) ~[?:?]
	at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:44) ~[?:?]
	at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.java:34) ~[?:?]
	at org.gradle.api.Script$apply.callCurrent(Unknown Source) ~[?:?]
... etc

Is there a way to completely decouple the two so the two different gradle instances don't step on each other's toes? Is this because I'm using the gradle daemon?

How can the OpenJDK 9 support?

I used java-9-openjdk-amd64, the OpenJDK 8 is ok.

java.lang.IllegalAccessError: class meghanada.analyze.TreeAnalyzer (in unnamed module @0x20b12f8a)
cannot access class com.sun.tools.javac.tree.JCTree$JCCompilationUnit (in module jdk.compiler) 
because module jdk.compiler does not export com.sun.tools.javac.tree to unnamed module @0x20b12f8a
        at meghanada.analyze.TreeAnalyzer.analyzeCompilationUnitTree(TreeAnalyzer.java:443) ~[meghanada-1.0.0.jar:?]
        at meghanada.analyze.TreeAnalyzer.analyzeUnit(TreeAnalyzer.java:511) ~[meghanada-1.0.0.jar:?]
        at meghanada.analyze.TreeAnalyzer.tryAnalyzeUnit(TreeAnalyzer.java:491) ~[meghanada-1.0.0.jar:?]
        at meghanada.analyze.TreeAnalyzer.lambda$analyze$5(TreeAnalyzer.java:481) ~[meghanada-1.0.0.jar:?]
        at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[?:?]
...

NoSuchElementException when opening a java file.

Meghanada reported the following error when I opened a java file. I'm using meghanada 0.7.10 and openjdk 1.8.0.

[2017-05-27 17:46:41,873][INFO ][CacheEventSubs: 52] analyze - start analyze sources ...
[2017-05-27 17:46:47,684][ERROR][Project : 294] compileJava - Catching
java.util.NoSuchElementException: null
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_131]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_131]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_131]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_131]
at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:598) ~[?:1.8.0_131]
at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677) ~[?:1.8.0_131]
at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:735) ~[?:1.8.0_131]
at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:160) ~[?:1.8.0_131]
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:174) ~[?:1.8.0_131]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233) ~[?:1.8.0_131]
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[?:1.8.0_131]
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:583) ~[?:1.8.0_131]
at meghanada.analyze.TreeAnalyzer.analyze(TreeAnalyzer.java:1943) ~[meghanada-0.7.10.jar:?]
at meghanada.analyze.JavaAnalyzer.runAnalyzeAndCompile(JavaAnalyzer.java:163) ~[meghanada-0.7.10.jar:?]
at meghanada.analyze.JavaAnalyzer.analyzeAndCompile(JavaAnalyzer.java:105) ~[meghanada-0.7.10.jar:?]
at meghanada.project.Project.compileJava(Project.java:279) ~[meghanada-0.7.10.jar:?]
at meghanada.project.gradle.GradleProject.compileJava(GradleProject.java:421) ~[meghanada-0.7.10.jar:?]
at meghanada.project.gradle.GradleProject.compileJava(GradleProject.java:411) ~[meghanada-0.7.10.jar:?]
at meghanada.session.subscribe.CacheEventSubscriber.lambda$analyze$1(CacheEventSubscriber.java:57) ~[meghanada-0.7.10.jar:?]
at meghanada.config.Config.timeItF(Config.java:111) [meghanada-0.7.10.jar:?]
at meghanada.session.subscribe.CacheEventSubscriber.analyze(CacheEventSubscriber.java:53) [meghanada-0.7.10.jar:?]
at meghanada.session.subscribe.CacheEventSubscriber.on(CacheEventSubscriber.java:33) [meghanada-0.7.10.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_131]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_131]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_131]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_131]
at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) [meghanada-0.7.10.jar:?]
at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) [meghanada-0.7.10.jar:?]
at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) [meghanada-0.7.10.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_131]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_131]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_131]
Caused by: java.util.NoSuchElementException: No value present
at java.util.Optional.get(Optional.java:135) ~[?:1.8.0_131]
at meghanada.analyze.TreeAnalyzer.analyzeIdent(TreeAnalyzer.java:1714) ~[meghanada-0.7.10.jar:?]
at meghanada.analyze.TreeAnalyzer.analyzeParsedTree(TreeAnalyzer.java:568) ~[meghanada-0.7.10.jar:?]
at meghanada.analyze.TreeAnalyzer.analyzeFieldAccess(TreeAnalyzer.java:1467) ~[meghanada-0.7.10.jar:?]
at meghanada.analyze.TreeAnalyzer.analyzeParsedTree(TreeAnalyzer.java:543) ~[meghanada-0.7.10.jar:?]
at meghanada.analyze.TreeAnalyzer.analyzeFieldAccess(TreeAnalyzer.java:1467) ~[meghanada-0.7.10.jar:?]
at meghanada.analyze.TreeAnalyzer.analyzeParsedTree(TreeAnalyzer.java:543) ~[meghanada-0.7.10.jar:?]
at meghanada.analyze.TreeAnalyzer.analyzeCompilationUnitTree(TreeAnalyzer.java:438) ~[meghanada-0.7.10.jar:?]
at meghanada.analyze.TreeAnalyzer.analyzeUnit(TreeAnalyzer.java:1980) ~[meghanada-0.7.10.jar:?]
at meghanada.analyze.TreeAnalyzer.lambda$analyze$40(TreeAnalyzer.java:1946) ~[meghanada-0.7.10.jar:?]
at meghanada.utils.FunctionUtils.lambda$wrapIOConsumer$2(FunctionUtils.java:34) ~[meghanada-0.7.10.jar:?]
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[?:1.8.0_131]
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[?:1.8.0_131]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[?:1.8.0_131]
at java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:291) ~[?:1.8.0_131]
at java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:731) ~[?:1.8.0_131]
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) ~[?:1.8.0_131]
at java.util.concurrent.ForkJoinPool$WorkQueue.execLocalTasks(ForkJoinPool.java:1040) ~[?:1.8.0_131]
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1058) ~[?:1.8.0_131]
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) ~[?:1.8.0_131]
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) ~[?:1.8.0_131]
[2017-05-27 17:46:47,796][WARN ][CacheEventSubs: 71] lambda$analyze$1 - Compile Error : null
[2017-05-27 17:46:47,796][INFO ][Config : 115] timeItF - analyzed and compiled. elapsed:5.922 s

Add ability to ignore some gradle modules

I have a project with a large number of gradle modules, is there a way I can tell meghanada-server only to parse/focus on a single module or set of modules, and ignore the others?

I ran into this when starting meghanada-server in https://github.com/elastic/elasticsearch due to the large number of gradle modules, my CPUs spin at 100% for an hour while meghanada is processing all the modules.

Here's an example of the output (only 10 minutes worth of processing):

[2017-03-09 10:46:44,527][DEBUG][Main          :  75] main                   - set verbose flag(DEBUG)
[2017-03-09 10:46:44,530][DEBUG][Main          : 113] main                   - set port:55555, projectRoot:./, output:sexp
[2017-03-09 10:46:44,530][INFO ][Main          : 116] main                   - Meghanada-Server Version:0.6.6-4f907bd
[2017-03-09 10:46:44,535][DEBUG][Session       :  79] findProject            - finding project from '/home/hinmanm/es/elasticsearch/core/src/main/java/org/elasticsearch/action/bulk' ...
[2017-03-09 10:46:44,535][DEBUG][Session       :  79] findProject            - finding project from '/home/hinmanm/es/elasticsearch/core/src/main/java/org/elasticsearch/action' ...
[2017-03-09 10:46:44,535][DEBUG][Session       :  79] findProject            - finding project from '/home/hinmanm/es/elasticsearch/core/src/main/java/org/elasticsearch' ...
[2017-03-09 10:46:44,536][DEBUG][Session       :  79] findProject            - finding project from '/home/hinmanm/es/elasticsearch/core/src/main/java/org' ...
[2017-03-09 10:46:44,536][DEBUG][Session       :  79] findProject            - finding project from '/home/hinmanm/es/elasticsearch/core/src/main/java' ...
[2017-03-09 10:46:44,536][DEBUG][Session       :  79] findProject            - finding project from '/home/hinmanm/es/elasticsearch/core/src/main' ...
[2017-03-09 10:46:44,536][DEBUG][Session       :  79] findProject            - finding project from '/home/hinmanm/es/elasticsearch/core/src' ...
[2017-03-09 10:46:44,536][DEBUG][Session       :  79] findProject            - finding project from '/home/hinmanm/es/elasticsearch/core' ...
[2017-03-09 10:46:44,537][DEBUG][Session       :  90] findProject            - find gradle project /home/hinmanm/es/elasticsearch/core/build.gradle
[2017-03-09 10:46:44,575][DEBUG][Config        :  57] <init>                 - home:/home/hinmanm/.emacs.d/meghanada
[2017-03-09 10:46:44,575][DEBUG][Config        :  58] <init>                 - java-home:/opt/java/jdk1.8.0_111/jre
[2017-03-09 10:46:44,575][DEBUG][Config        :  59] <init>                 - java-version:1.8
[2017-03-09 10:46:44,576][DEBUG][Config        :  60] <init>                 - user-home:/home/hinmanm
[2017-03-09 10:46:44,576][DEBUG][Config        :  61] <init>                 - project-root-dir:/home/hinmanm/es/elasticsearch/core
[2017-03-09 10:46:44,576][DEBUG][Config        :  62] <init>                 - project-setting-dir:/home/hinmanm/es/elasticsearch/core/.meghanada
[2017-03-09 10:46:44,576][DEBUG][Config        :  63] <init>                 - fast-boot:true
[2017-03-09 10:46:44,576][DEBUG][Config        :  64] <init>                 - class-fuzzy-search:false
[2017-03-09 10:46:44,888][DEBUG][GradleProject : 311] getProjectConnection   - use gradle version:'3.3'
[2017-03-09 10:47:40,247][DEBUG][GradleProject : 443] getDependency          - find module dependency name=framework
[2017-03-09 10:47:40,248][DEBUG][GradleProject : 443] getDependency          - find module dependency name=rest
[2017-03-09 10:47:40,253][DEBUG][GradleProject : 180] parseIdeaModule        - sources [/home/hinmanm/es/elasticsearch/core/src/main/java]
[2017-03-09 10:47:40,254][DEBUG][GradleProject : 181] parseIdeaModule        - resources [/home/hinmanm/es/elasticsearch/core/src/main/resources]
[2017-03-09 10:47:40,254][DEBUG][GradleProject : 182] parseIdeaModule        - output /home/hinmanm/es/elasticsearch/core/build/classes/main
[2017-03-09 10:47:40,255][DEBUG][GradleProject : 183] parseIdeaModule        - test sources [/home/hinmanm/es/elasticsearch/core/src/test/java]
[2017-03-09 10:47:40,255][DEBUG][GradleProject : 184] parseIdeaModule        - test resources [/home/hinmanm/es/elasticsearch/core/src/test/resources]
[2017-03-09 10:47:40,256][DEBUG][GradleProject : 185] parseIdeaModule        - test output /home/hinmanm/es/elasticsearch/core/build/classes/test
[2017-03-09 10:47:40,257][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=com.google.jimfs:jimfs:1.1, scope=TEST, version=1.1, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/com.google.jimfs/jimfs/1.1/8fbd0579dc68aba6186935cc1bee21d2f3e7ec1c/jimfs-1.1.jar}
[2017-03-09 10:47:40,258][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-test-framework:6.5.0-snapshot-d00c5ca, scope=TEST, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-test-framework/6.5.0-snapshot-d00c5ca/601c6cf5fbbf4653629aad7f983030d7e5a2d7b2/lucene-test-framework-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,260][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.locationtech.spatial4j:spatial4j:0.6, scope=COMPILE, version=0.6, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.locationtech.spatial4j/spatial4j/0.6/21b15310bddcfd8c72611c180f20cf23279809a3/spatial4j-0.6.jar}
[2017-03-09 10:47:40,260][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=com.tdunning:t-digest:3.0, scope=COMPILE, version=3.0, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/com.tdunning/t-digest/3.0/84ccf145ac2215e6bfa63baa3101c0af41017cfc/t-digest-3.0.jar}
[2017-03-09 10:47:40,260][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-grouping:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-grouping/6.5.0-snapshot-d00c5ca/f15775571fb5762dfc92e00c3909cb8db8ff1d53/lucene-grouping-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,261][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=com.fasterxml.jackson.core:jackson-core:2.8.6, scope=COMPILE, version=2.8.6, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.8.6/2ef7b1cc34de149600f5e75bc2d5bf40de894e60/jackson-core-2.8.6.jar}
[2017-03-09 10:47:40,261][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-spatial3d:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-spatial3d/6.5.0-snapshot-d00c5ca/69a3a86e9d045f872408793ea411d49e0c577268/lucene-spatial3d-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,261][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=com.google.guava:guava:18.0, scope=TEST, version=18.0, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/18.0/cce0823396aa693798f8882e64213b1772032b09/guava-18.0.jar}
[2017-03-09 10:47:40,261][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-spatial:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-spatial/6.5.0-snapshot-d00c5ca/693bc4cb0e2e4465e0173c67ed0818071c4b460b/lucene-spatial-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,261][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.httpcomponents:httpcore:4.4.5, scope=TEST, version=4.4.5, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.4.5/e7501a1b34325abb00d17dde96150604a0658b54/httpcore-4.4.5.jar}
[2017-03-09 10:47:40,262][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.logging.log4j:log4j-1.2-api:2.7, scope=COMPILE, version=2.7, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-1.2-api/2.7/39f4e6c2d68d4ef8fd4b0883d165682dedd5be52/log4j-1.2-api-2.7.jar}
[2017-03-09 10:47:40,262][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.elasticsearch:mocksocket:1.1, scope=TEST, version=1.1, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.elasticsearch/mocksocket/1.1/681186430f906cf733cc0fd2e9643ada193d0cd2/mocksocket-1.1.jar}
[2017-03-09 10:47:40,262][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.hamcrest:hamcrest-all:1.3, scope=TEST, version=1.3, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-all/1.3/63a21ebc981131004ad02e0434e799fd7f3a8d5a/hamcrest-all-1.3.jar}
[2017-03-09 10:47:40,262][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=commons-codec:commons-codec:1.10, scope=TEST, version=1.10, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.10/4b95f4897fa13f2cd904aee711aeafc0c5295cd8/commons-codec-1.10.jar}
[2017-03-09 10:47:40,262][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-sandbox:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-sandbox/6.5.0-snapshot-d00c5ca/a311a7d9f3e9a8fbf3a367a4e2731f9d4579732b/lucene-sandbox-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,263][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=commons-logging:commons-logging:1.1.3, scope=TEST, version=1.1.3, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.1.3/f6f66e966c70a83ffbdb6f17a0919eaf7c8aca7f/commons-logging-1.1.3.jar}
[2017-03-09 10:47:40,263][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-backward-codecs:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-backward-codecs/6.5.0-snapshot-d00c5ca/c6a940eff8a87df40262b752ed7b135e448b7873/lucene-backward-codecs-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,263][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=net.sf.jopt-simple:jopt-simple:5.0.2, scope=COMPILE, version=5.0.2, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/net.sf.jopt-simple/jopt-simple/5.0.2/98cafc6081d5632b61be2c9e60650b64ddbc637c/jopt-simple-5.0.2.jar}
[2017-03-09 10:47:40,263][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-misc:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-misc/6.5.0-snapshot-d00c5ca/f5d90756dbeda1218d723b7bea0799c88d621adb/lucene-misc-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,263][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.httpcomponents:httpclient:4.5.2, scope=TEST, version=4.5.2, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpclient/4.5.2/733db77aa8d9b2d68015189df76ab06304406e50/httpclient-4.5.2.jar}
[2017-03-09 10:47:40,264][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.logging.log4j:log4j-api:2.7, scope=COMPILE, version=2.7, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.7/8de00e382a817981b737be84cb8def687d392963/log4j-api-2.7.jar}
[2017-03-09 10:47:40,264][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-join:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-join/6.5.0-snapshot-d00c5ca/5bc4cba55670c14ea812ff5de65edad4c312fdf6/lucene-join-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,264][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.httpcomponents:httpasyncclient:4.1.2, scope=TEST, version=4.1.2, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpasyncclient/4.1.2/95aa3e6fb520191a0970a73cf09f62948ee614be/httpasyncclient-4.1.2.jar}
[2017-03-09 10:47:40,264][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-core:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-core/6.5.0-snapshot-d00c5ca/6ef5ad88141760c00ea041da1535f3ffc364d67d/lucene-core-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,264][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-spatial-extras:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-spatial-extras/6.5.0-snapshot-d00c5ca/326f31e63c76d476c23488c7354265cf915350f/lucene-spatial-extras-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,265][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-suggest:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-suggest/6.5.0-snapshot-d00c5ca/fabc05ca175150171cf60370877276b933716bcd/lucene-suggest-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,265][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.elasticsearch:securemock:1.2, scope=TEST, version=1.2, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.elasticsearch/securemock/1.2/98201d4ad5ac93f6b415ae9172d52b5e7cda490e/securemock-1.2.jar}
[2017-03-09 10:47:40,265][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=com.carrotsearch:hppc:0.7.1, scope=COMPILE, version=0.7.1, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/com.carrotsearch/hppc/0.7.1/8b5057f74ea378c0150a1860874a3ebdcb713767/hppc-0.7.1.jar}
[2017-03-09 10:47:40,265][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.8.6, scope=COMPILE, version=2.8.6, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.dataformat/jackson-dataformat-smile/2.8.6/71590ad45cee21249774e2f93e5eca66e446cef3/jackson-dataformat-smile-2.8.6.jar}
[2017-03-09 10:47:40,265][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.8.6, scope=COMPILE, version=2.8.6, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.dataformat/jackson-dataformat-cbor/2.8.6/b88721371cfa2d7242bb5e52fe70861aa061c050/jackson-dataformat-cbor-2.8.6.jar}
[2017-03-09 10:47:40,266][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.logging.log4j:log4j-core:2.7, scope=COMPILE, version=2.7, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-core/2.7/a3f2b4e64c61a7fc1ed8f1e5ba371933404ed98a/log4j-core-2.7.jar}
[2017-03-09 10:47:40,266][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.yaml:snakeyaml:1.15, scope=COMPILE, version=1.15, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.yaml/snakeyaml/1.15/3b132bea69e8ee099f416044970997bde80f4ea6/snakeyaml-1.15.jar}
[2017-03-09 10:47:40,267][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-memory:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-memory/6.5.0-snapshot-d00c5ca/68cf08bcd8414a57493debf3a6a509d78a9abb56/lucene-memory-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,268][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.hdrhistogram:HdrHistogram:2.1.9, scope=COMPILE, version=2.1.9, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.hdrhistogram/HdrHistogram/2.1.9/e4631ce165eb400edecfa32e03d3f1be53dee754/HdrHistogram-2.1.9.jar}
[2017-03-09 10:47:40,268][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-analyzers-common:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-analyzers-common/6.5.0-snapshot-d00c5ca/9ad2a7bd252cbdb76ac121287e670d75f4db2cd3/lucene-analyzers-common-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,269][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-queries:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-queries/6.5.0-snapshot-d00c5ca/9298e7d1ed96e7beb63d7ccdce1a4502eb0fe484/lucene-queries-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,269][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.httpcomponents:httpcore-nio:4.4.5, scope=TEST, version=4.4.5, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore-nio/4.4.5/f4be009e7505f6ceddf21e7960c759f413f15056/httpcore-nio-4.4.5.jar}
[2017-03-09 10:47:40,270][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=com.vividsolutions:jts:1.13, scope=COMPILE, version=1.13, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/com.vividsolutions/jts/1.13/3ccfb9b60f04d71add996a666ceb8902904fd805/jts-1.13.jar}
[2017-03-09 10:47:40,270][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-queryparser:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-queryparser/6.5.0-snapshot-d00c5ca/918de18963607af69dff38e4773c0bde89c73ae3/lucene-queryparser-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,270][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-highlighter:6.5.0-snapshot-d00c5ca, scope=COMPILE, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-highlighter/6.5.0-snapshot-d00c5ca/51d793aa64257beead4ccc7432eb5df81d17f23/lucene-highlighter-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,270][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=net.java.dev.jna:jna:4.2.2, scope=COMPILE, version=4.2.2, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/jna/4.2.2/5012450aee579c3118ff09461d5ce210e0cdc2a9/jna-4.2.2.jar}
[2017-03-09 10:47:40,270][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=junit:junit:4.11, scope=TEST, version=4.11, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar}
[2017-03-09 10:47:40,271][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=joda-time:joda-time:2.9.5, scope=COMPILE, version=2.9.5, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/joda-time/joda-time/2.9.5/5f01da7306363fad2028b916f3eab926262de928/joda-time-2.9.5.jar}
[2017-03-09 10:47:40,271][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.lucene:lucene-codecs:6.5.0-snapshot-d00c5ca, scope=TEST, version=6.5.0-snapshot-d00c5ca, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.lucene/lucene-codecs/6.5.0-snapshot-d00c5ca/2b198c65109b5ee09512e5903ee6454dc0d081d8/lucene-codecs-6.5.0-snapshot-d00c5ca.jar}
[2017-03-09 10:47:40,271][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.8.6, scope=COMPILE, version=2.8.6, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.8.6/8bd44d50f9a6cdff9c7578ea39d524eb519e35ab/jackson-dataformat-yaml-2.8.6.jar}
[2017-03-09 10:47:40,271][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.4.0, scope=TEST, version=2.4.0, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/com.carrotsearch.randomizedtesting/randomizedtesting-runner/2.4.0/222eb23dd6f45541acf6a5ac69cd9e9bdce25d2/randomizedtesting-runner-2.4.0.jar}
[2017-03-09 10:47:40,271][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.elasticsearch:securesm:1.1, scope=COMPILE, version=1.1, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.elasticsearch/securesm/1.1/1e423447d020041534be94c0f31a49fbdc1f2950/securesm-1.1.jar}
[2017-03-09 10:48:08,470][DEBUG][Session       :  79] findProject            - finding project from '/home/hinmanm/es/elasticsearch/test/framework' ...
[2017-03-09 10:48:08,470][DEBUG][Session       :  90] findProject            - find gradle project /home/hinmanm/es/elasticsearch/test/framework/build.gradle
[2017-03-09 10:48:08,480][DEBUG][GradleProject : 311] getProjectConnection   - use gradle version:'3.3'
[2017-03-09 10:54:14,866][DEBUG][GradleProject : 443] getDependency          - find module dependency name=core
[2017-03-09 10:54:14,866][DEBUG][Session       :  79] findProject            - finding project from '/home/hinmanm/es/elasticsearch/core' ...
[2017-03-09 10:54:14,867][DEBUG][Session       :  90] findProject            - find gradle project /home/hinmanm/es/elasticsearch/core/build.gradle
[2017-03-09 10:54:15,029][DEBUG][GradleProject : 300] lambda$loadModule$0    - load module dependency name=core
[2017-03-09 10:54:15,029][DEBUG][GradleProject : 443] getDependency          - find module dependency name=rest
[2017-03-09 10:54:15,029][DEBUG][Session       :  79] findProject            - finding project from '/home/hinmanm/es/elasticsearch/client/rest' ...
[2017-03-09 10:54:15,030][DEBUG][Session       :  90] findProject            - find gradle project /home/hinmanm/es/elasticsearch/client/rest/build.gradle
[2017-03-09 10:54:15,031][DEBUG][GradleProject : 311] getProjectConnection   - use gradle version:'3.3'
[2017-03-09 10:57:07,053][DEBUG][GradleProject : 443] getDependency          - find module dependency name=client-test
[2017-03-09 10:57:07,053][DEBUG][GradleProject : 180] parseIdeaModule        - sources [/home/hinmanm/es/elasticsearch/client/rest/src/main/java]
[2017-03-09 10:57:07,053][DEBUG][GradleProject : 181] parseIdeaModule        - resources [/home/hinmanm/es/elasticsearch/client/rest/src/main/resources]
[2017-03-09 10:57:07,054][DEBUG][GradleProject : 182] parseIdeaModule        - output /home/hinmanm/es/elasticsearch/client/rest/build/classes/main
[2017-03-09 10:57:07,054][DEBUG][GradleProject : 183] parseIdeaModule        - test sources [/home/hinmanm/es/elasticsearch/client/rest/src/test/java]
[2017-03-09 10:57:07,054][DEBUG][GradleProject : 184] parseIdeaModule        - test resources [/home/hinmanm/es/elasticsearch/client/rest/src/test/resources]
[2017-03-09 10:57:07,054][DEBUG][GradleProject : 185] parseIdeaModule        - test output /home/hinmanm/es/elasticsearch/client/rest/build/classes/test
[2017-03-09 10:57:07,054][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.elasticsearch:mocksocket:1.1, scope=TEST, version=1.1, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.elasticsearch/mocksocket/1.1/681186430f906cf733cc0fd2e9643ada193d0cd2/mocksocket-1.1.jar}
[2017-03-09 10:57:07,054][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.codehaus.mojo:animal-sniffer-annotations:1.15, scope=TEST, version=1.15, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.codehaus.mojo/animal-sniffer-annotations/1.15/3f19b51588ad71482ce4c169f54f697b6181d1b4/animal-sniffer-annotations-1.15.jar}
[2017-03-09 10:57:07,054][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.hamcrest:hamcrest-all:1.3, scope=TEST, version=1.3, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-all/1.3/63a21ebc981131004ad02e0434e799fd7f3a8d5a/hamcrest-all-1.3.jar}
[2017-03-09 10:57:07,054][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.elasticsearch:securemock:1.2, scope=TEST, version=1.2, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.elasticsearch/securemock/1.2/98201d4ad5ac93f6b415ae9172d52b5e7cda490e/securemock-1.2.jar}
[2017-03-09 10:57:07,054][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.httpcomponents:httpclient:4.5.2, scope=COMPILE, version=4.5.2, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpclient/4.5.2/733db77aa8d9b2d68015189df76ab06304406e50/httpclient-4.5.2.jar}
[2017-03-09 10:57:07,055][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.httpcomponents:httpasyncclient:4.1.2, scope=COMPILE, version=4.1.2, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpasyncclient/4.1.2/95aa3e6fb520191a0970a73cf09f62948ee614be/httpasyncclient-4.1.2.jar}
[2017-03-09 10:57:07,055][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.httpcomponents:httpcore-nio:4.4.5, scope=COMPILE, version=4.4.5, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore-nio/4.4.5/f4be009e7505f6ceddf21e7960c759f413f15056/httpcore-nio-4.4.5.jar}
[2017-03-09 10:57:07,055][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=junit:junit:4.11, scope=TEST, version=4.11, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar}
[2017-03-09 10:57:07,055][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=commons-logging:commons-logging:1.1.3, scope=COMPILE, version=1.1.3, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.1.3/f6f66e966c70a83ffbdb6f17a0919eaf7c8aca7f/commons-logging-1.1.3.jar}
[2017-03-09 10:57:07,055][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=commons-codec:commons-codec:1.10, scope=COMPILE, version=1.10, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.10/4b95f4897fa13f2cd904aee711aeafc0c5295cd8/commons-codec-1.10.jar}
[2017-03-09 10:57:07,055][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.4.0, scope=TEST, version=2.4.0, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/com.carrotsearch.randomizedtesting/randomizedtesting-runner/2.4.0/222eb23dd6f45541acf6a5ac69cd9e9bdce25d2/randomizedtesting-runner-2.4.0.jar}
[2017-03-09 10:57:07,055][DEBUG][GradleProject : 188] parseIdeaModule        - dependency ProjectDependency{id=org.apache.httpcomponents:httpcore:4.4.5, scope=COMPILE, version=4.4.5, file=/home/hinmanm/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.4.5/e7501a1b34325abb00d17dde96150604a0658b54/httpcore-4.4.5.jar}
[2017-03-09 10:57:38,814][DEBUG][Session       :  79] findProject            - finding project from '/home/hinmanm/es/elasticsearch/test' ...
[2017-03-09 10:57:38,814][DEBUG][Session       :  90] findProject            - find gradle project /home/hinmanm/es/elasticsearch/test/build.gradle
[2017-03-09 10:57:38,823][DEBUG][GradleProject : 311] getProjectConnection   - use gradle version:'3.3'
... etc etc for all the other gradle modules ...

ProjectParseException: java.io.IOException: Cannot run program "mvn" (in directory "/Users/lee5hx/Works/java_projects/gaias/gaia"): error=2, No such file or directory

My Environment

  • OS X 10.11.6
  • emacs 25.1
  • JDK 1.8
  • meghanada-server 0.7.0

1. meghanada-server-log --debug

[2017-03-21 15:42:34,059][DEBUG][Main : 73] main - set verbose flag(DEBUG)
[2017-03-21 15:42:34,061][DEBUG][Main : 111] main - set port:55555, projectRoot:./, output:sexp
[2017-03-21 15:42:34,061][INFO ][Main : 114] main - Meghanada-Server Version:0.7.0-0c49b50
[2017-03-21 15:42:34,070][DEBUG][Session : 80] findProject - finding project from '/Users/lee5hx/Works/java_projects/gaias/gaia/src/main/java/com/mindasset/gaia' ...
[2017-03-21 15:42:34,070][DEBUG][Session : 80] findProject - finding project from '/Users/lee5hx/Works/java_projects/gaias/gaia/src/main/java/com/mindasset' ...
[2017-03-21 15:42:34,071][DEBUG][Session : 80] findProject - finding project from '/Users/lee5hx/Works/java_projects/gaias/gaia/src/main/java/com' ...
[2017-03-21 15:42:34,071][DEBUG][Session : 80] findProject - finding project from '/Users/lee5hx/Works/java_projects/gaias/gaia/src/main/java' ...
[2017-03-21 15:42:34,071][DEBUG][Session : 80] findProject - finding project from '/Users/lee5hx/Works/java_projects/gaias/gaia/src/main' ...
[2017-03-21 15:42:34,071][DEBUG][Session : 80] findProject - finding project from '/Users/lee5hx/Works/java_projects/gaias/gaia/src' ...
[2017-03-21 15:42:34,071][DEBUG][Session : 80] findProject - finding project from '/Users/lee5hx/Works/java_projects/gaias/gaia' ...
[2017-03-21 15:42:34,071][DEBUG][Session : 94] findProject - find mvn project /Users/lee5hx/Works/java_projects/gaias/gaia/pom.xml
[2017-03-21 15:42:34,115][DEBUG][Config : 57] - home:/Users/lee5hx/emacs-confs/lee5hx/meghanada
[2017-03-21 15:42:34,115][DEBUG][Config : 58] - java-home:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre
[2017-03-21 15:42:34,115][DEBUG][Config : 59] - java-version:1.8
[2017-03-21 15:42:34,115][DEBUG][Config : 60] - user-home:/Users/lee5hx
[2017-03-21 15:42:34,115][DEBUG][Config : 61] - project-root-dir:/Users/lee5hx/Works/java_projects/gaias/gaia
[2017-03-21 15:42:34,115][DEBUG][Config : 62] - fast-boot:true
[2017-03-21 15:42:34,116][DEBUG][Config : 63] - class-fuzzy-search:false
[2017-03-21 15:42:34,388][DEBUG][MavenProject : 156] runMvn - RUN cmd: mvn dependency:resolve
[2017-03-21 15:42:34,397][ERROR][EmacsServer : 70] startServer - Catching
meghanada.project.ProjectParseException: java.io.IOException: Cannot run program "mvn" (in directory "/Users/lee5hx/Works/java_projects/gaias/gaia"): error=2, No such file or directory
at meghanada.project.maven.MavenProject.parseProject(MavenProject.java:134) ~[meghanada-0.7.0.jar:?]
at meghanada.session.Session.loadProject(Session.java:165) ~[meghanada-0.7.0.jar:?]
at meghanada.session.Session.findProject(Session.java:95) ~[meghanada-0.7.0.jar:?]
at meghanada.session.Session.createSession(Session.java:71) ~[meghanada-0.7.0.jar:?]
at meghanada.session.Session.createSession(Session.java:66) ~[meghanada-0.7.0.jar:?]
at meghanada.server.emacs.EmacsServer.startServer(EmacsServer.java:65) [meghanada-0.7.0.jar:?]
at meghanada.Main.main(Main.java:116) [meghanada-0.7.0.jar:?]
Caused by: java.io.IOException: Cannot run program "mvn" (in directory "/Users/lee5hx/Works/java_projects/gaias/gaia"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) ~[?:1.8.0_111]
at meghanada.project.maven.MavenProject.runMvn(MavenProject.java:159) ~[meghanada-0.7.0.jar:?]
at meghanada.project.maven.MavenProject.parseProject(MavenProject.java:73) ~[meghanada-0.7.0.jar:?]
... 6 more
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method) ~[?:1.8.0_111]
at java.lang.UNIXProcess.(UNIXProcess.java:247) ~[?:1.8.0_111]
at java.lang.ProcessImpl.start(ProcessImpl.java:134) ~[?:1.8.0_111]
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) ~[?:1.8.0_111]
at meghanada.project.maven.MavenProject.runMvn(MavenProject.java:159) ~[meghanada-0.7.0.jar:?]
at meghanada.project.maven.MavenProject.parseProject(MavenProject.java:73) ~[meghanada-0.7.0.jar:?]
... 6 more
[2017-03-21 15:42:34,402][INFO ][Main : 43] lambda$main$1 - shutdown server

2. My Project Directory

image

NullPointerException

I tried to install meghanada server from emacs and by compiling from source via gradlew - both times it is successfull, but when I try to run java -jar meghanada.jar I'm getting

sandric@sandric-mac ~/meghanada-server> java -jar build/libs/meghanada.jar
Exception in thread "main" java.lang.NullPointerException
        at java.util.Hashtable.put(Hashtable.java:459)
        at java.util.Properties.setProperty(Properties.java:166)
        at java.lang.System.setProperty(System.java:796)
        at meghanada.Main.main(Main.java:35)

Here's my java version:

sandric@sandric-mac ~/meghanada-server> java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

Support for Java 9

Trying to instatiate meghanada-server with java 9 gives:

java.lang.IllegalArgumentException: Could not determine java version from '9.0.1'.
	at org.gradle.api.JavaVersion.toVersion(JavaVersion.java:70) ~[meghanada-0.8.3.jar:?]
	at org.gradle.api.JavaVersion.current(JavaVersion.java:80) ~[meghanada-0.8.3.jar:?]
	at org.gradle.internal.jvm.UnsupportedJavaRuntimeException.assertUsingVersion(UnsupportedJavaRuntimeException.java:29) ~[meghanada-0.8.3.jar:?]
	at org.gradle.tooling.internal.consumer.ConnectorServices.checkJavaVersion(ConnectorServices.java:57) ~[meghanada-0.8.3.jar:?]
	at org.gradle.tooling.internal.consumer.ConnectorServices.createConnector(ConnectorServices.java:35) ~[meghanada-0.8.3.jar:?]
	at org.gradle.tooling.GradleConnector.newConnector(GradleConnector.java:85) ~[meghanada-0.8.3.jar:?]
	at meghanada.project.gradle.GradleProject.getProjectConnection(GradleProject.java:308) ~[meghanada-0.8.3.jar:?]
	at meghanada.project.gradle.GradleProject.parseProject(GradleProject.java:138) ~[meghanada-0.8.3.jar:?]
	at meghanada.session.Session.loadProject(Session.java:188) ~[meghanada-0.8.3.jar:?]
	at meghanada.session.Session.findProject(Session.java:118) ~[meghanada-0.8.3.jar:?]
	at meghanada.session.Session.createSession(Session.java:97) ~[meghanada-0.8.3.jar:?]
	at meghanada.session.Session.createSession(Session.java:92) ~[meghanada-0.8.3.jar:?]
	at meghanada.server.emacs.EmacsServer.startServer(EmacsServer.java:306) [meghanada-0.8.3.jar:?]
	at meghanada.Main.main(Main.java:127) [meghanada-0.8.3.jar:?]

jumpDeclaration fails sometimes

Sometimes jumpDeclaration fails and reports a WARN message as following:
[2017-05-31 17:09:25,116][WARN ][Session : 635] jumpDeclaration - missing location path=/path/to/MakeRentable.java line=101 column=9 symbol=TOwnerLockRelBiz .

Can you check and fix this problem? Thanks.

Exception when indexing the jars for full text search

Dear,

I tried to index a springboot project, all the jars is around 100MB,

The follow exception was thrown by lucene and meghanada-server,

java.io.UncheckedIOException: java.io.IOException: Invalid vInt detected (too many bits)
	at meghanada.index.DocumentSearcher.lambda$executeInTransaction$2(DocumentSearcher.java:164) ~[meghanada-1.0.1.jar:?]
	at jetbrains.exodus.env.EnvironmentImpl.executeInTransaction(EnvironmentImpl.java:966) ~[meghanada-1.0.1.jar:?]
	at jetbrains.exodus.env.EnvironmentImpl.executeInTransaction(EnvironmentImpl.java:253) ~[meghanada-1.0.1.jar:?]
	at jetbrains.exodus.env.ContextualEnvironmentImpl.executeInTransaction(ContextualEnvironmentImpl.java:131) ~[meghanada-1.0.1.jar:?]
	at meghanada.index.DocumentSearcher.executeInTransaction(DocumentSearcher.java:155) ~[meghanada-1.0.1.jar:?]
	at meghanada.index.IndexDatabase.indexObject(IndexDatabase.java:120) ~[meghanada-1.0.1.jar:?]
	at meghanada.index.IndexDatabase.on(IndexDatabase.java:161) ~[meghanada-1.0.1.jar:?]
	at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source) ~[?:?]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_144]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_144]
	at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:87) ~[meghanada-1.0.1.jar:?]
	at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:144) ~[meghanada-1.0.1.jar:?]
	at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:72) [meghanada-1.0.1.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_144]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_144]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144]
Caused by: java.io.IOException: Invalid vInt detected (too many bits)
	at org.apache.lucene.store.DataInput.readVInt(DataInput.java:123) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.TermBuffer.read(TermBuffer.java:86) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.SegmentTermEnum.next(SegmentTermEnum.java:133) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.SegmentMergeInfo.next(SegmentMergeInfo.java:72) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.SegmentMerger.mergeTermInfos(SegmentMerger.java:501) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.SegmentMerger.mergeTerms(SegmentMerger.java:428) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:108) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4263) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:3908) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.SerialMergeScheduler.merge(SerialMergeScheduler.java:37) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.IndexWriter.maybeMerge(IndexWriter.java:2747) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.IndexWriter.maybeMerge(IndexWriter.java:2741) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.IndexWriter.flush(IndexWriter.java:3553) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.IndexWriter.closeInternal(IndexWriter.java:1852) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.IndexWriter.close(IndexWriter.java:1812) ~[meghanada-1.0.1.jar:?]
	at org.apache.lucene.index.IndexWriter.close(IndexWriter.java:1776) ~[meghanada-1.0.1.jar:?]
	at meghanada.index.DocumentSearcher.closeIndexWriter(DocumentSearcher.java:95) ~[meghanada-1.0.1.jar:?]
	at meghanada.index.DocumentSearcher.lambda$executeInTransaction$2(DocumentSearcher.java:161) ~[meghanada-1.0.1.jar:?]
	... 15 more

I have tried to delete all the index and caches and start from scratch, but still get this error.

Here is my settings in Emacs:

(require 'meghanada)
(add-hook 'java-mode-hook
          (lambda ()
            (meghanada-mode t)
            (gradle-mode t)
            (add-hook 'before-save-hook 'delete-trailing-whitespace)))
(add-hook 'groovy-mode-hook
          (lambda ()
            (gradle-mode t)))

(global-set-key (kbd "H-r") 'meghanada-reference)
(setq company-meghanada-auto-import t)
(setq company-meghanada-show-annotation t)
(setq meghanada-full-text-search-enable t)
(setq meghanada-server-remote-debug t)
(setq meghanada-debug t)
(setq meghanada-skip-build-subprojects nil)
(setq meghanada-cache-in-project nil)
(setq meghanada-server-jvm-option
      "-Xms512m -Xmx1024m -XX:ReservedCodeCacheSize=480m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false")

Is there any possible causing and resolving to this issue?

Thanks.

IndexOutOfBoundsException when starting server

When trying to use Meghanada on a Maven project, starting the server fails with an IndexOutOfBoundsException:

[2017-10-05 10:11:21,740][INFO ][Main          : 125] main                   - Meghanada-Server Version:0.8.3-507f400
[2017-10-05 10:11:22,406][ERROR][EmacsServer   : 311] startServer            - Catching
java.lang.ExceptionInInitializerError: null
	at jetbrains.exodus.env.StoreImpl.<init>(StoreImpl.java:53) ~[meghanada-0.8.3.jar:?]
	at jetbrains.exodus.env.EnvironmentImpl.createStore(EnvironmentImpl.java:469) ~[meghanada-0.8.3.jar:?]
	at jetbrains.exodus.env.EnvironmentImpl.openStoreImpl(EnvironmentImpl.java:672) ~[meghanada-0.8.3.jar:?]
	at jetbrains.exodus.env.EnvironmentImpl.openStore(EnvironmentImpl.java:162) ~[meghanada-0.8.3.jar:?]
	at jetbrains.exodus.env.EnvironmentImpl.openStore(EnvironmentImpl.java:45) ~[meghanada-0.8.3.jar:?]
	at jetbrains.exodus.entitystore.PersistentEntityStoreImpl$2.compute(PersistentEntityStoreImpl.java:205) ~[meghanada-0.8.3.jar:?]
	at jetbrains.exodus.entitystore.PersistentEntityStoreImpl$2.compute(PersistentEntityStoreImpl.java:201) ~[meghanada-0.8.3.jar:?]
	at jetbrains.exodus.entitystore.PersistentEntityStoreImpl.computeInTransaction(PersistentEntityStoreImpl.java:576) ~[meghanada-0.8.3.jar:?]
	at jetbrains.exodus.entitystore.PersistentEntityStoreImpl.init(PersistentEntityStoreImpl.java:201) ~[meghanada-0.8.3.jar:?]
	at jetbrains.exodus.entitystore.PersistentEntityStoreImpl.<init>(PersistentEntityStoreImpl.java:181) ~[meghanada-0.8.3.jar:?]
	at jetbrains.exodus.entitystore.PersistentEntityStores.newInstance(PersistentEntityStores.java:41) ~[meghanada-0.8.3.jar:?]
	at jetbrains.exodus.entitystore.PersistentEntityStores.newInstance(PersistentEntityStores.java:47) ~[meghanada-0.8.3.jar:?]
	at jetbrains.exodus.entitystore.PersistentEntityStores.newInstance(PersistentEntityStores.java:57) ~[meghanada-0.8.3.jar:?]
	at meghanada.store.ProjectDatabase.open(ProjectDatabase.java:341) ~[meghanada-0.8.3.jar:?]
	at meghanada.store.ProjectDatabase.<init>(ProjectDatabase.java:74) ~[meghanada-0.8.3.jar:?]
	at meghanada.store.ProjectDatabase.getInstance(ProjectDatabase.java:96) ~[meghanada-0.8.3.jar:?]
	at meghanada.store.ProjectDatabaseHelper.loadProject(ProjectDatabaseHelper.java:205) ~[meghanada-0.8.3.jar:?]
	at meghanada.project.Project.loadProject(Project.java:129) ~[meghanada-0.8.3.jar:?]
	at meghanada.session.Session.loadProject(Session.java:160) ~[meghanada-0.8.3.jar:?]
	at meghanada.session.Session.findProject(Session.java:121) ~[meghanada-0.8.3.jar:?]
	at meghanada.session.Session.createSession(Session.java:97) ~[meghanada-0.8.3.jar:?]
	at meghanada.session.Session.createSession(Session.java:92) ~[meghanada-0.8.3.jar:?]
	at meghanada.server.emacs.EmacsServer.startServer(EmacsServer.java:306) [meghanada-0.8.3.jar:?]
	at meghanada.Main.main(Main.java:127) [meghanada-0.8.3.jar:?]
Caused by: java.lang.IndexOutOfBoundsException: Indexed access out of bounds: 1, 1
	at java.util.Objects.outOfBounds(Objects.java:365) ~[?:?]
	at java.util.Objects.checkIndex(Objects.java:436) ~[?:?]
	at java.util.Objects.checkIndex(Objects.java:388) ~[?:?]
	at java.util.ArrayList.get(ArrayList.java:435) ~[?:?]
	at jetbrains.exodus.util.StringInterner.<clinit>(StringInterner.kt:55) ~[meghanada-0.8.3.jar:?]
	... 24 more
[2017-10-05 10:11:22,419][INFO ][Main          :  69] lambda$main$0          - shutdown server

NPE JavaCompletion completionFieldsOrMethods in dev

The fqcn from the variable is null here.

 // get data from reflector
                String fqcn = variable.fqcn;
                if (!fqcn.contains(".")) {
                    fqcn = ownPackage + '.' + fqcn;
                }
[2017-05-16 09:56:56,150][ERROR][JavaCompletion: 425] completionAt           - Catching
java.lang.NullPointerException: null
	at meghanada.completion.JavaCompletion.completionFieldsOrMethods(JavaCompletion.java:335) ~[meghanada-0.7.5.jar:?]
	at meghanada.completion.JavaCompletion.specialCompletion(JavaCompletion.java:523) ~[meghanada-0.7.5.jar:?]
	at meghanada.completion.JavaCompletion.completionAt(JavaCompletion.java:417) [meghanada-0.7.5.jar:?]
	at meghanada.session.Session.completionAt(Session.java:355) [meghanada-0.7.5.jar:?]
	at meghanada.server.CommandHandler.autocomplete(CommandHandler.java:95) [meghanada-0.7.5.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$dispatch$5(EmacsServer.java:172) [meghanada-0.7.5.jar:?]
	at meghanada.server.emacs.EmacsServer$$Lambda$221/1808075716.apply(Unknown Source) [meghanada-0.7.5.jar:?]
	at com.leacox.motif.matching.Matching1.lambda$get$15(Matching1.java:45) [meghanada-0.7.5.jar:?]
	at com.leacox.motif.matching.Matching1$$Lambda$219/86750035.apply(Unknown Source) [meghanada-0.7.5.jar:?]
	at com.leacox.motif.matching.Pattern$1.apply(Pattern.java:40) [meghanada-0.7.5.jar:?]
	at com.leacox.motif.matching.FluentMatchingR.getMatch(FluentMatchingR.java:118) [meghanada-0.7.5.jar:?]
	at meghanada.server.emacs.EmacsServer.dispatch(EmacsServer.java:280) [meghanada-0.7.5.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$acceptConnection$2(EmacsServer.java:128) [meghanada-0.7.5.jar:?]
	at meghanada.server.emacs.EmacsServer$$Lambda$39/812553708.run(Unknown Source) [meghanada-0.7.5.jar:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_51]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_51]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_51]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_51]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_51]

Optimize import does't work well sometimes

Executing Optimize import in the following example code will insert a new package line below the existed one.
I have also tested it in another file with some import statements and it worked well(This file has all needed import and Optimize import would report "Buffer is already formatted" ).

package com.heping.cmserver.pojo;

/**
 * Describe class CMServerConfigBean here.
 *
 *
 * Created: Sun Jan 22 20:37:27 2017
 *
 * @author <a href="mailto:[email protected]">赵纪阳</a>
 * @version 1.0
 */
public class CMServerConfigBean {
    private String cardFileDir;

    /**
     * Creates a new <code>CMServerConfigBean</code> instance.
     *
     */
    public CMServerConfigBean() {

    }

    public final String getCardFileDir() {
        return cardFileDir;
    }

    public final void setCardFileDir(final String cardFileDir) {
        this.cardFileDir = cardFileDir;
    }

}

Support Bazel/Buck/Please projects

I have a project that uses the Bazel/Buck/Please format. Can meghanada-server use this instead of a gradle or maven project? I see that meghanada-server can itself be compiled with Bazel

meghanada-optimize-import removes comments in class pre-amble

Thanks for a great plugin! I use it on a daily basis.

However, there is a bug that makes one of the features unusable to me, namely optimize imports. If the Java source code has a comment before its package and import statement, it's removed when running meghanada-optimize-import, e.g.:

/* 
 * This is some awesome source code.
 * (c) John Gibberish
 */
package com.example;

import java.util.List;

I report this in meghanada-server since I wager the problem is in meghanada-server/src/main/java/meghanada/analyze/Source.java#optimizeImports(), meghanada-server/src/main/java/meghanada/session/Session.java#optimizeImports(path) or thereabouts.

Meghanada version: 0.8.3
Emacs version: GNU Emacs 25.2.1 (x86_64-pc-linux-gnu, GTK+ Version 3.22.11) of 2017-04-25

Server crashes

I don't yet have a consistent way to reproduce, but some stack traces are available:

[2017-04-14 13:20:32,284][INFO ][MavenProject  :  73] parseProject           - running maven. resolve dependencies ...
[2017-04-14 13:20:36,469][ERROR][Session       : 374] changeProject          - Catching
meghanada.project.ProjectParseException: meghanada.project.ProjectParseException: meghanada.project.ProjectParseException: java.io.IOException: Is a directory
	at meghanada.project.maven.MavenProject.parseProject(MavenProject.java:128) ~[meghanada-0.7.4.jar:?]
	at meghanada.session.Session.loadProject(Session.java:169) ~[meghanada-0.7.4.jar:?]
	at meghanada.session.Session.searchAndChangeProject(Session.java:266) ~[meghanada-0.7.4.jar:?]
	at meghanada.session.Session.changeProject(Session.java:364) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.CommandHandler.changeProject(CommandHandler.java:43) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$dispatch$3(EmacsServer.java:157) ~[meghanada-0.7.4.jar:?]
	at com.leacox.motif.matching.Matching1.lambda$get$15(Matching1.java:45) ~[meghanada-0.7.4.jar:?]
	at com.leacox.motif.matching.Pattern$1.apply(Pattern.java:40) ~[meghanada-0.7.4.jar:?]
	at com.leacox.motif.matching.FluentMatchingR.getMatch(FluentMatchingR.java:118) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.emacs.EmacsServer.dispatch(EmacsServer.java:277) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$acceptConnection$2(EmacsServer.java:125) ~[meghanada-0.7.4.jar:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_121]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_121]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
Caused by: meghanada.project.ProjectParseException: meghanada.project.ProjectParseException: java.io.IOException: Is a directory
	at meghanada.project.maven.POMParser.parsePom(POMParser.java:109) ~[meghanada-0.7.4.jar:?]
	at meghanada.project.maven.MavenProject.parseProject(MavenProject.java:93) ~[meghanada-0.7.4.jar:?]
	... 15 more
Caused by: meghanada.project.ProjectParseException: java.io.IOException: Is a directory
	at meghanada.project.maven.POMParser.parsePom(POMParser.java:109) ~[meghanada-0.7.4.jar:?]
	at meghanada.project.maven.POMParser.parsePom(POMParser.java:62) ~[meghanada-0.7.4.jar:?]
	at meghanada.project.maven.MavenProject.parseProject(MavenProject.java:93) ~[meghanada-0.7.4.jar:?]
	... 15 more
Caused by: java.io.IOException: Is a directory
	at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[?:1.8.0_121]
	at sun.nio.ch.FileDispatcherImpl.read(FileDispatcherImpl.java:46) ~[?:1.8.0_121]
	at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ~[?:1.8.0_121]
	at sun.nio.ch.IOUtil.read(IOUtil.java:197) ~[?:1.8.0_121]
	at sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:159) ~[?:1.8.0_121]
	at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:65) ~[?:1.8.0_121]
	at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:109) ~[?:1.8.0_121]
	at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:103) ~[?:1.8.0_121]
	at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) ~[?:1.8.0_121]
	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) ~[?:1.8.0_121]
	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) ~[?:1.8.0_121]
	at java.io.InputStreamReader.read(InputStreamReader.java:184) ~[?:1.8.0_121]
	at java.io.BufferedReader.read1(BufferedReader.java:210) ~[?:1.8.0_121]
	at java.io.BufferedReader.read(BufferedReader.java:286) ~[?:1.8.0_121]
	at org.codehaus.plexus.util.xml.pull.MXParser.fillBuf(MXParser.java:3026) ~[meghanada-0.7.4.jar:?]
	at org.codehaus.plexus.util.xml.pull.MXParser.more(MXParser.java:3080) ~[meghanada-0.7.4.jar:?]
	at org.codehaus.plexus.util.xml.pull.MXParser.parseProlog(MXParser.java:1451) ~[meghanada-0.7.4.jar:?]
	at org.codehaus.plexus.util.xml.pull.MXParser.nextImpl(MXParser.java:1436) ~[meghanada-0.7.4.jar:?]
	at org.codehaus.plexus.util.xml.pull.MXParser.next(MXParser.java:1131) ~[meghanada-0.7.4.jar:?]
	at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3849) ~[meghanada-0.7.4.jar:?]
	at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:595) ~[meghanada-0.7.4.jar:?]
	at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:609) ~[meghanada-0.7.4.jar:?]
	at meghanada.project.maven.POMParser.parsePom(POMParser.java:53) ~[meghanada-0.7.4.jar:?]
	at meghanada.project.maven.POMParser.parsePom(POMParser.java:62) ~[meghanada-0.7.4.jar:?]
	at meghanada.project.maven.MavenProject.parseProject(MavenProject.java:93) ~[meghanada-0.7.4.jar:?]
	... 15 more
[2017-04-14 13:20:36,475][INFO ][EmacsServer   : 279] dispatch               - receive command [pc, /home/rgrinberg/nci/protege/protege-launcher/src/main/java/org/protege/osgi/framework/BundleInfo.java]. elapsed:4.194 s
[2017-04-14 13:20:36,498][INFO ][Project       : 238] compileJava            - project lucene-search-plugin compile and analyze (java) 0 files. force:false elapsed:21.44 ms
[2017-04-14 13:20:36,499][INFO ][EmacsServer   : 279] dispatch               - receive command [di, /home/rgrinberg/nci/protege/protege-launcher/src/main/java/org/protege/osgi/framework/BundleInfo.java]. elapsed:23.77 ms
[2017-04-14 13:29:24,338][INFO ][EmacsServer   : 279] dispatch               - receive command [pc, /home/rgrinberg/nci/protege/protege-launcher/src/main/java/org/protege/osgi/framework/Parser.java]. elapsed:4.895 ms
[2017-04-14 13:29:24,377][INFO ][EmacsServer   : 279] dispatch               - receive command [di, /home/rgrinberg/nci/protege/protege-launcher/src/main/java/org/protege/osgi/framework/Parser.java]. elapsed:5.341 ms
[2017-04-14 13:29:24,889][INFO ][Config        : 114] timeItF                - create class index. read 60 jars. elapsed:551.4 ms
[2017-04-14 13:29:24,890][INFO ][CacheEventSubs:  51] analyze                - start analyze sources ...
[2017-04-14 13:29:24,891][INFO ][Config        : 114] timeItF                - analyzed and compiled. elapsed:96.94 μs
[2017-04-14 13:29:24,899][ERROR][Session       :  32] lambda$new$0           - null
java.lang.NullPointerException: null
	at meghanada.reflect.asm.CachedASMReflector.addClasspath(CachedASMReflector.java:160) ~[meghanada-0.7.4.jar:?]
	at meghanada.session.subscribe.CacheEventSubscriber.analyze(CacheEventSubscriber.java:68) ~[meghanada-0.7.4.jar:?]
	at meghanada.session.subscribe.CacheEventSubscriber.on(CacheEventSubscriber.java:34) ~[meghanada-0.7.4.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_121]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_121]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_121]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_121]
	at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) ~[meghanada-0.7.4.jar:?]
	at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) ~[meghanada-0.7.4.jar:?]
	at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) [meghanada-0.7.4.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_121]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
[2017-04-14 13:38:11,264][ERROR][Session       : 374] changeProject          - Catching
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2217) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache.get(LocalCache.java:4154) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4158) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5147) ~[meghanada-0.7.4.jar:?]
	at meghanada.cache.GlobalCache.getSource(GlobalCache.java:176) ~[meghanada-0.7.4.jar:?]
	at meghanada.session.Session.changeProject(Session.java:370) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.CommandHandler.changeProject(CommandHandler.java:43) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$dispatch$3(EmacsServer.java:157) ~[meghanada-0.7.4.jar:?]
	at com.leacox.motif.matching.Matching1.lambda$get$15(Matching1.java:45) ~[meghanada-0.7.4.jar:?]
	at com.leacox.motif.matching.Pattern$1.apply(Pattern.java:40) ~[meghanada-0.7.4.jar:?]
	at com.leacox.motif.matching.FluentMatchingR.getMatch(FluentMatchingR.java:118) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.emacs.EmacsServer.dispatch(EmacsServer.java:277) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$acceptConnection$2(EmacsServer.java:125) ~[meghanada-0.7.4.jar:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_121]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_121]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
Caused by: java.lang.NullPointerException
	at meghanada.project.Project.parseFile(Project.java:323) ~[meghanada-0.7.4.jar:?]
	at meghanada.cache.JavaSourceLoader.load(JavaSourceLoader.java:109) ~[meghanada-0.7.4.jar:?]
	at meghanada.cache.JavaSourceLoader.load(JavaSourceLoader.java:22) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3716) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2424) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2298) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2211) ~[meghanada-0.7.4.jar:?]
	... 17 more
[2017-04-14 13:38:11,265][INFO ][EmacsServer   : 279] dispatch               - receive command [pc, /home/rgrinberg/nci/protege/protege-launcher/src/main/java/org/protege/osgi/framework/SymbolicName.java]. elapsed:5.636 ms
[2017-04-14 13:38:11,282][INFO ][EmacsServer   : 279] dispatch               - receive command [di, /home/rgrinberg/nci/protege/protege-launcher/src/main/java/org/protege/osgi/framework/SymbolicName.java]. elapsed:1.510 ms
[2017-04-14 13:38:18,914][ERROR][CommandHandler: 288] showDeclaration        - Catching
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2217) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache.get(LocalCache.java:4154) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4158) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5147) ~[meghanada-0.7.4.jar:?]
	at meghanada.cache.GlobalCache.getSource(GlobalCache.java:176) ~[meghanada-0.7.4.jar:?]
	at meghanada.utils.FileUtils.getSource(FileUtils.java:374) ~[meghanada-0.7.4.jar:?]
	at meghanada.docs.declaration.DeclarationSearcher.searchDeclaration(DeclarationSearcher.java:221) ~[meghanada-0.7.4.jar:?]
	at meghanada.session.Session.showDeclaration(Session.java:634) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.CommandHandler.showDeclaration(CommandHandler.java:281) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$dispatch$17(EmacsServer.java:245) ~[meghanada-0.7.4.jar:?]
	at com.leacox.motif.matching.Matching1.lambda$get$15(Matching1.java:45) ~[meghanada-0.7.4.jar:?]
	at com.leacox.motif.matching.Pattern$1.apply(Pattern.java:40) ~[meghanada-0.7.4.jar:?]
	at com.leacox.motif.matching.FluentMatchingR.getMatch(FluentMatchingR.java:118) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.emacs.EmacsServer.dispatch(EmacsServer.java:277) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$acceptConnection$2(EmacsServer.java:125) ~[meghanada-0.7.4.jar:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_121]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_121]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
Caused by: java.lang.NullPointerException
	at meghanada.project.Project.parseFile(Project.java:323) ~[meghanada-0.7.4.jar:?]
	at meghanada.cache.JavaSourceLoader.load(JavaSourceLoader.java:109) ~[meghanada-0.7.4.jar:?]
	at meghanada.cache.JavaSourceLoader.load(JavaSourceLoader.java:22) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3716) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2424) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2298) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2211) ~[meghanada-0.7.4.jar:?]
	... 19 more
[2017-04-14 13:38:18,918][ERROR][EmacsServer   : 138] lambda$acceptConnectio - Catching
meghanada.server.CommandException: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException
	at meghanada.server.CommandHandler.showDeclaration(CommandHandler.java:289) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$dispatch$17(EmacsServer.java:245) ~[meghanada-0.7.4.jar:?]
	at com.leacox.motif.matching.Matching1.lambda$get$15(Matching1.java:45) ~[meghanada-0.7.4.jar:?]
	at com.leacox.motif.matching.Pattern$1.apply(Pattern.java:40) ~[meghanada-0.7.4.jar:?]
	at com.leacox.motif.matching.FluentMatchingR.getMatch(FluentMatchingR.java:118) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.emacs.EmacsServer.dispatch(EmacsServer.java:277) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$acceptConnection$2(EmacsServer.java:125) ~[meghanada-0.7.4.jar:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_121]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_121]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_121]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
Caused by: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2217) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache.get(LocalCache.java:4154) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4158) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5147) ~[meghanada-0.7.4.jar:?]
	at meghanada.cache.GlobalCache.getSource(GlobalCache.java:176) ~[meghanada-0.7.4.jar:?]
	at meghanada.utils.FileUtils.getSource(FileUtils.java:374) ~[meghanada-0.7.4.jar:?]
	at meghanada.docs.declaration.DeclarationSearcher.searchDeclaration(DeclarationSearcher.java:221) ~[meghanada-0.7.4.jar:?]
	at meghanada.session.Session.showDeclaration(Session.java:634) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.CommandHandler.showDeclaration(CommandHandler.java:281) ~[meghanada-0.7.4.jar:?]
	... 11 more
Caused by: java.lang.NullPointerException
	at meghanada.project.Project.parseFile(Project.java:323) ~[meghanada-0.7.4.jar:?]
	at meghanada.cache.JavaSourceLoader.load(JavaSourceLoader.java:109) ~[meghanada-0.7.4.jar:?]
	at meghanada.cache.JavaSourceLoader.load(JavaSourceLoader.java:22) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3716) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2424) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2298) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2211) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache.get(LocalCache.java:4154) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4158) ~[meghanada-0.7.4.jar:?]
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5147) ~[meghanada-0.7.4.jar:?]
	at meghanada.cache.GlobalCache.getSource(GlobalCache.java:176) ~[meghanada-0.7.4.jar:?]
	at meghanada.utils.FileUtils.getSource(FileUtils.java:374) ~[meghanada-0.7.4.jar:?]
	at meghanada.docs.declaration.DeclarationSearcher.searchDeclaration(DeclarationSearcher.java:221) ~[meghanada-0.7.4.jar:?]
	at meghanada.session.Session.showDeclaration(Session.java:634) ~[meghanada-0.7.4.jar:?]
	at meghanada.server.CommandHandler.showDeclaration(CommandHandler.java:281) ~[meghanada-0.7.4.jar:?]
	... 11 more
[2017-04-14 13:38:18,920][INFO ][EmacsServer   : 145] lambda$acceptConnectio - client disconnect

Reformat with google-java-format

  • Add google-java-format-gradle-plugin
  • Reformat with google-java-format
  • Fix tests
  • Use google-java-format by default
  • Do not use wildcard imports with optimize import

NullPointerException during autocomplete causing client to disconnect from server

Here's the stacktrace from the server buffer:

[2017-02-02 16:16:55,464][ERROR][EmacsServer   : 138] lambda$acceptConnectio - Catching
java.lang.RuntimeException: java.lang.NullPointerException
	at meghanada.server.CommandHandler.autocomplete(CommandHandler.java:101) ~[meghanada-0.5.0.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$dispatch$5(EmacsServer.java:169) ~[meghanada-0.5.0.jar:?]
	at com.leacox.motif.matching.Matching1.lambda$get$15(Matching1.java:45) ~[meghanada-0.5.0.jar:?]
	at com.leacox.motif.matching.Pattern$1.apply(Pattern.java:40) ~[meghanada-0.5.0.jar:?]
	at com.leacox.motif.matching.FluentMatchingR.getMatch(FluentMatchingR.java:118) ~[meghanada-0.5.0.jar:?]
	at meghanada.server.emacs.EmacsServer.dispatch(EmacsServer.java:271) ~[meghanada-0.5.0.jar:?]
	at meghanada.server.emacs.EmacsServer.lambda$acceptConnection$2(EmacsServer.java:125) ~[meghanada-0.5.0.jar:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_111]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_111]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_111]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_111]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_111]
Caused by: java.lang.NullPointerException
	at meghanada.utils.ClassNameUtils.getSimpleName(ClassNameUtils.java:169) ~[meghanada-0.5.0.jar:?]
	at meghanada.reflect.FieldDescriptor.getDisplayDeclaration(FieldDescriptor.java:49) ~[meghanada-0.5.0.jar:?]
	at meghanada.server.formatter.SexpOutputFormatter.lambda$autocomplete$1(SexpOutputFormatter.java:88) ~[meghanada-0.5.0.jar:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[?:1.8.0_111]
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) ~[?:1.8.0_111]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[?:1.8.0_111]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[?:1.8.0_111]
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[?:1.8.0_111]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:1.8.0_111]
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) ~[?:1.8.0_111]
	at meghanada.server.formatter.SexpOutputFormatter.autocomplete(SexpOutputFormatter.java:91) ~[meghanada-0.5.0.jar:?]
	at meghanada.server.CommandHandler.autocomplete(CommandHandler.java:97) ~[meghanada-0.5.0.jar:?]
	... 11 more
[2017-02-02 16:16:55,469][INFO ][EmacsServer   : 145] lambda$acceptConnectio - client disconnect

Meghanada server should use package relocation

So, I tried to open a project that is using dependencies that conflict with the meghanda server. An easy way to address this issues is to use package relocation within the server uberjar.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.