Skip to content

Commit 0f12c2e

Browse files
committed
Make compiler more strict (Xlint) and fix warnings
1 parent 8a00e4b commit 0f12c2e

File tree

7 files changed

+33
-32
lines changed

7 files changed

+33
-32
lines changed

build.gradle

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ java {
3232
targetCompatibility = JavaVersion.VERSION_17
3333
}
3434

35-
compileJava.options.encoding = 'UTF-8'
35+
tasks.withType(JavaCompile) {
36+
options.encoding = 'UTF-8'
37+
options.compilerArgs.addAll(['-Xlint:all,-serial,-overloads,-classfile', '-Werror'])
38+
}
3639

3740
dependencies {
3841
components.all { ComponentMetadataDetails details ->

src/main/java/de/cronn/reflection/util/ClassUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public static <T> T createNewInstance(Class<T> sourceClass) {
7878
}
7979

8080
static <T> T createInstance(Constructor<T> constructor, Object... initArgs) throws ReflectiveOperationException {
81-
boolean accessible = constructor.isAccessible();
81+
boolean accessible = constructor.canAccess(null);
8282
try {
8383
if (!accessible) {
8484
constructor.setAccessible(true);

src/main/java/de/cronn/reflection/util/PropertyUtils.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ public static void write(Object destination, PropertyDescriptor propertyDescript
160160
} else {
161161
Object[] args = new Object[] { value };
162162
Method writeMethod = propertyDescriptor.getWriteMethod();
163-
withAccessibleObject(writeMethod, method -> method.invoke(destination, args), force);
163+
withAccessibleObject(destination, writeMethod, (dest, method) -> method.invoke(dest, args), force);
164164
}
165165
} catch (ReflectiveOperationException | RuntimeException e) {
166166
throw new ReflectionRuntimeException("Failed to write " + getQualifiedPropertyName(destination, propertyDescriptor), e);
@@ -183,7 +183,7 @@ public static void writeDirectly(Object destination, String propertyName, Object
183183
public static void writeDirectly(Object destination, Field field, Object value) {
184184
Assert.notNull(destination, () -> "Destination must not be null");
185185
try {
186-
withAccessibleObject(field, f -> f.set(destination, value));
186+
withAccessibleObject(destination, field, (obj, f) -> f.set(obj, value));
187187
} catch (ReflectiveOperationException e) {
188188
throw new ReflectionRuntimeException("Failed to write " + getQualifiedPropertyName(destination, field), e);
189189
}
@@ -216,9 +216,9 @@ public static <T> T readDirectly(Object object, String propertyName) {
216216

217217
public static <T> T readDirectly(Object object, Field field) {
218218
try {
219-
return withAccessibleObject(field, f -> {
219+
return withAccessibleObject(object, field, (obj, f) -> {
220220
@SuppressWarnings("unchecked")
221-
T value = (T) field.get(object);
221+
T value = (T) field.get(obj);
222222
return value;
223223
}, true);
224224
} catch (ReflectiveOperationException e) {
@@ -241,7 +241,7 @@ public static <T> T read(Object source, PropertyDescriptor propertyDescriptor, b
241241
}
242242
} else {
243243
Method readMethod = propertyDescriptor.getReadMethod();
244-
result = withAccessibleObject(readMethod, method -> readMethod.invoke(source), force);
244+
result = withAccessibleObject(source, readMethod, (src, method) -> method.invoke(src), force);
245245
}
246246
} catch (ReflectiveOperationException | RuntimeException e) {
247247
throw new ReflectionRuntimeException("Failed to read " + getQualifiedPropertyName(source, propertyDescriptor), e);
@@ -449,28 +449,28 @@ public static boolean isNotCollectionType(PropertyDescriptor propertyDescriptor)
449449
return !isCollectionType(propertyDescriptor);
450450
}
451451

452-
private interface AccessibleObjectFunction<T extends AccessibleObject, R> {
453-
R access(T object) throws ReflectiveOperationException;
452+
private interface AccessibleObjectFunction<E, T extends AccessibleObject, R> {
453+
R access(E object, T accessibleObject) throws ReflectiveOperationException;
454454
}
455455

456-
private interface AccessibleObjectConsumer<T extends AccessibleObject> {
457-
void access(T object) throws ReflectiveOperationException;
456+
private interface AccessibleObjectConsumer<E, T extends AccessibleObject> {
457+
void access(E object, T accessibleObject) throws ReflectiveOperationException;
458458
}
459459

460-
private static <T extends AccessibleObject> void withAccessibleObject(T accessibleObject, AccessibleObjectConsumer<T> accessibleObjectConsumer) throws ReflectiveOperationException {
461-
withAccessibleObject(accessibleObject, obj -> {
462-
accessibleObjectConsumer.access(obj);
460+
private static <E, T extends AccessibleObject> void withAccessibleObject(E object, T accessibleObject, AccessibleObjectConsumer<E, T> accessibleObjectConsumer) throws ReflectiveOperationException {
461+
withAccessibleObject(object, accessibleObject, (obj, accObj) -> {
462+
accessibleObjectConsumer.access(obj, accObj);
463463
return null;
464464
}, true);
465465
}
466466

467-
private static <T extends AccessibleObject, R> R withAccessibleObject(T accessibleObject, AccessibleObjectFunction<T, R> function, boolean force) throws ReflectiveOperationException {
468-
boolean accessible = accessibleObject.isAccessible();
467+
private static <E, T extends AccessibleObject, R> R withAccessibleObject(E object, T accessibleObject, AccessibleObjectFunction<E, T, R> function, boolean force) throws ReflectiveOperationException {
468+
boolean accessible = accessibleObject.canAccess(object);
469469
try {
470470
if (force && !accessible) {
471471
accessibleObject.setAccessible(true);
472472
}
473-
return function.access(accessibleObject);
473+
return function.access(object, accessibleObject);
474474
} finally {
475475
if (force && !accessible) {
476476
accessibleObject.setAccessible(false);

src/main/java/de/cronn/reflection/util/immutable/ImmutableProxy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ private static ElementMatcher<MethodDescription> isAnnotatedWith(Class<? extends
260260
}
261261

262262
private static boolean isAnnotatedWith(SignatureToken methodSignature, TypeDefinition type, Class<? extends Annotation> annotation) {
263-
if (type == null || type.equals(TypeDescription.OBJECT)) {
263+
if (type == null || type.equals(TypeDescription.ForLoadedType.of(Object.class))) {
264264
return false;
265265
}
266266

src/test/java/de/cronn/reflection/util/ClassUtilsTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -351,18 +351,18 @@ void testGetAllDeclaredMethodSignatures() throws Exception {
351351

352352
@Test
353353
void testCreateInstance_AccessibleFlagIsRestored() throws Exception {
354-
Constructor<TestEntity> constructor = TestEntity.class.getDeclaredConstructor();
355-
assertThat(constructor.isAccessible()).isFalse();
354+
Constructor<EntityProtectedConstructor> constructor = EntityProtectedConstructor.class.getDeclaredConstructor();
355+
assertThat(constructor.canAccess(null)).isFalse();
356356

357357
assertThat(ClassUtils.createInstance(constructor)).isNotNull();
358358

359-
assertThat(constructor.isAccessible()).isFalse();
359+
assertThat(constructor.canAccess(null)).isFalse();
360360

361361
constructor.setAccessible(true);
362362

363363
assertThat(ClassUtils.createInstance(constructor)).isNotNull();
364364

365-
assertThat(constructor.isAccessible()).isTrue();
365+
assertThat(constructor.canAccess(null)).isTrue();
366366
}
367367

368368
@Test

src/test/java/de/cronn/reflection/util/PropertyUtilsTest.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,6 @@
1616
import java.util.concurrent.Executors;
1717
import java.util.stream.Collectors;
1818

19-
import jakarta.validation.constraints.NotNull;
20-
import jakarta.validation.constraints.Size;
21-
22-
import net.bytebuddy.dynamic.DynamicType;
23-
2419
import org.junit.jupiter.api.Test;
2520
import org.junit.jupiter.api.Timeout;
2621
import org.mockito.Mockito;
@@ -43,7 +38,10 @@
4338
import de.cronn.reflection.util.testclasses.SubclassOfClassWithDefaultMethods;
4439
import de.cronn.reflection.util.testclasses.TestAnnotation;
4540
import de.cronn.reflection.util.testclasses.TestEntity;
41+
import jakarta.validation.constraints.NotNull;
42+
import jakarta.validation.constraints.Size;
4643
import net.bytebuddy.ByteBuddy;
44+
import net.bytebuddy.dynamic.DynamicType;
4745

4846
class PropertyUtilsTest {
4947

@@ -624,17 +622,17 @@ void testReadDirectly_AccessibilityAfterDirectReadIsRestored() throws Exception
624622
PropertyDescriptor property = PropertyUtils.getPropertyDescriptor(TestEntity.class, TestEntity::getNumber);
625623

626624
Field declaredField = getTestEntityField(property);
627-
assertThat(declaredField.isAccessible()).isFalse();
625+
assertThat(declaredField.canAccess(testEntity)).isFalse();
628626

629627
PropertyUtils.readDirectly(testEntity, declaredField);
630628

631-
assertThat(declaredField.isAccessible()).isFalse();
629+
assertThat(declaredField.canAccess(testEntity)).isFalse();
632630

633631
declaredField.setAccessible(true);
634-
assertThat(declaredField.isAccessible()).isTrue();
632+
assertThat(declaredField.canAccess(testEntity)).isTrue();
635633

636634
PropertyUtils.readDirectly(testEntity, declaredField);
637-
assertThat(declaredField.isAccessible()).isTrue();
635+
assertThat(declaredField.canAccess(testEntity)).isTrue();
638636
}
639637

640638
@Test

src/test/java/de/cronn/reflection/util/TestUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ private TestUtils() {
1111

1212
static void assertThatConstructorIsPrivate(Class<?> utilityClass) throws Exception {
1313
Constructor<?> constructor = utilityClass.getDeclaredConstructor();
14-
assertThat(constructor.isAccessible()).isFalse();
14+
assertThat(constructor.canAccess(null)).isFalse();
1515
constructor.setAccessible(true);
1616
Object instance = constructor.newInstance();
1717
assertThat(instance).isNotNull();

0 commit comments

Comments
 (0)