1166 1167 /** 1168 * Get a {@code ClassFile} from its file name. 1169 * 1170 * @param name The class' file name. 1171 * @param host A class in the same package. 1172 * @return The {@code ClassFile} 1173 */ 1174 public static ClassFile getClassFile(String name, 1175 Class<?> host) 1176 throws IOException, ConstantPoolException { 1177 final URL url = host.getResource(name); 1178 try (InputStream in = url.openStream()) { 1179 return ClassFile.read(in); 1180 } 1181 } 1182 1183 private static class AbstractAttributeVisitor<T> implements Attribute.Visitor<Void, T> { 1184 1185 @Override 1186 public Void visitBootstrapMethods(BootstrapMethods_attribute attr, T p) { 1187 return null; 1188 } 1189 1190 @Override 1191 public Void visitModulePackages(ModulePackages_attribute attr, T p) { 1192 return null; 1193 } 1194 1195 @Override 1196 public Void visitDefault(DefaultAttribute attr, T p) { 1197 return null; 1198 } 1199 1200 @Override 1201 public Void visitAnnotationDefault(AnnotationDefault_attribute attr, T p) { 1202 return null; 1203 } 1204 1205 @Override 1206 public Void visitCharacterRangeTable(CharacterRangeTable_attribute attr, T p) { 1207 return null; 1208 } 1209 1210 @Override 1211 public Void visitCode(Code_attribute attr, T p) { 1212 return null; 1213 } 1214 1215 @Override 1216 public Void visitCompilationID(CompilationID_attribute attr, T p) { 1217 return null; 1218 } 1219 1220 @Override 1221 public Void visitConstantValue(ConstantValue_attribute attr, T p) { 1222 return null; 1223 } 1224 1225 @Override 1226 public Void visitDeprecated(Deprecated_attribute attr, T p) { 1227 return null; 1228 } 1229 1230 @Override 1231 public Void visitEnclosingMethod(EnclosingMethod_attribute attr, T p) { 1232 return null; 1233 } 1234 1235 @Override 1236 public Void visitExceptions(Exceptions_attribute attr, T p) { 1237 return null; 1238 } 1239 1240 @Override 1241 public Void visitModuleHashes(ModuleHashes_attribute attr, T p) { 1242 return null; 1243 } 1244 1245 @Override 1246 public Void visitInnerClasses(InnerClasses_attribute attr, T p) { 1247 return null; 1248 } 1249 1250 @Override 1251 public Void visitLineNumberTable(LineNumberTable_attribute attr, T p) { 1252 return null; 1253 } 1254 1255 @Override 1256 public Void visitLocalVariableTable(LocalVariableTable_attribute attr, T p) { 1257 return null; 1258 } 1259 1260 @Override 1261 public Void visitLocalVariableTypeTable(LocalVariableTypeTable_attribute attr, T p) { 1262 return null; 1263 } 1264 1265 @Override 1266 public Void visitModuleMainClass(ModuleMainClass_attribute attr, T p) { 1267 return null; 1268 } 1269 1270 @Override 1271 public Void visitMethodParameters(MethodParameters_attribute attr, T p) { 1272 return null; 1273 } 1274 1275 @Override 1276 public Void visitModule(Module_attribute attr, T p) { 1277 return null; 1278 } 1279 1280 @Override 1281 public Void visitRuntimeVisibleAnnotations(RuntimeVisibleAnnotations_attribute attr, T p) { 1282 return null; 1283 } 1284 1285 @Override 1286 public Void visitRuntimeInvisibleAnnotations(RuntimeInvisibleAnnotations_attribute attr, T p) { 1287 return null; 1288 } 1289 1290 @Override 1291 public Void visitRuntimeVisibleParameterAnnotations(RuntimeVisibleParameterAnnotations_attribute attr, T p) { 1292 return null; 1293 } 1294 1295 @Override 1296 public Void visitRuntimeInvisibleParameterAnnotations(RuntimeInvisibleParameterAnnotations_attribute attr, T p) { 1297 return null; 1298 } 1299 1300 @Override 1301 public Void visitRuntimeVisibleTypeAnnotations(RuntimeVisibleTypeAnnotations_attribute attr, T p) { 1302 return null; 1303 } 1304 1305 @Override 1306 public Void visitRuntimeInvisibleTypeAnnotations(RuntimeInvisibleTypeAnnotations_attribute attr, T p) { 1307 return null; 1308 } 1309 1310 @Override 1311 public Void visitSignature(Signature_attribute attr, T p) { 1312 return null; 1313 } 1314 1315 @Override 1316 public Void visitSourceDebugExtension(SourceDebugExtension_attribute attr, T p) { 1317 return null; 1318 } 1319 1320 @Override 1321 public Void visitSourceFile(SourceFile_attribute attr, T p) { 1322 return null; 1323 } 1324 1325 @Override 1326 public Void visitSourceID(SourceID_attribute attr, T p) { 1327 return null; 1328 } 1329 1330 @Override 1331 public Void visitStackMap(StackMap_attribute attr, T p) { 1332 return null; 1333 } 1334 1335 @Override 1336 public Void visitStackMapTable(StackMapTable_attribute attr, T p) { 1337 return null; 1338 } 1339 1340 @Override 1341 public Void visitSynthetic(Synthetic_attribute attr, T p) { 1342 return null; 1343 } 1344 1345 @Override 1346 public Void visitModuleTarget(ModuleTarget_attribute attr, T p) { 1347 return null; 1348 } 1349 1350 @Override 1351 public Void visitModuleVersion(ModuleVersion_attribute attr, T p) { 1352 return null; 1353 } 1354 1355 } 1356 1357 private static final Attribute.Visitor<Void, ExpectedTypeAnnotation> typeAnnoMatcher 1358 = new AbstractAttributeVisitor<ExpectedTypeAnnotation>() { 1359 1360 @Override 1361 public Void visitRuntimeVisibleTypeAnnotations(RuntimeVisibleTypeAnnotations_attribute attr, 1362 ExpectedTypeAnnotation expected) { 1363 if (expected.matchVisibility(true)) { 1364 for (TypeAnnotation anno : attr.annotations) { 1365 expected.matchAnnotation(anno); 1366 } 1367 } 1368 1369 return null; 1370 } 1371 1372 @Override 1373 public Void visitRuntimeInvisibleTypeAnnotations(RuntimeInvisibleTypeAnnotations_attribute attr, 1374 ExpectedTypeAnnotation expected) { | 1166 1167 /** 1168 * Get a {@code ClassFile} from its file name. 1169 * 1170 * @param name The class' file name. 1171 * @param host A class in the same package. 1172 * @return The {@code ClassFile} 1173 */ 1174 public static ClassFile getClassFile(String name, 1175 Class<?> host) 1176 throws IOException, ConstantPoolException { 1177 final URL url = host.getResource(name); 1178 try (InputStream in = url.openStream()) { 1179 return ClassFile.read(in); 1180 } 1181 } 1182 1183 private static class AbstractAttributeVisitor<T> implements Attribute.Visitor<Void, T> { 1184 1185 @Override 1186 public Void visitDefault(DefaultAttribute attr, T p) { 1187 return null; 1188 } 1189 1190 @Override 1191 public Void visitAnnotationDefault(AnnotationDefault_attribute attr, T p) { 1192 return null; 1193 } 1194 1195 @Override 1196 public Void visitBootstrapMethods(BootstrapMethods_attribute attr, T p) { 1197 return null; 1198 } 1199 1200 @Override 1201 public Void visitCharacterRangeTable(CharacterRangeTable_attribute attr, T p) { 1202 return null; 1203 } 1204 1205 @Override 1206 public Void visitCode(Code_attribute attr, T p) { 1207 return null; 1208 } 1209 1210 @Override 1211 public Void visitCompilationID(CompilationID_attribute attr, T p) { 1212 return null; 1213 } 1214 1215 @Override 1216 public Void visitConstantValue(ConstantValue_attribute attr, T p) { 1217 return null; 1218 } 1219 1220 @Override 1221 public Void visitDeprecated(Deprecated_attribute attr, T p) { 1222 return null; 1223 } 1224 1225 @Override 1226 public Void visitEnclosingMethod(EnclosingMethod_attribute attr, T p) { 1227 return null; 1228 } 1229 1230 @Override 1231 public Void visitExceptions(Exceptions_attribute attr, T p) { 1232 return null; 1233 } 1234 1235 @Override 1236 public Void visitInnerClasses(InnerClasses_attribute attr, T p) { 1237 return null; 1238 } 1239 1240 @Override 1241 public Void visitLineNumberTable(LineNumberTable_attribute attr, T p) { 1242 return null; 1243 } 1244 1245 @Override 1246 public Void visitLocalVariableTable(LocalVariableTable_attribute attr, T p) { 1247 return null; 1248 } 1249 1250 @Override 1251 public Void visitLocalVariableTypeTable(LocalVariableTypeTable_attribute attr, T p) { 1252 return null; 1253 } 1254 1255 @Override 1256 public Void visitMethodParameters(MethodParameters_attribute attr, T p) { 1257 return null; 1258 } 1259 1260 @Override 1261 public Void visitModule(Module_attribute attr, T p) { 1262 return null; 1263 } 1264 1265 @Override 1266 public Void visitModuleHashes(ModuleHashes_attribute attr, T p) { 1267 return null; 1268 } 1269 1270 @Override 1271 public Void visitModuleMainClass(ModuleMainClass_attribute attr, T p) { 1272 return null; 1273 } 1274 1275 @Override 1276 public Void visitModulePackages(ModulePackages_attribute attr, T p) { 1277 return null; 1278 } 1279 1280 @Override 1281 public Void visitModuleResolution(ModuleResolution_attribute attr, T p) { 1282 return null; 1283 } 1284 1285 @Override 1286 public Void visitModuleTarget(ModuleTarget_attribute attr, T p) { 1287 return null; 1288 } 1289 1290 @Override 1291 public Void visitRuntimeInvisibleAnnotations(RuntimeInvisibleAnnotations_attribute attr, T p) { 1292 return null; 1293 } 1294 1295 @Override 1296 public Void visitRuntimeInvisibleParameterAnnotations(RuntimeInvisibleParameterAnnotations_attribute attr, T p) { 1297 return null; 1298 } 1299 1300 @Override 1301 public Void visitRuntimeInvisibleTypeAnnotations(RuntimeInvisibleTypeAnnotations_attribute attr, T p) { 1302 return null; 1303 } 1304 1305 @Override 1306 public Void visitRuntimeVisibleAnnotations(RuntimeVisibleAnnotations_attribute attr, T p) { 1307 return null; 1308 } 1309 1310 @Override 1311 public Void visitRuntimeVisibleParameterAnnotations(RuntimeVisibleParameterAnnotations_attribute attr, T p) { 1312 return null; 1313 } 1314 1315 @Override 1316 public Void visitRuntimeVisibleTypeAnnotations(RuntimeVisibleTypeAnnotations_attribute attr, T p) { 1317 return null; 1318 } 1319 1320 @Override 1321 public Void visitSignature(Signature_attribute attr, T p) { 1322 return null; 1323 } 1324 1325 @Override 1326 public Void visitSourceDebugExtension(SourceDebugExtension_attribute attr, T p) { 1327 return null; 1328 } 1329 1330 @Override 1331 public Void visitSourceFile(SourceFile_attribute attr, T p) { 1332 return null; 1333 } 1334 1335 @Override 1336 public Void visitSourceID(SourceID_attribute attr, T p) { 1337 return null; 1338 } 1339 1340 @Override 1341 public Void visitStackMap(StackMap_attribute attr, T p) { 1342 return null; 1343 } 1344 1345 @Override 1346 public Void visitStackMapTable(StackMapTable_attribute attr, T p) { 1347 return null; 1348 } 1349 1350 @Override 1351 public Void visitSynthetic(Synthetic_attribute attr, T p) { 1352 return null; 1353 } 1354 } 1355 1356 private static final Attribute.Visitor<Void, ExpectedTypeAnnotation> typeAnnoMatcher 1357 = new AbstractAttributeVisitor<ExpectedTypeAnnotation>() { 1358 1359 @Override 1360 public Void visitRuntimeVisibleTypeAnnotations(RuntimeVisibleTypeAnnotations_attribute attr, 1361 ExpectedTypeAnnotation expected) { 1362 if (expected.matchVisibility(true)) { 1363 for (TypeAnnotation anno : attr.annotations) { 1364 expected.matchAnnotation(anno); 1365 } 1366 } 1367 1368 return null; 1369 } 1370 1371 @Override 1372 public Void visitRuntimeInvisibleTypeAnnotations(RuntimeInvisibleTypeAnnotations_attribute attr, 1373 ExpectedTypeAnnotation expected) { |