Skip to content

Commit e2a246c

Browse files
authored
Allows package-private Classes/Fields/Getters (#222)
* Allows package-private classes/fields/getters/ * Update Util.java * use modules to determine import status * Update Util.java
1 parent 34a8837 commit e2a246c

File tree

8 files changed

+90
-24
lines changed

8 files changed

+90
-24
lines changed

validator-generator/src/main/java/io/avaje/validation/generator/AdapterName.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ final class AdapterName {
99
final String fullName;
1010

1111
AdapterName(TypeElement origin) {
12-
final String originName = origin.getQualifiedName().toString();
13-
final String name = origin.getSimpleName().toString();
12+
13+
String originName = origin.getQualifiedName().toString();
14+
String name = origin.getSimpleName().toString();
1415
String originPackage = ProcessorUtils.packageOf(originName);
1516
if (origin.getNestingKind().isNested()) {
1617
final String parent = Util.shortName(originPackage);
@@ -19,7 +20,12 @@ final class AdapterName {
1920
} else {
2021
shortName = name;
2122
}
22-
this.adapterPackage = "".equals(originPackage) ? "valid" : originPackage + ".valid";
23+
if ("".equals(originPackage)) {
24+
this.adapterPackage = "valid";
25+
} else {
26+
this.adapterPackage =
27+
ProcessingContext.isImported(origin) ? originPackage + ".valid" : originPackage;
28+
}
2329
this.fullName = adapterPackage + "." + shortName + "ValidationAdapter";
2430
}
2531

validator-generator/src/main/java/io/avaje/validation/generator/FieldReader.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ final class FieldReader {
3333
FieldReader(Element element, List<String> genericTypeParams, boolean classLevel) {
3434
this.genericTypeParams = genericTypeParams;
3535
this.fieldName = element.getSimpleName().toString();
36-
this.publicField = element.getModifiers().contains(Modifier.PUBLIC);
36+
this.publicField = Util.isPublic(element);
3737
this.element = element;
3838
this.elementAnnotations = ElementAnnotationContainer.create(element);
3939
this.genericType = elementAnnotations.genericType();
@@ -141,7 +141,9 @@ private void writeGetValue(Append writer, String suffix) {
141141
} else {
142142
logError(
143143
element,
144-
"Field" + fieldName + " is inaccessible. Add a getter or make the field public.");
144+
"Field"
145+
+ fieldName
146+
+ " is inaccessible. Add a getter or make the field package-private/public.");
145147
}
146148
}
147149

validator-generator/src/main/java/io/avaje/validation/generator/MethodReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ List<MethodParam> getParams() {
4141
}
4242

4343
public boolean isPublic() {
44-
return element.getModifiers().contains(Modifier.PUBLIC);
44+
return Util.isPublic(element);
4545
}
4646

4747
public boolean isProtected() {

validator-generator/src/main/java/io/avaje/validation/generator/ProcessingContext.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@
1111
import java.io.InputStreamReader;
1212
import java.net.URI;
1313
import java.net.URISyntaxException;
14-
import java.util.HashSet;
1514
import java.util.Set;
1615
import java.util.TreeSet;
1716

1817
import javax.annotation.processing.ProcessingEnvironment;
18+
import javax.lang.model.element.Element;
1919
import javax.tools.FileObject;
2020
import javax.tools.StandardLocation;
21+
2122
import io.avaje.validation.generator.ModuleInfoReader.Requires;
2223

2324
final class ProcessingContext {
@@ -59,6 +60,11 @@ static String diAnnotation() {
5960
return CTX.get().diAnnotation;
6061
}
6162

63+
static boolean isImported(Element element) {
64+
var moduleName = APContext.getProjectModuleElement().getQualifiedName();
65+
return !APContext.elements().getModuleOf(element).getQualifiedName().contentEquals(moduleName);
66+
}
67+
6268
static void validateModule() {
6369
var module = getProjectModuleElement();
6470
if (module != null && !module.isUnnamed()) {

validator-generator/src/main/java/io/avaje/validation/generator/TypeReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ private boolean includeField(Element element) {
9797

9898
private void readMethod(Element element, TypeElement type, List<FieldReader> localFields) {
9999
final ExecutableElement methodElement = (ExecutableElement) element;
100-
if (methodElement.getModifiers().contains(Modifier.PUBLIC)) {
100+
if (Util.isPublic(methodElement)) {
101101
final List<? extends VariableElement> parameters = methodElement.getParameters();
102102
final String methodKey = methodElement.getSimpleName().toString();
103103
final MethodReader methodReader = new MethodReader(methodElement, type).read();

validator-generator/src/main/java/io/avaje/validation/generator/Util.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,22 @@
11
package io.avaje.validation.generator;
22

3+
import static io.avaje.validation.generator.APContext.logError;
34
import static io.avaje.validation.generator.APContext.typeElement;
45

5-
import java.util.ArrayList;
6-
import java.util.Arrays;
7-
import java.util.List;
86
import java.util.Optional;
97
import java.util.Set;
108
import java.util.function.Supplier;
11-
import java.util.regex.Matcher;
129
import java.util.regex.Pattern;
1310

1411
import javax.lang.model.element.AnnotationMirror;
1512
import javax.lang.model.element.Element;
13+
import javax.lang.model.element.Modifier;
1614
import javax.lang.model.element.TypeElement;
15+
import javax.lang.model.element.VariableElement;
1716
import javax.lang.model.type.TypeMirror;
1817

19-
import static io.avaje.validation.generator.APContext.logError;
20-
2118
final class Util {
2219

23-
private static final Pattern WHITE_SPACE_REGEX =
24-
Pattern.compile("\\s+(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
25-
private static final Pattern COMMA_PATTERN =
26-
Pattern.compile(", (?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)");
27-
2820
static final Pattern mapSplitString = Pattern.compile("\\s[A-Za-z0-9]+,|,");
2921
static final Set<String> BASIC_TYPES = Set.of("java.lang.String", "java.math.BigDecimal");
3022

@@ -157,4 +149,18 @@ static boolean isBasicType(final String topType) {
157149
|| topType.startsWith("java.time.")
158150
|| GenericTypeMap.typeOfRaw(topType) != null;
159151
}
152+
153+
static boolean isPublic(Element element) {
154+
var mods = element.getModifiers();
155+
156+
if (mods.contains(Modifier.PUBLIC)) {
157+
return true;
158+
}
159+
if (mods.contains(Modifier.PRIVATE) || mods.contains(Modifier.PROTECTED)) {
160+
return false;
161+
}
162+
var isImported = ProcessingContext.isImported(element);
163+
164+
return !isImported;
165+
}
160166
}

validator-generator/src/main/java/io/avaje/validation/generator/ValidationProcessor.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ public final class ValidationProcessor extends AbstractProcessor {
4646
private final ComponentMetaData metaData = new ComponentMetaData();
4747
private final List<BeanReader> allReaders = new ArrayList<>();
4848
private final Set<String> sourceTypes = new HashSet<>();
49-
private final Set<String> mixInImports = new HashSet<>();
5049
private final Set<String> alreadyGenerated = new HashSet<>();
5150
private SimpleComponentWriter componentWriter;
5251
private boolean readModuleInfo;
@@ -205,10 +204,6 @@ private void writeAdaptersForImported(Set<? extends Element> importedElements) {
205204
for (final var importedElement : ElementFilter.typesIn(importedElements)) {
206205
for (final TypeMirror importType :
207206
ImportValidPojoPrism.getInstanceOn(importedElement).value()) {
208-
// if imported by mixin annotation skip
209-
if (mixInImports.contains(importType.toString())) {
210-
continue;
211-
}
212207
writeAdapterForType(asTypeElement(importType));
213208
}
214209
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package io.avaje.validation.generator.models.valid;
2+
3+
import java.util.List;
4+
5+
import javax.validation.constraints.Negative;
6+
import javax.validation.constraints.NotEmpty;
7+
8+
import io.avaje.lang.Nullable;
9+
import io.avaje.validation.constraints.Pattern;
10+
import io.avaje.validation.constraints.RegexFlag;
11+
import jakarta.validation.Valid;
12+
import jakarta.validation.constraints.NotBlank;
13+
import jakarta.validation.constraints.NotNull;
14+
15+
@Valid
16+
class PackagePrivateTestClass {
17+
18+
@NotNull
19+
@NotBlank(message = "blankLmao")
20+
String alias;
21+
22+
@Nullable String s;
23+
24+
int i;
25+
@NotNull Integer integer;
26+
27+
char ch;
28+
@NotNull Character chara;
29+
30+
@NotEmpty List<String> list;
31+
32+
@Pattern(
33+
regexp = "ded",
34+
flags = {RegexFlag.CANON_EQ, RegexFlag.CASE_INSENSITIVE})
35+
String getS() {
36+
return s;
37+
}
38+
39+
@Negative(message = "message")
40+
int getI() {
41+
return i;
42+
}
43+
44+
List<String> getList() {
45+
return list;
46+
}
47+
48+
void setList(List<String> list) {
49+
this.list = list;
50+
}
51+
}

0 commit comments

Comments
 (0)