mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-14 14:17:48 +00:00
Value has been promoted to the main package.
This commit is contained in:
1 parent
e1c39bbc60
commit
b5747963c0
27 files changed
+334
-49
No files matched your search
@@ -2,7 +2,7 @@ Lombok Changelog
|
||||
----------------
|
||||
|
||||
### v0.11.9 (Edgy Guinea Pig)
|
||||
* FEATURE: {Experimental} `@Builder` support. One of our earliest feature request issues has finally been addressed. [@Builder documentation](http://projectlombok.org/features/experimental/Builder.html).
|
||||
* FEATURE: {Experimental} `@Builder` support. One of our earliest feature request issues, [Issue #16](https://code.google.com/p/projectlombok/issues/detail?id=16), has finally been addressed. [@Builder documentation](http://projectlombok.org/features/experimental/Builder.html).
|
||||
* FEATURE: `@NonNull` on a method or constructor parameter now generates a null-check statement at the start of your method. This nullcheck will throw a `NullPointerException` with the name of the parameter as the message. [Issue #514](https://code.google.com/p/projectlombok/issues/detail?id=514)
|
||||
* BUGFIX: Usage of `Lombok.sneakyThrow()` or `@SneakyThrows` would sometimes result in invalid classes (classes which fail with `VerifyError`). [Issue #470](https://code.google.com/p/projectlombok/issues/detail?id=470)
|
||||
* BUGFIX: Using `val` in try-with-resources did not work for javac. [Issue #520](https://code.google.com/p/projectlombok/issues/detail?id=520)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2009-2012 The Project Lombok Authors.
|
||||
* Copyright (C) 2009-2013 The Project Lombok Authors.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -39,7 +39,7 @@ import java.lang.annotation.Target;
|
||||
* @see RequiredArgsConstructor
|
||||
* @see ToString
|
||||
* @see EqualsAndHashCode
|
||||
* @see lombok.experimental.Value
|
||||
* @see lombok.Value
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2013 The Project Lombok Authors.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
package lombok;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* Generates a lot of code which fits with a class that is a representation of an immutable entity.
|
||||
* <p>
|
||||
* Equivalent to {@code @Getter @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE) @RequiredArgsConstructor @ToString @EqualsAndHashCode}.
|
||||
* <p>
|
||||
* Complete documentation is found at <a href="http://projectlombok.org/features/experimental/Value.html">the project lombok features page for @Value</a>.
|
||||
*
|
||||
* @see lombok.Getter
|
||||
* @see lombok.experimental.FieldDefaults
|
||||
* @see lombok.RequiredArgsConstructor
|
||||
* @see lombok.ToString
|
||||
* @see lombok.EqualsAndHashCode
|
||||
* @see lombok.Data
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface Value {
|
||||
/**
|
||||
* If you specify a static constructor name, then the generated constructor will be private, and
|
||||
* instead a static factory method is created that other classes can use to create instances.
|
||||
* We suggest the name: "of", like so:
|
||||
*
|
||||
* <pre>
|
||||
* public @Data(staticConstructor = "of") class Point { final int x, y; }
|
||||
* </pre>
|
||||
*
|
||||
* Default: No static constructor, instead the normal constructor is public.
|
||||
*/
|
||||
String staticConstructor() default "";
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (C) 2013 The Project Lombok Authors.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
package lombok.core;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class LombokInternalAliasing {
|
||||
public static final Map<String, String> IMPLIED_EXTRA_STAR_IMPORTS;
|
||||
public static final Map<String, String> ALIASES;
|
||||
|
||||
/**
|
||||
* Provide a fully qualified name (FQN), and the canonical version of this is returned.
|
||||
*/
|
||||
public static String processAliases(String in) {
|
||||
if (in == null) return null;
|
||||
for (Map.Entry<String, String> e : ALIASES.entrySet()) {
|
||||
if (in.equals(e.getKey())) return e.getValue();
|
||||
}
|
||||
return in;
|
||||
}
|
||||
|
||||
static {
|
||||
Map<String, String> m = new HashMap<String, String>();
|
||||
m.put("lombok.experimental", "lombok");
|
||||
IMPLIED_EXTRA_STAR_IMPORTS = Collections.unmodifiableMap(m);
|
||||
|
||||
m = new HashMap<String, String>();
|
||||
m.put("lombok.experimental.Value", "lombok.Value");
|
||||
ALIASES = Collections.unmodifiableMap(m);
|
||||
}
|
||||
}
|
||||
@@ -74,6 +74,9 @@ public class TypeLibrary {
|
||||
|
||||
unqualifiedToQualifiedMap.put(unqualified, fullyQualifiedTypeName);
|
||||
unqualifiedToQualifiedMap.put(fullyQualifiedTypeName, fullyQualifiedTypeName);
|
||||
for (Map.Entry<String, String> e : LombokInternalAliasing.ALIASES.entrySet()) {
|
||||
if (fullyQualifiedTypeName.equals(e.getValue())) unqualifiedToQualifiedMap.put(e.getKey(), fullyQualifiedTypeName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -85,6 +88,9 @@ public class TypeLibrary {
|
||||
public String toQualified(String typeReference) {
|
||||
if (unqualifiedToQualifiedMap == null) {
|
||||
if (typeReference.equals(unqualified) || typeReference.equals(qualified)) return qualified;
|
||||
for (Map.Entry<String, String> e : LombokInternalAliasing.ALIASES.entrySet()) {
|
||||
if (e.getKey().equals(typeReference)) return e.getValue();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return unqualifiedToQualifiedMap.get(typeReference);
|
||||
|
||||
@@ -39,19 +39,12 @@ public class TypeResolver {
|
||||
this.imports = importList;
|
||||
}
|
||||
|
||||
// private static ImportList makeImportList(String packageString, Collection<String> importStrings) {
|
||||
// Set<String> imports = new HashSet<String>();
|
||||
// if (packageString != null) imports.add(packageString + ".*");
|
||||
// imports.addAll(importStrings == null ? Collections.<String>emptySet() : importStrings);
|
||||
// imports.add("java.lang.*");
|
||||
// return imports;
|
||||
// }
|
||||
//
|
||||
public boolean typeMatches(LombokNode<?, ?, ?> context, String fqn, String typeRef) {
|
||||
return typeRefToFullyQualifiedName(context, TypeLibrary.createLibraryForSingleType(fqn), typeRef) != null;
|
||||
}
|
||||
|
||||
public String typeRefToFullyQualifiedName(LombokNode<?, ?, ?> context, TypeLibrary library, String typeRef) {
|
||||
typeRef = LombokInternalAliasing.processAliases(typeRef);
|
||||
// When asking if 'Foo' could possibly be referring to 'bar.Baz', the answer is obviously no.
|
||||
String qualified = library.toQualified(typeRef);
|
||||
if (qualified == null) return null;
|
||||
|
||||
@@ -21,19 +21,21 @@
|
||||
*/
|
||||
package lombok.eclipse;
|
||||
|
||||
import static lombok.eclipse.Eclipse.*;
|
||||
import static lombok.eclipse.Eclipse.toQualifiedName;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import lombok.core.ImportList;
|
||||
import lombok.core.LombokInternalAliasing;
|
||||
|
||||
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
|
||||
import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
|
||||
import org.eclipse.jdt.internal.compiler.ast.ImportReference;
|
||||
|
||||
import lombok.core.ImportList;
|
||||
|
||||
public class EclipseImportList implements ImportList {
|
||||
private ImportReference[] imports;
|
||||
private ImportReference pkg;
|
||||
@@ -53,13 +55,16 @@ public class EclipseImportList implements ImportList {
|
||||
int len = token.length;
|
||||
if (len != unqualified.length()) continue;
|
||||
for (int i = 0; i < len; i++) if (token[i] != unqualified.charAt(i)) continue outer;
|
||||
return toQualifiedName(tokens);
|
||||
return LombokInternalAliasing.processAliases(toQualifiedName(tokens));
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override public boolean hasStarImport(String packageName) {
|
||||
for (Map.Entry<String, String> e : LombokInternalAliasing.IMPLIED_EXTRA_STAR_IMPORTS.entrySet()) {
|
||||
if (e.getValue().equals(packageName) && hasStarImport(e.getKey())) return true;
|
||||
}
|
||||
if (isEqual(packageName, pkg)) return true;
|
||||
if ("java.lang".equals(packageName)) return true;
|
||||
if (imports != null) for (ImportReference imp : imports) {
|
||||
|
||||
@@ -32,7 +32,7 @@ import lombok.eclipse.EclipseAnnotationHandler;
|
||||
import lombok.eclipse.EclipseNode;
|
||||
import lombok.eclipse.handlers.HandleConstructor.SkipIfConstructorExists;
|
||||
import lombok.experimental.NonFinal;
|
||||
import lombok.experimental.Value;
|
||||
import lombok.Value;
|
||||
|
||||
import org.eclipse.jdt.internal.compiler.ast.Annotation;
|
||||
import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
|
||||
|
||||
@@ -23,6 +23,7 @@ package lombok.javac;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
|
||||
@@ -32,6 +33,7 @@ import com.sun.tools.javac.tree.JCTree.JCImport;
|
||||
import com.sun.tools.javac.util.List;
|
||||
|
||||
import lombok.core.ImportList;
|
||||
import lombok.core.LombokInternalAliasing;
|
||||
|
||||
public class JavacImportList implements ImportList {
|
||||
private final JCExpression pkg;
|
||||
@@ -48,13 +50,18 @@ public class JavacImportList implements ImportList {
|
||||
JCTree qual = ((JCImport) def).qualid;
|
||||
if (!(qual instanceof JCFieldAccess)) continue;
|
||||
String simpleName = ((JCFieldAccess) qual).name.toString();
|
||||
if (simpleName.equals(unqualified)) return qual.toString();
|
||||
if (simpleName.equals(unqualified)) {
|
||||
return LombokInternalAliasing.processAliases(qual.toString());
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override public boolean hasStarImport(String packageName) {
|
||||
for (Map.Entry<String, String> e : LombokInternalAliasing.IMPLIED_EXTRA_STAR_IMPORTS.entrySet()) {
|
||||
if (e.getValue().equals(packageName) && hasStarImport(e.getKey())) return true;
|
||||
}
|
||||
if (pkg != null && pkg.toString().equals(packageName)) return true;
|
||||
if ("java.lang".equals(packageName)) return true;
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ import lombok.AccessLevel;
|
||||
import lombok.core.AnnotationValues;
|
||||
import lombok.core.HandlerPriority;
|
||||
import lombok.experimental.NonFinal;
|
||||
import lombok.experimental.Value;
|
||||
import lombok.Value;
|
||||
import lombok.javac.JavacAnnotationHandler;
|
||||
import lombok.javac.JavacNode;
|
||||
import lombok.javac.handlers.HandleConstructor.SkipIfConstructorExists;
|
||||
@@ -45,7 +45,7 @@ import com.sun.tools.javac.tree.JCTree.JCModifiers;
|
||||
@HandlerPriority(-512) //-2^9; to ensure @EqualsAndHashCode and such pick up on this handler making the class final and messing with the fields' access levels, run earlier.
|
||||
public class HandleValue extends JavacAnnotationHandler<Value> {
|
||||
@Override public void handle(AnnotationValues<Value> annotation, JCAnnotation ast, JavacNode annotationNode) {
|
||||
deleteAnnotationIfNeccessary(annotationNode, Value.class);
|
||||
deleteAnnotationIfNeccessary(annotationNode, Value.class, lombok.experimental.Value.class);
|
||||
JavacNode typeNode = annotationNode.up();
|
||||
boolean notAClass = !isClass(typeNode);
|
||||
|
||||
|
||||
@@ -280,7 +280,22 @@ public class JavacHandlerUtil {
|
||||
* then removes any import statement that imports this exact annotation (not star imports).
|
||||
* Only does this if the DeleteLombokAnnotations class is in the context.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static void deleteAnnotationIfNeccessary(JavacNode annotation, Class<? extends Annotation> annotationType) {
|
||||
deleteAnnotationIfNeccessary0(annotation, annotationType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the annotation from javac's AST (it remains in lombok's AST),
|
||||
* then removes any import statement that imports this exact annotation (not star imports).
|
||||
* Only does this if the DeleteLombokAnnotations class is in the context.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static void deleteAnnotationIfNeccessary(JavacNode annotation, Class<? extends Annotation> annotationType1, Class<? extends Annotation> annotationType2) {
|
||||
deleteAnnotationIfNeccessary0(annotation, annotationType1, annotationType2);
|
||||
}
|
||||
|
||||
private static void deleteAnnotationIfNeccessary0(JavacNode annotation, Class<? extends Annotation>... annotationTypes) {
|
||||
if (inNetbeansEditor(annotation)) return;
|
||||
if (!annotation.shouldDeleteLombokAnnotations()) return;
|
||||
JavacNode parentNode = annotation.directUp();
|
||||
@@ -309,7 +324,9 @@ public class JavacHandlerUtil {
|
||||
}
|
||||
|
||||
parentNode.getAst().setChanged();
|
||||
deleteImportFromCompilationUnit(annotation, annotationType.getName());
|
||||
for (Class<?> annotationType : annotationTypes) {
|
||||
deleteImportFromCompilationUnit(annotation, annotationType.getName());
|
||||
}
|
||||
}
|
||||
|
||||
public static void deleteImportFromCompilationUnit(JavacNode node, String name) {
|
||||
|
||||
@@ -84,6 +84,7 @@ public class DelombokApp extends LombokApp {
|
||||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("resource")
|
||||
final JarFile toolsJarFile = new JarFile(toolsJar);
|
||||
|
||||
ClassLoader loader = new ClassLoader() {
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
final class ValueExperimental1 {
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public ValueExperimental1() {
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public boolean equals(final java.lang.Object o) {
|
||||
if (o == this) return true;
|
||||
if (!(o instanceof ValueExperimental1)) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public java.lang.String toString() {
|
||||
return "ValueExperimental1()";
|
||||
}
|
||||
}
|
||||
final class ValueExperimental2 {
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public ValueExperimental2() {
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public boolean equals(final java.lang.Object o) {
|
||||
if (o == this) return true;
|
||||
if (!(o instanceof ValueExperimental2)) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public java.lang.String toString() {
|
||||
return "ValueExperimental2()";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
import lombok.experimental.*;
|
||||
final class ValueExperimentalStarImport {
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public ValueExperimentalStarImport() {
|
||||
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public boolean equals(final java.lang.Object o) {
|
||||
if (o == this) return true;
|
||||
if (!(o instanceof ValueExperimentalStarImport)) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public java.lang.String toString() {
|
||||
return "ValueExperimentalStarImport()";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
import lombok.experimental.Value;
|
||||
final @Value class ValueExperimental1 {
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") boolean equals(final java.lang.Object o) {
|
||||
if ((o == this))
|
||||
return true;
|
||||
if ((! (o instanceof ValueExperimental1)))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
return result;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
|
||||
return "ValueExperimental1()";
|
||||
}
|
||||
public @java.lang.SuppressWarnings("all") ValueExperimental1() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
final @lombok.experimental.Value class ValueExperimental2 {
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") boolean equals(final java.lang.Object o) {
|
||||
if ((o == this))
|
||||
return true;
|
||||
if ((! (o instanceof ValueExperimental2)))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
return result;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
|
||||
return "ValueExperimental2()";
|
||||
}
|
||||
public @java.lang.SuppressWarnings("all") ValueExperimental2() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
import lombok.experimental.*;
|
||||
final @Value class ValueExperimentalStarImport {
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") boolean equals(final java.lang.Object o) {
|
||||
if ((o == this))
|
||||
return true;
|
||||
if ((! (o instanceof ValueExperimentalStarImport)))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
return result;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
|
||||
return "ValueExperimentalStarImport()";
|
||||
}
|
||||
public @java.lang.SuppressWarnings("all") ValueExperimentalStarImport() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import lombok.experimental.Value;
|
||||
final @lombok.experimental.Value class Value1 {
|
||||
import lombok.Value;
|
||||
final @lombok.Value class Value1 {
|
||||
private final int x;
|
||||
private final String name;
|
||||
public @java.lang.SuppressWarnings("all") int getX() {
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
import lombok.experimental.Value;
|
||||
|
||||
@Value
|
||||
class ValueExperimental1 {
|
||||
}
|
||||
|
||||
@lombok.experimental.Value
|
||||
class ValueExperimental2 {
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
import lombok.experimental.*;
|
||||
|
||||
@Value
|
||||
class ValueExperimentalStarImport {
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import lombok.experimental.Value;
|
||||
@lombok.experimental.Value class Value1 {
|
||||
import lombok.Value;
|
||||
@lombok.Value class Value1 {
|
||||
final int x;
|
||||
String name;
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<a href="index.html">Back to features</a> | <a href="Constructor.html">Previous feature (@<em>X</em>Constructor)</a> | <a href="SneakyThrows.html">Next feature (@SneakyThrows)</a><br />
|
||||
<a href="index.html">Back to features</a> | <a href="Constructor.html">Previous feature (@<em>X</em>Constructor)</a> | <a href="Value.html">Next feature (@Value)</a><br />
|
||||
<a href="../credits.html" class="creditsLink">credits</a> | <span class="copyright">Copyright © 2009-2013 The Project Lombok Authors, licensed under the <a href="http://www.opensource.org/licenses/mit-license.php">MIT license</a>.</span>
|
||||
</div>
|
||||
<div style="clear: both;"></div>
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<a href="index.html">Back to features</a> | <a href="Data.html">Previous feature (@Data)</a> | <a href="Synchronized.html">Next feature (@Synchronized)</a><br />
|
||||
<a href="index.html">Back to features</a> | <a href="Value.html">Previous feature (@Value)</a> | <a href="Synchronized.html">Next feature (@Synchronized)</a><br />
|
||||
<a href="../credits.html" class="creditsLink">credits</a> | <span class="copyright">Copyright © 2009-2013 The Project Lombok Authors, licensed under the <a href="http://www.opensource.org/licenses/mit-license.php">MIT license</a>.</span>
|
||||
</div>
|
||||
<div style="clear: both;"></div>
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<link rel="stylesheet" type="text/css" href="../../logi/reset.css" />
|
||||
<link rel="stylesheet" type="text/css" href="../features.css" />
|
||||
<link rel="shortcut icon" href="../../favicon.ico" type="image/x-icon" />
|
||||
<link rel="stylesheet" type="text/css" href="../logi/reset.css" />
|
||||
<link rel="stylesheet" type="text/css" href="features.css" />
|
||||
<link rel="shortcut icon" href="../favicon.ico" type="image/x-icon" />
|
||||
<meta name="description" content="Spice up your java" />
|
||||
<title>EXPERIMENTAL - @ExtensionMethod</title>
|
||||
<title>@ExtensionMethod</title>
|
||||
</head><body><div id="pepper">
|
||||
<div class="minimumHeight"></div>
|
||||
<div class="meat">
|
||||
<div class="header"><a href="../../index.html">Project Lombok</a></div>
|
||||
<div class="header"><a href="../index.html">Project Lombok</a></div>
|
||||
<h1>@Value</h1>
|
||||
<div class="byline">Immutable classes made very easy.</div>
|
||||
<div class="since">
|
||||
@@ -18,20 +18,13 @@
|
||||
<code>@Value</code> was introduced as experimental feature in lombok v0.11.4.
|
||||
</p><p>
|
||||
<code>@Value</code> no longer implies <code>@Wither</code> since lombok v0.11.8.
|
||||
</div>
|
||||
<div class="experimental">
|
||||
<h3>Experimental</h3>
|
||||
<p>
|
||||
Experimental because:
|
||||
<ul>
|
||||
<li>Various choices still have to be vetted as being the correct 'least surprise' choice: Should the class be made final by default, etc.</li>
|
||||
</ul>
|
||||
Current status: <em>positive</em> - Currently we feel this feature may move out of experimental status with no or minor changes soon.
|
||||
</p><p>
|
||||
<code>@Value</code> promoted to the main <code>lombok</code> package since lombok v0.11.10.
|
||||
</div>
|
||||
<div class="overview">
|
||||
<h3>Overview</h3>
|
||||
<p>
|
||||
<code>@Value</code> is the immutable variant of <a href="../Data.html"><code>@Data</code></a>; all fields are made <code>private</code> and <code>final</code> by default, and setters are not generated. The class itself is also made <code>final</code> by default, because immutability is not something that can be forced onto a subclass. Like <code>@Data</code>, useful <code>toString()</code>, <code>equals()</code> and <code>hashCode()</code> methods are also generated, each field gets a getter method, and a constructor that covers every
|
||||
<code>@Value</code> is the immutable variant of <a href="Data.html"><code>@Data</code></a>; all fields are made <code>private</code> and <code>final</code> by default, and setters are not generated. The class itself is also made <code>final</code> by default, because immutability is not something that can be forced onto a subclass. Like <code>@Data</code>, useful <code>toString()</code>, <code>equals()</code> and <code>hashCode()</code> methods are also generated, each field gets a getter method, and a constructor that covers every
|
||||
argument (except <code>final</code> fields that are initialized in the field declaration) is also generated.
|
||||
</p><p>
|
||||
In practice, <code>@Value</code> is shorthand for: <code>final @ToString @EqualsAndHashCode @AllArgsConstructor @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) @Getter</code>.
|
||||
@@ -55,15 +48,17 @@
|
||||
<div class="overview">
|
||||
<h3>Small print</h3><div class="smallprint">
|
||||
<p>
|
||||
Look for the documentation on the 'parts' of <code>@Value</code>: <a href="../ToString.html"><code>@ToString</code></a>, <a href="../EqualsAndHashCode.html"><code>@EqualsAndHashCode</code></a>, <a href="../Constructor.html"><code>@AllArgsConstructor</code></a>, <a href="FieldDefaults.html"><code>@FieldDefaults</code></a>, and <a href="../GetterSetter.html"><code>@Getter</code></a>.
|
||||
Look for the documentation on the 'parts' of <code>@Value</code>: <a href="ToString.html"><code>@ToString</code></a>, <a href="EqualsAndHashCode.html"><code>@EqualsAndHashCode</code></a>, <a href="Constructor.html"><code>@AllArgsConstructor</code></a>, <a href="experimental/FieldDefaults.html"><code>@FieldDefaults</code></a>, and <a href="GetterSetter.html"><code>@Getter</code></a>.
|
||||
</p><p>
|
||||
For classes with generics, it's useful to have a static method which serves as a constructor, because inference of generic parameters via static methods works in java6 and avoids having to use the diamond operator. While you can force this by applying an explicit <code>@AllArgsConstructor(staticConstructor="of")</code> annotation, there's also the <code>@Value(staticConstructor="of")</code> feature, which will make the generated all-arguments constructor private, and generates a public static method named <code>of</code> which is a wrapper around this private constructor.
|
||||
</p>
|
||||
</p><p>
|
||||
<code>@Value</code> was an experimental feature from v0.11.4 to v0.11.9 (as <code>@lombok.experimental.Value</code>). It has since been moved into the core package. The old annotation is still
|
||||
around (and is an alias). It will eventually be removed in a future version, though.
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<a href="index.html">Back to experimental features</a> | <a href="Wither.html">Previous feature (@Wither)</a> | <a href="onX.html">Next feature (onX)</a><br />
|
||||
<a href="../../credits.html" class="creditsLink">credits</a> | <span class="copyright">Copyright © 2009-2013 The Project Lombok Authors, licensed under the <a href="http://www.opensource.org/licenses/mit-license.php">MIT license</a>.</span>
|
||||
<a href="index.html">Back to features</a> | <a href="Data.html">Previous feature (@Data)</a> | <a href="SneakyThrows.html">Next feature (@SneakyThrows)</a><br />
|
||||
<a href="../credits.html" class="creditsLink">credits</a> | <span class="copyright">Copyright © 2009-2013 The Project Lombok Authors, licensed under the <a href="http://www.opensource.org/licenses/mit-license.php">MIT license</a>.</span>
|
||||
</div>
|
||||
<div style="clear: both;"></div>
|
||||
</div>
|
||||
@@ -83,7 +83,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<a href="index.html">Back to experimental features</a> | <a href="FieldDefaults.html">Previous feature (@FieldDefaults)</a> | <a href="Value.html">Next feature (@Value)</a><br />
|
||||
<a href="index.html">Back to experimental features</a> | <a href="FieldDefaults.html">Previous feature (@FieldDefaults)</a> | <a href="onX.html">Next feature (onX)</a><br />
|
||||
<a href="../../credits.html" class="creditsLink">credits</a> | <span class="copyright">Copyright © 2009-2013 The Project Lombok Authors, licensed under the <a href="http://www.opensource.org/licenses/mit-license.php">MIT license</a>.</span>
|
||||
</div>
|
||||
<div style="clear: both;"></div>
|
||||
|
||||
@@ -32,12 +32,17 @@
|
||||
<dd>New default field modifiers for the 21st century.</dd>
|
||||
<dt><a href="Wither.html"><code>@Wither</code></a></dt>
|
||||
<dd>Immutable 'setters' - methods that create a clone but with one changed field.</dd>
|
||||
<dt><a href="Value.html"><code>@Value</code></a></dt>
|
||||
<dd>Immutable classes made very easy.</dd>
|
||||
<dt><a href="onX.html"><code>onMethod= / onConstructor= / onParam</code></a></dt>
|
||||
<dd>Sup dawg, we heard you like annotations, so we put annotations in your annotations so you can annotate while you're annotating.</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="index overview">
|
||||
<h3>Putting the "Ex" in "Experimental": promoted or deleted experimental features.</h3>
|
||||
<dl>
|
||||
<dt><a href="../Value.html"><code>@Value</code></a>: Promoted</dt>
|
||||
<dd><code>@Value</code> has proven its value and has been moved to the main package.</li>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<a href="../../credits.html" class="creditsLink">credits</a> | <span class="copyright">Copyright © 2009-2013 The Project Lombok Authors, licensed under the <a href="http://www.opensource.org/licenses/mit-license.php">MIT license</a>.</span>
|
||||
</div>
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<a href="index.html">Back to experimental features</a> | <a href="Value.html">Previous feature (@Value)</a> | <span class="disabled">Next feature</span><br />
|
||||
<a href="index.html">Back to experimental features</a> | <a href="Wither.html">Previous feature (@Wither)</a> | <span class="disabled">Next feature</span><br />
|
||||
<a href="../../credits.html" class="creditsLink">credits</a> | <span class="copyright">Copyright © 2009-2013 The Project Lombok Authors, licensed under the <a href="http://www.opensource.org/licenses/mit-license.php">MIT license</a>.</span>
|
||||
</div>
|
||||
<div style="clear: both;"></div>
|
||||
|
||||
@@ -30,6 +30,8 @@
|
||||
<dt><a href="Data.html"><code>@Data</code></a></dt>
|
||||
<dd>All together now: A shortcut for <code>@ToString</code>, <code>@EqualsAndHashCode</code>,
|
||||
<code>@Getter</code> on all fields, and <code>@Setter</code> on all non-final fields, and <code>@RequiredArgsConstructor</code>!</dd>
|
||||
<dt><a href="Value.html"><code>@Value</code></a></dt>
|
||||
<dd>Immutable classes made very easy.</dd>
|
||||
<dt><a href="SneakyThrows.html"><code>@SneakyThrows</code></a></dt>
|
||||
<dd>To boldly throw checked exceptions where no one has thrown them before!</dd>
|
||||
<dt><a href="Synchronized.html"><code>@Synchronized</code></a></dt>
|
||||
|
||||
Reference in new issue
Block a user