Skip to content

Commit

Permalink
Remove Wildcards and package-private Imports (#257)
Browse files Browse the repository at this point in the history
* remove wildcards and package private imports

* Delete jsonb-generator/avaje-processors.txt

* Update JsonbProcessor.java

* Add unit tests for Util.validImportType() and refactor

* Inline variable in Util.importDifferentPackage()

---------

Co-authored-by: Rob Bygrave <robin.bygrave@gmail.com>
  • Loading branch information
SentryMan and rbygrave authored Jul 3, 2024
1 parent 9440f78 commit 3de8cb3
Show file tree
Hide file tree
Showing 9 changed files with 63 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ interface BeanReader {

void read();

void writeImports(Append writer);
void writeImports(Append writer, String packageName);

void writeFields(Append writer);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,13 +165,11 @@ private Set<String> importTypes() {
importTypes.add(Constants.REFLECT_TYPE);
importTypes.add(Constants.PARAMETERIZED_TYPE);
}
importTypes.add(Constants.JSONB_WILD);
importTypes.add(Constants.IOEXCEPTION);
importTypes.add(Constants.JSONB_SPI);
if (!hasSubTypes) {
importTypes.add(Constants.METHODHANDLE);
}
if (Util.validImportType(type) && !ProcessingContext.isImported(beanType)) {
if (!ProcessingContext.isImported(beanType)) {
importTypes.add(type);
}
for (final FieldReader allField : allFields) {
Expand All @@ -183,19 +181,29 @@ private Set<String> importTypes() {
if (implementation != null) {
implementation.addImported(importTypes);
}

if (supportsViewBuilder()) {
importTypes.add("io.avaje.jsonb.spi.ViewBuilder");
importTypes.add("io.avaje.jsonb.spi.ViewBuilderAware");
}
importTypes.add("io.avaje.jsonb.JsonAdapter");
importTypes.add(Constants.JSONB);
importTypes.add("io.avaje.jsonb.JsonReader");
importTypes.add("io.avaje.jsonb.JsonWriter");
importTypes.add("io.avaje.jsonb.Types");
importTypes.add("io.avaje.jsonb.spi.Generated");
importTypes.add("io.avaje.jsonb.spi.PropertyNames");
return importTypes;
}

private void addImported(Set<String> importTypes) {
if (Util.validImportType(type)) {
importTypes.add(type);
}
importTypes.add(type);
}

@Override
public void writeImports(Append writer) {
public void writeImports(Append writer, String packageName) {
for (final String importType : importTypes()) {
if (Util.validImportType(importType)) {
if (Util.validImportType(importType, packageName)) {
writer.append("import %s;", Util.sanitizeImports(importType)).eol();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,16 +65,14 @@ List<String> allFactories() {
Collection<String> allImports() {
Set<String> packageImports = new TreeSet<>();
for (String adapterFullName : allTypes) {
packageImports.add(Util.packageOf(adapterFullName) + ".*");
packageImports.add(adapterFullName);

final String className = Util.baseTypeOfAdapter(adapterFullName);
final int $index = className.indexOf("$");
packageImports.add($index != -1 ? className.substring(0, $index) : className);
}

for (final String adapterFullName : factoryTypes) {
packageImports.add(Util.packageOf(adapterFullName) + ".*");
}
packageImports.addAll(factoryTypes);
return packageImports;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
final class Constants {

static final String META_INF_COMPONENT = "META-INF/services/io.avaje.jsonb.spi.JsonbExtension";
static final String JSONB_WILD = "io.avaje.jsonb.*";
static final String JSONB_SPI = "io.avaje.jsonb.spi.*";
static final String JSONB = "io.avaje.jsonb.Jsonb";
static final String JSON = "io.avaje.jsonb.Json";
static final String JSON_IMPORT = "io.avaje.jsonb.Json.Import";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ private void writeFields() {
}

private void writeImports() {
beanReader.writeImports(writer);
beanReader.writeImports(writer, adapterPackage);
}

private void writePackage() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,13 @@ private void writeMetaDataEntry(List<String> entries) {

private void writeImports() {
importTypes.add(Constants.JSONB);
importTypes.add(Constants.JSONB_SPI);
importTypes.addAll(metaData.allImports());
importTypes.add("io.avaje.jsonb.spi.Generated");
importTypes.add("io.avaje.jsonb.spi.GeneratedComponent");
importTypes.add("io.avaje.jsonb.spi.MetaData");

for (final String importType : importTypes) {
if (Util.validImportType(importType)) {
if (Util.validImportType(importType, metaData.packageName())) {
writer.append("import %s;", importType).eol();
}
}
Expand Down
16 changes: 14 additions & 2 deletions jsonb-generator/src/main/java/io/avaje/jsonb/generator/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Expand All @@ -22,8 +23,19 @@ final class Util {
private static final Pattern COMMA_PATTERN =
Pattern.compile(", (?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)");

static boolean validImportType(String type) {
return type.indexOf('.') > 0;
static boolean validImportType(String type, String packageName) {
return type.indexOf('.') > -1
&& !type.startsWith("java.lang.")
&& importDifferentPackage(type, packageName)
|| importJavaLangSubpackage(type);
}

private static boolean importDifferentPackage(String type, String packageName) {
return type.replace(packageName + '.', "").indexOf('.') > 0;
}

private static boolean importJavaLangSubpackage(String type) {
return type.startsWith("java.lang.") && importDifferentPackage(type, "java.lang");
}

public static String sanitizeImports(String type) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,25 +73,27 @@ public TypeElement beanType() {
}

private Set<String> importTypes() {
importTypes.add(Constants.JSONB_WILD);
importTypes.add(Constants.IOEXCEPTION);
importTypes.add(Constants.JSONB_SPI);
importTypes.add("java.util.EnumMap");
importTypes.add("java.util.HashMap");
importTypes.add("java.util.Map");
if (Util.validImportType(type)) {
importTypes.add(type);
}
importTypes.add(Constants.JSONB_SPI);
importTypes.add(type);
importTypes.add(element.asType().toString());
importTypes.add(method.getReturnType().toString());
importTypes.add("io.avaje.jsonb.spi.PropertyNames");
importTypes.add("io.avaje.jsonb.JsonAdapter");
importTypes.add("io.avaje.jsonb.JsonDataException");
importTypes.add("io.avaje.jsonb.JsonReader");
importTypes.add("io.avaje.jsonb.JsonWriter");
importTypes.add("io.avaje.jsonb.spi.Generated");
importTypes.add(Constants.JSONB);
return importTypes;
}

@Override
public void writeImports(Append writer) {
public void writeImports(Append writer, String packageName) {
for (final String importType : importTypes()) {
if (Util.validImportType(importType)) {
if (Util.validImportType(importType, packageName)) {
writer.append("import %s;", Util.sanitizeImports(importType)).eol();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.*;

class UtilTest {

Expand Down Expand Up @@ -50,4 +50,18 @@ void sanitizeImports() {
assertEquals("org.foo.Bar", Util.sanitizeImports("org.foo.Bar[]"));
assertEquals("org.foo.Bar", Util.sanitizeImports("@some.Nullable org.foo.Bar[]"));
}

@Test
void validImportType_expect_false() {
assertFalse(Util.validImportType("int", "org.foo"));
assertFalse(Util.validImportType("java.lang.Integer", "org.foo"));
assertFalse(Util.validImportType("org.foo.Bar", "org.foo"));
}

@Test
void validImportType_expect_true() {
assertTrue(Util.validImportType("java.lang.something.Foo", "org.foo"));
assertTrue(Util.validImportType("org.foo.some.Bar", "org.foo"));
assertTrue(Util.validImportType("org.other.Bar", "org.foo"));
}
}

0 comments on commit 3de8cb3

Please sign in to comment.