8310861: Improve location reporting for javac serial lint warnings
Reviewed-by: jlahoda
This commit is contained in:
parent
d32eb015f0
commit
289f218a32
src/jdk.compiler/share/classes/com/sun/tools/javac/comp
test/langtools/tools/javac/warnings/Serial
@ -5048,16 +5048,19 @@ public class Check {
|
||||
if ((spf.flags() & (PRIVATE | STATIC | FINAL)) !=
|
||||
(PRIVATE | STATIC | FINAL)) {
|
||||
log.warning(LintCategory.SERIAL,
|
||||
TreeInfo.diagnosticPositionFor(spf, tree), Warnings.ImproperSPF);
|
||||
TreeInfo.diagnosticPositionFor(spf, tree),
|
||||
Warnings.ImproperSPF);
|
||||
}
|
||||
|
||||
if (!types.isSameType(spf.type, OSF_TYPE)) {
|
||||
log.warning(LintCategory.SERIAL,
|
||||
TreeInfo.diagnosticPositionFor(spf, tree), Warnings.OSFArraySPF);
|
||||
TreeInfo.diagnosticPositionFor(spf, tree),
|
||||
Warnings.OSFArraySPF);
|
||||
}
|
||||
|
||||
if (isExternalizable((Type)(e.asType()))) {
|
||||
log.warning(LintCategory.SERIAL, tree.pos(),
|
||||
log.warning(LintCategory.SERIAL,
|
||||
TreeInfo.diagnosticPositionFor(spf, tree),
|
||||
Warnings.IneffectualSerialFieldExternalizable);
|
||||
}
|
||||
|
||||
@ -5165,15 +5168,19 @@ public class Check {
|
||||
String name = enclosed.getSimpleName().toString();
|
||||
switch(enclosed.getKind()) {
|
||||
case FIELD -> {
|
||||
var field = (VarSymbol)enclosed;
|
||||
if (serialFieldNames.contains(name)) {
|
||||
log.warning(LintCategory.SERIAL, tree.pos(),
|
||||
log.warning(LintCategory.SERIAL,
|
||||
TreeInfo.diagnosticPositionFor(field, tree),
|
||||
Warnings.IneffectualSerialFieldEnum(name));
|
||||
}
|
||||
}
|
||||
|
||||
case METHOD -> {
|
||||
var method = (MethodSymbol)enclosed;
|
||||
if (serialMethodNames.contains(name)) {
|
||||
log.warning(LintCategory.SERIAL, tree.pos(),
|
||||
log.warning(LintCategory.SERIAL,
|
||||
TreeInfo.diagnosticPositionFor(method, tree),
|
||||
Warnings.IneffectualSerialMethodEnum(name));
|
||||
}
|
||||
}
|
||||
@ -5293,9 +5300,11 @@ public class Check {
|
||||
String name = enclosed.getSimpleName().toString();
|
||||
switch(enclosed.getKind()) {
|
||||
case FIELD -> {
|
||||
var field = (VarSymbol)enclosed;
|
||||
switch(name) {
|
||||
case "serialPersistentFields" -> {
|
||||
log.warning(LintCategory.SERIAL, tree.pos(),
|
||||
log.warning(LintCategory.SERIAL,
|
||||
TreeInfo.diagnosticPositionFor(field, tree),
|
||||
Warnings.IneffectualSerialFieldRecord);
|
||||
}
|
||||
|
||||
@ -5303,7 +5312,7 @@ public class Check {
|
||||
// Could generate additional warning that
|
||||
// svuid value is not checked to match for
|
||||
// records.
|
||||
checkSerialVersionUID(tree, e, (VarSymbol)enclosed);
|
||||
checkSerialVersionUID(tree, e, field);
|
||||
}
|
||||
|
||||
}
|
||||
@ -5314,9 +5323,11 @@ public class Check {
|
||||
switch(name) {
|
||||
case "writeReplace" -> checkWriteReplace(tree, e, method);
|
||||
case "readResolve" -> checkReadResolve(tree, e, method);
|
||||
|
||||
default -> {
|
||||
if (serialMethodNames.contains(name)) {
|
||||
log.warning(LintCategory.SERIAL, tree.pos(),
|
||||
log.warning(LintCategory.SERIAL,
|
||||
TreeInfo.diagnosticPositionFor(method, tree),
|
||||
Warnings.IneffectualSerialMethodRecord(name));
|
||||
}
|
||||
}
|
||||
@ -5394,7 +5405,8 @@ public class Check {
|
||||
private void checkExternalizable(JCClassDecl tree, Element enclosing, MethodSymbol method) {
|
||||
// If the enclosing class is externalizable, warn for the method
|
||||
if (isExternalizable((Type)enclosing.asType())) {
|
||||
log.warning(LintCategory.SERIAL, tree.pos(),
|
||||
log.warning(LintCategory.SERIAL,
|
||||
TreeInfo.diagnosticPositionFor(method, tree),
|
||||
Warnings.IneffectualSerialMethodExternalizable(method.getSimpleName()));
|
||||
}
|
||||
return;
|
||||
|
@ -2,6 +2,7 @@
|
||||
* @test /nodynamiccopyright/
|
||||
* @bug 8202056
|
||||
* @compile/ref=CtorAccess.out -XDrawDiagnostics -Xlint:serial CtorAccess.java
|
||||
* @compile/ref=empty.out -XDrawDiagnostics CtorAccess.java
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
|
@ -1,3 +1,3 @@
|
||||
CtorAccess.java:15:12: compiler.warn.serializable.missing.access.no.arg.ctor: CtorAccess
|
||||
CtorAccess.java:30:5: compiler.warn.serializable.missing.access.no.arg.ctor: CtorAccess.MemberSuper
|
||||
CtorAccess.java:16:12: compiler.warn.serializable.missing.access.no.arg.ctor: CtorAccess
|
||||
CtorAccess.java:31:5: compiler.warn.serializable.missing.access.no.arg.ctor: CtorAccess.MemberSuper
|
||||
2 warnings
|
||||
|
@ -2,6 +2,7 @@
|
||||
* @test /nodynamiccopyright/
|
||||
* @bug 8202056
|
||||
* @compile/ref=EnumSerial.out -XDrawDiagnostics -Xlint:serial EnumSerial.java
|
||||
* @compile/ref=empty.out -XDrawDiagnostics EnumSerial.java
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
|
@ -1,8 +1,8 @@
|
||||
EnumSerial.java:9:1: compiler.warn.ineffectual.serial.field.enum: serialVersionUID
|
||||
EnumSerial.java:9:1: compiler.warn.ineffectual.serial.field.enum: serialPersistentFields
|
||||
EnumSerial.java:9:1: compiler.warn.ineffectual.serial.method.enum: writeObject
|
||||
EnumSerial.java:9:1: compiler.warn.ineffectual.serial.method.enum: writeReplace
|
||||
EnumSerial.java:9:1: compiler.warn.ineffectual.serial.method.enum: readObject
|
||||
EnumSerial.java:9:1: compiler.warn.ineffectual.serial.method.enum: readObjectNoData
|
||||
EnumSerial.java:9:1: compiler.warn.ineffectual.serial.method.enum: readResolve
|
||||
EnumSerial.java:16:31: compiler.warn.ineffectual.serial.field.enum: serialVersionUID
|
||||
EnumSerial.java:17:46: compiler.warn.ineffectual.serial.field.enum: serialPersistentFields
|
||||
EnumSerial.java:19:18: compiler.warn.ineffectual.serial.method.enum: writeObject
|
||||
EnumSerial.java:23:20: compiler.warn.ineffectual.serial.method.enum: writeReplace
|
||||
EnumSerial.java:27:18: compiler.warn.ineffectual.serial.method.enum: readObject
|
||||
EnumSerial.java:32:18: compiler.warn.ineffectual.serial.method.enum: readObjectNoData
|
||||
EnumSerial.java:36:20: compiler.warn.ineffectual.serial.method.enum: readResolve
|
||||
7 warnings
|
||||
|
@ -2,6 +2,7 @@
|
||||
* @test /nodynamiccopyright/
|
||||
* @bug 8202056
|
||||
* @compile/ref=Extern.out -XDrawDiagnostics -Xlint:serial Extern.java
|
||||
* @compile/ref=empty.out -XDrawDiagnostics Extern.java
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
|
@ -1,6 +1,6 @@
|
||||
Extern.java:9:1: compiler.warn.externalizable.missing.public.no.arg.ctor
|
||||
Extern.java:9:1: compiler.warn.ineffectual.serial.field.externalizable
|
||||
Extern.java:9:1: compiler.warn.ineffectual.serial.method.externalizable: readObject
|
||||
Extern.java:9:1: compiler.warn.ineffectual.serial.method.externalizable: writeObject
|
||||
Extern.java:9:1: compiler.warn.ineffectual.serial.method.externalizable: readObjectNoData
|
||||
Extern.java:10:1: compiler.warn.externalizable.missing.public.no.arg.ctor
|
||||
Extern.java:17:46: compiler.warn.ineffectual.serial.field.externalizable
|
||||
Extern.java:28:18: compiler.warn.ineffectual.serial.method.externalizable: readObject
|
||||
Extern.java:34:18: compiler.warn.ineffectual.serial.method.externalizable: writeObject
|
||||
Extern.java:39:18: compiler.warn.ineffectual.serial.method.externalizable: readObjectNoData
|
||||
5 warnings
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* @test /nodynamiccopyright/
|
||||
* @bug 8202056
|
||||
* @bug 8202056 8310861
|
||||
* @compile/ref=RecordSerial.out -XDrawDiagnostics -Xlint:serial RecordSerial.java
|
||||
*/
|
||||
|
||||
@ -41,4 +41,13 @@ record RecordSerial(int foo) implements Serializable {
|
||||
private Object readResolve() throws ObjectStreamException {
|
||||
return null;
|
||||
}
|
||||
|
||||
// meaningless Externalizable methods, no warning generated
|
||||
public void writeExternal(ObjectOutput oo) {
|
||||
;
|
||||
}
|
||||
|
||||
public void readExternal(ObjectInput oi) {
|
||||
;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
RecordSerial.java:9:1: compiler.warn.ineffectual.serial.field.record
|
||||
RecordSerial.java:9:1: compiler.warn.ineffectual.serial.method.record: writeObject
|
||||
RecordSerial.java:9:1: compiler.warn.ineffectual.serial.method.record: readObject
|
||||
RecordSerial.java:9:1: compiler.warn.ineffectual.serial.method.record: readObjectNoData
|
||||
RecordSerial.java:17:46: compiler.warn.ineffectual.serial.field.record
|
||||
RecordSerial.java:20:18: compiler.warn.ineffectual.serial.method.record: writeObject
|
||||
RecordSerial.java:30:18: compiler.warn.ineffectual.serial.method.record: readObject
|
||||
RecordSerial.java:36:18: compiler.warn.ineffectual.serial.method.record: readObjectNoData
|
||||
4 warnings
|
||||
|
Loading…
x
Reference in New Issue
Block a user