Skip to content

Commit 0461411

Browse files
committed
fix CICD errors: making some methods public to make code generation compatible with java8 without hacks
1 parent ad6822c commit 0461411

File tree

2 files changed

+47
-33
lines changed

2 files changed

+47
-33
lines changed

parquet-protobuf/src/main/java/org/apache/parquet/proto/ByteBuddyCodeGen.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
7474
import net.bytebuddy.dynamic.scaffold.InstrumentedType;
7575
import net.bytebuddy.implementation.Implementation;
76+
import net.bytebuddy.implementation.MethodCall;
7677
import net.bytebuddy.implementation.SuperMethodCall;
7778
import net.bytebuddy.implementation.bytecode.ByteCodeAppender;
7879
import net.bytebuddy.implementation.bytecode.Removal;
@@ -101,7 +102,7 @@
101102
import org.apache.parquet.proto.ByteBuddyCodeGen.CodeGenUtils.LocalVar;
102103
import org.apache.parquet.schema.MessageType;
103104

104-
class ByteBuddyCodeGen {
105+
public class ByteBuddyCodeGen {
105106
private static final AtomicLong BYTE_BUDDY_CLASS_SEQUENCE = new AtomicLong();
106107

107108
private static final GenerateMessageClasses GeneratedMessageV3 =
@@ -185,6 +186,7 @@ static class CodeGenUtils {
185186
static final ResolvedReflection Reflection = new ResolvedReflection();
186187

187188
static class ResolvedReflection {
189+
final Method MethodHandles_lookup = ReflectionUtil.getDeclaredMethod(MethodHandles.class, "lookup");
188190

189191
final RecordConsumerMethods RecordConsumer = new RecordConsumerMethods();
190192
final ByteBuddyMessageWritersMethods ByteBuddyProto3FastMessageWriter =
@@ -741,7 +743,7 @@ static Optional<Class<?>> classForName(String className) {
741743
}
742744
}
743745

744-
static class WriteSupport {
746+
public static class WriteSupport {
745747
// in order to avoid class generation for the same proto descriptors, cache implementations.
746748
private static final Map<MessageFieldsWritersCacheKey, Consumer<ProtoWriteSupport<?>.MessageWriter>>
747749
WRITERS_CACHE = new MapMaker().weakValues().makeMap();
@@ -1390,6 +1392,7 @@ public ByteBuddyMessageWritersCodeGen(
13901392

13911393
classBuilder = new ByteBuddy()
13921394
.subclass(ByteBuddyMessageWriters.class)
1395+
.modifiers(Visibility.PUBLIC)
13931396
.name(ByteBuddyMessageWriters.class.getName() + "$Generated$"
13941397
+ BYTE_BUDDY_CLASS_SEQUENCE.incrementAndGet());
13951398

@@ -1398,6 +1401,7 @@ public ByteBuddyMessageWritersCodeGen(
13981401
generateConstructor();
13991402
generateMethods();
14001403
overrideSetFallbackFieldWriters();
1404+
overrideGetLookup();
14011405

14021406
DynamicType.Unloaded<ByteBuddyMessageWriters> unloaded = classBuilder.make();
14031407

@@ -1408,10 +1412,16 @@ public ByteBuddyMessageWritersCodeGen(
14081412
// }
14091413

14101414
byteBuddyMessageWritersClass = unloaded.load(
1411-
null, ClassLoadingStrategy.UsingLookup.of(MethodHandles.lookup()))
1415+
this.getClass().getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
14121416
.getLoaded();
14131417
}
14141418

1419+
private void overrideGetLookup() {
1420+
classBuilder = classBuilder
1421+
.method(ElementMatchers.named("getLookup"))
1422+
.intercept(MethodCall.invoke(Reflection.MethodHandles_lookup));
1423+
}
1424+
14151425
private void registerFallbackFieldWriterFields() {
14161426
for (CodeGenFieldWriterFallback fieldWriterFallback : fieldWriterFallbacks.values()) {
14171427
classBuilder = classBuilder.define(fieldWriterFallback.fieldWriter());
@@ -1465,7 +1475,8 @@ private void generateMethods() {
14651475
private void generateConstructor() {
14661476
classBuilder = classBuilder
14671477
.constructor(ElementMatchers.any())
1468-
.intercept(SuperMethodCall.INSTANCE.andThen(new ByteBuddyMessageWritersConstructor()));
1478+
.intercept(SuperMethodCall.INSTANCE.andThen(new ByteBuddyMessageWritersConstructor()))
1479+
.modifiers(Visibility.PUBLIC);
14691480
}
14701481

14711482
private void registerEnumFields() {
@@ -2645,14 +2656,16 @@ public void accept(ProtoWriteSupport<?>.MessageWriter messageWriter) {
26452656

26462657
// this is subclassed with ByteBuddy, overriding the constructor, setProtoReflectionMessageWriters and adding
26472658
// new fields and methods
2648-
abstract static class ByteBuddyMessageWriters {
2659+
public abstract static class ByteBuddyMessageWriters {
26492660
private final ProtoWriteSupport<?> protoWriteSupport;
26502661
private final Map<Method, ProtoWriteSupport.MessageFieldsWriter> fastMessageWriters = new LinkedHashMap<>();
2662+
private final MethodHandles.Lookup lookup;
26512663

26522664
public ByteBuddyMessageWriters(
26532665
ProtoWriteSupport<?>.MessageWriter rootMessageWriter,
26542666
ByteBuddyMessageWritersCodeGen.GeneratedElementsInfo generatedElementsInfo) {
26552667
this.protoWriteSupport = rootMessageWriter.getProtoWriteSupport();
2668+
this.lookup = getLookup();
26562669
final ProtoWriteSupport<?>.FieldWriter[] fallbackFieldWriters =
26572670
new ProtoWriteSupport<?>.FieldWriter[generatedElementsInfo.fallbackFieldWriters.size()];
26582671

@@ -2699,7 +2712,6 @@ public Map<String, Integer> enumNameNumberPairs(String enumTypeFullName) {
26992712

27002713
public ProtoWriteSupport.MessageFieldsWriter getFastMessageWriter(Method method) {
27012714
return fastMessageWriters.computeIfAbsent(method, k -> {
2702-
MethodHandles.Lookup lookup = MethodHandles.lookup();
27032715
Class<?> messageOrBuilderInterface = method.getParameterTypes()[0];
27042716
try {
27052717
Consumer<MessageOrBuilder> consumer =
@@ -2728,6 +2740,8 @@ public boolean writeAllFields(MessageOrBuilder messageOrBuilder) {
27282740
}
27292741
});
27302742
}
2743+
2744+
protected abstract MethodHandles.Lookup getLookup();
27312745
}
27322746
}
27332747
}

parquet-protobuf/src/main/java/org/apache/parquet/proto/ProtoWriteSupport.java

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ private Map<String, String> enumMetadata() {
327327
return enumMetadata;
328328
}
329329

330-
class FieldWriter {
330+
public class FieldWriter {
331331
String fieldName;
332332
int index = -1;
333333

@@ -345,7 +345,7 @@ void setIndex(int index) {
345345
/**
346346
* Used for writing repeated fields
347347
*/
348-
void writeRawValue(Object value) {}
348+
public void writeRawValue(Object value) {}
349349

350350
/**
351351
* Used for writing nonrepeated (optional, required) fields
@@ -538,7 +538,7 @@ void writeTopLevelMessage(Object value) {
538538
* Writes message as part of repeated field. It cannot start field
539539
*/
540540
@Override
541-
final void writeRawValue(Object value) {
541+
public final void writeRawValue(Object value) {
542542
recordConsumer.startGroup();
543543
writeAllFields((MessageOrBuilder) value);
544544
recordConsumer.endGroup();
@@ -614,7 +614,7 @@ class ArrayWriter extends FieldWriter {
614614
}
615615

616616
@Override
617-
final void writeRawValue(Object value) {
617+
public final void writeRawValue(Object value) {
618618
throw new UnsupportedOperationException("Array has no raw value");
619619
}
620620

@@ -657,7 +657,7 @@ class RepeatedWriter extends FieldWriter {
657657
}
658658

659659
@Override
660-
final void writeRawValue(Object value) {
660+
public final void writeRawValue(Object value) {
661661
throw new UnsupportedOperationException("Array has no raw value");
662662
}
663663

@@ -697,23 +697,23 @@ private void validatedMapping(Descriptor descriptor, GroupType parquetSchema) {
697697

698698
class StringWriter extends FieldWriter {
699699
@Override
700-
final void writeRawValue(Object value) {
700+
public final void writeRawValue(Object value) {
701701
Binary binaryString = Binary.fromString((String) value);
702702
recordConsumer.addBinary(binaryString);
703703
}
704704
}
705705

706706
class IntWriter extends FieldWriter {
707707
@Override
708-
final void writeRawValue(Object value) {
708+
public final void writeRawValue(Object value) {
709709
recordConsumer.addInteger((Integer) value);
710710
}
711711
}
712712

713713
class LongWriter extends FieldWriter {
714714

715715
@Override
716-
final void writeRawValue(Object value) {
716+
public final void writeRawValue(Object value) {
717717
recordConsumer.addLong((Long) value);
718718
}
719719
}
@@ -730,7 +730,7 @@ public MapWriter(FieldWriter keyWriter, FieldWriter valueWriter) {
730730
}
731731

732732
@Override
733-
final void writeRawValue(Object value) {
733+
public final void writeRawValue(Object value) {
734734
Collection<Message> collection = (Collection<Message>) value;
735735
if (collection.isEmpty()) {
736736
return;
@@ -761,14 +761,14 @@ final void writeRawValue(Object value) {
761761

762762
class FloatWriter extends FieldWriter {
763763
@Override
764-
final void writeRawValue(Object value) {
764+
public final void writeRawValue(Object value) {
765765
recordConsumer.addFloat((Float) value);
766766
}
767767
}
768768

769769
class DoubleWriter extends FieldWriter {
770770
@Override
771-
final void writeRawValue(Object value) {
771+
public final void writeRawValue(Object value) {
772772
recordConsumer.addDouble((Double) value);
773773
}
774774
}
@@ -786,7 +786,7 @@ public EnumWriter(Descriptors.EnumDescriptor enumType) {
786786
}
787787

788788
@Override
789-
final void writeRawValue(Object value) {
789+
public final void writeRawValue(Object value) {
790790
Descriptors.EnumValueDescriptor enumValueDesc = (Descriptors.EnumValueDescriptor) value;
791791
Binary binary = Binary.fromString(enumValueDesc.getName());
792792
recordConsumer.addBinary(binary);
@@ -796,14 +796,14 @@ final void writeRawValue(Object value) {
796796

797797
class BooleanWriter extends FieldWriter {
798798
@Override
799-
final void writeRawValue(Object value) {
799+
public final void writeRawValue(Object value) {
800800
recordConsumer.addBoolean((Boolean) value);
801801
}
802802
}
803803

804804
class BinaryWriter extends FieldWriter {
805805
@Override
806-
final void writeRawValue(Object value) {
806+
public final void writeRawValue(Object value) {
807807
// Non-ByteString values can happen when recursions gets truncated.
808808
ByteString byteString = value instanceof ByteString
809809
? (ByteString) value
@@ -819,15 +819,15 @@ final void writeRawValue(Object value) {
819819

820820
class TimestampWriter extends FieldWriter {
821821
@Override
822-
void writeRawValue(Object value) {
822+
public void writeRawValue(Object value) {
823823
Timestamp timestamp = (Timestamp) value;
824824
recordConsumer.addLong(Timestamps.toNanos(timestamp));
825825
}
826826
}
827827

828828
class DateWriter extends FieldWriter {
829829
@Override
830-
void writeRawValue(Object value) {
830+
public void writeRawValue(Object value) {
831831
Date date = (Date) value;
832832
LocalDate localDate = LocalDate.of(date.getYear(), date.getMonth(), date.getDay());
833833
recordConsumer.addInteger((int) localDate.toEpochDay());
@@ -836,7 +836,7 @@ void writeRawValue(Object value) {
836836

837837
class TimeWriter extends FieldWriter {
838838
@Override
839-
void writeRawValue(Object value) {
839+
public void writeRawValue(Object value) {
840840
com.google.type.TimeOfDay timeOfDay = (com.google.type.TimeOfDay) value;
841841
LocalTime localTime = LocalTime.of(
842842
timeOfDay.getHours(), timeOfDay.getMinutes(), timeOfDay.getSeconds(), timeOfDay.getNanos());
@@ -846,64 +846,64 @@ void writeRawValue(Object value) {
846846

847847
class DoubleValueWriter extends FieldWriter {
848848
@Override
849-
void writeRawValue(Object value) {
849+
public void writeRawValue(Object value) {
850850
recordConsumer.addDouble(((DoubleValue) value).getValue());
851851
}
852852
}
853853

854854
class FloatValueWriter extends FieldWriter {
855855
@Override
856-
void writeRawValue(Object value) {
856+
public void writeRawValue(Object value) {
857857
recordConsumer.addFloat(((FloatValue) value).getValue());
858858
}
859859
}
860860

861861
class Int64ValueWriter extends FieldWriter {
862862
@Override
863-
void writeRawValue(Object value) {
863+
public void writeRawValue(Object value) {
864864
recordConsumer.addLong(((Int64Value) value).getValue());
865865
}
866866
}
867867

868868
class UInt64ValueWriter extends FieldWriter {
869869
@Override
870-
void writeRawValue(Object value) {
870+
public void writeRawValue(Object value) {
871871
recordConsumer.addLong(((UInt64Value) value).getValue());
872872
}
873873
}
874874

875875
class Int32ValueWriter extends FieldWriter {
876876
@Override
877-
void writeRawValue(Object value) {
877+
public void writeRawValue(Object value) {
878878
recordConsumer.addInteger(((Int32Value) value).getValue());
879879
}
880880
}
881881

882882
class UInt32ValueWriter extends FieldWriter {
883883
@Override
884-
void writeRawValue(Object value) {
884+
public void writeRawValue(Object value) {
885885
recordConsumer.addLong(((UInt32Value) value).getValue());
886886
}
887887
}
888888

889889
class BoolValueWriter extends FieldWriter {
890890
@Override
891-
void writeRawValue(Object value) {
891+
public void writeRawValue(Object value) {
892892
recordConsumer.addBoolean(((BoolValue) value).getValue());
893893
}
894894
}
895895

896896
class StringValueWriter extends FieldWriter {
897897
@Override
898-
void writeRawValue(Object value) {
898+
public void writeRawValue(Object value) {
899899
Binary binaryString = Binary.fromString(((StringValue) value).getValue());
900900
recordConsumer.addBinary(binaryString);
901901
}
902902
}
903903

904904
class BytesValueWriter extends FieldWriter {
905905
@Override
906-
void writeRawValue(Object value) {
906+
public void writeRawValue(Object value) {
907907
byte[] byteArray = ((BytesValue) value).getValue().toByteArray();
908908
Binary binary = Binary.fromConstantByteArray(byteArray);
909909
recordConsumer.addBinary(binary);
@@ -917,7 +917,7 @@ private FieldWriter unknownType(FieldDescriptor fieldDescriptor) {
917917
}
918918

919919
/**
920-
* A plugin for {@link MessageWriter#writeAllFields(MessageOrBuilder)} that is potentially
920+
* A plugin for MessageWriter.writeAllFields(MessageOrBuilder) that is potentially
921921
* capable to write MessageOrBuilder fields faster.
922922
*/
923923
public interface MessageFieldsWriter {

0 commit comments

Comments
 (0)