37
37
import net .bytebuddy .description .type .TypeDescription ;
38
38
import net .bytebuddy .matcher .ElementMatcher ;
39
39
import org .hypertrace .agent .core .GlobalObjectRegistry ;
40
+ import org .hypertrace .agent .core .GlobalObjectRegistry .SpanAndBuffer ;
40
41
41
42
/**
42
43
* {@link InputStream} instrumentation. The type matcher applies to all implementations. However
@@ -67,7 +68,7 @@ static class InputStreamInstrumentation implements TypeInstrumentation {
67
68
68
69
@ Override
69
70
public ElementMatcher <? super TypeDescription > typeMatcher () {
70
- return extendsClass (named ("java.io.InputStream" ));
71
+ return extendsClass (named (InputStream . class . getName () ));
71
72
}
72
73
73
74
@ Override
@@ -93,7 +94,7 @@ public Map<? extends ElementMatcher<? super MethodDescription>, String> transfor
93
94
+ "$InputStream_ReadByteArrayOffsetAdvice" );
94
95
transformers .put (
95
96
named ("readAllBytes" ).and (takesArguments (0 )).and (isPublic ()),
96
- InputStream_ReadAllBytes .class .getName ());
97
+ InputStreamInstrumentationModule .class .getName () + "$InputStream_ReadAllBytes" );
97
98
transformers .put (
98
99
named ("readNBytes" )
99
100
.and (takesArguments (0 ))
@@ -107,50 +108,93 @@ public Map<? extends ElementMatcher<? super MethodDescription>, String> transfor
107
108
}
108
109
109
110
public static class InputStream_ReadNoArgsAdvice {
111
+ @ Advice .OnMethodEnter (suppress = Throwable .class )
112
+ public static SpanAndBuffer enter (@ Advice .This InputStream thizz ) {
113
+ return InputStreamUtils .check (thizz );
114
+ }
115
+
110
116
@ Advice .OnMethodExit (suppress = Throwable .class )
111
- public static void exit (@ Advice .This InputStream thizz , @ Advice .Return int read ) {
112
- InputStreamUtils .read (thizz , read );
117
+ public static void exit (
118
+ @ Advice .This InputStream thizz ,
119
+ @ Advice .Return int read ,
120
+ @ Advice .Enter SpanAndBuffer spanAndBuffer ) {
121
+ if (spanAndBuffer != null ) {
122
+ InputStreamUtils .read (thizz , spanAndBuffer , read );
123
+ }
113
124
}
114
125
}
115
126
116
127
public static class InputStream_ReadByteArrayAdvice {
128
+ @ Advice .OnMethodEnter (suppress = Throwable .class )
129
+ public static SpanAndBuffer enter (@ Advice .This InputStream thizz ) {
130
+ return InputStreamUtils .check (thizz );
131
+ }
132
+
117
133
@ Advice .OnMethodExit (suppress = Throwable .class )
118
134
public static void exit (
119
- @ Advice .This InputStream thizz , @ Advice .Return int read , @ Advice .Argument (0 ) byte b []) {
120
- InputStreamUtils .read (thizz , read , b );
135
+ @ Advice .This InputStream thizz ,
136
+ @ Advice .Return int read ,
137
+ @ Advice .Argument (0 ) byte b [],
138
+ @ Advice .Enter SpanAndBuffer spanAndBuffer ) {
139
+ if (spanAndBuffer != null ) {
140
+ InputStreamUtils .read (thizz , spanAndBuffer , read , b );
141
+ }
121
142
}
122
143
}
123
144
124
145
public static class InputStream_ReadByteArrayOffsetAdvice {
146
+ @ Advice .OnMethodEnter (suppress = Throwable .class )
147
+ public static SpanAndBuffer enter (@ Advice .This InputStream thizz ) {
148
+ return InputStreamUtils .check (thizz );
149
+ }
150
+
125
151
@ Advice .OnMethodExit (suppress = Throwable .class )
126
152
public static void exit (
127
153
@ Advice .This InputStream thizz ,
128
154
@ Advice .Return int read ,
129
155
@ Advice .Argument (0 ) byte b [],
130
156
@ Advice .Argument (1 ) int off ,
131
- @ Advice .Argument (2 ) int len ) {
132
- InputStreamUtils .read (thizz , read , b , off , len );
157
+ @ Advice .Argument (2 ) int len ,
158
+ @ Advice .Enter SpanAndBuffer spanAndBuffer ) {
159
+ if (spanAndBuffer != null ) {
160
+ InputStreamUtils .read (thizz , spanAndBuffer , read , b , off , len );
161
+ }
133
162
}
134
163
}
135
164
136
165
public static class InputStream_ReadAllBytes {
166
+ @ Advice .OnMethodEnter (suppress = Throwable .class )
167
+ public static SpanAndBuffer enter (@ Advice .This InputStream thizz ) {
168
+ return InputStreamUtils .check (thizz );
169
+ }
170
+
137
171
@ Advice .OnMethodExit (suppress = Throwable .class )
138
- public static void exit (@ Advice .This InputStream thizz , @ Advice .Return byte [] b )
172
+ public static void exit (
173
+ @ Advice .This InputStream thizz ,
174
+ @ Advice .Return byte [] b ,
175
+ @ Advice .Enter SpanAndBuffer spanAndBuffer )
139
176
throws IOException {
140
- InputStreamUtils .readAll (thizz , b );
177
+ if (spanAndBuffer != null ) {
178
+ InputStreamUtils .readAll (thizz , spanAndBuffer , b );
179
+ }
141
180
}
142
181
}
143
182
144
183
public static class InputStream_ReadNBytes {
184
+ @ Advice .OnMethodEnter (suppress = Throwable .class )
185
+ public static SpanAndBuffer enter (@ Advice .This InputStream thizz ) {
186
+ return InputStreamUtils .check (thizz );
187
+ }
188
+
145
189
@ Advice .OnMethodExit (suppress = Throwable .class )
146
190
public static void exit (
147
191
@ Advice .This InputStream thizz ,
148
192
@ Advice .Return int read ,
149
193
@ Advice .Argument (0 ) byte [] b ,
150
194
@ Advice .Argument (1 ) int off ,
151
- @ Advice .Argument (2 ) int len )
152
- throws IOException {
153
- InputStreamUtils .readNBytes (thizz , read , b , off , len );
195
+ @ Advice .Argument (2 ) int len ,
196
+ @ Advice . Enter SpanAndBuffer spanAndBuffer ) {
197
+ InputStreamUtils .readNBytes (thizz , spanAndBuffer , read , b , off , len );
154
198
}
155
199
}
156
200
}
0 commit comments