mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-17 04:15:10 +00:00
More work on fully addressing the David Lynch bug (issue #41) - the annotation @NotNull/@NonNull/@Nullable that is copied over by @Getter should no longer be causing the David Lynch bug.
This commit is contained in:
1 parent
25e33d02e3
commit
da367086c5
4 files changed
+27
-16
No files matched your search
@@ -254,38 +254,47 @@ public class Eclipse {
|
||||
return ref;
|
||||
}
|
||||
|
||||
public static Annotation[] copyAnnotations(Annotation[] annotations) {
|
||||
return copyAnnotations(annotations, null);
|
||||
public static Annotation[] copyAnnotations(Annotation[] annotations, long p) {
|
||||
return copyAnnotations(annotations, null, p);
|
||||
}
|
||||
|
||||
public static Annotation[] copyAnnotations(Annotation[] annotations1, Annotation[] annotations2) {
|
||||
public static Annotation[] copyAnnotations(Annotation[] annotations1, Annotation[] annotations2, long p) {
|
||||
if (annotations1 == null && annotations2 == null) return null;
|
||||
if (annotations1 == null) annotations1 = new Annotation[0];
|
||||
if (annotations2 == null) annotations2 = new Annotation[0];
|
||||
Annotation[] outs = new Annotation[annotations1.length + annotations2.length];
|
||||
int idx = 0;
|
||||
for ( Annotation annotation : annotations1 ) {
|
||||
outs[idx++] = copyAnnotation(annotation);
|
||||
outs[idx++] = copyAnnotation(annotation, p);
|
||||
}
|
||||
for ( Annotation annotation : annotations2 ) {
|
||||
outs[idx++] = copyAnnotation(annotation);
|
||||
outs[idx++] = copyAnnotation(annotation, p);
|
||||
}
|
||||
return outs;
|
||||
}
|
||||
|
||||
public static Annotation copyAnnotation(Annotation annotation) {
|
||||
public static Annotation copyAnnotation(Annotation annotation, long p) {
|
||||
int pS = (int)(p >> 32), pE = (int)p;
|
||||
|
||||
if (annotation instanceof MarkerAnnotation) {
|
||||
return new MarkerAnnotation(copyType(annotation.type), 0);
|
||||
MarkerAnnotation ann = new MarkerAnnotation(copyType(annotation.type), pS);
|
||||
ann.declarationSourceEnd = ann.sourceEnd = ann.statementEnd = pE;
|
||||
return ann;
|
||||
}
|
||||
|
||||
if (annotation instanceof SingleMemberAnnotation) {
|
||||
SingleMemberAnnotation result = new SingleMemberAnnotation(copyType(annotation.type), 0);
|
||||
result.memberValue = ((SingleMemberAnnotation)annotation).memberValue;
|
||||
SingleMemberAnnotation ann = new SingleMemberAnnotation(copyType(annotation.type), pS);
|
||||
ann.declarationSourceEnd = ann.sourceEnd = ann.statementEnd = pE;
|
||||
//TODO memberValue(s) need to be copied as well (same for copying a NormalAnnotation as below).
|
||||
ann.memberValue = ((SingleMemberAnnotation)annotation).memberValue;
|
||||
return ann;
|
||||
}
|
||||
|
||||
if (annotation instanceof NormalAnnotation) {
|
||||
NormalAnnotation result = new NormalAnnotation(copyType(annotation.type), 0);
|
||||
result.memberValuePairs = ((NormalAnnotation)annotation).memberValuePairs;
|
||||
NormalAnnotation ann = new NormalAnnotation(copyType(annotation.type), pS);
|
||||
ann.declarationSourceEnd = ann.statementEnd = ann.sourceEnd = pE;
|
||||
ann.memberValuePairs = ((NormalAnnotation)annotation).memberValuePairs;
|
||||
return ann;
|
||||
}
|
||||
|
||||
return annotation;
|
||||
|
||||
@@ -158,7 +158,7 @@ public class HandleData implements EclipseAnnotationHandler<Data> {
|
||||
Statement nullCheck = generateNullCheck(field);
|
||||
if (nullCheck != null) nullChecks.add(nullCheck);
|
||||
}
|
||||
Annotation[] copiedAnnotations = copyAnnotations(nonNulls, nullables);
|
||||
Annotation[] copiedAnnotations = copyAnnotations(nonNulls, nullables, p);
|
||||
if (copiedAnnotations.length != 0) argument.annotations = copiedAnnotations;
|
||||
args.add(argument);
|
||||
}
|
||||
@@ -205,7 +205,7 @@ public class HandleData implements EclipseAnnotationHandler<Data> {
|
||||
|
||||
Argument argument = new Argument(field.name, fieldPos, copyType(field.type), 0);
|
||||
Annotation[] copiedAnnotations = copyAnnotations(
|
||||
findAnnotations(field, TransformationsUtil.NON_NULL_PATTERN), findAnnotations(field, TransformationsUtil.NULLABLE_PATTERN));
|
||||
findAnnotations(field, TransformationsUtil.NON_NULL_PATTERN), findAnnotations(field, TransformationsUtil.NULLABLE_PATTERN), p);
|
||||
if (copiedAnnotations.length != 0) argument.annotations = copiedAnnotations;
|
||||
args.add(new Argument(field.name, fieldPos, copyType(field.type), Modifier.FINAL));
|
||||
}
|
||||
|
||||
@@ -81,6 +81,8 @@ public class HandleGetter implements EclipseAnnotationHandler<Getter> {
|
||||
}
|
||||
|
||||
private boolean createGetterForField(AccessLevel level, Node fieldNode, Node errorNode, ASTNode pos, boolean whineIfExists) {
|
||||
int pS = pos.sourceStart(), pE = pos.sourceEnd();
|
||||
long p = (long)pS << 32 | pE;
|
||||
if ( fieldNode.getKind() != Kind.FIELD ) {
|
||||
errorNode.addError("@Getter is only supported on a field.");
|
||||
return true;
|
||||
@@ -103,7 +105,7 @@ public class HandleGetter implements EclipseAnnotationHandler<Getter> {
|
||||
String altNameExpl = "";
|
||||
if ( !altName.equals(getterName) ) altNameExpl = String.format(" (%s)", altName);
|
||||
errorNode.addWarning(
|
||||
String.format("Not generating %s(): A method with that name already exists%s", getterName, altNameExpl));
|
||||
String.format("Not generating %s(): A method with that name already exists%s", getterName, altNameExpl));
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
@@ -114,7 +116,7 @@ public class HandleGetter implements EclipseAnnotationHandler<Getter> {
|
||||
|
||||
MethodDeclaration method = generateGetter((TypeDeclaration) fieldNode.up().get(), field, getterName, modifier, pos);
|
||||
Annotation[] copiedAnnotations = copyAnnotations(
|
||||
findAnnotations(field, TransformationsUtil.NON_NULL_PATTERN), findAnnotations(field, TransformationsUtil.NULLABLE_PATTERN));
|
||||
findAnnotations(field, TransformationsUtil.NON_NULL_PATTERN), findAnnotations(field, TransformationsUtil.NULLABLE_PATTERN), p);
|
||||
if (copiedAnnotations.length != 0) {
|
||||
method.annotations = copiedAnnotations;
|
||||
}
|
||||
|
||||
@@ -151,7 +151,7 @@ public class HandleSetter implements EclipseAnnotationHandler<Setter> {
|
||||
if (nullCheck != null) method.statements = new Statement[] { nullCheck, assignment };
|
||||
else method.statements = new Statement[] { assignment };
|
||||
}
|
||||
Annotation[] copiedAnnotations = copyAnnotations(nonNulls, nullables);
|
||||
Annotation[] copiedAnnotations = copyAnnotations(nonNulls, nullables, pos);
|
||||
if (copiedAnnotations.length != 0) param.annotations = copiedAnnotations;
|
||||
return method;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user