Skip to content

Commit fc793ce

Browse files
authored
104 referenced constant (#119)
* Add element hints to logging * Replace compilation exception with error logging * Implement constant reference support
1 parent fbf08a5 commit fc793ce

26 files changed

Lines changed: 438 additions & 91 deletions

File tree

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,35 @@
11
import { expect, test } from 'vitest'
2-
import { FLOAT_VALUE, LONG_VALUE, MyEnumConstants, STATIC_FIELD_FROM_JAVA_RECORD } from '../src/index.java17';
2+
import {
3+
FLOAT_VALUE, LONG_VALUE, MyEnumConstants, REFERENCED_LOCAL_VALUE, SELF_REFERENCED_LOCAL_VALUE, REFERENCED_IMPORTED_VALUE,
4+
REFERENCED_NESTED_VALUE, REFERENCED_STATIC_IMPORTED_VALUE, STATIC_FIELD_FROM_JAVA_RECORD, DOUBLE_REFERENCED_VALUE,
5+
REFERENCED_PACKAGE_PRIVATE_VALUE, REFERENCED_SUPER_VALUE, SELECTED_SUPER_VALUE, REFERENCED_VALUE_IN_STATIC_BLOCK,
6+
REFERENCED_LOCAL_VALUE_IN_STATIC_BLOCK, SELF_REFERENCED_LOCAL_VALUE_IN_STATIC_BLOCK, REFERENCED_IMPORTED_VALUE_IN_STATIC_BLOCK,
7+
REFERENCED_NESTED_VALUE_IN_STATIC_BLOCK, REFERENCED_STATIC_IMPORTED_VALUE_IN_STATIC_BLOCK,
8+
REFERENCED_PACKAGE_PRIVATE_VALUE_IN_STATIC_BLOCK, REFERENCED_SUPER_VALUE_IN_STATIC_BLOCK, SELECTED_SUPER_VALUE_IN_STATIC_BLOCK,
9+
} from '../src/index.java17';
310

411
test('Constant values', () => {
512
expect(FLOAT_VALUE).toBe(1.888);
613
expect(LONG_VALUE).toBe(999);
714
expect(MyEnumConstants.INT_VALUE).toBe(1);
815
expect(MyEnumConstants.STR_VALUE).toBe("abc");
916
expect(STATIC_FIELD_FROM_JAVA_RECORD).toBe(888);
17+
expect(REFERENCED_LOCAL_VALUE).toBe(555);
18+
expect(SELF_REFERENCED_LOCAL_VALUE).toBe(555);
19+
expect(REFERENCED_IMPORTED_VALUE).toBe(666);
20+
expect(REFERENCED_NESTED_VALUE).toBe(777);
21+
expect(REFERENCED_STATIC_IMPORTED_VALUE).toBe(999);
22+
expect(DOUBLE_REFERENCED_VALUE).toBe(555);
23+
expect(REFERENCED_PACKAGE_PRIVATE_VALUE).toBe(123);
24+
expect(REFERENCED_SUPER_VALUE).toBe(345);
25+
expect(SELECTED_SUPER_VALUE).toBe(345);
26+
expect(REFERENCED_VALUE_IN_STATIC_BLOCK).toBe(112);
27+
expect(REFERENCED_LOCAL_VALUE_IN_STATIC_BLOCK).toBe(555);
28+
expect(SELF_REFERENCED_LOCAL_VALUE_IN_STATIC_BLOCK).toBe(555);
29+
expect(REFERENCED_IMPORTED_VALUE_IN_STATIC_BLOCK).toBe(666);
30+
expect(REFERENCED_NESTED_VALUE_IN_STATIC_BLOCK).toBe(777);
31+
expect(REFERENCED_STATIC_IMPORTED_VALUE_IN_STATIC_BLOCK).toBe(999);
32+
expect(REFERENCED_PACKAGE_PRIVATE_VALUE_IN_STATIC_BLOCK).toBe(123);
33+
expect(REFERENCED_SUPER_VALUE_IN_STATIC_BLOCK).toBe(345);
34+
expect(SELECTED_SUPER_VALUE_IN_STATIC_BLOCK).toBe(345);
1035
});

doc/Performance.md

Whitespace-only changes.

doc/Versions.md

Lines changed: 0 additions & 7 deletions
This file was deleted.

internal/src/main/java/online/sharedtype/processor/domain/ClassDef.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
@EqualsAndHashCode(of = "qualifiedName", callSuper = false)
2323
public final class ClassDef extends ConcreteTypeDef {
2424
private static final long serialVersionUID = 9052013791381913516L;
25+
2526
private final String qualifiedName;
2627
/** The name to emit to target code. It is the mapped type if type mapping is defined. */
2728
private final String simpleName;

internal/src/main/java/online/sharedtype/processor/domain/ConcreteTypeDef.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@
44
import lombok.Setter;
55
import lombok.experimental.SuperBuilder;
66

7+
import javax.lang.model.element.Element;
78
import java.util.Set;
89

910
@SuperBuilder(toBuilder = true)
1011
@Setter
1112
@Getter
1213
public abstract class ConcreteTypeDef implements TypeDef {
1314
private static final long serialVersionUID = 2346502341189835693L;
15+
@Getter
16+
private final transient Element element;
1417
/** Whether this type is explicitly annotated with {@link online.sharedtype.SharedType} */
1518
private final boolean annotated;
1619
/** Directly or indirectly referenced by a type that is annotated. */

internal/src/main/java/online/sharedtype/processor/domain/ConstantNamespaceDef.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import lombok.Getter;
66
import lombok.Setter;
77

8+
import javax.lang.model.element.Element;
89
import java.util.ArrayList;
910
import java.util.List;
1011

@@ -15,6 +16,8 @@
1516
@EqualsAndHashCode(of = "qualifiedName")
1617
public final class ConstantNamespaceDef implements TypeDef {
1718
private static final long serialVersionUID = 4249235760298548628L;
19+
@Getter
20+
private final transient Element element;
1821
private final String qualifiedName;
1922
private final String simpleName;
2023
@Builder.Default

internal/src/main/java/online/sharedtype/processor/domain/TypeDef.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package online.sharedtype.processor.domain;
22

3+
import javax.lang.model.element.Element;
34
import java.io.Serializable;
45
import java.util.Collections;
56
import java.util.List;
@@ -13,6 +14,8 @@
1314
* @author Cause Chung
1415
*/
1516
public interface TypeDef extends Serializable {
17+
Element getElement();
18+
1619
String qualifiedName();
1720

1821
String simpleName();
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package online.sharedtype.it;
2+
3+
import online.sharedtype.processor.domain.ConstantNamespaceDef;
4+
import org.junit.jupiter.api.Test;
5+
6+
import static online.sharedtype.it.support.TypeDefDeserializer.deserializeTypeDef;
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
final class ConstantsIntegrationTest {
10+
@Test
11+
void parseMyConstants() {
12+
ConstantNamespaceDef constantsDef = (ConstantNamespaceDef) deserializeTypeDef("$online.sharedtype.it.java8.MyConstants.ser");
13+
assertThat(constantsDef.simpleName()).isEqualTo("MyConstants");
14+
var components = constantsDef.components();
15+
assertThat(components).hasSize(21);
16+
assertThat(components).satisfiesExactly(
17+
component -> {
18+
assertThat(component.name()).isEqualTo("FLOAT_VALUE");
19+
assertThat(component.value()).isEqualTo(1.888f);
20+
},
21+
component -> {
22+
assertThat(component.name()).isEqualTo("LONG_VALUE");
23+
assertThat(component.value()).isEqualTo(999L);
24+
},
25+
component -> {
26+
assertThat(component.name()).isEqualTo("REFERENCED_LOCAL_VALUE");
27+
assertThat(component.value()).isEqualTo(555L);
28+
},
29+
component -> {
30+
assertThat(component.name()).isEqualTo("SELF_REFERENCED_LOCAL_VALUE");
31+
assertThat(component.value()).isEqualTo(555L);
32+
},
33+
component -> {
34+
assertThat(component.name()).isEqualTo("REFERENCED_IMPORTED_VALUE");
35+
assertThat(component.value()).isEqualTo(666L);
36+
},
37+
component -> {
38+
assertThat(component.name()).isEqualTo("REFERENCED_NESTED_VALUE");
39+
assertThat(component.value()).isEqualTo(777L);
40+
},
41+
component -> {
42+
assertThat(component.name()).isEqualTo("REFERENCED_STATIC_IMPORTED_VALUE");
43+
assertThat(component.value()).isEqualTo(999L);
44+
},
45+
component -> {
46+
assertThat(component.name()).isEqualTo("DOUBLE_REFERENCED_VALUE");
47+
assertThat(component.value()).isEqualTo(555L);
48+
},
49+
component -> {
50+
assertThat(component.name()).isEqualTo("REFERENCED_PACKAGE_PRIVATE_VALUE");
51+
assertThat(component.value()).isEqualTo(123L);
52+
},
53+
component -> {
54+
assertThat(component.name()).isEqualTo("REFERENCED_SUPER_VALUE");
55+
assertThat(component.value()).isEqualTo(345L);
56+
},
57+
component -> {
58+
assertThat(component.name()).isEqualTo("SELECTED_SUPER_VALUE");
59+
assertThat(component.value()).isEqualTo(345L);
60+
},
61+
component -> {
62+
assertThat(component.name()).isEqualTo("REFERENCED_VALUE_IN_STATIC_BLOCK");
63+
assertThat(component.value()).isEqualTo(112L);
64+
},
65+
component -> {
66+
assertThat(component.name()).isEqualTo("REFERENCED_LOCAL_VALUE_IN_STATIC_BLOCK");
67+
assertThat(component.value()).isEqualTo(555L);
68+
},
69+
component -> {
70+
assertThat(component.name()).isEqualTo("SELF_REFERENCED_LOCAL_VALUE_IN_STATIC_BLOCK");
71+
assertThat(component.value()).isEqualTo(555L);
72+
},
73+
component -> {
74+
assertThat(component.name()).isEqualTo("REFERENCED_IMPORTED_VALUE_IN_STATIC_BLOCK");
75+
assertThat(component.value()).isEqualTo(666L);
76+
},
77+
component -> {
78+
assertThat(component.name()).isEqualTo("REFERENCED_NESTED_VALUE_IN_STATIC_BLOCK");
79+
assertThat(component.value()).isEqualTo(777L);
80+
},
81+
component -> {
82+
assertThat(component.name()).isEqualTo("REFERENCED_STATIC_IMPORTED_VALUE_IN_STATIC_BLOCK");
83+
assertThat(component.value()).isEqualTo(999L);
84+
},
85+
component -> {
86+
assertThat(component.name()).isEqualTo("DOUBLE_REFERENCED_VALUE_IN_STATIC_BLOCK");
87+
assertThat(component.value()).isEqualTo(555L);
88+
},
89+
component -> {
90+
assertThat(component.name()).isEqualTo("REFERENCED_PACKAGE_PRIVATE_VALUE_IN_STATIC_BLOCK");
91+
assertThat(component.value()).isEqualTo(123L);
92+
},
93+
component -> {
94+
assertThat(component.name()).isEqualTo("REFERENCED_SUPER_VALUE_IN_STATIC_BLOCK");
95+
assertThat(component.value()).isEqualTo(345L);
96+
},
97+
component -> {
98+
assertThat(component.name()).isEqualTo("SELECTED_SUPER_VALUE_IN_STATIC_BLOCK");
99+
assertThat(component.value()).isEqualTo(345L);
100+
}
101+
);
102+
}
103+
}

it/java8/src/main/java/online/sharedtype/it/java8/IgnoredSuperClassB.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44

55
@SharedType.Ignore
66
abstract class IgnoredSuperClassB {
7+
static final long LONG_VALUE_IN_SUPER = 345L;
78
int field;
89
}

it/java8/src/main/java/online/sharedtype/it/java8/JavaClass.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
@SharedType
66
class JavaClass extends SuperClassA {
7+
static final long SOME_LONG_VALUE = 123L;
8+
79
private String string;
810
private EnumSize size;
911
// private IgnoredInterfaceB b; // compilation failure

0 commit comments

Comments
 (0)