From 7333b885fd39bdfb7564dd7c710ba4d33bd548c5 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Thu, 26 Jan 2023 01:06:50 +0800 Subject: [PATCH] Initial commit --- .gitignore | 15 + .idea/.gitignore | 3 + .idea/compiler.xml | 6 + .idea/gradle.xml | 20 + .idea/icon.png | Bin 0 -> 24862 bytes .idea/inspectionProfiles/Project_Default.xml | 11 + .idea/misc.xml | 10 + .idea/vcs.xml | 6 + LICENSE | 21 + README-zh-CN.md | 80 + README.md | 79 + build.gradle | 45 + demo-app/.gitignore | 1 + demo-app/build.gradle | 55 + demo-app/proguard-rules.pro | 21 + .../yukireflection/ExampleInstrumentedTest.kt | 24 + demo-app/src/main/AndroidManifest.xml | 23 + demo-app/src/main/ic_launcher-playstore.png | Bin 0 -> 15045 bytes .../yukireflection/demo_app/test/Main.java | 21 + .../demo_app/ui/MainActivity.kt | 75 + .../src/main/res/layout/activity_main.xml | 59 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1739 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 2385 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3782 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1185 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1533 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2329 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2422 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 3281 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 5477 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3868 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 5289 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 8700 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5355 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 7492 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 12441 bytes demo-app/src/main/res/values-night/themes.xml | 19 + demo-app/src/main/res/values/colors.xml | 9 + .../res/values/ic_launcher_background.xml | 4 + demo-app/src/main/res/values/strings.xml | 3 + demo-app/src/main/res/values/themes.xml | 19 + .../yukireflection/ExampleUnitTest.kt | 17 + docs-source/.gitignore | 3 + docs-source/.nojekyll | 0 docs-source/.vscode/settings.json | 3 + docs-source/package.json | 15 + docs-source/src/.vuepress/config.ts | 60 + docs-source/src/.vuepress/configs/template.ts | 201 ++ docs-source/src/.vuepress/configs/utils.ts | 13 + .../src/.vuepress/public/images/logo.png | Bin 0 -> 24862 bytes docs-source/src/.vuepress/styles/index.scss | 179 ++ docs-source/src/en/about/about.md | 33 + docs-source/src/en/about/changelog.md | 21 + docs-source/src/en/about/contacts.md | 13 + docs-source/src/en/about/future.md | 104 + docs-source/src/en/api/features.md | 1757 ++++++++++++++ docs-source/src/en/api/home.md | 55 + .../yukireflection/YukiReflection.md | 163 ++ .../yukireflection/bean/CurrentClass.md | 229 ++ .../yukireflection/bean/GenericClass.md | 43 + .../yukireflection/bean/VariousClass.md | 59 + .../factory/ReflectionFactory.md | 638 +++++ .../yukireflection/finder/base/BaseFinder.md | 127 + .../finder/base/rules/CountRules.md | 83 + .../finder/base/rules/ModifierRules.md | 213 ++ .../finder/base/rules/NameRules.md | 129 + .../finder/base/rules/ObjectRules.md | 27 + .../finder/classes/DexClassFinder.md | 734 ++++++ .../finder/classes/rules/ConstructorRules.md | 153 ++ .../finder/classes/rules/FieldRules.md | 101 + .../finder/classes/rules/MemberRules.md | 41 + .../finder/classes/rules/MethodRules.md | 213 ++ .../classes/rules/result/MemberRulesResult.md | 81 + .../finder/members/ConstructorFinder.md | 623 +++++ .../finder/members/FieldFinder.md | 827 +++++++ .../finder/members/MethodFinder.md | 899 +++++++ .../type/android/ComponentTypeFactory.md | 23 + .../type/android/GraphicsTypeFactory.md | 23 + .../type/android/ViewTypeFactory.md | 23 + .../type/defined/DefinedTypeFactory.md | 35 + .../type/java/VariableTypeFactory.md | 23 + docs-source/src/en/config/api-example.md | 121 + docs-source/src/en/config/api-exception.md | 442 ++++ docs-source/src/en/guide/home.md | 56 + docs-source/src/en/guide/quick-start.md | 75 + docs-source/src/en/index.md | 13 + docs-source/src/index.md | 17 + docs-source/src/zh-cn/about/about.md | 33 + docs-source/src/zh-cn/about/changelog.md | 13 + docs-source/src/zh-cn/about/contacts.md | 11 + docs-source/src/zh-cn/about/future.md | 104 + docs-source/src/zh-cn/api/features.md | 1698 +++++++++++++ docs-source/src/zh-cn/api/home.md | 55 + .../yukireflection/YukiReflection.md | 155 ++ .../yukireflection/bean/CurrentClass.md | 221 ++ .../yukireflection/bean/GenericClass.md | 35 + .../yukireflection/bean/VariousClass.md | 51 + .../factory/ReflectionFactory.md | 630 +++++ .../yukireflection/finder/base/BaseFinder.md | 119 + .../finder/base/rules/CountRules.md | 75 + .../finder/base/rules/ModifierRules.md | 205 ++ .../finder/base/rules/NameRules.md | 121 + .../finder/base/rules/ObjectRules.md | 19 + .../finder/classes/DexClassFinder.md | 726 ++++++ .../finder/classes/rules/ConstructorRules.md | 145 ++ .../finder/classes/rules/FieldRules.md | 93 + .../finder/classes/rules/MemberRules.md | 33 + .../finder/classes/rules/MethodRules.md | 205 ++ .../classes/rules/result/MemberRulesResult.md | 73 + .../finder/members/ConstructorFinder.md | 615 +++++ .../finder/members/FieldFinder.md | 819 +++++++ .../finder/members/MethodFinder.md | 891 +++++++ .../type/android/ComponentTypeFactory.md | 15 + .../type/android/GraphicsTypeFactory.md | 15 + .../type/android/ViewTypeFactory.md | 15 + .../type/defined/DefinedTypeFactory.md | 27 + .../type/java/VariableTypeFactory.md | 15 + docs-source/src/zh-cn/config/api-example.md | 121 + docs-source/src/zh-cn/config/api-exception.md | 442 ++++ docs-source/src/zh-cn/guide/home.md | 56 + docs-source/src/zh-cn/guide/quick-start.md | 73 + docs-source/src/zh-cn/index.md | 13 + docs-source/yarn.lock | 2115 +++++++++++++++++ gradle.properties | 23 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 185 ++ gradlew.bat | 89 + img-src/icon.png | Bin 0 -> 24862 bytes img-src/wechat_code.jpg | Bin 0 -> 13706 bytes settings.gradle | 17 + yukireflection/.gitignore | 1 + yukireflection/build.gradle | 90 + yukireflection/libs/android-stub.jar | Bin 0 -> 8113078 bytes .../yukireflection/YukiReflection.kt | 110 + .../annotation/CauseProblemsApi.kt | 56 + .../annotation/YukiPrivateApi.kt | 54 + .../yukireflection/bean/CurrentClass.kt | 157 ++ .../yukireflection/bean/GenericClass.kt | 57 + .../yukireflection/bean/VariousClass.kt | 80 + .../factory/ReflectionFactory.kt | 364 +++ .../yukireflection/finder/base/BaseFinder.kt | 147 ++ .../finder/base/ClassBaseFinder.kt | 83 + .../finder/base/MemberBaseFinder.kt | 133 ++ .../finder/base/data/BaseRulesData.kt | 149 ++ .../finder/base/rules/CountRules.kt | 83 + .../finder/base/rules/ModifierRules.kt | 239 ++ .../finder/base/rules/NameRules.kt | 126 + .../finder/base/rules/ObjectRules.kt | 56 + .../finder/classes/DexClassFinder.kt | 615 +++++ .../finder/classes/data/ClassRulesData.kt | 184 ++ .../finder/classes/rules/ConstructorRules.kt | 165 ++ .../finder/classes/rules/FieldRules.kt | 110 + .../finder/classes/rules/MemberRules.kt | 59 + .../finder/classes/rules/MethodRules.kt | 211 ++ .../finder/classes/rules/base/BaseRules.kt | 91 + .../classes/rules/result/MemberRulesResult.kt | 90 + .../finder/members/ConstructorFinder.kt | 508 ++++ .../finder/members/FieldFinder.kt | 605 +++++ .../finder/members/MethodFinder.kt | 694 ++++++ .../members/data/ConstructorRulesData.kt | 70 + .../finder/members/data/FieldRulesData.kt | 66 + .../finder/members/data/MemberRulesData.kt | 77 + .../finder/members/data/MethodRulesData.kt | 86 + .../finder/store/ReflectsCacheStore.kt | 164 ++ .../finder/tools/ReflectionTool.kt | 694 ++++++ .../finder/type/factory/TypeAliasFactory.kt | 65 + .../yukireflection/log/LoggerFactory.kt | 67 + .../type/android/ComponentTypeFactory.kt | 831 +++++++ .../type/android/GraphicsTypeFactory.kt | 221 ++ .../type/android/ViewTypeFactory.kt | 416 ++++ .../type/defined/DefinedTypeFactory.kt | 57 + .../type/java/VariableTypeFactory.kt | 824 +++++++ .../yukireflection/utils/UtilsFactory.kt | 240 ++ 176 files changed, 28914 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/icon.png create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 LICENSE create mode 100644 README-zh-CN.md create mode 100644 README.md create mode 100644 build.gradle create mode 100644 demo-app/.gitignore create mode 100644 demo-app/build.gradle create mode 100644 demo-app/proguard-rules.pro create mode 100644 demo-app/src/androidTest/java/com/highcapable/yukireflection/ExampleInstrumentedTest.kt create mode 100644 demo-app/src/main/AndroidManifest.xml create mode 100644 demo-app/src/main/ic_launcher-playstore.png create mode 100644 demo-app/src/main/java/com/highcapable/yukireflection/demo_app/test/Main.java create mode 100644 demo-app/src/main/java/com/highcapable/yukireflection/demo_app/ui/MainActivity.kt create mode 100644 demo-app/src/main/res/layout/activity_main.xml create mode 100644 demo-app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 demo-app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 demo-app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 demo-app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 demo-app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 demo-app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 demo-app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 demo-app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 demo-app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 demo-app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 demo-app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 demo-app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 demo-app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 demo-app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 demo-app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 demo-app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 demo-app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 demo-app/src/main/res/values-night/themes.xml create mode 100644 demo-app/src/main/res/values/colors.xml create mode 100644 demo-app/src/main/res/values/ic_launcher_background.xml create mode 100644 demo-app/src/main/res/values/strings.xml create mode 100644 demo-app/src/main/res/values/themes.xml create mode 100644 demo-app/src/test/java/com/highcapable/yukireflection/ExampleUnitTest.kt create mode 100644 docs-source/.gitignore create mode 100644 docs-source/.nojekyll create mode 100644 docs-source/.vscode/settings.json create mode 100644 docs-source/package.json create mode 100644 docs-source/src/.vuepress/config.ts create mode 100644 docs-source/src/.vuepress/configs/template.ts create mode 100644 docs-source/src/.vuepress/configs/utils.ts create mode 100644 docs-source/src/.vuepress/public/images/logo.png create mode 100644 docs-source/src/.vuepress/styles/index.scss create mode 100644 docs-source/src/en/about/about.md create mode 100644 docs-source/src/en/about/changelog.md create mode 100644 docs-source/src/en/about/contacts.md create mode 100644 docs-source/src/en/about/future.md create mode 100644 docs-source/src/en/api/features.md create mode 100644 docs-source/src/en/api/home.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/YukiReflection.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/bean/CurrentClass.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/bean/GenericClass.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/bean/VariousClass.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.md create mode 100644 docs-source/src/en/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.md create mode 100644 docs-source/src/en/config/api-example.md create mode 100644 docs-source/src/en/config/api-exception.md create mode 100644 docs-source/src/en/guide/home.md create mode 100644 docs-source/src/en/guide/quick-start.md create mode 100644 docs-source/src/en/index.md create mode 100644 docs-source/src/index.md create mode 100644 docs-source/src/zh-cn/about/about.md create mode 100644 docs-source/src/zh-cn/about/changelog.md create mode 100644 docs-source/src/zh-cn/about/contacts.md create mode 100644 docs-source/src/zh-cn/about/future.md create mode 100644 docs-source/src/zh-cn/api/features.md create mode 100644 docs-source/src/zh-cn/api/home.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/YukiReflection.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/bean/CurrentClass.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/bean/GenericClass.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/bean/VariousClass.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.md create mode 100644 docs-source/src/zh-cn/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.md create mode 100644 docs-source/src/zh-cn/config/api-example.md create mode 100644 docs-source/src/zh-cn/config/api-exception.md create mode 100644 docs-source/src/zh-cn/guide/home.md create mode 100644 docs-source/src/zh-cn/guide/quick-start.md create mode 100644 docs-source/src/zh-cn/index.md create mode 100644 docs-source/yarn.lock create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 img-src/icon.png create mode 100644 img-src/wechat_code.jpg create mode 100644 settings.gradle create mode 100644 yukireflection/.gitignore create mode 100644 yukireflection/build.gradle create mode 100644 yukireflection/libs/android-stub.jar create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/YukiReflection.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/annotation/CauseProblemsApi.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/annotation/YukiPrivateApi.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/bean/CurrentClass.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/bean/GenericClass.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/bean/VariousClass.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/factory/ReflectionFactory.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/base/BaseFinder.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/base/ClassBaseFinder.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/base/MemberBaseFinder.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/base/data/BaseRulesData.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/base/rules/CountRules.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/base/rules/ModifierRules.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/base/rules/NameRules.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/base/rules/ObjectRules.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/classes/DexClassFinder.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/classes/data/ClassRulesData.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/classes/rules/FieldRules.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/classes/rules/MemberRules.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/classes/rules/MethodRules.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/classes/rules/base/BaseRules.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/members/ConstructorFinder.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/members/FieldFinder.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/members/MethodFinder.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/members/data/ConstructorRulesData.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/members/data/FieldRulesData.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/members/data/MemberRulesData.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/members/data/MethodRulesData.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/store/ReflectsCacheStore.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/tools/ReflectionTool.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/finder/type/factory/TypeAliasFactory.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/log/LoggerFactory.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/type/android/ComponentTypeFactory.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/type/android/ViewTypeFactory.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/type/java/VariableTypeFactory.kt create mode 100644 yukireflection/src/api/kotlin/com/highcapable/yukireflection/utils/UtilsFactory.kt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..cbc6c98 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/icon.png b/.idea/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..36848de5dd9e8b8f80e49ac6105c0f6b23aaa585 GIT binary patch literal 24862 zcmbTdWmuHm7dJXXNQsn^0)uoaEj^;Z(9+#40uS9VHqsy^A`(Nx(47WdGNiP0NGJ^g zXAl0*`EowJuh#`K``-87Yp?ZNz31&?4JA@ydSVC!LaK~-qz!@K!mvMt*TBfsf7cwr ze?zyf#Z@QU-}_YT=5)4yX1Gf*&b|^Es-({7FB;a9B{PfBju(L zq4Rm^%i;5NccA0;jovDCqmiyLG-uP|P=Iv$!6f}hSbhWwv3nD-d+ovVy3>|MbkI@E zFGc1xMFU@hu`~OzBdRzkrP63=VMXCy!O<}tl&m7n;YAs`TLai^U4xSn{GvBIa3D*8OVg>2c% ztWhc(m5S&38zd-Mh61_x(?8l45_uPI+{ByF%!J<&9p2D3m0y)&w8wF?$(57bMG-Ej zk3y49sE_*K*B(1QdJ_+l@$3#Sqd10wmoaXXf@%%H#@MZ_BQSf8YnI}=MiC#r<0jA^l5O`6!b}5RpcxW*`J;k*2g+=p_S{<6C zaxmSAJR-Dd1rS&}7J7l&yc7gmO#F*$MWKq4PAOtN@FTR*p?yvYLG= zT3^&Zty|#M^B=c^LXaI5+6ow|_?BC=!JA}m<9k9K4QP_}N086qYDW{tDaEn^MKN^Q zE@)>Q2&CVxM5B9cD!#>z`1J5$?R)6BD2ogs%y8^Q%#>^5ev$rZRivwMnm7bvnVMLP zV(wkrtVdi9(j2A8j*EVFGeuZywR(Q{N$fa?i5x9OG^p}15kMflMaD(v@h#@W2fi_X zi|M?~$p1cse5U&(XDJnqxoebd5w|Zmv`Yqo6q_4iYVGz9f;2)e&zQxs(In5A31Q!H z34Xacd$q>N@)yi_%K$wwDHgFpl`<450cqT5Kohu9z>P;%$tI$o?>q6%*hISiX9iYt zq$9A~59{8Plk@uU-plNIY77KpeR$Dkerv?5H8P|h!HC|3LLmIk2>r_;ywk~tzA2v? z1g`Zzgg8OZ%qw1HnxBU!ZVO^uuBN4QZgdjwBesIh`@impvyU&sjPPQwPo1H*uB)6D zzpY9}FF_z}f%-}%L(EDF!COB~`ocCnVz1*MuAPs?Y$;S1GL`9H_8~rAt!7BX8-+ME zP8nwo{rzwye>32_Az00Sp5X9d_&&1w)XpZs6MKd>W5c4<$P2NG)30xiQaH`VUv$8b zwr%GGzurU*wTfcin2iIm#m08p9t4I~bxN-^kQb9e+1d%2Adn1vibvYfka&4Kun^=q z!k7ZCy>!v}E4^*Q*UszBrZE_men75Fhl3!N-c31wS$%3|<5l@@T!CDf2q&y_TgtMu zi%!NC^~uwW1OkE68?Kv(77?^obv7+DQ1eAY7BUH#YiFt}4(Zm-l`}U3z?#~*JnOv= z9<&~Pcd>8t7EFnOEW`y9JiTw}RT_7wyy1gA7rckGYr|Ju+2TiSr>+^z3tH$msw3ty zxjesy(OYO|AeJsl-sU?+1edlkCrO*eaESZ%GvOvY)Lo7*?Vrds%%uHi zhTvsI-me&(%(y%|rQyJ|iYl62@!1i7?8yY}`9QAJfdke~j1Pws!fs3-1qZ4NU@p1W z700Uq#Z~z)s^OQvRIdPl8YPFPuGO}>j3<+vTCkrd#r^rWl%0NI*9O_Igpi$|nyK-d z0mk@Hl=9(rEwiwqg{UG;JsKY@Rav~>5al)Z)%U|r9XjV0Ih^v)gy2_F_$V_&wuLvA zhma)uoXdn{rsD;s;njvDK2{{#+J(~AjN&OToy)%&8tipbG766aTo7UyjQS5ib~wZ zKdpYVb8oO-fK8PUM*63qwWfZ{WM4{Xvh#)kpyh{UPB`jv>!;Mg8P+avl7LCO^C6Ad z_WR>P4gKEyU=HHjg()iZ&-a-XnekUBv-t*ORpXA}+1u2ih?hW=NVUdB`~8LBm>-&T z0&H7^up+yX`b*@wT;!;@?Z{TcZLkDeU;dO~u+0witkjNQ_^tk1PS;yZLDN14s;8|{ zk8ps~bbO$HYCn-{5xOQOJl~L1#eyvUKFd7uK~3*cL6N56inlk6nr$8iZ~UC<*Fmc) zQ{`Hgw9Vok3g;FwQ_6x(VA&+WGXwVN4G1feNJ7}33c(D3fxzUzi$L4d?&OBIM$fCYg4=_AM^n7{t&nq zGb`OtXSUb9*vI$vLrpeDF8_`)^uOHH4uV7Cyaq!WSqC++f<%Om3g0TS_)9EhO97V+ zZ8N7v#L%zfT)`XmwRl!gB6vx2`(A0IKzmM-`OA>Gqb<>AqcKFx*mu*0UTLYzo%Sqeltrf z6KfDy9M)f~*V?~MWkkaAo*4G&vZYxle?v(Km_n>QDAOM+v{3Z@yKc6^K3*-NVvo}$ zbG8+owoheK_4P^v;kb;#inX#$owq&B5UjS=&XdiWlLL=WIey}T_v!XqxG>^atTzgv zD72a3heiw&MCS%{W{X#(!-zW8CjTT{czmiZXbsUk$6X854dq&AMQ?(aA@R1TP?6xR z4^Ikiz$_-*m}7_B8qnBf9f`B&{(cELLv9L<-KmcF-dZ+yQ4x2c$T7o$WtbsFQJ3-g z^rw(-LF3-sMR7e44=kn%*E!>b%E_@B0cOOdjt zMSxGhdKQSZh^=SCRji8jW(i{d zhFz#(ZvEp{kbNZj`kMo0)A91#rMO*Q$(_KcV-Fj9tz&IGcqd_di#|56)uEI$GCfJ_ z^FQf5F-*kG{=n4I+ce*h(C#OJ^QR#B>1Wz=_ABujvSiD%op)+B+cq~P-7upmODW+z zXjN^{AM<7h3&VM~Qd@E_EKF%CVtoOrt#h;X#UWgat83S>+Y;-?5qX^@Zwtx!nDv;N z|1+9hNb#wn$pZpr@kKPr`=6sXi{GZTa9s)DJ6E!Xh0WYzLoD4a z;Nf2Wxu4|$|34lY+2m--deoleZc4Ig;&e63RejLKsCKML|HJ!x8}Ftnjq#u@thK%= zM;(y7Pkwb8MA*>DE28tvO(8Zi#VaLp&Dm+Z0#sK67bd+lXheFY;#wXn>{CED^_?O) zUn4BozVoPMl>R#3sp+>P)xbpzDxdS(?1vU9fA^yjF+7Uxo7MNN9v zyC&bT@4dIxt9a%kkI{=6tUrW7>r%>z6~GES`P@fZ2Fsqb7PRSMR&um zkWn|LRkBW&8l0!j2tAq3K3qu~eb?Wl30{G$lCO;^9j4@(Ws7^`u{j)c_BY94$9wbF zGwo;1hJi}YRennH@~qqjE)xQ0jC6h9qVI;85&b-S={m)O-)tW#@U-I`3s1wiY%67E zzvFkg3Hywqc6caEZm9AxcC{vNtsHeSvBhXgWqZaodrk{ot$D*o)%IGJ2U> zX7)M!#oxvtmm)(xUD53~kYA}i)~a#gO8Kp(5xac=h$_3+zbd=-epn+!3~bDC`k!Gp zpzowzzPUcf?$7)dKNj$MC&5ceyB13^jKWvVqL=edIm8-gOLe0LyCWNCxAVy(9Kvj@ z6M+}9ixE?DxMwR)a(?*6e`P_gv2MK^*(Jy9nw4#zpqq6R3Fw2d`$JOuo(vkuK4EfR zQs)rFkEp&{KuqNCWJ@O0Hemn7zX9r$j#7N5eZv23P$RNW-)iLy-#$k-x6{iEvKrV| zUOoHxp(4C^)SLnvJRpmSJw<26!x)VB2(QroRM|~sas-JDXd!-G#-tPK4f93fsc);N z2U3;bAQpQ?ctv$CUAC)macI-Zlu@tTtZ&y?T*bsD&dBqm-=jYc7_udiM?ez>!cq6|G|uykb(%>!^AsK2*^UCj1H zd67wc`2x4$Wl(D~mxK2=k&FmQ@Brymp`D}sJ^FIfXSgvww040a7KDZ>SKu`M5clUK z{^CUCa;66-tXlE)OeuCPM7%7gvw_I{@+^qQ;E~sxI00iLb?k$RF50c8)xZWD_Dg#O zD4Wpfevb;4XR&s?{e<2Gv4f0N{>rUY3*p$ww#lP+gErVr@{da299$>}qZ&)9`q5}U z>@y=nRD+oa+`h6r~*PT4o`Y7X|KW048Mbe{fJy1 zeaAQ;p|mM}W8&z2;jEzdb`myU$nZAmre9wu4H;>w9GR0?B@8QAW5tHm5Xiy3_;P*U zkDEJbQpmCkEY{nIY1aol&rdK=wpn>l@4&tvq8K<(&A1aEy8B~iVn!%H;C&(XW!t1t z@6bcRy}#C>RZE0ncK?o`ci$k%PzXt@3c;SR%wx5OGD73?DM&7^7txDo3)WX$y*sk> zJ;3GSZteT-SD|IVKp2kl|0AhrWL6Yy7IFSrTc^xbxeQy-g8Zm;%!MJbe<8kPox=%X z*gxYR&k=UX5d3OaoJ9@tFgDtnu=6$uO3N45kRXi1u7d!E>i#N^Dh2lidtA73KN|7*Af#RDJUto%&afP;2D zb!8mOU06}%dpZ2gJ^{l|C%Mh{`_>VAs{a5v+B9$$A+v%Kalm6sc7R@KLPzhYeV)}v zB3N$6>6N&m9H>cP*8d*j8TJp<5L2IB0o{?d5&;oZq-iX``W}D_i5HBD@v@$6u6=qU zYiKqw2r<&{bso0(CHU|+A>!50)p|s!1Gk^CE%W^&*27*%38pOeKSmFztq`(x-^0O@ z2YX<@O&In+rir)_gU}eeV!ZG>3829HSCWp+c;9CQcBJ;arQRTL1<#t%KTpWmT)fP# z(3w;w_*h}e%-~8S_zBg5UHEw9*k!s&a9zlBZHTX+zVrhz_0aj>`l)S>Hn4v<`i`g1 zfa`3Cdxb}$T&4eEfYPC)hQONiYJK~AlS~Mne}N@jm5UONU0Xy|@Ltjtiedg8g|y*U ze`YABJik&5iKk81uyTT=X3}>3J8A||WO%0CKU!9}uJOrZBd_m#&mt#HY5q}OM#u<; z;KQ`l6makdM1=Go`-aK?Pd>gJ^Tv_@F}}tM!~UQ8`X6ad|2z8s)kpbp{Q0K_KB_xA z9%k)9I-=`RphAFSgqh(8J`Nh!OWPvo%*l-3XLpc4gHmFZ`>vYnq|54B%I0= zS4)!xCgvN$PoC%p{H;6IxCTMKEWh?m=gn!3)nM+ksyCSJ5_A!Kl1`a<_Gd$Q<$0AR zy+9)x2ZH>?iuB{Dz>v*(nzjG%Ir#Pf&#;8-X?#Njx+ul1f=9;lYU`?NphgrO)$WNY z`77}SemZ~nlKH+6uLJ7CfM+PvUFmdb7QHN6W+@0Hi~=rww796vAAiPMCDD0{AxGVX zNbWyd%r;Yj4Cm_V?sT@Be1P}8p9D7`kO3Id&lSbTxB)f~>Oj<{uQm{))B|ZXf9^%a z=rBSdT|(HJm8WES_Vzmxv2P&oJ7{qKkZ|;iYW09+eIJG8q9cF0*$qpeNZ0SnXbQ~1h)&H9xf%J1KY;GJ!g5S&v?g`ELZb&{ zqGME*6e&aIL2*@?#R4a{*H15?MSNDPi^d9O)~a_p7!`q*edmW<51c@ z6l;v^$>G{)-FG)YR^1-7xrY%o0mC#w&XTl0)=3$Fi5Dk?(d~MKN_Wm2NT1br0yOa_ z@8Z5O5ZH_tt8J7!T4B1ouWXYDV2MpgK{3`)S?;iy$dVQz{?ywHKefFx_XX9hb^k#{ z0uUj*}qY+&#MdD}UUb_W4+KGv)AQF57iD%JFi_Jo8uQsbOKSO<} zW&fM;)6_&`vRYwau(rN)-F-bO^WS!fv3Ch8ZL01xPsjxeuDvCZ%1QUZf>R|nVY61{ z#58DYCxZFoZV?j%axa1+Hqw8)O2o(;9JF>Q?Or9|>a7o0LYyCJUnXD?-KH(y!qJyh zn3yifJ@Z?3Jh5*QBVabk-7N8|fl_3$f9mfONy8{qo<`VD;6bE22ocwsW!Vk_#g^A| zw?sJm=$Sv}#5tOUHyVf`kjG>=h}Y_)3ufg(9tyQ1KaIXh7WWPMjd|Uxz$|uN`J4>} zNO#@CbBy5+?^~5PtTTNzO$DP#?|hEx(AF(q&oN<2t3ZDDYrlI#5&E_{oSFz}kpN|{i1bC{`mAizofy0 z16E{JiovzT`n?t|zq%4$dwfM;-oWI*a!vYD;5C3$sG%r)8TT*V_#h zfLmja*l)lW<6m2P>1F%vT>9euSK9R#>A}6xeov;+Oh>Do(~F#(IjQQ$&u}5g zN7&|x4rh+B`gSQ-UQC2k4pYn+9US192hStKweNQGqWgbmY9u9&eu>5Yi&Q3%>(_yNkp1A8?(fYjeLkv>s1K>4s6dbDz zpjUP|$iBa6v7;m{0qr8t@!A)1*)y*9ZJ27V$3 zdADYM{m`vj&0}x`&gm%(3D-=ET%9hSb~|WpRHCy#y+pYy zE4s;RltUu4#38yMeE+#pwmV=zIUy`%bt1(ps1K+^4LZWtUf#oXV#8qgvxA0eVi(rw z!?-iWc{P4UacZcvdKJjgj0Shy>C{;*5O>BM}}s-}(VdL1@oOF2W(2S6p?=3KP>H z+UFv<_Vu^*Cz17`FrY_>8&JH}eUy^tA6(X%wV~QWr)5A$dHB9I02JVHB{}>*jo^2f zI4dBq$sf0NreBUW+DCw$$kHRFJ^`eTk^k{z?)5*_ZL*YDRW@yQYTWOyH8Y6Q*py!{ z><7~K_Ar%{ys|mp)%x-~D>#aN-#(v7SDRXQN)}j)oju66vNkqt6*Wh?${eqJHg3&5 zhC+}lyGv3o$J>uvMYP<(AsK4gX)yT~AP_+H0`{9T#J}#n@_qe^kOyXW7&P1eC^$U0 ziV`r(_A%7E$xkqzOfGvM)lPi_dEUUtn5dzS)kN1+s zT-hDX^f0A|rbkg_@x&7APhzNb&w3CIAs^1homXgG1(@uBe6Q{T@F|zx;P{&Xh^z%& z*tnk_(;44s419*u{*y>{3(qS)S>WWn@}4%svA!{&0c*%ALOrF+Aik40I&lwa~V(R4HZ@b7%Su&A%`6mm@Ax=$KY@Mfv;uTr5%Xr^$9}B}G19_Jg`Z+aHAN3U%$hg{BwP{a>cWQ{m&R44Jmx5bk97>c02@EJKG!UToB_G8j`pN@HklKHzI7)n?OH4(n9J1yG!nR#wNJz;dh#Fll^bX$8?Kb z%2hlF3Kw+$4@}*pkLC!b#*|k}ea#d+e{H|bOFxeR+H!XnE`I00{(vuh}B3kaU|VY#ef& zQ3*5K&{EoE3;M6oR(d`7&!puv12FZL+<4?7rnWgR@}^54rbwW-x?MfL?2W6MjMs-o zmn<-rny;z;Wl_Ds#Nc^8{K69#@>dD+;7)Xua-PhO_zGGT1G_Sb%s8)eF@Usy+3W*Q zk7={OBWGJ#fA`xlj10Yz6fQBYCo;xv1_W?hKp7h^17m}Fu-1LRBIKBVTioTWjbl9V zo7AJNjkxsve1mS|CAGhPLBB`3$KF5x;>8eJA7W-YCkH{j;&kba)w_GBLgTA~Po~K1 zFog3X-BmJfGEnJhA*F!@C=GYt3YVCK_luRl2#-WlO`s%DA(x~O<>nG&nkQAz@}u>nb}V168s-)XJghMHr9Y(6lEMPkTGZ? zKIQejxQH=e5a8th0EUg+Q=vD42lWw`K8_i9~Hm8^PUN zrq@AqX(>twb1Y0g%~95*=C}C4U+rHe^Ph~5kFuEyx+tt!l#eu^q5!x91Tzj{YN373 zs`QT}@#`q(T42WfC8#v%_8zduo3D9ZxjEr6WX5`QG$Pq80Yup7N5GT>*um*b>d>}M z23}{wUb{d~3RW73Ydz0{{TR#ck0Bv&Nsz#ErXSjpJ`=nsE-_Ry8TeGq17b{3&9Pme zeEY;FHG~4!lNPG+lKsjUw@(d91G@UQKfg{39S!m1@KXVJfrF0!E8PRQZvJ_doRsQ9}$SP>wFH{jdUOZ zHWe;L4xf*Dc&`29g}~IaIJ9S(aI&U4K}gAP1 zi=DUoLm>s^fBcE&_BEAvB2{R>U7fdHE;0MthD{F*v}eg z$|ut)o6lL*P!%OR)dVGrWrlanG4>hg*)lVBilQs40yJ+0DA2-Op$w-(UwG(<`Momx-3_;J*g@50?%be@dB*+() zU}m5tH?DL3lM`zw2^8V;C0(bLj87^1iRN~chd+C$OD=UEb^_;oMhM%TY|Pfa1eJz` zm6wh56KQ4S2m^nN*Y4w1-9yV}QV@V*CA{-~_%}WNxQ|Gg#LrQazmAgkP2*>8U&V`# z>`bOO&{Z+r_*r_NIom#!1~gPk-+O71+YHSdG3r%ka`w>UxxJ_1^;LYxaSY_Su3x!k zq2E1qM;)yO%cyf@p94gPNN#$ypPSmoo@D?Cu^joC_@3b>8N5X$pQ2_+P2ZFo0}Ilr zXmC`rx{~E}5g>8dBT|9cbDHx>F8x@JW$rE$D-01O{u(7nRuk?*meVU$&&y36JMFke4KK8DXhb*K4&43|c zdK#Jt&JHsJmSs;&;)l)4Geu0b2_>(Cg8ACJC#HhH4=Tx{AI6Fe9;r-?wKq$cHWaG{ zlnfN8B?n@>%0gAJAzXO1=Xw3|>BUcGMR`!;jzq$|vA}2AN8j@n(pV;l!_ zgMUf@yCp-`@(y2rdl|Z(MXLQ_QP?k6!s>Da6S`X1ubtv~xwSUM>aLks{NF)PLkMHJ zh$0IF#z+f&z@x{yo_7wE>7%prymzLTlfm8-BNfs3kV#N*0@{E>sNI+Bwl59}7~Xsr z4lN>#($cX1RYJf)m(yj~kIp8I*Him{YZ!RC2&hPni64gOd#WWYw*Ps*a4P!d(|t|| z>=q#mQT;4_KboLXvSd&-*(L2Vuujxz`xo+2~r}bkr%6Yj?~Oz;C2EZ zfR&S$hT3}n__>w=F@OgD;-@gmVkOgbxM%J{oA9=qQ!ocOajF2Dw_ZyzYQxxE4bntbp1a^l+PLJW<4;ze7gL z__=r8G7ruB*@_#3BpSdbFzb}XDl5HStR^p6s(#>9aTT5-Jz0^kcg3hx6G#4Uwt4~H z-?32=q!)}0=AyKm@b0ROc0dxjJ&uL&yVF?s1fXb`!swZ4QlaT?U8)s&3?3W-d1g zvTglJ7+W?osPJ&RuDW<@T<`c9-QEA$84B{M+q~=Tvg3NirUe|$J=lgZY#GE4%AB02 zVJdWy;d_wK@>uMEJUoFFnPJ!bo%2V6>36bZRCe~2k1>=2MA=0dpv2$gsEPxU{RfX4 z&~0~r)r7ZykHCdso`F58479(i|DDJeF}yN{a2xC~^{X*IL!1m^HdUw%qEN{bK1WZl zKeH6P{tVoLz&<}Z%oi~RiRgkkb9}Beb0#n)hD3^RNIMBe&Z`BKB|hYL1k07(zXmTO z$F%{9!or-291&-47U$Sn`_HVq7s*((;wKPK2CzIHa^pnTSgmP%TaAarG0h0n5`2rcK5w>`fM7? z_l=$$f_M|FsczYln&@$3rbuS_*_Ea^M{ zr2L9$uL}X(1i>McdY--`v`O(w6ewJsGVs#>uZ5xB6=Y;7JHFRtHWx}?XZ~VfbMgQ6 zSO2CrT7u-NFF%Pxk6*LEI9)rIq}tUcW-}hb2Zw-T6j-{To;Yo&wWXZRRsTsST#jGS zcVQ*4}XPu!U=tOn#q=D!esXcx(Af&_g$xw#loO%>7#m`dTF%-6DVU zH3W%qj;}f>X+1PkRE;jVR?rJ8V(K!;*~wYVIAO%kCPZnFyP0*Z+51$rUp3I;8>}#3 zkP3oK;-N1o$g$V8L7!YVixsB!8K>#%O;FF7*A=jc?OwLcHva1N0fKYPY1_hg@6)FL z5_(6D)KpffN%mr)2~iv5-rPf#9o1^Z3(iA46&}^<0x9}(wSZ~XCY%-@+5|pXvb6N< zGnY~%eesVowu(3Tt)X7nEL{G9piDjz30S-uZyIK9hljUI3B&Ku&`YCNlt3RcRqdfH7H*5f5dx8&{|MS+ zO|hCDERvgWh}+9Z2HbRa8G`Gp9h-}H$2~bE?vC+2HQ|i9!R|4YSfG3>obm0n7%~yd zF68DWA=)Zwwc+ROze}gh5!Jo5?BY1ub}W+fq}Z18u6#?KhEVskPfnk_R~ro;IXIW% z0XP>m1--jD$~0x35Mc*;ZpU|)D(QF0c2rw`pB{6s{%3Ma$lc}}lQcJsu*EA4)Smye=Bl7lL z4Gy;YTW*w}ueJ4nR-7e1j(|sV!fKw8ec27XE?LU^qi=-g8gpSit{QXfl! zJrQK*2ebZJd^=_I-Lwbv{v#zXSR-g;YUgQt z23~%2aou4Cy$0=P>QEu>?pJHYxX|f4NC@JicE8Kuo1iwdYK!GQYa=ZbS`opV*@lB= zps@DW*REeV{IE071o{=emtij4r@uoEGG6vsaq_{iQ)5+hqVud=vf?T{Pml-qjgo%d ze9SLKeqFbT&r+C)bKUi^LuoKvTu!IP##vYaZ>}~`TBY#+S=9H`rvm7_$_@tH(F7c82^<2LM-2N z3V&nLCv!18j+*7uEYiW0Gb7@SL{J@h{)_Uy=WHQ7K#ooBNcIJm9gm# zekzNFVcwF@m!1`QFXxi1CkmtZKeP0?H3=g8mas)~AUxc^kquM#4tW#WPe2DzRz&mHzmiS-qq|`)?7a0fKVN|IUM?ApgH4IH#>^g( zFAxOvf59xD3H*Y2w5H!=uN~|B3T7aL_19EJ94Qxd(TubEOtnNIzmY7`yngFvtgFl2 z*{XkTwr0jJjPo3XIuO*DVS6yd=u>h7F{Z3_9REFLcwpP6gstlpu}5Z>@nU0$m@sl8 zU#z)h;TKYH&zUl&yx?h5B`wLB7MX0vvsbh@%27k{%qHdAYq75hObv$UeSE@?5D`RE z;XImbl{2Q*BDanhj9&QV<+Cda6#njdr5;$9uT!FZ2bm!NG)7!Rzi29jU=z;fbSAmp zZzbom(o?ZFri!gwz$;(9I{b!%$Pw`$fKcw-tp1PX=x;`O{Ku>cw7!7y79+YBP7G`> zDv69_D92A~0(3SEKo2Y4EHh4EZmog1j+}a&ee6$&N1dj&7sum1#_IghMjc)G>Kv{9 zMNytz5-6S_lFo2l&^+#m*lbi!H6tS?j-sHC3vp+*Rk>%?FSIJFEOuJD_w7$v_3KCM zK4&GbU#;aQYr3RCEZY^OPyA_U*W<^woRad<^0#-tr~V;wZI9?E93sK0bCu0=@F{;kzQ)Cio&4mkiZOAltIp{ z@^~VubD1G$`_9hioCz-DAeN&vt%&>{v8VsNDe==H8w@eUZQDpo4f9p|(?9wl$3e3* zV%gm_*}I+O*hKHG{M(gu~s-J%|L;j!4J z!$ET!g-x}bnlKY(uQi(bHMF{#Ok33JgC5kEWqfJ40lssDPY7$nDSn_?3a(P*y@5VT zC1n|;lppA#15tBTIsf_UdDg)P_~;+qN>wO*2VTAK=Q|go%$KQmxl;B5+f;x`+jbNX zt)G8bATeRSwG#PKt;UbAn*if2qpkGWo4vbxS@`dKY`_BnX(|qT9L0O$PnSrDpQmjK z#c6@4>%CT`J1+dwIOR>CZK;se~RD(H5k%tQ`u5eKc9@SOQ{QC zDpdZ^4WTy>9GFgY%n2hLoe3FRPkgeaHFIqU_?Ynxr283555n+{8w5k zHOWdvgy`k_FRm;NlKr4?QO7dhy|~dpDXiIVUc@iUr?7)?$p^`xdq)#kE*^ zcIb_uIGk z@a{Q&f0{}G=DS_8f-KDvYKxMK35lS5uriA;!EiFLt| zi!{!25upcVmMp#@8g+(0sH?bxcyZqn`x`)*7J}>TU+7@ICsYaA>4Xy3`;~mdXFz4M zV#*WxW{sFZwwc=6)$l8_a)J~URYwb@wvk#304!&{B=XC=Mi ztz1he$vvDnMvw`Lqxg`0TuTe-9H1-8*|9j&oC|J!q?XD=j+gCM4T>S39tN(CK3HFR z^mh(aUETJcnYOew^(2(lU%)hii?(y@QQ~phYxLIXi z7XRQ7F|Rt;I}_p(46;G(H;eZ(oMpaCV{vsjY1xGPuChRa)H<@NfR=fb%hme+eRfhc z_F=slF7w-Sf}S@QEP|bw3=5Ut06$XR1ncU?%Y3@@V>i)3E%w95)0+e6()+`iQhlF{ z+}t;!K%_0w65*g*(xXVxs0CFAgh_whFYPFNgxP!ns#0bKnEO`uq=;GCp|(ww7758u zwClw#TX}~TYIO(~;O;Ag3lz}@{+GEz{9bi(H>{mvdut1f{{-c8Ja{0GMoPWs6WQ~L zh~dHG&r3*e6iy=GWu<$puetE8++< z+#hIPJ!&f-^22jvv6ySLYKa|!P`W)}Sfas;5N@S;bKQnsDvO+YQkULsO+8(UUy}lk zb2+d)&jBvh;@H4t+#tT(6kv&xvZABvJ1kET zX6H#^5c<;e?t&du#vj5Q8@}SY$GqKoNuF1TEiZ{w zO-6+U&0HfPr6Gv5y~8PG1?^@5+jX6y z1ltmqxBO91gNc`vklbcTu8)ZBXjLPO6t~Qj>Tz2STjPzFTI4Wg5WJGy!!4?A7Q5*- z9H^Z4jV7bJqNZHR?Dwn-zg4DsVz+ILa#2#=%^G%^|B(7h5GWEKbY41o!2KF+meq#T zr-h1`UT347XGxv%Ua)5DmCgtdhYY4CDfXawyQ!UX-YsH=^9Y#@KiJ|Da&pG9fijLI z(J~?+(*QJ-CWn4Dr0z3dJA<7h1J9~^ZcQePXc!hlq4A(hLH(ahOq#^6kaAE;PXcwl zUU3x#Sy6+h6+F!{=eIe!4+3fW+i&v0n&oASp_jWY`-6|U)5W}gUR!@os@;ZjV5gT| zmpNZv{_E55OJ;&dE%bMgIQ`DPrKPJ^qOTKcLqQvh*V2oNlr&OSQp(Yx!kme#e3)Q! z(29$y6%KLGEqsJ7dXV&r2%lWJFfs3DRjKAu%`+?$sK4IkOZ%$J@0vQU6FL5->Nk4< zTY>4j=$KBW#ONi*=cbulQ88>DQ==-%{y2oOguqZBHw$i>%H=5SB#ckz=lrrxA8jeQ8_whM*sC-M(sh# z@mr#^ehM2O6HYl6XG((poMt3=?yoSGh8>mQTFG`(#8Q@W$C6`f0FKgcs_BamrPn)T z?uyYY+UN*2OF2X(F1EP`X!DGk8dO#Zo<>xqnYO^_sC?_5-UF_sn*}ugwzaN|8B%a4-}m>oZ0-Tt%8qGwL^ zoT(Cs^u_QD+^#UjPkeqzU@el4yJ+h?TqaALZE^3Z-p~$ zDO~E0yWact1l~J({I^I@yI-Z6>!O;no%L=t*LJVq-WfdUo5^pE%C-B&AL`U|Li5< zLgB-qx*X>+c*rIA_P>~J8l&QaRltX#{{%0y+{8<8XOQPElW_r`OR|v9 z7?a-3Pv$)na4JFU1#+Id-0sYTO22X1v#@XX*f0}5X1oasevkcg29S^8NO^W9Nl?XX z6H>4nKt@J|AF0CKQ=niZk%p81ed1otYZ(~4oC^l-vrsQ&CdL=PWY!*I+MHv?%a^^_le5OdA2!r0B%cX2p8S!(AYOhA@>T5;o_UYjbDPMgo&P7~PZG z9~z6y1sdXVoC@;NGfn%DVA>?tp4h%u@$?y|^q_s8E^4?}VKOQ3yjMZ|PZgsiPSP{% zcNLznYP{ARGivIshuj^kSnSE}ZsBVwTk93EgJvFVH znr8v&b~;J&{CTDsCVfaMn-z~*bLH1SMUS4G|~le zwe7Hk+`DI=9MRpo&mp_xI*6|W^G?ojX;h zW^DKsX6>>~Gv@w?B-UMTj>lrm^1-|1ESbU8kIgi2xpFd819ng(p|Q8}=@?VQ`%kzp z@^yl=6o@X(K?DEXt4E>mX^*m&aI&(Nz+*e3G5gt)EG)n?p6AlMr8^VgI5g!8f0uRd zxbKdFau$~pcQ{qMvZ_`*7o9PkBz;mCIB6Ti{pdHVV_rf8_mQcWg#hxigBFU*^&=0h zyR?x=7AohyQ+F1Zm)gxpFd6=-Pk_e7PB{G9GLE;PTRnnOL2x;%8%yL(%L-F9^Q`3l zV}FC?=XzTCNT=mHuG~zQ_l?B3Xi}H~ACNd{(uYkNf0y2W7ev~9Fcw(gX1B3EeD3jV z8Ow~v$S{WYTF`gP)`#(2J@}`uup2@b>e$CLSx`>GG&*7)zOp_o_KNjzKP=OU+pZJ# z*lLNK(@y#wmRBW^=;B{(^2nXHkL@k zn}aFU2z!^^?LyPt5K_@E*MYX7 zjYrn^tL~WjzObovmcCUuo;w_>fcIH{PhT2`%8F=WWfpB9==B{ZJkMW-0IZI z6@oQj93Hk+K3*Xwcyy#502A_(z-j0m6d!3H#F z2WR1Su!iE?vZ@!(0qyGMwCXJJxrc@Bi;L>vVZ%vz4UVgY#=$KM1ejMAzyS1RyA@8&hM}6h1JQG+$ z09;4tO*17WT-~5$o&B^mT6PW+TfILgVM_5%_S`*ar3FLCIbKYqjbTUfn`Cv)~ z=vo9Qmk?49K?LB`p&jr*CIbW};I{iwrHc3+a6uj70_^|=*)pwiB~Km0K!884tGH^M zV^>x6zm-OPAQ+D$ruf8Lr=XcCGrbQgb_wBjK{ZZiCkIWefPt|+5ht-D-bfxGXggh~ z2i9|<`Mbc&{}x}+Q~?D_PG1&cUKtp0faII!q8v|w>FQZZJ2f|Y3X8(;m$}X zPFb(2L<*nQnK~F;d|ImF;hXp7sS*x=*!&rwGf$D(o@)abytxcG`(0hp>WHa?gC43bIRi!ub1Nvk$l!a2!)wv0JZW) z3f}(hf$MpINU>p9R&!;7Ptp5n4ghA;tCHe035z;sKV^fJCuQxt(ZHS^MS+s}X+IC2 zRh1_ep3gZ1a(+g8t{vFOHAu1oNtKOGYqtebuLe* zsytYh+G8!=PI#pn&j@LzD+> z{PfT{Py*BX0cX!gbWh%nmIF7}F86`Gyiy#d;1gK`yRI*0FUsk0+PxYeXbK78Azyk) zM?BGrRQA0Ti66e;bU~a2(MTK;}N-`&)UsVPXs#kOU zshT{Ma5Rha3w(oHr}b3^*B5jo%^7-2Y~R_S1oy73bB`+L8$MQ>$K8CFlTrbUM~HQ- z_Jjb1iB2S?*|Q2}+CmMowpdwJrf`k)g6$I74IeFP*dR z{mS$9nu3q97nkeTx0Uj`Le&R!;mi`p9yNLIQxFLe6?Ye{$GpP*F7b@~FyiJo^{p!J z1!5v9U|8Eg?~9vuvvHV6hj4m#b-C6{=<-35_fp!$Dxny~+&Mjf0|Kr0^UBVcpCi|6 zpy52nStGF|jUgmb5d;@ep;(sE*(tlTBjGCNWuXxz3IqUg4vRE;%k?qPA1?pYxE)Kf z9<#zilk=Ly8GBd6MMEHpA&8TjgG#>l?MEmf3}sTU+F__b5ZC>g4DJV%qo?t3xmLyY z?s5DSQd4qk#4o%2uBFg^QH<>WLH#Ap5)~2`P1z{NuGC6^Nr=p^B(KUP2gWZA9C}Hv zR<0|k_zTE<(0Mw8t_>S3#y$$~e!y3#&0kjl`G$KMO zv)_sTd_n!7r>r~b+VB}_nF#Jz@%EA%@?ji7oW(2H+bKLmzY@93Ur z_t~X-%A7lpB7EA2!vp1Vt=`*`3N_meNw|e12{YSn*0|%VS=Du0yIxHRS zM#>vREh>|4;FrK@I0S-!)N5I~axTN5*TEI3MclqkE@@7!R~v^_S=ErXiwkHv&O# z!AJE{q9qBdC#DacV<3nXap8&1*MR1hT5TaHxdtCLEKPt<68fI`e5YK+p~NbVKQ=k$ z*uTw+uH<;HfsE90^954GjC3yd_WAyAN6bY|Eb&vD&eOj@;x7BHuA){z%>_OPrdOqp z8|C&{smhZS-L#;@Jcm(g%FudEJPNOO;VijI&W@}tPco!Os0H4IH1KJ2ZO9)oE~A5A z*X1B5uFPsfQn3$|v5*@Tcn{;}gMbvaWmCyIm)8QJA&u^9215}VoI@0eB!SZl{uwtk zIQq~)dM`!#m++WKceo9c?-a>!Kv~gfEYSL?o|-B1ULM6mfwqPV@VX0+vk*Ttbgwnu2m-_2!fsMd6~o@?yC#U ziUZfp;CT7C*fY+TdrD!9q+Ss61`(_KSFOx=f-9 zw_I%cJ4p?szV~p%eU4$tMDAfy)zz9L%EvtDm> zDGoblGjpS0$28I!!jn$dFTCduQzN7+e0CEY68kolSNHZp$xUcqk>&QMalvsO^k}JG zqV-#bZp0I6a7VQo9MU|;rS(edjOCGQ5&KYBNgqcLvWZI(DKqQo*6Lg27N0@A#N8aP znp}%auuC5W(E2R%k3FMKYN`su*yB!RQ77?pKM#F=2h7_zvnGLT9LC>aKn3f)(|B3~ zdy<>Ipk?Z%>bMAH>%=ujBYMpiu7N)+hnIlBY>p9qd6|dIEYLKbE^>T*HR1-idROU% zGUqXES4UF;X2!?HJYk zBKCPe;|uQ@GoNdK>hZdqZ2Wo@`O026;#nW?%GRNrXJ^*z^Q$6hP@-Jd<0vJwHMMj0 z!!zdl@D>3~KaSo=FU`T!8%md&y5D^MWq=klaD4JUI+=7SG^B9 zH+sl?-8^H%7&c-s1#4nSQO~+!tmuihaR`iV*6?O!lZGBau_LbEVjAl;x=o!9LlV+Y z(*6T^E)cai^2ZvFWU6m1p}X-bUbB(>^RHORB=Wf5gg7_Wx_LheIyRuTxGzj^{+Ih~ z{=;2+cXk*K-B_E7vyM%eL%vo-nXy9NCt)7U$MQ!f~Cu8 zP@GU4cm>Z8O=4vh{#u@J4~a^!QxZ#3!Zo%S0ry{B z6&%`o@L=VK_CDI9rGiC(p3dWjrGrxRw$wz*RepCea(qE9l^KzxBL+vW>l;0@!T4Q7 z3fF<5aq%>d>ihZE8&M|)=035tU}B>Mog!G3lXW*AF7A|}%;O$hBtDd0xGz^%Gep^( zAw~Csnn-kg++4?D2l~A(x-0fjGU>tVk%gPOOi%5`t@P2z!6wd7%ZzWQ`HAFEY%+ON zzW})G?>IKgGljNL^d1j7pT(3=k!y3~FFbYq=1Rm1r(C^(ZrFzR(@vp7_+^8N&Zhk+ zEFL@(F5pTpmgx*%$JeXF7;Cf!y{KbLby-j|d6+3edK||IwnIwqR_3KRp?u3WD{iK6 zb7>A)L|(du#Q3yU>^^RW%5c!J8q+xd<24<7N4lIG*P{NPWal^iH2VM6&%&6y$f8MUeBgk^c#r}C?8k`w`fALF91)glm&Jh| z;`Un4_*`j>p4EC998I4kR@Z9FJ^K-p$lY{zu_T_#;Hu3xnA}u0NPJ*M@&4hdndCB~ zqo9T+@b2tz`JJGAJ(qTzWZXM(2ynUkTbUe{`CQ-%rH{1}Yc_XMfX^Ml{UdSrGd7CQ zSSUjFHfKP4nY8Ip+aeQv<5!zM>W05m()^Fg@VOITPtKRuUdT=IZv4>*n1M^eB8M~5 z81>tv7hclt9Mzi~y!4(`yPl;oAeYImg$?FUZm6A!4gb|594t=|*LcipcL>UVB>wCk zU@qgIuA@0n81)ZlEK%CY!q#BbUxDAx*yr=kF2e>VeGbN4S4! z%dVc}d6|FQ@ejC3%}!=YVZ5Rs`q7?CC{BDYk`{UV+VGRy48|o)&~+&PzLN_z(bY^7X68UJp(E1 zD2@{8GUxHmtf^c7eT*BHF?pS?4wL26ce?g${YARhnzKhDP_>ay)cG7@=)fr~OJzxs z!yWAQqQE_LapNGRVWyt>UVpu)tU`w%&jyd^>%WRe-0`iyOy_)J_nAS|Tb-s~&1lM; zTW`((HJWHTcM>NiYF#xe?mU+qrPMf9XbP0;yrV^{q7rYjPh4pZkZyCcTM`K?flzavlYN(N{`fpwPsiJ5vH8iD^R>Yl1Y`dikI{eVx`{Q5 za5NP!2=Q(24%qNCS=lwLmBqBe*vAQp@F0qxw=4Mt4%b%hub=zps(~y@^i@3X15^C1 zlFhq{cyD^zF;I4^X=D()L?>mB`eBNnL!qCDU-fcyLgYHIM5lbCpxiLbvOHwiW48W6 zk)9<=n*cV_N4tec!QYEG8pHQ2>=y4X_!vl{#O7mpA8b%to*&<|F8@U7Rv4g=kSXjg zS|#97-iz^|T=G)jfU}%osabu?Pg*{0mze1Gnzc(NQ)f!>m(_>)JnPYP6TuuI@M`Q9 zQ;@p5lbwg*d;dBkTa|eI#qmciwRkp7yEhRcuQB-6S^SG-Ccv7?y*vKea z?hNXn2t2opE=ZRh*YmY7v)EQtK+KaGUks{ar1>xnslD+|b5vArHsP6dIY}%!K@fqC zJx1OBSC}Q>W+L=I0-h0=wq)7k%>Hq9@m#2Nk%h<;28Mixk@VhGMZWk6#2;DK#U)fX zzC>YIP4D$F@3e+XWbZU=Nl#4|WxyTv$w^&Nm>Oi + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..bdd9278 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..836c52e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 HighCapable + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README-zh-CN.md b/README-zh-CN.md new file mode 100644 index 0000000..59d573b --- /dev/null +++ b/README-zh-CN.md @@ -0,0 +1,80 @@ +# Yuki Reflection + +![Blank](https://img.shields.io/badge/license-MIT-blue) +![Blank](https://img.shields.io/badge/version-v1.0.0-green) +[![Telegram](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/YukiReflection) +

+ +
+
+🌴️ 一个使用 Kotlin 构建的 Android 平台高效反射 API。 +
+ +[English](https://github.com/fankes/YukiReflection/blob/master/README.md) | 简体中文 + +## 这是什么 + +- 这是一个使用 Kotlin 基于 Java 原生反射 API 重新打造的一套简洁、高效的反射 API,同时也是 [YukiHookAPI](https://github.com/fankes/YukiHookAPI) 正在使用的核心功能 +- 名称取自 [《ももくり》女主 栗原 雪(Yuki)](https://www.bilibili.com/bangumi/play/ss5016) + +## 它能做什么 + +- 取代 Java 原生的反射 API,使用更加人性化的语言实现一套更加完善的反射方案 +- 使用注解的方式声明需要反射的类或方法、变量,构造一个 `stub`,直接调用即可实现与反射 API 相同的功能,更加优雅高效 (正在开发,预计在后期逐渐实现此功能) + +## 开始使用 + +- [点击这里](https://fankes.github.io/YukiReflection/zh-cn/) 前往文档页面查看更多详细教程和内容。 + +## 联系我们 + +- [点击加入 Telegram 群组](https://t.me/YukiReflection) + +## 展望未来 + +如果你喜欢 `YukiReflection` 项目,欢迎为此项目贡献你的代码 **PR**,可以是任何改进的建议以及新增的功能。 + +## 合作项目 + +以下是经过合作并稳定使用 `YukiReflection` 的项目。 + +| Repository | Developer | +|------------------------------------------------------|------------------------------------------| +| [YukiHookAPI](https://github.com/fankes/YukiHookAPI) | [fankesyooni](https://github.com/fankes) | + +你也在使用 `YukiReflection` 吗?快来 **PR** 将你的存储仓库添加到上方的列表 (私有仓库可以不需要注明网页链接)。 + +## 捐赠支持 + +- 工作不易,无意外情况此项目将继续维护下去,提供更多可能,欢迎打赏。

+ + +## 许可证 + +- [MIT](https://choosealicense.com/licenses/mit) + +``` +MIT License + +Copyright (C) 2019-2023 HighCapable + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` + +版权所有 © 2019-2023 HighCapable \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..77f90eb --- /dev/null +++ b/README.md @@ -0,0 +1,79 @@ +# Yuki Reflection + +![Blank](https://img.shields.io/badge/license-MIT-blue) +![Blank](https://img.shields.io/badge/version-v1.0.0-green) +[![Telegram](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/YukiReflection) +

+ +
+
+🌴️ An efficient Reflection API for the Android platform built in Kotlin. +
+ +English | [简体中文](https://github.com/fankes/YukiReflection/blob/master/README-zh-CN.md) + +## What's this + +- This is a concise and efficient Reflection API rebuilt based on Java's native Reflection API using Kotlin, and it is also the core function + being used by [YukiHookAPI](https://github.com/fankes/YukiHookAPI) +- The name is taken from ["ももくり" heroine Yuki Kurihara](https://www.bilibili.com/bangumi/play/ss5016) + +## What it can do + +- Instead of Java's native Reflection API, use a more user-friendly language to implement a more complete set of reflection solutions +- Use annotations to declare classes, methods, and fields that need reflection, construct a `stub`, and call directly to achieve the same + function as the Reflection API, which is more elegant and efficient (under development, and it is expected to gradually implement this function + later) + +## Get Started + +- [Click here](https://fankes.github.io/YukiReflection/en/) go to the documentation page for more detailed tutorials and content. + +## Contacts + +- [Follow us on Telegram](https://t.me/YukiReflection) + +## Features + +If you like the `YukiReflection` project, we welcome you to make a **PR** in this project, any suggestions for improvement and new features. + +## Cooperations + +The following are projects that have collaborated and are using `YukiReflection`. + +| Repository | Developer | +|------------------------------------------------------|------------------------------------------| +| [YukiHookAPI](https://github.com/fankes/YukiHookAPI) | [fankesyooni](https://github.com/fankes) | + +Are you also using `YukiReflection`? Come and **PR** to add your repository to the list above (private repositories do not need to indicate web +links). + +## License + +- [MIT](https://choosealicense.com/licenses/mit) + +``` +MIT License + +Copyright (C) 2019-2023 HighCapable + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` + +Copyright © 2019-2023 HighCapable \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..c2f83c6 --- /dev/null +++ b/build.gradle @@ -0,0 +1,45 @@ +//file:noinspection unused +plugins { + id 'com.android.application' version '7.4.0' apply false + id 'com.android.library' version '7.4.0' apply false + id 'org.jetbrains.kotlin.android' version '1.7.22' apply false + id 'org.jetbrains.kotlin.jvm' version '1.7.22' apply false +} + +ext { + devId = "0" + devUser = "fankesyooni" + userEmail = "qzmmcn@163.com" + groupId = "com.highcapable.yukireflection" + apiVersion = "1.0.0" + repoName = "YukiReflection" + repoDescription = "An efficient Reflection API for the Android platform built in Kotlin." + licenceName = "MIT License" + licenceUrl = "https://github.com/fankes/YukiReflection/blob/master/LICENSE" + website = "https://github.com/fankes/YukiReflection" + githubConnection = "scm:git:git://github.com/path/to/repo.git" + githubDeveloperConnection = "scm:git:ssh://github.com/path/to/repo.git" + githubUrl = "https://github.com/path/to/repo" + ossName = "OSSRH" + ossUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/" +} + +/** + * 获取授权文件内容 - 用于 Maven 的提交 + * + * 若编译失败请将路径替换为自己的或置空 + * @param name + * @return [String] + */ +static String getFileContent(String name) { + String result = "" + try { + FileReader reader = new FileReader("/Users/fankes/Project/Android/Library/YukiReflection/.gradle/" + name) + BufferedReader buff = new BufferedReader(reader) + result = buff.readLine() + buff.close() + reader.close() + } catch (Throwable ignored) { + } + return result +} \ No newline at end of file diff --git a/demo-app/.gitignore b/demo-app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/demo-app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/demo-app/build.gradle b/demo-app/build.gradle new file mode 100644 index 0000000..64854ef --- /dev/null +++ b/demo-app/build.gradle @@ -0,0 +1,55 @@ +plugins { + id 'com.android.application' + id 'org.jetbrains.kotlin.android' +} + +android { + namespace 'com.highcapable.yukireflection.demo_app' + compileSdk 33 + + defaultConfig { + applicationId "com.highcapable.yukireflection.demo_app" + minSdk 21 + targetSdk 33 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 + } + kotlinOptions { + jvmTarget = '11' + freeCompilerArgs = [ + '-Xno-param-assertions', + '-Xno-call-assertions', + '-Xno-receiver-assertions' + ] + } + lintOptions { + checkReleaseBuilds false + } + buildFeatures { + viewBinding true + } +} + +dependencies { + implementation project(':yukireflection') + implementation 'androidx.core:core-ktx:1.9.0' + implementation 'androidx.appcompat:appcompat:1.6.0' + implementation 'com.google.android.material:material:1.7.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.5' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' +} \ No newline at end of file diff --git a/demo-app/proguard-rules.pro b/demo-app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/demo-app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/demo-app/src/androidTest/java/com/highcapable/yukireflection/ExampleInstrumentedTest.kt b/demo-app/src/androidTest/java/com/highcapable/yukireflection/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..5763fc2 --- /dev/null +++ b/demo-app/src/androidTest/java/com/highcapable/yukireflection/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.highcapable.yukireflection + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.highcapable.yukireflection", appContext.packageName) + } +} \ No newline at end of file diff --git a/demo-app/src/main/AndroidManifest.xml b/demo-app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..08289c1 --- /dev/null +++ b/demo-app/src/main/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demo-app/src/main/ic_launcher-playstore.png b/demo-app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..58eb61ebabb1e266e36b82685d894a74835fbad7 GIT binary patch literal 15045 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 literal 0 HcmV?d00001 diff --git a/demo-app/src/main/java/com/highcapable/yukireflection/demo_app/test/Main.java b/demo-app/src/main/java/com/highcapable/yukireflection/demo_app/test/Main.java new file mode 100644 index 0000000..8aff653 --- /dev/null +++ b/demo-app/src/main/java/com/highcapable/yukireflection/demo_app/test/Main.java @@ -0,0 +1,21 @@ +package com.highcapable.yukireflection.demo_app.test; + +@SuppressWarnings("FieldMayBeFinal") +public class Main { + + private static String staticContent = "I am static!"; + + private final String content; + + public Main(String content) { + this.content = content; + } + + public String getContent() { + return content; + } + + public static String getStaticContent() { + return staticContent; + } +} \ No newline at end of file diff --git a/demo-app/src/main/java/com/highcapable/yukireflection/demo_app/ui/MainActivity.kt b/demo-app/src/main/java/com/highcapable/yukireflection/demo_app/ui/MainActivity.kt new file mode 100644 index 0000000..e8b7184 --- /dev/null +++ b/demo-app/src/main/java/com/highcapable/yukireflection/demo_app/ui/MainActivity.kt @@ -0,0 +1,75 @@ +/* + * YukiReflection - An efficient Reflection API for the Android platform built in Kotlin. + * Copyright (C) 2019-2023 HighCapable + * https://github.com/fankes/YukiReflection + * + * MIT License + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * This file is Created by fankes on 2023/1/21. + */ +@file:Suppress("SetTextI18n", "UsePropertyAccessSyntax") + +package com.highcapable.yukireflection.demo_app.ui + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import com.highcapable.yukireflection.demo_app.databinding.ActivityMainBinding +import com.highcapable.yukireflection.demo_app.test.Main +import com.highcapable.yukireflection.factory.* +import com.highcapable.yukireflection.type.java.StringClass + +class MainActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + ActivityMainBinding.inflate(layoutInflater).apply { + setContentView(root) + testObjectDirectlyButton.setOnClickListener { + tipText.text = Main("I am directly call of new object").getContent() + } + testObjectReflectionButton.setOnClickListener { + tipText.text = + classOf
().buildOf("I am reflection call of new object") { param(StringClass) } + ?.current() + ?.method { + name = "getContent" + emptyParam() + }?.string() ?: "" + } + testStaticDirectlyButton.setOnClickListener { + tipText.text = Main.getStaticContent() + } + testStaticReflectionButton.setOnClickListener { + tipText.text = classOf
().method { + name = "getStaticContent" + modifiers { isStatic } + }.get().string() + } + testModifyStaticReflectionButton.setOnClickListener { + classOf
().field { + name = "staticContent" + modifiers { isStatic } + }.get().set("I am static! Modified by reflection") + tipText.text = "Field is modified success" + } + } + } +} \ No newline at end of file diff --git a/demo-app/src/main/res/layout/activity_main.xml b/demo-app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..69d7595 --- /dev/null +++ b/demo-app/src/main/res/layout/activity_main.xml @@ -0,0 +1,59 @@ + + + + + + + +