[jdk9] add support for using lombok with JDK9 code when compiling using the new module syntax, and having module-info.java files in your source.

This commit is contained in:
Reinier Zwitserloot committed 2018-02-06 06:20:39 +01:00
1 parent 0b2cca0eb9
commit fee0ad33ab
5 files changed
+84 -1

No files matched your search

+11
View File
@@ -218,6 +218,15 @@ the common tasks and can be called on to run the main aspects of all the sub-scr
<classpath refid="build.path" />
</ivy:compile>
<ivy:compile destdir="build/lombok" source="1.9" target="1.9">
<compilerarg value="-Xlint:none" />
<!-- The above is because javac9 whines about 'service interface provided but not exported or used' for some unfathomable reason. -->
<src path="src/core9" />
<src path="src/j9stubs" />
<!-- This includes org.mapstruct.ap.spi.AstModifyingAnnotationProcessor; putting this on the classpath doesn't work (needs to be internal or a module) so we just add it and then delete the class file for convenience. -->
</ivy:compile>
<delete file="build/lombok/org/mapstruct/ap/spi/AstModifyingAnnotationProcessor.class" />
<ivy:compile destdir="build/lombok/Class50" source="1.5" target="1.6" ecj="true" nowarn="true" includeSystemBootclasspath="true">
<bootclasspath location="build/stubs" />
<src path="src/eclipseAgent" />
@@ -281,6 +290,7 @@ lombok.launch.AnnotationProcessorHider$ClaimingProcessor</echo>
<fileset dir="." includes="AUTHORS" />
<fileset dir="." includes="release-timestamp.txt" />
<fileset dir="build/lombok">
<include name="module-info.class" />
<include name="lombok/*.class" />
<include name="lombok/experimental/**" />
<include name="lombok/extern/**" />
@@ -291,6 +301,7 @@ lombok.launch.AnnotationProcessorHider$ClaimingProcessor</echo>
<mappedresources>
<fileset dir="build/lombok">
<exclude name="com/sun/tools/javac/**" />
<exclude name="module-info.class" />
<exclude name="lombok/*.class" />
<exclude name="lombok/javac/apt/Processor.class" />
<exclude name="lombok/experimental/**" />
+2 -1
View File
@@ -3,7 +3,8 @@ Lombok Changelog
### v1.16.21 "Edgy Guinea Pig"
* v1.16.20 is the latest stable release of Project Lombok.
* Potential fix for Netbeans < 9. [Issue #1555](https://github.com/rzwitserloot/lombok/issues/1555)
* PLATFORM: Fix for using lombok together with JDK9's new `module-info.java` feature. [Issue #985](https://github.com/rzwitserloot/lombok/issues/985)
* BUGFIX: Potential fix for Netbeans < 9. [Issue #1555](https://github.com/rzwitserloot/lombok/issues/1555)
### v1.16.20 (January 9th, 2018)
* PLATFORM: Better support for jdk9 in the new IntelliJ, Netbeans and for Gradle.
@@ -44,6 +44,9 @@ public class ClassFileMetaData {
private static final byte METHOD_HANDLE = 15;
private static final byte METHOD_TYPE = 16;
private static final byte INVOKE_DYNAMIC = 18;
// New in java9: support for modules
private static final byte MODULE = 19;
private static final byte PACKAGE = 20;
private static final int NOT_FOUND = -1;
private static final int START_OF_CONSTANT_POOL = 8;
@@ -79,6 +82,8 @@ public class ClassFileMetaData {
case CLASS:
case STRING:
case METHOD_TYPE:
case MODULE:
case PACKAGE:
position += 2;
break;
case METHOD_HANDLE:
+18
View File
@@ -0,0 +1,18 @@
module lombok {
requires java.compiler;
requires java.instrument;
requires jdk.unsupported;
exports lombok;
exports lombok.experimental;
exports lombok.extern.apachecommons;
exports lombok.extern.java;
exports lombok.extern.jbosslog;
exports lombok.extern.log4j;
exports lombok.extern.slf4j;
provides javax.annotation.processing.Processor with lombok.launch.AnnotationProcessorHider.AnnotationProcessor;
// provides javax.annotation.processing.Processor with lombok.launch.AnnotationProcessorHider.ClaimingProcessor;
provides org.mapstruct.ap.spi.AstModifyingAnnotationProcessor with lombok.launch.AnnotationProcessorHider.AstModificationNotifier;
}
@@ -0,0 +1,48 @@
/**
* Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
* and/or other contributors as indicated by the @authors tag. See the
* copyright.txt file in the distribution for a full listing of all
* contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mapstruct.ap.spi;
import javax.lang.model.type.TypeMirror;
/**
* A contract to be implemented by other annotation processors which - against the design philosophy of JSR 269 - alter
* the types under compilation.
* <p>
* This contract will be queried by MapStruct when examining types referenced by mappers to be generated, most notably
* the source and target types of mapping methods. If at least one AST-modifying processor announces further changes to
* such type, the generation of the affected mapper(s) will be deferred to a future round in the annnotation processing
* cycle.
* <p>
* Implementations are discovered via the service loader, i.e. a JAR providing an AST-modifying processor needs to
* declare its implementation in a file {@code META-INF/services/org.mapstruct.ap.spi.AstModifyingAnnotationProcessor}.
*
* @author Gunnar Morling
*/
//@org.mapstruct.util.Experimental
public interface AstModifyingAnnotationProcessor {
/**
* Whether the specified type has been fully processed by this processor or not (i.e. this processor will amend the
* given type's structure after this invocation).
*
* @param type The type of interest
* @return {@code true} if this processor has fully processed the given type, {@code false} otherwise.
*/
boolean isTypeComplete(TypeMirror type);
}