diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/annotation-processor-second-version/pom.xml b/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/annotation-processor-second-version/pom.xml
new file mode 100644
index 00000000000..cf7accaf07c
--- /dev/null
+++ b/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/annotation-processor-second-version/pom.xml
@@ -0,0 +1,58 @@
+
+
+ 4.0.0
+
+ org.jetbrains.kotlin.testkapt
+ annotation-processor-second-version
+ 2.0-SNAPSHOT
+
+
+
+ org.jetbrains.kotlin
+ kotlin-stdlib
+ ${kotlin.version}
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 2.3.2
+
+ 1.6
+ 1.6
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 2.1.2
+
+
+
+
+ ${project.basedir}/src/main/kotlin
+
+
+ kotlin-maven-plugin
+ org.jetbrains.kotlin
+ ${kotlin.version}
+
+
+ compile
+ process-sources
+
+ compile
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/annotation-processor-second-version/src/main/kotlin/ExampleAnnotationProcessor.kt b/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/annotation-processor-second-version/src/main/kotlin/ExampleAnnotationProcessor.kt
new file mode 100644
index 00000000000..f6fbe206d69
--- /dev/null
+++ b/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/annotation-processor-second-version/src/main/kotlin/ExampleAnnotationProcessor.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package example
+
+import java.io.File
+import javax.annotation.processing.AbstractProcessor
+import javax.annotation.processing.RoundEnvironment
+import javax.lang.model.SourceVersion
+import javax.lang.model.element.ElementKind
+import javax.lang.model.element.TypeElement
+import javax.tools.Diagnostic
+import kotlin.reflect.KClass
+
+annotation class Anno
+
+class ExampleAnnotationProcessor : AbstractProcessor() {
+ private companion object {
+ val KAPT_KOTLIN_GENERATED_OPTION = "kapt.kotlin.generated"
+ }
+
+ override fun process(annotations: MutableSet?, roundEnv: RoundEnvironment): Boolean {
+ val elements = roundEnv.getElementsAnnotatedWith(Anno::class.java)
+ val kotlinGenerated = processingEnv.options[KAPT_KOTLIN_GENERATED_OPTION]
+
+ for (element in elements) {
+ val packageName = processingEnv.elementUtils.getPackageOf(element).qualifiedName.toString()
+ val simpleName = element.simpleName.toString()
+
+ if (kotlinGenerated != null && element.kind == ElementKind.CLASS) {
+ File(kotlinGenerated, "$simpleName.kt").writer().buffered().use {
+ it.appendLine("package $packageName")
+ it.appendLine("fun $simpleName.customToString() = \"$simpleName: \" + toString()")
+ }
+ }
+ }
+
+ return true
+ }
+
+ override fun getSupportedSourceVersion() = SourceVersion.RELEASE_6
+ override fun getSupportedAnnotationTypes() = setOf(Anno::class.java.name)
+ override fun getSupportedOptions() = emptySet()
+}
\ No newline at end of file
diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/app-with-kapt/pom.xml b/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/app-with-kapt/pom.xml
new file mode 100644
index 00000000000..5694dec9530
--- /dev/null
+++ b/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/app-with-kapt/pom.xml
@@ -0,0 +1,72 @@
+
+
+
+ 4.0.0
+
+ org.jetbrains.kotlin.testkapt
+ app-with-kapt
+ 1.0-SNAPSHOT
+
+
+ 4.13.1
+ UTF-8
+
+
+
+
+ org.jetbrains.kotlin.testkapt
+ annotation-processor-second-version
+ 2.0-SNAPSHOT
+
+
+ org.jetbrains.kotlin
+ kotlin-stdlib
+ ${kotlin.version}
+
+
+
+
+
+
+ kotlin-maven-plugin
+ org.jetbrains.kotlin
+ ${kotlin.version}
+
+
+ kapt
+
+ kapt
+
+
+
+ src/main/kotlin
+
+
+ example.ExampleAnnotationProcessor
+
+
+
+ org.jetbrains.kotlin.testkapt
+ annotation-processor-second-version
+
+
+
+
+
+ compile
+
+ compile
+
+
+
+ src/main/kotlin
+
+
+
+
+
+
+
+
diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/app-with-kapt/src/main/kotlin/test.kt b/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/app-with-kapt/src/main/kotlin/test.kt
new file mode 100755
index 00000000000..c18d6a3057c
--- /dev/null
+++ b/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/app-with-kapt/src/main/kotlin/test.kt
@@ -0,0 +1,8 @@
+package test
+
+@example.Anno
+class MyClass {
+ fun test() {
+ println(this.customToString())
+ }
+}
diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/pom.xml b/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/pom.xml
new file mode 100644
index 00000000000..0f6de0ab465
--- /dev/null
+++ b/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/pom.xml
@@ -0,0 +1,16 @@
+
+
+ 4.0.0
+
+ org.jetbrains.kotlin.testkapt
+ test-kapt-annotationProcessorPaths-without-version
+ 1.0-SNAPSHOT
+
+ annotation-processor-second-version
+ app-with-kapt
+
+ pom
+
+
\ No newline at end of file
diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/verify.bsh b/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/verify.bsh
new file mode 100644
index 00000000000..46d94c29439
--- /dev/null
+++ b/libraries/tools/kotlin-maven-plugin-test/src/it/test-kapt-annotationProcessorPaths-without-version/verify.bsh
@@ -0,0 +1,6 @@
+import java.io.*;
+
+File file = new File(basedir, "app-with-kapt/target/app-with-kapt-1.0-SNAPSHOT.jar");
+if (!file.exists() || !file.isFile()) {
+ throw new FileNotFoundException("Could not find generated JAR: " + file);
+}
diff --git a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/kapt/AnnotationProcessingManager.java b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/kapt/AnnotationProcessingManager.java
index 594687f1e64..d097f470d2f 100644
--- a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/kapt/AnnotationProcessingManager.java
+++ b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/kapt/AnnotationProcessingManager.java
@@ -25,6 +25,7 @@ import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Dependency;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.compiler.DependencyCoordinate;
import org.apache.maven.project.MavenProject;
@@ -167,7 +168,7 @@ public class AnnotationProcessingManager {
return new DefaultArtifact(
dependency.getGroupId(),
dependency.getArtifactId(),
- VersionRange.createFromVersionSpec(dependency.getVersion()),
+ VersionRange.createFromVersionSpec(evaluateVersion(dependency)),
Artifact.SCOPE_RUNTIME,
dependency.getType(),
dependency.getClassifier(),
@@ -175,6 +176,21 @@ public class AnnotationProcessingManager {
false);
}
+ private String evaluateVersion(@NotNull DependencyCoordinate dependency) {
+ String version = dependency.getVersion();
+ if (version == null) {
+ Optional sameButParentDependency = project.getDependencies().stream()
+ .filter(dep -> dep.getGroupId().equals(dependency.getGroupId())
+ && dep.getArtifactId().equals(dependency.getArtifactId())
+ && dep.getVersion() != null
+ ).findFirst();
+ if (sameButParentDependency.isPresent()) {
+ version = sameButParentDependency.get().getVersion();
+ }
+ }
+ return version;
+ }
+
@NotNull
private static String getMavenPluginVersion() throws MojoExecutionException {
ClassLoader classLoader = AnnotationProcessingManager.class.getClassLoader();