
+++ .gitignore
... | ... | @@ -0,0 +1,37 @@ |
1 | +HELP.md | |
2 | +.gradle | |
3 | +build/ | |
4 | +!gradle/wrapper/gradle-wrapper.jar | |
5 | +!**/src/main/**/build/ | |
6 | +!**/src/test/**/build/ | |
7 | + | |
8 | +### STS ### | |
9 | +.apt_generated | |
10 | +.classpath | |
11 | +.factorypath | |
12 | +.project | |
13 | +.settings | |
14 | +.springBeans | |
15 | +.sts4-cache | |
16 | +bin/ | |
17 | +!**/src/main/**/bin/ | |
18 | +!**/src/test/**/bin/ | |
19 | + | |
20 | +### IntelliJ IDEA ### | |
21 | +.idea | |
22 | +*.iws | |
23 | +*.iml | |
24 | +*.ipr | |
25 | +out/ | |
26 | +!**/src/main/**/out/ | |
27 | +!**/src/test/**/out/ | |
28 | + | |
29 | +### NetBeans ### | |
30 | +/nbproject/private/ | |
31 | +/nbbuild/ | |
32 | +/dist/ | |
33 | +/nbdist/ | |
34 | +/.nb-gradle/ | |
35 | + | |
36 | +### VS Code ### | |
37 | +.vscode/ |
+++ build.gradle
... | ... | @@ -0,0 +1,39 @@ |
1 | +plugins { | |
2 | + id 'java' | |
3 | + id 'org.springframework.boot' version '3.2.5' | |
4 | + id 'io.spring.dependency-management' version '1.1.4' | |
5 | +} | |
6 | + | |
7 | +group = 'com.example' | |
8 | +version = '0.0.1-SNAPSHOT' | |
9 | + | |
10 | +java { | |
11 | + sourceCompatibility = '17' | |
12 | +} | |
13 | + | |
14 | +configurations { | |
15 | + compileOnly { | |
16 | + extendsFrom annotationProcessor | |
17 | + } | |
18 | +} | |
19 | + | |
20 | +repositories { | |
21 | + mavenCentral() | |
22 | +} | |
23 | + | |
24 | +dependencies { | |
25 | + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' | |
26 | + implementation 'org.springframework.boot:spring-boot-starter-security' | |
27 | + implementation 'org.springframework.boot:spring-boot-starter-validation' | |
28 | + implementation 'org.springframework.boot:spring-boot-starter-web' | |
29 | + compileOnly 'org.projectlombok:lombok' | |
30 | + developmentOnly 'org.springframework.boot:spring-boot-devtools' | |
31 | + runtimeOnly 'com.mysql:mysql-connector-j' | |
32 | + annotationProcessor 'org.projectlombok:lombok' | |
33 | + testImplementation 'org.springframework.boot:spring-boot-starter-test' | |
34 | + testImplementation 'org.springframework.security:spring-security-test' | |
35 | +} | |
36 | + | |
37 | +tasks.named('test') { | |
38 | + useJUnitPlatform() | |
39 | +} |
+++ gradle/wrapper/gradle-wrapper.jar
Binary file is not shown |
+++ gradle/wrapper/gradle-wrapper.properties
... | ... | @@ -0,0 +1,7 @@ |
1 | +distributionBase=GRADLE_USER_HOME | |
2 | +distributionPath=wrapper/dists | |
3 | +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip | |
4 | +networkTimeout=10000 | |
5 | +validateDistributionUrl=true | |
6 | +zipStoreBase=GRADLE_USER_HOME | |
7 | +zipStorePath=wrapper/dists |
+++ gradlew
... | ... | @@ -0,0 +1,249 @@ |
1 | +#!/bin/sh | |
2 | + | |
3 | +# | |
4 | +# Copyright © 2015-2021 the original authors. | |
5 | +# | |
6 | +# Licensed under the Apache License, Version 2.0 (the "License"); | |
7 | +# you may not use this file except in compliance with the License. | |
8 | +# You may obtain a copy of the License at | |
9 | +# | |
10 | +# https://www.apache.org/licenses/LICENSE-2.0 | |
11 | +# | |
12 | +# Unless required by applicable law or agreed to in writing, software | |
13 | +# distributed under the License is distributed on an "AS IS" BASIS, | |
14 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
15 | +# See the License for the specific language governing permissions and | |
16 | +# limitations under the License. | |
17 | +# | |
18 | + | |
19 | +############################################################################## | |
20 | +# | |
21 | +# Gradle start up script for POSIX generated by Gradle. | |
22 | +# | |
23 | +# Important for running: | |
24 | +# | |
25 | +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is | |
26 | +# noncompliant, but you have some other compliant shell such as ksh or | |
27 | +# bash, then to run this script, type that shell name before the whole | |
28 | +# command line, like: | |
29 | +# | |
30 | +# ksh Gradle | |
31 | +# | |
32 | +# Busybox and similar reduced shells will NOT work, because this script | |
33 | +# requires all of these POSIX shell features: | |
34 | +# * functions; | |
35 | +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», | |
36 | +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; | |
37 | +# * compound commands having a testable exit status, especially «case»; | |
38 | +# * various built-in commands including «command», «set», and «ulimit». | |
39 | +# | |
40 | +# Important for patching: | |
41 | +# | |
42 | +# (2) This script targets any POSIX shell, so it avoids extensions provided | |
43 | +# by Bash, Ksh, etc; in particular arrays are avoided. | |
44 | +# | |
45 | +# The "traditional" practice of packing multiple parameters into a | |
46 | +# space-separated string is a well documented source of bugs and security | |
47 | +# problems, so this is (mostly) avoided, by progressively accumulating | |
48 | +# options in "$@", and eventually passing that to Java. | |
49 | +# | |
50 | +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, | |
51 | +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; | |
52 | +# see the in-line comments for details. | |
53 | +# | |
54 | +# There are tweaks for specific operating systems such as AIX, CygWin, | |
55 | +# Darwin, MinGW, and NonStop. | |
56 | +# | |
57 | +# (3) This script is generated from the Groovy template | |
58 | +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt | |
59 | +# within the Gradle project. | |
60 | +# | |
61 | +# You can find Gradle at https://github.com/gradle/gradle/. | |
62 | +# | |
63 | +############################################################################## | |
64 | + | |
65 | +# Attempt to set APP_HOME | |
66 | + | |
67 | +# Resolve links: $0 may be a link | |
68 | +app_path=$0 | |
69 | + | |
70 | +# Need this for daisy-chained symlinks. | |
71 | +while | |
72 | + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path | |
73 | + [ -h "$app_path" ] | |
74 | +do | |
75 | + ls=$( ls -ld "$app_path" ) | |
76 | + link=${ls#*' -> '} | |
77 | + case $link in #( | |
78 | + /*) app_path=$link ;; #( | |
79 | + *) app_path=$APP_HOME$link ;; | |
80 | + esac | |
81 | +done | |
82 | + | |
83 | +# This is normally unused | |
84 | +# shellcheck disable=SC2034 | |
85 | +APP_BASE_NAME=${0##*/} | |
86 | +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) | |
87 | +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit | |
88 | + | |
89 | +# Use the maximum available, or set MAX_FD != -1 to use that value. | |
90 | +MAX_FD=maximum | |
91 | + | |
92 | +warn () { | |
93 | + echo "$*" | |
94 | +} >&2 | |
95 | + | |
96 | +die () { | |
97 | + echo | |
98 | + echo "$*" | |
99 | + echo | |
100 | + exit 1 | |
101 | +} >&2 | |
102 | + | |
103 | +# OS specific support (must be 'true' or 'false'). | |
104 | +cygwin=false | |
105 | +msys=false | |
106 | +darwin=false | |
107 | +nonstop=false | |
108 | +case "$( uname )" in #( | |
109 | + CYGWIN* ) cygwin=true ;; #( | |
110 | + Darwin* ) darwin=true ;; #( | |
111 | + MSYS* | MINGW* ) msys=true ;; #( | |
112 | + NONSTOP* ) nonstop=true ;; | |
113 | +esac | |
114 | + | |
115 | +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | |
116 | + | |
117 | + | |
118 | +# Determine the Java command to use to start the JVM. | |
119 | +if [ -n "$JAVA_HOME" ] ; then | |
120 | + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | |
121 | + # IBM's JDK on AIX uses strange locations for the executables | |
122 | + JAVACMD=$JAVA_HOME/jre/sh/java | |
123 | + else | |
124 | + JAVACMD=$JAVA_HOME/bin/java | |
125 | + fi | |
126 | + if [ ! -x "$JAVACMD" ] ; then | |
127 | + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | |
128 | + | |
129 | +Please set the JAVA_HOME variable in your environment to match the | |
130 | +location of your Java installation." | |
131 | + fi | |
132 | +else | |
133 | + JAVACMD=java | |
134 | + if ! command -v java >/dev/null 2>&1 | |
135 | + then | |
136 | + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |
137 | + | |
138 | +Please set the JAVA_HOME variable in your environment to match the | |
139 | +location of your Java installation." | |
140 | + fi | |
141 | +fi | |
142 | + | |
143 | +# Increase the maximum file descriptors if we can. | |
144 | +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then | |
145 | + case $MAX_FD in #( | |
146 | + max*) | |
147 | + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. | |
148 | + # shellcheck disable=SC2039,SC3045 | |
149 | + MAX_FD=$( ulimit -H -n ) || | |
150 | + warn "Could not query maximum file descriptor limit" | |
151 | + esac | |
152 | + case $MAX_FD in #( | |
153 | + '' | soft) :;; #( | |
154 | + *) | |
155 | + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. | |
156 | + # shellcheck disable=SC2039,SC3045 | |
157 | + ulimit -n "$MAX_FD" || | |
158 | + warn "Could not set maximum file descriptor limit to $MAX_FD" | |
159 | + esac | |
160 | +fi | |
161 | + | |
162 | +# Collect all arguments for the java command, stacking in reverse order: | |
163 | +# * args from the command line | |
164 | +# * the main class name | |
165 | +# * -classpath | |
166 | +# * -D...appname settings | |
167 | +# * --module-path (only if needed) | |
168 | +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. | |
169 | + | |
170 | +# For Cygwin or MSYS, switch paths to Windows format before running java | |
171 | +if "$cygwin" || "$msys" ; then | |
172 | + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) | |
173 | + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) | |
174 | + | |
175 | + JAVACMD=$( cygpath --unix "$JAVACMD" ) | |
176 | + | |
177 | + # Now convert the arguments - kludge to limit ourselves to /bin/sh | |
178 | + for arg do | |
179 | + if | |
180 | + case $arg in #( | |
181 | + -*) false ;; # don't mess with options #( | |
182 | + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath | |
183 | + [ -e "$t" ] ;; #( | |
184 | + *) false ;; | |
185 | + esac | |
186 | + then | |
187 | + arg=$( cygpath --path --ignore --mixed "$arg" ) | |
188 | + fi | |
189 | + # Roll the args list around exactly as many times as the number of | |
190 | + # args, so each arg winds up back in the position where it started, but | |
191 | + # possibly modified. | |
192 | + # | |
193 | + # NB: a `for` loop captures its iteration list before it begins, so | |
194 | + # changing the positional parameters here affects neither the number of | |
195 | + # iterations, nor the values presented in `arg`. | |
196 | + shift # remove old arg | |
197 | + set -- "$@" "$arg" # push replacement arg | |
198 | + done | |
199 | +fi | |
200 | + | |
201 | + | |
202 | +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |
203 | +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' | |
204 | + | |
205 | +# Collect all arguments for the java command: | |
206 | +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, | |
207 | +# and any embedded shellness will be escaped. | |
208 | +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be | |
209 | +# treated as '${Hostname}' itself on the command line. | |
210 | + | |
211 | +set -- \ | |
212 | + "-Dorg.gradle.appname=$APP_BASE_NAME" \ | |
213 | + -classpath "$CLASSPATH" \ | |
214 | + org.gradle.wrapper.GradleWrapperMain \ | |
215 | + "$@" | |
216 | + | |
217 | +# Stop when "xargs" is not available. | |
218 | +if ! command -v xargs >/dev/null 2>&1 | |
219 | +then | |
220 | + die "xargs is not available" | |
221 | +fi | |
222 | + | |
223 | +# Use "xargs" to parse quoted args. | |
224 | +# | |
225 | +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. | |
226 | +# | |
227 | +# In Bash we could simply go: | |
228 | +# | |
229 | +# readarray ARGS < <( xargs -n1 <<<"$var" ) && | |
230 | +# set -- "${ARGS[@]}" "$@" | |
231 | +# | |
232 | +# but POSIX shell has neither arrays nor command substitution, so instead we | |
233 | +# post-process each arg (as a line of input to sed) to backslash-escape any | |
234 | +# character that might be a shell metacharacter, then use eval to reverse | |
235 | +# that process (while maintaining the separation between arguments), and wrap | |
236 | +# the whole thing up as a single "set" statement. | |
237 | +# | |
238 | +# This will of course break if any of these variables contains a newline or | |
239 | +# an unmatched quote. | |
240 | +# | |
241 | + | |
242 | +eval "set -- $( | |
243 | + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | | |
244 | + xargs -n1 | | |
245 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | | |
246 | + tr '\n' ' ' | |
247 | + )" '"$@"' | |
248 | + | |
249 | +exec "$JAVACMD" "$@" |
+++ gradlew.bat
... | ... | @@ -0,0 +1,92 @@ |
1 | +@rem | |
2 | +@rem Copyright 2015 the original author or authors. | |
3 | +@rem | |
4 | +@rem Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | +@rem you may not use this file except in compliance with the License. | |
6 | +@rem You may obtain a copy of the License at | |
7 | +@rem | |
8 | +@rem https://www.apache.org/licenses/LICENSE-2.0 | |
9 | +@rem | |
10 | +@rem Unless required by applicable law or agreed to in writing, software | |
11 | +@rem distributed under the License is distributed on an "AS IS" BASIS, | |
12 | +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | +@rem See the License for the specific language governing permissions and | |
14 | +@rem limitations under the License. | |
15 | +@rem | |
16 | + | |
17 | +@if "%DEBUG%"=="" @echo off | |
18 | +@rem ########################################################################## | |
19 | +@rem | |
20 | +@rem Gradle startup script for Windows | |
21 | +@rem | |
22 | +@rem ########################################################################## | |
23 | + | |
24 | +@rem Set local scope for the variables with windows NT shell | |
25 | +if "%OS%"=="Windows_NT" setlocal | |
26 | + | |
27 | +set DIRNAME=%~dp0 | |
28 | +if "%DIRNAME%"=="" set DIRNAME=. | |
29 | +@rem This is normally unused | |
30 | +set APP_BASE_NAME=%~n0 | |
31 | +set APP_HOME=%DIRNAME% | |
32 | + | |
33 | +@rem Resolve any "." and ".." in APP_HOME to make it shorter. | |
34 | +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi | |
35 | + | |
36 | +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |
37 | +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" | |
38 | + | |
39 | +@rem Find java.exe | |
40 | +if defined JAVA_HOME goto findJavaFromJavaHome | |
41 | + | |
42 | +set JAVA_EXE=java.exe | |
43 | +%JAVA_EXE% -version >NUL 2>&1 | |
44 | +if %ERRORLEVEL% equ 0 goto execute | |
45 | + | |
46 | +echo. 1>&2 | |
47 | +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 | |
48 | +echo. 1>&2 | |
49 | +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 | |
50 | +echo location of your Java installation. 1>&2 | |
51 | + | |
52 | +goto fail | |
53 | + | |
54 | +:findJavaFromJavaHome | |
55 | +set JAVA_HOME=%JAVA_HOME:"=% | |
56 | +set JAVA_EXE=%JAVA_HOME%/bin/java.exe | |
57 | + | |
58 | +if exist "%JAVA_EXE%" goto execute | |
59 | + | |
60 | +echo. 1>&2 | |
61 | +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 | |
62 | +echo. 1>&2 | |
63 | +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 | |
64 | +echo location of your Java installation. 1>&2 | |
65 | + | |
66 | +goto fail | |
67 | + | |
68 | +:execute | |
69 | +@rem Setup the command line | |
70 | + | |
71 | +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | |
72 | + | |
73 | + | |
74 | +@rem Execute Gradle | |
75 | +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* | |
76 | + | |
77 | +:end | |
78 | +@rem End local scope for the variables with windows NT shell | |
79 | +if %ERRORLEVEL% equ 0 goto mainEnd | |
80 | + | |
81 | +:fail | |
82 | +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | |
83 | +rem the _cmd.exe /c_ return code! | |
84 | +set EXIT_CODE=%ERRORLEVEL% | |
85 | +if %EXIT_CODE% equ 0 set EXIT_CODE=1 | |
86 | +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% | |
87 | +exit /b %EXIT_CODE% | |
88 | + | |
89 | +:mainEnd | |
90 | +if "%OS%"=="Windows_NT" endlocal | |
91 | + | |
92 | +:omega |
+++ hs_err_pid15732.log
... | ... | @@ -0,0 +1,1905 @@ |
1 | +# | |
2 | +# A fatal error has been detected by the Java Runtime Environment: | |
3 | +# | |
4 | +# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffcd7c8cbf8, pid=15732, tid=2564 | |
5 | +# | |
6 | +# JRE version: Java(TM) SE Runtime Environment (17.0.11+7) (build 17.0.11+7-LTS-207) | |
7 | +# Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0.11+7-LTS-207, mixed mode, emulated-client, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64) | |
8 | +# Problematic frame: | |
9 | +# V [jvm.dll+0x23cbf8] | |
10 | +# | |
11 | +# No core dump will be written. Minidumps are not enabled by default on client versions of Windows | |
12 | +# | |
13 | +# If you would like to submit a bug report, please visit: | |
14 | +# https://bugreport.java.com/bugreport/crash.jsp | |
15 | +# | |
16 | + | |
17 | +--------------- S U M M A R Y ------------ | |
18 | + | |
19 | +Command Line: -javaagent:C:\Users\takensoft\AppData\Local\JetBrains\IntelliJIdea2020.1\testAgent\intellij-coverage-agent-1.0.508.jar=C:\Users\takensoft\AppData\Local\Temp\coverageargs -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Didea.launcher.port=53797 -Didea.launcher.bin.path=C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\bin -Dfile.encoding=UTF-8 com.intellij.rt.execution.application.AppMainV2 com.example.educatback.EducatBackApplication | |
20 | + | |
21 | +Host: Intel(R) Core(TM) i5-10400F CPU @ 2.90GHz, 12 cores, 31G, Windows 10 , 64 bit Build 19041 (10.0.19041.3636) | |
22 | +Time: Wed May 22 11:15:32 2024 Windows 10 , 64 bit Build 19041 (10.0.19041.3636) elapsed time: 0.540562 seconds (0d 0h 0m 0s) | |
23 | + | |
24 | +--------------- T H R E A D --------------- | |
25 | + | |
26 | +Current thread (0x000001f296533130): JavaThread "Thread-2" [_thread_in_vm, id=2564, stack(0x000000b7f2c00000,0x000000b7f2d00000)] | |
27 | + | |
28 | +Stack: [0x000000b7f2c00000,0x000000b7f2d00000], sp=0x000000b7f2cfc358, free space=1008k | |
29 | +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) | |
30 | +V [jvm.dll+0x23cbf8] | |
31 | + | |
32 | +Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) | |
33 | +J 1527 java.lang.ClassLoader.defineClass1(Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class; java.base@17.0.11 (0 bytes) @ 0x000001f2370214e3 [0x000001f237021420+0x00000000000000c3] | |
34 | +j java.lang.ClassLoader.defineClass(Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class;+27 java.base@17.0.11 | |
35 | +J 1545 c1 jdk.internal.loader.BuiltinClassLoader.defineClass(Ljava/lang/String;Ljdk/internal/loader/Resource;)Ljava/lang/Class; java.base@17.0.11 (121 bytes) @ 0x000001f23702d374 [0x000001f23702cea0+0x00000000000004d4] | |
36 | +J 1529 c1 jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(Ljava/lang/String;)Ljava/lang/Class; java.base@17.0.11 (64 bytes) @ 0x000001f237023344 [0x000001f237023080+0x00000000000002c4] | |
37 | +J 1313 c1 jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(Ljava/lang/String;Z)Ljava/lang/Class; java.base@17.0.11 (143 bytes) @ 0x000001f236fc5104 [0x000001f236fc4c80+0x0000000000000484] | |
38 | +J 1427 c1 jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Ljava/lang/String;Z)Ljava/lang/Class; java.base@17.0.11 (40 bytes) @ 0x000001f236ffbd2c [0x000001f236ffbbe0+0x000000000000014c] | |
39 | +J 1419 c1 java.lang.ClassLoader.loadClass(Ljava/lang/String;)Ljava/lang/Class; java.base@17.0.11 (7 bytes) @ 0x000001f236ff71e4 [0x000001f236ff71a0+0x0000000000000044] | |
40 | +v ~StubRoutines::call_stub | |
41 | +j org.springframework.core.annotation.IntrospectionFailureLogger.<clinit>()V+13 | |
42 | +v ~StubRoutines::call_stub | |
43 | +j org.springframework.core.annotation.AnnotationTypeMappings.<clinit>()V+13 | |
44 | +v ~StubRoutines::call_stub | |
45 | +j org.springframework.core.annotation.AnnotationUtils.clearCache()V+13 | |
46 | +j org.springframework.boot.devtools.restart.Restarter.clearAnnotationUtilsCache()V+13 | |
47 | +j org.springframework.boot.devtools.restart.Restarter.cleanupKnownCaches()V+45 | |
48 | +j org.springframework.boot.devtools.restart.Restarter.cleanupCaches()V+24 | |
49 | +j org.springframework.boot.devtools.restart.Restarter.lambda$immediateRestart$0()Ljava/lang/Object;+28 | |
50 | +j org.springframework.boot.devtools.restart.Restarter$$Lambda$158+0x000001f2520facb0.call()Ljava/lang/Object;+4 | |
51 | +j org.springframework.boot.devtools.restart.Restarter$LeakSafeThread.run()V+48 | |
52 | +v ~StubRoutines::call_stub | |
53 | + | |
54 | +siginfo: EXCEPTION_ACCESS_VIOLATION (0xc0000005), reading address 0x000001f292709d90 | |
55 | + | |
56 | + | |
57 | +Registers: | |
58 | +RAX=0x0000000000005145, RBX=0x0000000000000000, RCX=0x000001f2926e1320, RDX=0x0000000000000036 | |
59 | +RSP=0x000000b7f2cfc358, RBP=0x0000000000000036, RSI=0x0000000000000004, RDI=0x000001f2520ff730 | |
60 | +R8 =0x0000000000000003, R9 =0x000001f2520ff988, R10=0x00007ffd112f0000, R11=0x000001f24f8bc880 | |
61 | +R12=0x000001f296533130, R13=0x000001f2926e2580, R14=0x000001f2520ff988, R15=0x000001f2520ff988 | |
62 | +RIP=0x00007ffcd7c8cbf8, EFLAGS=0x0000000000010202 | |
63 | + | |
64 | + | |
65 | +Register to memory mapping: | |
66 | + | |
67 | +RIP=0x00007ffcd7c8cbf8 jvm.dll | |
68 | +RAX=0x0000000000005145 is an unknown value | |
69 | +RBX=0x0 is NULL | |
70 | +RCX=0x000001f2926e1320 is pointing into metadata | |
71 | +RDX=0x0000000000000036 is an unknown value | |
72 | +RSP=0x000000b7f2cfc358 is pointing into the stack for thread: 0x000001f296533130 | |
73 | +RBP=0x0000000000000036 is an unknown value | |
74 | +RSI=0x0000000000000004 is an unknown value | |
75 | +RDI=0x000001f2520ff730 is a pointer to class: | |
76 | +org.springframework.core.annotation.IntrospectionFailureLogger {0x000001f2520ff738} | |
77 | + - instance size: 3 | |
78 | + - klass size: 75 | |
79 | + - access: synchronized abstract | |
80 | + - state: being_initialized | |
81 | + - name: 'org/springframework/core/annotation/IntrospectionFailureLogger' | |
82 | + - super: 'java/lang/Enum' | |
83 | + - sub: | |
84 | + - arrays: NULL | |
85 | + - methods: Array<T>(0x000001f2926e1890) | |
86 | + - method ordering: Array<T>(0x000001f2518f5030) | |
87 | + - default_methods: Array<T>(0x0000000000000000) | |
88 | + - local interfaces: Array<T>(0x000001f2515d1e38) | |
89 | + - trans. interfaces: Array<T>(0x000001f2515d79f8) | |
90 | + - constants: constant pool [136]/operands[10] {0x000001f2926e1328} for 'org/springframework/core/annotation/IntrospectionFailureLogger' cache=0x000001f2926e2078 | |
91 | + - class loader data: loader data: 0x000001f24f8be4f0 for instance a 'jdk/internal/loader/ClassLoaders$AppClassLoader'{0x0000000601414098} | |
92 | + - source file: 'IntrospectionFailureLogger.java' | |
93 | + - class annotations: Array<T>(0x0000000000000000) | |
94 | + - class type annotations: Array<T>(0x0000000000000000) | |
95 | + - field annotations: Array<T>(0x000001f2926e1830) | |
96 | + - field type annotations: Array<T>(0x0000000000000000) | |
97 | + - generic signature: 'Ljava/lang/Enum<Lorg/springframework/core/annotation/IntrospectionFailureLogger;>;' | |
98 | + - inner classes: Array<T>(0x000001f2926e2010) | |
99 | + - nest members: Array<T>(0x000001f2926e2038) | |
100 | + - permitted subclasses: Array<T>(0x000001f2926e2048) | |
101 | + - java mirror: a 'java/lang/Class'{0x000000061fc37650} = 'org/springframework/core/annotation/IntrospectionFailureLogger' | |
102 | + - vtable length 9 (start addr: 0x000001f2520ff8f8) | |
103 | + - itable length 8 (start addr: 0x000001f2520ff940) | |
104 | + - ---- static fields (2 words): | |
105 | + - public static final 'DEBUG' 'Lorg/springframework/core/annotation/IntrospectionFailureLogger;' @112 | |
106 | + - public static final 'INFO' 'Lorg/springframework/core/annotation/IntrospectionFailureLogger;' @116 | |
107 | + - private static 'logger' 'Lorg/apache/commons/logging/Log;' @120 | |
108 | + - private static final synthetic '$VALUES' '[Lorg/springframework/core/annotation/IntrospectionFailureLogger;' @124 | |
109 | + - ---- non-static fields (2 words): | |
110 | + - private final 'ordinal' 'I' @12 | |
111 | + - private final 'name' 'Ljava/lang/String;' @16 | |
112 | + - non-static oop maps: 16-16 | |
113 | +R8 =0x0000000000000003 is an unknown value | |
114 | +R9 =0x000001f2520ff988 is a pointer to class: | |
115 | +org.springframework.core.annotation.IntrospectionFailureLogger$1 {0x000001f2520ff990} | |
116 | + - instance size: 3 | |
117 | + - klass size: 75 | |
118 | + - access: final synchronized | |
119 | + - state: allocated | |
120 | + - name: 'org/springframework/core/annotation/IntrospectionFailureLogger$1' | |
121 | + - super: 'org/springframework/core/annotation/IntrospectionFailureLogger' | |
122 | + - sub: | |
123 | + - arrays: NULL | |
124 | + - methods: Array<T>(0x000001f2926e2580) | |
125 | + - method ordering: Array<T>(0x000001f2518f5030) | |
126 | + - default_methods: Array<T>(0x0000000000000000) | |
127 | + - local interfaces: Array<T>(0x000001f2515d1e38) | |
128 | + - trans. interfaces: Array<T>(0x000001f2515d79f8) | |
129 | + - constants: constant pool [55] {0x000001f2926e2350} for 'org/springframework/core/annotation/IntrospectionFailureLogger$1' | |
130 | + - class loader data: loader data: 0x000001f24f8be4f0 for instance a 'jdk/internal/loader/ClassLoaders$AppClassLoader'{0x0000000601414098} | |
131 | + - source file: 'IntrospectionFailureLogger.java' | |
132 | + - class annotations: Array<T>(0x0000000000000000) | |
133 | + - class type annotations: Array<T>(0x0000000000000000) | |
134 | + - field annotations: Array<T>(0x0000000000000000) | |
135 | + - field type annotations: Array<T>(0x0000000000000000) | |
136 | + - inner classes: Array<T>(0x000001f2926e2800) | |
137 | + - nest members: Array<T>(0x000001f2515d1dc8) | |
138 | + - permitted subclasses: Array<T>(0x000001f2515d1dc8) | |
139 | + - java mirror: NULL | |
140 | + - vtable length 9 (start addr: 0x000001f2520ffb50) | |
141 | + - itable length 8 (start addr: 0x000001f2520ffb98) | |
142 | + - ---- static fields (0 words): | |
143 | + - ---- non-static fields (2 words): | |
144 | + - private final 'ordinal' 'I' @12 | |
145 | + - private final 'name' 'Ljava/lang/String;' @16 | |
146 | + - non-static oop maps: 16-16 | |
147 | +R10=0x00007ffd112f0000 VCRUNTIME140.dll | |
148 | +R11=0x000001f24f8bc880 points into unknown readable memory: 0x000001f20000006d | 6d 00 00 00 f2 01 00 00 | |
149 | +R12=0x000001f296533130 is a thread | |
150 | +R13=0x000001f2926e2580 is pointing into metadata | |
151 | +R14=0x000001f2520ff988 is a pointer to class: | |
152 | +org.springframework.core.annotation.IntrospectionFailureLogger$1 {0x000001f2520ff990} | |
153 | + - instance size: 3 | |
154 | + - klass size: 75 | |
155 | + - access: final synchronized | |
156 | + - state: allocated | |
157 | + - name: 'org/springframework/core/annotation/IntrospectionFailureLogger$1' | |
158 | + - super: 'org/springframework/core/annotation/IntrospectionFailureLogger' | |
159 | + - sub: | |
160 | + - arrays: NULL | |
161 | + - methods: Array<T>(0x000001f2926e2580) | |
162 | + - method ordering: Array<T>(0x000001f2518f5030) | |
163 | + - default_methods: Array<T>(0x0000000000000000) | |
164 | + - local interfaces: Array<T>(0x000001f2515d1e38) | |
165 | + - trans. interfaces: Array<T>(0x000001f2515d79f8) | |
166 | + - constants: constant pool [55] {0x000001f2926e2350} for 'org/springframework/core/annotation/IntrospectionFailureLogger$1' | |
167 | + - class loader data: loader data: 0x000001f24f8be4f0 for instance a 'jdk/internal/loader/ClassLoaders$AppClassLoader'{0x0000000601414098} | |
168 | + - source file: 'IntrospectionFailureLogger.java' | |
169 | + - class annotations: Array<T>(0x0000000000000000) | |
170 | + - class type annotations: Array<T>(0x0000000000000000) | |
171 | + - field annotations: Array<T>(0x0000000000000000) | |
172 | + - field type annotations: Array<T>(0x0000000000000000) | |
173 | + - inner classes: Array<T>(0x000001f2926e2800) | |
174 | + - nest members: Array<T>(0x000001f2515d1dc8) | |
175 | + - permitted subclasses: Array<T>(0x000001f2515d1dc8) | |
176 | + - java mirror: NULL | |
177 | + - vtable length 9 (start addr: 0x000001f2520ffb50) | |
178 | + - itable length 8 (start addr: 0x000001f2520ffb98) | |
179 | + - ---- static fields (0 words): | |
180 | + - ---- non-static fields (2 words): | |
181 | + - private final 'ordinal' 'I' @12 | |
182 | + - private final 'name' 'Ljava/lang/String;' @16 | |
183 | + - non-static oop maps: 16-16 | |
184 | +R15=0x000001f2520ff988 is a pointer to class: | |
185 | +org.springframework.core.annotation.IntrospectionFailureLogger$1 {0x000001f2520ff990} | |
186 | + - instance size: 3 | |
187 | + - klass size: 75 | |
188 | + - access: final synchronized | |
189 | + - state: allocated | |
190 | + - name: 'org/springframework/core/annotation/IntrospectionFailureLogger$1' | |
191 | + - super: 'org/springframework/core/annotation/IntrospectionFailureLogger' | |
192 | + - sub: | |
193 | + - arrays: NULL | |
194 | + - methods: Array<T>(0x000001f2926e2580) | |
195 | + - method ordering: Array<T>(0x000001f2518f5030) | |
196 | + - default_methods: Array<T>(0x0000000000000000) | |
197 | + - local interfaces: Array<T>(0x000001f2515d1e38) | |
198 | + - trans. interfaces: Array<T>(0x000001f2515d79f8) | |
199 | + - constants: constant pool [55] {0x000001f2926e2350} for 'org/springframework/core/annotation/IntrospectionFailureLogger$1' | |
200 | + - class loader data: loader data: 0x000001f24f8be4f0 for instance a 'jdk/internal/loader/ClassLoaders$AppClassLoader'{0x0000000601414098} | |
201 | + - source file: 'IntrospectionFailureLogger.java' | |
202 | + - class annotations: Array<T>(0x0000000000000000) | |
203 | + - class type annotations: Array<T>(0x0000000000000000) | |
204 | + - field annotations: Array<T>(0x0000000000000000) | |
205 | + - field type annotations: Array<T>(0x0000000000000000) | |
206 | + - inner classes: Array<T>(0x000001f2926e2800) | |
207 | + - nest members: Array<T>(0x000001f2515d1dc8) | |
208 | + - permitted subclasses: Array<T>(0x000001f2515d1dc8) | |
209 | + - java mirror: NULL | |
210 | + - vtable length 9 (start addr: 0x000001f2520ffb50) | |
211 | + - itable length 8 (start addr: 0x000001f2520ffb98) | |
212 | + - ---- static fields (0 words): | |
213 | + - ---- non-static fields (2 words): | |
214 | + - private final 'ordinal' 'I' @12 | |
215 | + - private final 'name' 'Ljava/lang/String;' @16 | |
216 | + - non-static oop maps: 16-16 | |
217 | + | |
218 | + | |
219 | +Top of Stack: (sp=0x000000b7f2cfc358) | |
220 | +0x000000b7f2cfc358: 00007ffcd7dbc912 000001f2503d3150 | |
221 | +0x000000b7f2cfc368: 000001f296533130 000001f296533130 | |
222 | +0x000000b7f2cfc378: 00007ffc00000023 000001f2520ff988 | |
223 | +0x000000b7f2cfc388: 000001f2520ff730 000001f2520ffa2c | |
224 | +0x000000b7f2cfc398: 000001f2520ff988 000000b7f2cfc660 | |
225 | +0x000000b7f2cfc3a8: 00007ffcd7c2ec4a 000001f296446790 | |
226 | +0x000000b7f2cfc3b8: 000001f296533130 000001f296533130 | |
227 | +0x000000b7f2cfc3c8: 000001f2926e2580 000001f296483b00 | |
228 | +0x000000b7f2cfc3d8: 00007ffcd80d312f 000001f22da273e0 | |
229 | +0x000000b7f2cfc3e8: 000001f2965653c6 000001f2515d1e38 | |
230 | +0x000000b7f2cfc3f8: 000000b7f2cfc660 000001f2926e2580 | |
231 | +0x000000b7f2cfc408: 000001f296533130 000001f2520ff988 | |
232 | +0x000000b7f2cfc418: 00007ffcd7f91b01 000001f2520ff988 | |
233 | +0x000000b7f2cfc428: 000000b7f2cfc450 000001f2520ffa2c | |
234 | +0x000000b7f2cfc438: 0000000000000000 00007ffcd8383758 | |
235 | +0x000000b7f2cfc448: 0000000200000002 00007ffcd8383768 | |
236 | + | |
237 | +Instructions: (pc=0x00007ffcd7c8cbf8) | |
238 | +0x00007ffcd7c8caf8: 12 32 00 48 83 7e 08 00 48 8b 6c 24 60 74 4a 4c | |
239 | +0x00007ffcd7c8cb08: 8b ce 41 b0 64 41 8b d4 49 8b ce e8 a8 1d 00 00 | |
240 | +0x00007ffcd7c8cb18: 48 83 7e 08 00 75 20 49 8b 0e 8b 54 24 68 48 8b | |
241 | +0x00007ffcd7c8cb28: 7c 24 70 48 8b 41 28 48 8b 44 d0 08 48 83 c4 38 | |
242 | +0x00007ffcd7c8cb38: 41 5e 41 5c 5e 5b c3 48 8b 7c 24 70 33 c0 48 83 | |
243 | +0x00007ffcd7c8cb48: c4 38 41 5e 41 5c 5e 5b c3 48 83 3d bf 14 8c 00 | |
244 | +0x00007ffcd7c8cb58: 00 74 0b 48 8b d3 49 8b ce e8 ea 22 00 00 8b 44 | |
245 | +0x00007ffcd7c8cb68: 24 68 41 b9 07 00 00 00 48 8d 14 c5 00 00 00 00 | |
246 | +0x00007ffcd7c8cb78: 49 8b 06 48 8b 48 28 48 89 5c 11 08 49 8b 06 48 | |
247 | +0x00007ffcd7c8cb88: 8b 48 08 b0 64 f0 46 0f b0 4c 21 04 3c 67 75 24 | |
248 | +0x00007ffcd7c8cb98: 49 8b 06 33 ff 4c 8b c6 48 8b 48 28 48 89 7c 11 | |
249 | +0x00007ffcd7c8cba8: 08 41 8b d4 49 8b ce e8 2c 21 00 00 48 39 7e 08 | |
250 | +0x00007ffcd7c8cbb8: 48 0f 45 df 48 8b 7c 24 70 48 8b c3 48 83 c4 38 | |
251 | +0x00007ffcd7c8cbc8: 41 5e 41 5c 5e 5b c3 cc 48 8b 41 28 4c 63 ca 42 | |
252 | +0x00007ffcd7c8cbd8: 0f b7 54 c9 48 4c 89 44 d0 08 48 8b 41 08 42 c6 | |
253 | +0x00007ffcd7c8cbe8: 44 08 04 07 c3 cc cc cc 48 63 c2 0f b7 44 c1 4a | |
254 | +0x00007ffcd7c8cbf8: 48 8b 44 c1 48 c3 cc cc 49 63 c0 44 0f b7 44 c1 | |
255 | +0x00007ffcd7c8cc08: 4a 48 8b 42 18 4a 39 44 c1 48 0f 94 c0 c3 cc cc | |
256 | +0x00007ffcd7c8cc18: cc cc cc cc cc cc cc cc 48 89 5c 24 10 48 89 74 | |
257 | +0x00007ffcd7c8cc28: 24 18 57 48 83 ec 30 48 63 da 49 8b f0 48 8b f9 | |
258 | +0x00007ffcd7c8cc38: 85 d2 79 24 4c 8d 0d 0d cd 6a 00 ba b4 02 00 00 | |
259 | +0x00007ffcd7c8cc48: 4c 8d 05 39 cd 6a 00 48 8d 0d b2 cc 6a 00 e8 25 | |
260 | +0x00007ffcd7c8cc58: 7c 00 00 e8 80 cb 43 00 48 8b 4f 10 48 85 c9 74 | |
261 | +0x00007ffcd7c8cc68: 0f 48 8d 43 01 48 c1 e0 05 48 8b 04 08 0f b7 d8 | |
262 | +0x00007ffcd7c8cc78: 48 63 c3 48 8d 54 24 40 48 89 7c 24 20 48 89 74 | |
263 | +0x00007ffcd7c8cc88: 24 28 48 8b 8e 48 02 00 00 8b 5c c7 48 48 89 7c | |
264 | +0x00007ffcd7c8cc98: 24 40 e8 41 de dc ff 0f b7 d3 48 8d 4c 24 20 4c | |
265 | +0x00007ffcd7c8cca8: 8b c6 e8 f1 fb ff ff 48 8d 4c 24 20 48 8b d8 e8 | |
266 | +0x00007ffcd7c8ccb8: 84 c0 10 00 48 8b 74 24 50 48 8b c3 48 8b 5c 24 | |
267 | +0x00007ffcd7c8ccc8: 48 48 83 c4 30 5f c3 cc 48 89 5c 24 08 57 48 83 | |
268 | +0x00007ffcd7c8ccd8: ec 20 48 63 fa 48 8b d9 85 d2 79 24 4c 8d 0d 65 | |
269 | +0x00007ffcd7c8cce8: cc 6a 00 ba b4 02 00 00 4c 8d 05 91 cc 6a 00 48 | |
270 | + | |
271 | + | |
272 | +Stack slot to memory mapping: | |
273 | +stack at sp + 0 slots: 0x00007ffcd7dbc912 jvm.dll | |
274 | +stack at sp + 1 slots: 0x000001f2503d3150 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 | |
275 | +stack at sp + 2 slots: 0x000001f296533130 is a thread | |
276 | +stack at sp + 3 slots: 0x000001f296533130 is a thread | |
277 | +stack at sp + 4 slots: 0x00007ffc00000023 is an unknown value | |
278 | +stack at sp + 5 slots: 0x000001f2520ff988 is a pointer to class: | |
279 | +org.springframework.core.annotation.IntrospectionFailureLogger$1 {0x000001f2520ff990} | |
280 | + - instance size: 3 | |
281 | + - klass size: 75 | |
282 | + - access: final synchronized | |
283 | + - state: allocated | |
284 | + - name: 'org/springframework/core/annotation/IntrospectionFailureLogger$1' | |
285 | + - super: 'org/springframework/core/annotation/IntrospectionFailureLogger' | |
286 | + - sub: | |
287 | + - arrays: NULL | |
288 | + - methods: Array<T>(0x000001f2926e2580) | |
289 | + - method ordering: Array<T>(0x000001f2518f5030) | |
290 | + - default_methods: Array<T>(0x0000000000000000) | |
291 | + - local interfaces: Array<T>(0x000001f2515d1e38) | |
292 | + - trans. interfaces: Array<T>(0x000001f2515d79f8) | |
293 | + - constants: constant pool [55] {0x000001f2926e2350} for 'org/springframework/core/annotation/IntrospectionFailureLogger$1' | |
294 | + - class loader data: loader data: 0x000001f24f8be4f0 for instance a 'jdk/internal/loader/ClassLoaders$AppClassLoader'{0x0000000601414098} | |
295 | + - source file: 'IntrospectionFailureLogger.java' | |
296 | + - class annotations: Array<T>(0x0000000000000000) | |
297 | + - class type annotations: Array<T>(0x0000000000000000) | |
298 | + - field annotations: Array<T>(0x0000000000000000) | |
299 | + - field type annotations: Array<T>(0x0000000000000000) | |
300 | + - inner classes: Array<T>(0x000001f2926e2800) | |
301 | + - nest members: Array<T>(0x000001f2515d1dc8) | |
302 | + - permitted subclasses: Array<T>(0x000001f2515d1dc8) | |
303 | + - java mirror: NULL | |
304 | + - vtable length 9 (start addr: 0x000001f2520ffb50) | |
305 | + - itable length 8 (start addr: 0x000001f2520ffb98) | |
306 | + - ---- static fields (0 words): | |
307 | + - ---- non-static fields (2 words): | |
308 | + - private final 'ordinal' 'I' @12 | |
309 | + - private final 'name' 'Ljava/lang/String;' @16 | |
310 | + - non-static oop maps: 16-16 | |
311 | +stack at sp + 6 slots: 0x000001f2520ff730 is a pointer to class: | |
312 | +org.springframework.core.annotation.IntrospectionFailureLogger {0x000001f2520ff738} | |
313 | + - instance size: 3 | |
314 | + - klass size: 75 | |
315 | + - access: synchronized abstract | |
316 | + - state: being_initialized | |
317 | + - name: 'org/springframework/core/annotation/IntrospectionFailureLogger' | |
318 | + - super: 'java/lang/Enum' | |
319 | + - sub: | |
320 | + - arrays: NULL | |
321 | + - methods: Array<T>(0x000001f2926e1890) | |
322 | + - method ordering: Array<T>(0x000001f2518f5030) | |
323 | + - default_methods: Array<T>(0x0000000000000000) | |
324 | + - local interfaces: Array<T>(0x000001f2515d1e38) | |
325 | + - trans. interfaces: Array<T>(0x000001f2515d79f8) | |
326 | + - constants: constant pool [136]/operands[10] {0x000001f2926e1328} for 'org/springframework/core/annotation/IntrospectionFailureLogger' cache=0x000001f2926e2078 | |
327 | + - class loader data: loader data: 0x000001f24f8be4f0 for instance a 'jdk/internal/loader/ClassLoaders$AppClassLoader'{0x0000000601414098} | |
328 | + - source file: 'IntrospectionFailureLogger.java' | |
329 | + - class annotations: Array<T>(0x0000000000000000) | |
330 | + - class type annotations: Array<T>(0x0000000000000000) | |
331 | + - field annotations: Array<T>(0x000001f2926e1830) | |
332 | + - field type annotations: Array<T>(0x0000000000000000) | |
333 | + - generic signature: 'Ljava/lang/Enum<Lorg/springframework/core/annotation/IntrospectionFailureLogger;>;' | |
334 | + - inner classes: Array<T>(0x000001f2926e2010) | |
335 | + - nest members: Array<T>(0x000001f2926e2038) | |
336 | + - permitted subclasses: Array<T>(0x000001f2926e2048) | |
337 | + - java mirror: a 'java/lang/Class'{0x000000061fc37650} = 'org/springframework/core/annotation/IntrospectionFailureLogger' | |
338 | + - vtable length 9 (start addr: 0x000001f2520ff8f8) | |
339 | + - itable length 8 (start addr: 0x000001f2520ff940) | |
340 | + - ---- static fields (2 words): | |
341 | + - public static final 'DEBUG' 'Lorg/springframework/core/annotation/IntrospectionFailureLogger;' @112 | |
342 | + - public static final 'INFO' 'Lorg/springframework/core/annotation/IntrospectionFailureLogger;' @116 | |
343 | + - private static 'logger' 'Lorg/apache/commons/logging/Log;' @120 | |
344 | + - private static final synthetic '$VALUES' '[Lorg/springframework/core/annotation/IntrospectionFailureLogger;' @124 | |
345 | + - ---- non-static fields (2 words): | |
346 | + - private final 'ordinal' 'I' @12 | |
347 | + - private final 'name' 'Ljava/lang/String;' @16 | |
348 | + - non-static oop maps: 16-16 | |
349 | +stack at sp + 7 slots: 0x000001f2520ffa2c is pointing into metadata | |
350 | + | |
351 | + | |
352 | +Compiled method (n/a) 558 1527 n 0 java.lang.ClassLoader::defineClass1 (native) | |
353 | + total in heap [0x000001f237021290,0x000001f237021770] = 1248 | |
354 | + relocation [0x000001f2370213e8,0x000001f237021420] = 56 | |
355 | + main code [0x000001f237021420,0x000001f237021770] = 848 | |
356 | + | |
357 | +[Constant Pool (empty)] | |
358 | + | |
359 | +[MachCode] | |
360 | +[Entry Point] | |
361 | + # {method} {0x000001f251010ea8} 'defineClass1' '(Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class;' in 'java/lang/ClassLoader' | |
362 | + # parm0: rdx:rdx = 'java/lang/ClassLoader' | |
363 | + # parm1: r8:r8 = 'java/lang/String' | |
364 | + # parm2: r9:r9 = '[B' | |
365 | + # parm3: rdi = int | |
366 | + # parm4: rsi = int | |
367 | + # parm5: rcx:rcx = 'java/security/ProtectionDomain' | |
368 | + # parm6: [sp+0xa0] = 'java/lang/String' (sp of caller) | |
369 | + 0x000001f237021420: 448b 5208 | 49bb 0000 | 0051 f201 | 0000 4d03 | d349 3bc2 | 0f84 0600 | |
370 | + | |
371 | + 0x000001f237021438: ; {runtime_call ic_miss_stub} | |
372 | + 0x000001f237021438: 0000 e941 | b6b2 ff90 | |
373 | +[Verified Entry Point] | |
374 | + 0x000001f237021440: 8984 2400 | 90ff ff55 | 488b ec48 | 81ec 9000 | 0000 4881 | 7d10 0000 | 0000 488d | 4510 480f | |
375 | + 0x000001f237021460: 4445 1048 | 8944 2440 | 4889 4c24 | 7048 83f9 | 0048 8d44 | 2470 480f | 4444 2470 | 4889 4424 | |
376 | + 0x000001f237021480: 3848 8974 | 2430 4889 | 7c24 284c | 894c 2458 | 4983 f900 | 488d 4424 | 5848 0f44 | 4424 5848 | |
377 | + 0x000001f2370214a0: 8944 2420 | 4c89 4424 | 5049 83f8 | 004c 8d4c | 2450 4c0f | 444c 2450 | 4889 5424 | 4848 83fa | |
378 | + 0x000001f2370214c0: 004c 8d44 | 2448 4c0f | 4444 2448 | |
379 | + | |
380 | + 0x000001f2370214cc: ; {oop(a 'java/lang/Class'{0x0000000601414660} = 'java/lang/ClassLoader')} | |
381 | + 0x000001f2370214cc: 49be 6046 | 4101 0600 | 0000 4c89 | 7424 784c | 8d74 2478 | 498b d6c5 | |
382 | + | |
383 | + 0x000001f2370214e4: ; {internal_word} | |
384 | + 0x000001f2370214e4: f877 49ba | e314 0237 | f201 0000 | 4d89 9798 | 0200 0049 | 89a7 9002 | |
385 | + | |
386 | + 0x000001f2370214fc: ; {external_word} | |
387 | + 0x000001f2370214fc: 0000 49ba | c890 55d8 | fc7f 0000 | 4180 3a00 | 0f84 5200 | 0000 5241 | |
388 | + | |
389 | + 0x000001f237021514: ; {metadata({method} {0x000001f251010ea8} 'defineClass1' '(Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class;' in 'java/lang/ClassLoader')} | |
390 | + 0x000001f237021514: 5041 5148 | baa0 0e01 | 51f2 0100 | 0049 8bcf | 4883 ec20 | f7c4 0f00 | 0000 0f84 | 1a00 0000 | |
391 | + 0x000001f237021534: 4883 ec08 | |
392 | + | |
393 | + 0x000001f237021538: ; {runtime_call} | |
394 | + 0x000001f237021538: 49ba b0fe | 12d8 fc7f | 0000 41ff | d248 83c4 | 08e9 0d00 | |
395 | + | |
396 | + 0x000001f23702154c: ; {runtime_call} | |
397 | + 0x000001f23702154c: 0000 49ba | b0fe 12d8 | fc7f 0000 | 41ff d248 | 83c4 2041 | 5941 585a | 498d 8fb0 | 0200 0041 | |
398 | + 0x000001f23702156c: c787 4003 | 0000 0400 | |
399 | + | |
400 | + 0x000001f237021574: ; {runtime_call} | |
401 | + 0x000001f237021574: 0000 49ba | ac16 ec0b | fd7f 0000 | 41ff d2c5 | f877 41c7 | 8740 0300 | 0005 0000 | 00f0 8344 | |
402 | + 0x000001f237021594: 24c0 0049 | 3baf 4803 | 0000 0f87 | 1100 0000 | 4181 bf30 | 0300 0000 | 0000 000f | 842c 0000 | |
403 | + 0x000001f2370215b4: 00c5 f877 | 4889 45f8 | 498b cf4c | 8be4 4883 | ec20 4883 | |
404 | + | |
405 | + 0x000001f2370215c8: ; {runtime_call} | |
406 | + 0x000001f2370215c8: e4f0 49ba | 10ad 1dd8 | fc7f 0000 | 41ff d249 | 8be4 4d33 | e448 8b45 | f841 c787 | 4003 0000 | |
407 | + 0x000001f2370215e8: 0800 0000 | 4181 bfb0 | 0300 0002 | 0000 000f | 843f 0100 | |
408 | + | |
409 | + 0x000001f2370215fc: ; {external_word} | |
410 | + 0x000001f2370215fc: 0049 bac8 | 9055 d8fc | 7f00 0041 | 803a 000f | 8450 0000 | 0048 8945 | |
411 | + | |
412 | + 0x000001f237021614: ; {metadata({method} {0x000001f251010ea8} 'defineClass1' '(Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class;' in 'java/lang/ClassLoader')} | |
413 | + 0x000001f237021614: f848 baa0 | 0e01 51f2 | 0100 0049 | 8bcf 4883 | ec20 f7c4 | 0f00 0000 | 0f84 1a00 | 0000 4883 | |
414 | + 0x000001f237021634: ; {runtime_call} | |
415 | + 0x000001f237021634: ec08 49ba | b0fe 12d8 | fc7f 0000 | 41ff d248 | 83c4 08e9 | 0d00 0000 | |
416 | + | |
417 | + 0x000001f23702164c: ; {runtime_call} | |
418 | + 0x000001f23702164c: 49ba b0fe | 12d8 fc7f | 0000 41ff | d248 83c4 | 2048 8b45 | f849 c787 | 9002 0000 | 0000 0000 | |
419 | + 0x000001f23702166c: 49c7 8798 | 0200 0000 | 0000 00c5 | f877 4885 | c00f 8493 | 0000 0048 | f7c0 0100 | 0000 0f84 | |
420 | + 0x000001f23702168c: 8300 0000 | 488b 40ff | 4180 7f38 | 000f 846f | 0000 0048 | 83f8 000f | 8465 0000 | 0049 8b4f | |
421 | + 0x000001f2370216ac: 2048 83f9 | 000f 8414 | 0000 0048 | 83e9 0849 | 894f 2049 | 034f 3048 | 8901 e943 | 0000 0050 | |
422 | + 0x000001f2370216cc: 498b d748 | 8bc8 4883 | ec20 f7c4 | 0f00 0000 | 0f84 1a00 | 0000 4883 | |
423 | + | |
424 | + 0x000001f2370216e4: ; {runtime_call} | |
425 | + 0x000001f2370216e4: ec08 49ba | 00f5 d1d7 | fc7f 0000 | 41ff d248 | 83c4 08e9 | 0d00 0000 | |
426 | + | |
427 | + 0x000001f2370216fc: ; {runtime_call} | |
428 | + 0x000001f2370216fc: 49ba 00f5 | d1d7 fc7f | 0000 41ff | d248 83c4 | 2058 e903 | 0000 0048 | 8b00 498b | 8fd8 0000 | |
429 | + 0x000001f23702171c: 00c7 8100 | 0100 0000 | 0000 00c9 | 4981 7f08 | 0000 0000 | 0f85 0100 | |
430 | + | |
431 | + 0x000001f237021734: ; {runtime_call StubRoutines (1)} | |
432 | + 0x000001f237021734: 0000 c3e9 | c4f7 adff | c5f8 7748 | 8945 f84c | 8be4 4883 | ec20 4883 | |
433 | + | |
434 | + 0x000001f23702174c: ; {runtime_call} | |
435 | + 0x000001f23702174c: e4f0 49ba | d02f 13d8 | fc7f 0000 | 41ff d249 | 8be4 4d33 | e448 8b45 | f8e9 93fe | ffff f4f4 | |
436 | + 0x000001f23702176c: f4f4 f4f4 | |
437 | +[/MachCode] | |
438 | + | |
439 | + | |
440 | +Compiled method (c1) 563 1545 1 jdk.internal.loader.BuiltinClassLoader::defineClass (121 bytes) | |
441 | + total in heap [0x000001f23702cc10,0x000001f23702daa8] = 3736 | |
442 | + relocation [0x000001f23702cd68,0x000001f23702ce98] = 304 | |
443 | + main code [0x000001f23702cea0,0x000001f23702d4e0] = 1600 | |
444 | + stub code [0x000001f23702d4e0,0x000001f23702d628] = 328 | |
445 | + metadata [0x000001f23702d628,0x000001f23702d670] = 72 | |
446 | + scopes data [0x000001f23702d670,0x000001f23702d8c8] = 600 | |
447 | + scopes pcs [0x000001f23702d8c8,0x000001f23702da68] = 416 | |
448 | + dependencies [0x000001f23702da68,0x000001f23702da70] = 8 | |
449 | + handler table [0x000001f23702da70,0x000001f23702da88] = 24 | |
450 | + nul chk table [0x000001f23702da88,0x000001f23702daa8] = 32 | |
451 | + | |
452 | +[Constant Pool (empty)] | |
453 | + | |
454 | +[MachCode] | |
455 | +[Entry Point] | |
456 | + # {method} {0x000001f25143ceb0} 'defineClass' '(Ljava/lang/String;Ljdk/internal/loader/Resource;)Ljava/lang/Class;' in 'jdk/internal/loader/BuiltinClassLoader' | |
457 | + # this: rdx:rdx = 'jdk/internal/loader/BuiltinClassLoader' | |
458 | + # parm0: r8:r8 = 'java/lang/String' | |
459 | + # parm1: r9:r9 = 'jdk/internal/loader/Resource' | |
460 | + # [sp+0x110] (sp of caller) | |
461 | + 0x000001f23702cea0: 448b 5208 | 49bb 0000 | 0051 f201 | 0000 4d03 | d34c 3bd0 | |
462 | + | |
463 | + 0x000001f23702ceb4: ; {runtime_call ic_miss_stub} | |
464 | + 0x000001f23702ceb4: 0f85 c6fb | b1ff 660f | 1f44 0000 | |
465 | +[Verified Entry Point] | |
466 | + 0x000001f23702cec0: 8984 2400 | 90ff ff55 | 4881 ec00 | 0100 0048 | 8994 24a0 | 0000 004c | 8984 2490 | 0000 004c | |
467 | + 0x000001f23702cee0: 898c 2498 | 0000 0049 | 8bd1 6666 | 9048 b868 | f501 51f2 | |
468 | + | |
469 | + 0x000001f23702cef4: ; {virtual_call} | |
470 | + 0x000001f23702cef4: 0100 00e8 | |
471 | + | |
472 | + 0x000001f23702cef8: ; ImmutableOopMap {[152]=Oop [160]=Oop [144]=Oop } | |
473 | + ;*invokevirtual getCodeSourceURL {reexecute=0 rethrow=0 return_oop=0} | |
474 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@1 (line 842) | |
475 | + 0x000001f23702cef8: a420 0000 | 4889 8424 | a800 0000 | 4c8b 8424 | 9000 0000 | |
476 | + | |
477 | + 0x000001f23702cf0c: ; implicit exception: dispatches to 0x000001f23702d3d3 | |
478 | + 0x000001f23702cf0c: 418b 7014 | 48c1 e603 | |
479 | + | |
480 | + 0x000001f23702cf14: ; implicit exception: dispatches to 0x000001f23702d3d8 | |
481 | + 0x000001f23702cf14: 8b56 0c45 | 0fbe 4810 | 498b c9c1 | e118 c1f9 | 18d3 fa48 | 8bfa ffcf | 4183 f900 | ba00 0000 | |
482 | + 0x000001f23702cf34: 000f 8505 | 0000 00ba | 0100 0000 | 83e2 0183 | fa00 488b | d641 b82e | 0000 004c | 8bcf 0f84 | |
483 | + 0x000001f23702cf54: 1100 0000 | 0f1f 8000 | |
484 | + | |
485 | + 0x000001f23702cf5c: ; {static_call} | |
486 | + 0x000001f23702cf5c: 0000 00e8 | |
487 | + | |
488 | + 0x000001f23702cf60: ; ImmutableOopMap {[152]=Oop [160]=Oop [168]=Oop [144]=Oop } | |
489 | + ;*invokestatic lastIndexOf {reexecute=0 rethrow=0 return_oop=0} | |
490 | + ; - java.lang.String::lastIndexOf@13 (line 2491) | |
491 | + ; - java.lang.String::lastIndexOf@8 (line 2453) | |
492 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@8 (line 845) | |
493 | + 0x000001f23702cf60: bcfe d2ff | e90b 0000 | 0066 0f1f | |
494 | + | |
495 | + 0x000001f23702cf6c: ; {static_call} | |
496 | + 0x000001f23702cf6c: 4400 00e8 | |
497 | + | |
498 | + 0x000001f23702cf70: ; ImmutableOopMap {[152]=Oop [160]=Oop [168]=Oop [144]=Oop } | |
499 | + ;*invokestatic lastIndexOf {reexecute=0 rethrow=0 return_oop=0} | |
500 | + ; - java.lang.String::lastIndexOf@25 (line 2492) | |
501 | + ; - java.lang.String::lastIndexOf@8 (line 2453) | |
502 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@8 (line 845) | |
503 | + 0x000001f23702cf70: 0c04 b2ff | 83f8 ff0f | 8467 0000 | 0041 b800 | 0000 004c | 8bc8 488b | 9424 9000 | |
504 | + | |
505 | + 0x000001f23702cf8c: ; {optimized virtual_call} | |
506 | + 0x000001f23702cf8c: 0000 90e8 | |
507 | + | |
508 | + 0x000001f23702cf90: ; ImmutableOopMap {[152]=Oop [160]=Oop [168]=Oop [144]=Oop } | |
509 | + ;*invokevirtual substring {reexecute=0 rethrow=0 return_oop=0} | |
510 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@23 (line 847) | |
511 | + 0x000001f23702cf90: ecb7 d1ff | 488b 9424 | 9800 0000 | 4889 8424 | b000 0000 | 9048 b868 | f501 51f2 | |
512 | + | |
513 | + 0x000001f23702cfac: ; {virtual_call} | |
514 | + 0x000001f23702cfac: 0100 00e8 | |
515 | + | |
516 | + 0x000001f23702cfb0: ; ImmutableOopMap {[152]=Oop [160]=Oop [168]=Oop [144]=Oop [176]=Oop } | |
517 | + ;*invokevirtual getManifest {reexecute=0 rethrow=0 return_oop=0} | |
518 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@29 (line 848) | |
519 | + 0x000001f23702cfb0: cc29 0000 | 4c8b 8424 | b000 0000 | 4c8b c848 | 8bbc 24a8 | 0000 0048 | 8b94 24a0 | 0000 0066 | |
520 | + 0x000001f23702cfd0: 0f1f 4400 | 0048 b8c8 | b708 51f2 | |
521 | + | |
522 | + 0x000001f23702cfdc: ; {virtual_call} | |
523 | + 0x000001f23702cfdc: 0100 00e8 | |
524 | + | |
525 | + 0x000001f23702cfe0: ; ImmutableOopMap {[152]=Oop [160]=Oop [168]=Oop [144]=Oop } | |
526 | + ;*invokevirtual defineOrCheckPackage {reexecute=0 rethrow=0 return_oop=0} | |
527 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@40 (line 849) | |
528 | + 0x000001f23702cfe0: bcd0 ffff | 4c8b 8c24 | 9800 0000 | 488d 9424 | e000 0000 | 4c89 4a08 | 498b 0148 | 83c8 0148 | |
529 | + 0x000001f23702d000: 8902 f049 | 0fb1 110f | 8413 0000 | 0048 2bc4 | 4881 e007 | f0ff ff48 | 8902 0f85 | bd03 0000 | |
530 | + 0x000001f23702d020: 418b 510c | 48c1 e203 | 4883 fa00 | 0f85 4700 | 0000 498b | d148 b8ff | ffff ffff | |
531 | + | |
532 | + 0x000001f23702d03c: ; {virtual_call} | |
533 | + 0x000001f23702d03c: ffff ffe8 | |
534 | + | |
535 | + 0x000001f23702d040: ; ImmutableOopMap {[160]=Oop [168]=Oop [144]=Oop [152]=Oop [232]=Oop } | |
536 | + ;*invokevirtual getInputStream {reexecute=0 rethrow=0 return_oop=0} | |
537 | + ; - jdk.internal.loader.Resource::cachedInputStream@9 (line 77) | |
538 | + ; - jdk.internal.loader.Resource::getByteBuffer@1 (line 163) | |
539 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@45 (line 853) | |
540 | + 0x000001f23702d040: dcc8 b1ff | 410f be57 | 3883 fa00 | 4c8b 8c24 | 9800 0000 | 0f85 9603 | 0000 4c8b | d049 c1ea | |
541 | + 0x000001f23702d060: 0345 8951 | 0c49 8bd1 | 4833 d048 | c1ea 1648 | 83fa 000f | 8597 0300 | 0041 8b51 | 0c48 c1e2 | |
542 | + 0x000001f23702d080: 0348 8d84 | 24e0 0000 | 0048 8b30 | 4885 f60f | 840f 0000 | 0048 8b78 | 08f0 480f | b137 0f85 | |
543 | + 0x000001f23702d0a0: 8403 0000 | 4883 fa00 | 0f84 4400 | |
544 | + | |
545 | + 0x000001f23702d0ac: ; {metadata('sun/nio/ByteBuffered')} | |
546 | + 0x000001f23702d0ac: 0000 48b8 | 903a 0a51 | f201 0000 | 8b5a 0849 | ba00 0000 | 51f2 0100 | 0049 03da | 483b 4320 | |
547 | + 0x000001f23702d0cc: 0f84 2500 | 0000 483b | d80f 841c | 0000 0053 | |
548 | + | |
549 | + 0x000001f23702d0dc: ; {runtime_call slow_subtype_check Runtime1 stub} | |
550 | + 0x000001f23702d0dc: 50e8 1ea1 | bcff 5b5b | 83fb 000f | 8405 0000 | 00e9 0500 | 0000 4833 | f6eb 0a48 | be01 0000 | |
551 | + 0x000001f23702d0fc: 0000 0000 | 0083 fe00 | 0f84 6700 | 0000 4883 | fa00 0f84 | 4400 0000 | |
552 | + | |
553 | + 0x000001f23702d114: ; {metadata('sun/nio/ByteBuffered')} | |
554 | + 0x000001f23702d114: 48bb 903a | 0a51 f201 | 0000 8b7a | 0849 ba00 | 0000 51f2 | 0100 0049 | 03fa 483b | 5f20 0f84 | |
555 | + 0x000001f23702d134: 2000 0000 | 483b fb0f | 8417 0000 | |
556 | + | |
557 | + 0x000001f23702d140: ; {runtime_call slow_subtype_check Runtime1 stub} | |
558 | + 0x000001f23702d140: 0057 53e8 | b8a0 bcff | 5f5f 83ff | 000f 84eb | 0200 00e9 | 0000 0000 | 0f1f 4400 | 0048 b8ff | |
559 | + 0x000001f23702d160: ffff ffff | |
560 | + | |
561 | + 0x000001f23702d164: ; {virtual_call} | |
562 | + 0x000001f23702d164: ffff ffe8 | |
563 | + | |
564 | + 0x000001f23702d168: ; ImmutableOopMap {[160]=Oop [168]=Oop [144]=Oop [152]=Oop } | |
565 | + ;*invokeinterface getByteBuffer {reexecute=0 rethrow=0 return_oop=0} | |
566 | + ; - jdk.internal.loader.Resource::getByteBuffer@16 (line 165) | |
567 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@45 (line 853) | |
568 | + 0x000001f23702d168: 14ff b1ff | e90a 0000 | |
569 | + | |
570 | + 0x000001f23702d170: ; {oop(NULL)} | |
571 | + 0x000001f23702d170: 0048 b800 | 0000 0000 | 0000 0048 | 83f8 000f | 84e5 0000 | 0048 8984 | 24b8 0000 | 0048 8b94 | |
572 | + 0x000001f23702d190: 2498 0000 | 0048 b8ff | ffff ffff | |
573 | + | |
574 | + 0x000001f23702d19c: ; {virtual_call} | |
575 | + 0x000001f23702d19c: ffff ffe8 | |
576 | + | |
577 | + 0x000001f23702d1a0: ; ImmutableOopMap {[160]=Oop [168]=Oop [144]=Oop [184]=Oop } | |
578 | + ;*invokevirtual getCodeSigners {reexecute=0 rethrow=0 return_oop=0} | |
579 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@56 (line 855) | |
580 | + 0x000001f23702d1a0: dcfe b1ff | |
581 | + | |
582 | + 0x000001f23702d1a4: ; {metadata('java/security/CodeSource')} | |
583 | + 0x000001f23702d1a4: 4c8b c848 | ba30 ee00 | 51f2 0100 | 0049 8b87 | 0801 0000 | 488d 7828 | 493b bf18 | 0100 000f | |
584 | + 0x000001f23702d1c4: 877e 0200 | 0049 89bf | 0801 0000 | 48c7 0001 | 0000 0048 | 8bca 49ba | 0000 0051 | f201 0000 | |
585 | + 0x000001f23702d1e4: 492b ca89 | 4808 4833 | c989 480c | 4833 c948 | 8948 1048 | 8948 1848 | 8948 204c | 8b84 24a8 | |
586 | + 0x000001f23702d204: 0000 0048 | 8bd0 4889 | 8424 c000 | 0000 0f1f | |
587 | + | |
588 | + 0x000001f23702d214: ; {optimized virtual_call} | |
589 | + 0x000001f23702d214: 4400 00e8 | |
590 | + | |
591 | + 0x000001f23702d218: ; ImmutableOopMap {[160]=Oop [144]=Oop [184]=Oop [192]=Oop } | |
592 | + ;*invokespecial <init> {reexecute=0 rethrow=0 return_oop=0} | |
593 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@68 (line 856) | |
594 | + 0x000001f23702d218: 64fb b1ff | 4c8b 8424 | c000 0000 | 488b 9424 | a000 0000 | |
595 | + | |
596 | + 0x000001f23702d22c: ; {optimized virtual_call} | |
597 | + 0x000001f23702d22c: 6666 90e8 | |
598 | + | |
599 | + 0x000001f23702d230: ; ImmutableOopMap {[160]=Oop [144]=Oop [184]=Oop } | |
600 | + ;*invokevirtual getProtectionDomain {reexecute=0 rethrow=0 return_oop=0} | |
601 | + ; - java.security.SecureClassLoader::defineClass@5 (line 182) | |
602 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@79 (line 857) | |
603 | + 0x000001f23702d230: 4cfb b1ff | 4c8b 8424 | 9000 0000 | 4c8b 8c24 | b800 0000 | 488b f848 | 8b94 24a0 | |
604 | + | |
605 | + 0x000001f23702d24c: ; {optimized virtual_call} | |
606 | + 0x000001f23702d24c: 0000 00e8 | |
607 | + | |
608 | + 0x000001f23702d250: ; ImmutableOopMap {} | |
609 | + ;*invokevirtual defineClass {reexecute=0 rethrow=0 return_oop=0} | |
610 | + ; - java.security.SecureClassLoader::defineClass@8 (line 182) | |
611 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@79 (line 857) | |
612 | + 0x000001f23702d250: 2cfb b1ff | 4881 c400 | 0100 005d | |
613 | + | |
614 | + 0x000001f23702d25c: ; {poll_return} | |
615 | + 0x000001f23702d25c: 493b a748 | 0300 000f | 87eb 0100 | 00c3 4c8b | 8c24 9800 | 0000 498b | d148 b8ff | ffff ffff | |
616 | + 0x000001f23702d27c: ; {virtual_call} | |
617 | + 0x000001f23702d27c: ffff ffe8 | |
618 | + | |
619 | + 0x000001f23702d280: ; ImmutableOopMap {[160]=Oop [144]=Oop [152]=Oop [168]=Oop } | |
620 | + ;*invokevirtual getBytes {reexecute=0 rethrow=0 return_oop=0} | |
621 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@84 (line 859) | |
622 | + 0x000001f23702d280: dcc6 b1ff | 4889 8424 | c800 0000 | 488b 9424 | 9800 0000 | 9048 b8ff | ffff ffff | |
623 | + | |
624 | + 0x000001f23702d29c: ; {virtual_call} | |
625 | + 0x000001f23702d29c: ffff ffe8 | |
626 | + | |
627 | + 0x000001f23702d2a0: ; ImmutableOopMap {[160]=Oop [144]=Oop [168]=Oop [200]=Oop } | |
628 | + ;*invokevirtual getCodeSigners {reexecute=0 rethrow=0 return_oop=0} | |
629 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@90 (line 860) | |
630 | + 0x000001f23702d2a0: fcc6 b1ff | |
631 | + | |
632 | + 0x000001f23702d2a4: ; {metadata('java/security/CodeSource')} | |
633 | + 0x000001f23702d2a4: 4c8b c848 | ba30 ee00 | 51f2 0100 | 0049 8b87 | 0801 0000 | 488d 7828 | 493b bf18 | 0100 000f | |
634 | + 0x000001f23702d2c4: 87a1 0100 | 0049 89bf | 0801 0000 | 48c7 0001 | 0000 0048 | 8bca 49ba | 0000 0051 | f201 0000 | |
635 | + 0x000001f23702d2e4: 492b ca89 | 4808 4833 | c989 480c | 4833 c948 | 8948 1048 | 8948 1848 | 8948 204c | 8b84 24a8 | |
636 | + 0x000001f23702d304: 0000 0048 | 8bd0 4889 | 8424 d000 | 0000 0f1f | |
637 | + | |
638 | + 0x000001f23702d314: ; {optimized virtual_call} | |
639 | + 0x000001f23702d314: 4400 00e8 | |
640 | + | |
641 | + 0x000001f23702d318: ; ImmutableOopMap {[160]=Oop [144]=Oop [200]=Oop [208]=Oop } | |
642 | + ;*invokespecial <init> {reexecute=0 rethrow=0 return_oop=0} | |
643 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@102 (line 861) | |
644 | + 0x000001f23702d318: c450 ffff | 488b 8424 | c800 0000 | |
645 | + | |
646 | + 0x000001f23702d324: ; implicit exception: dispatches to 0x000001f23702d477 | |
647 | + 0x000001f23702d324: 8b70 0c4c | 8b84 24d0 | 0000 0048 | 8b94 24a0 | 0000 0089 | b424 d800 | |
648 | + | |
649 | + 0x000001f23702d33c: ; {optimized virtual_call} | |
650 | + 0x000001f23702d33c: 0000 90e8 | |
651 | + | |
652 | + 0x000001f23702d340: ; ImmutableOopMap {[160]=Oop [144]=Oop [200]=Oop } | |
653 | + ;*invokevirtual getProtectionDomain {reexecute=0 rethrow=0 return_oop=0} | |
654 | + ; - java.security.SecureClassLoader::defineClass@9 (line 150) | |
655 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@117 (line 862) | |
656 | + 0x000001f23702d340: 9c56 ffff | 4c8b 8424 | 9000 0000 | 4c8b 8c24 | c800 0000 | bf00 0000 | 008b b424 | d800 0000 | |
657 | + 0x000001f23702d360: 488b c848 | 8b94 24a0 | 0000 000f | |
658 | + | |
659 | + 0x000001f23702d36c: ; {optimized virtual_call} | |
660 | + 0x000001f23702d36c: 1f40 00e8 | |
661 | + | |
662 | + 0x000001f23702d370: ; ImmutableOopMap {} | |
663 | + ;*invokevirtual defineClass {reexecute=0 rethrow=0 return_oop=0} | |
664 | + ; - java.security.SecureClassLoader::defineClass@12 (line 150) | |
665 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@117 (line 862) | |
666 | + 0x000001f23702d370: 7102 0000 | 4881 c400 | 0100 005d | |
667 | + | |
668 | + 0x000001f23702d37c: ; {poll_return} | |
669 | + 0x000001f23702d37c: 493b a748 | 0300 000f | 87f3 0000 | 00c3 498b | 87d8 0300 | 004d 33d2 | 4d89 97d8 | 0300 004d | |
670 | + 0x000001f23702d39c: 33d2 4d89 | 97e0 0300 | 0048 8bf0 | 488d 8424 | e000 0000 | 488b 3848 | 85ff 0f84 | 0f00 0000 | |
671 | + 0x000001f23702d3bc: 488b 5808 | f048 0fb1 | 3b0f 85c7 | 0000 0048 | 8bc6 e9f4 | |
672 | + | |
673 | + 0x000001f23702d3d0: ; {runtime_call throw_null_pointer_exception Runtime1 stub} | |
674 | + 0x000001f23702d3d0: 0000 00e8 | |
675 | + | |
676 | + 0x000001f23702d3d4: ; ImmutableOopMap {[152]=Oop [160]=Oop rax=Oop [168]=Oop r8=Oop [144]=Oop } | |
677 | + ;*invokevirtual lastIndexOf {reexecute=0 rethrow=0 return_oop=0} | |
678 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@8 (line 845) | |
679 | + 0x000001f23702d3d4: 4871 bcff | |
680 | + | |
681 | + 0x000001f23702d3d8: ; {runtime_call throw_null_pointer_exception Runtime1 stub} | |
682 | + 0x000001f23702d3d8: e843 71bc | |
683 | + | |
684 | + 0x000001f23702d3dc: ; ImmutableOopMap {[152]=Oop [160]=Oop rax=Oop [168]=Oop r8=Oop [144]=Oop rsi=Oop } | |
685 | + ;*arraylength {reexecute=0 rethrow=0 return_oop=0} | |
686 | + ; - java.lang.String::length@4 (line 1483) | |
687 | + ; - java.lang.String::lastIndexOf@3 (line 2453) | |
688 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@8 (line 845) | |
689 | + 0x000001f23702d3dc: ff4c 894c | 2408 4889 | |
690 | + | |
691 | + 0x000001f23702d3e4: ; {runtime_call monitorenter_nofpu Runtime1 stub} | |
692 | + 0x000001f23702d3e4: 1424 e815 | |
693 | + | |
694 | + 0x000001f23702d3e8: ; ImmutableOopMap {[160]=Oop [168]=Oop [144]=Oop r9=Oop [152]=Oop [232]=Oop } | |
695 | + ;*synchronization entry | |
696 | + ; - jdk.internal.loader.Resource::cachedInputStream@-1 (line 76) | |
697 | + ; - jdk.internal.loader.Resource::getByteBuffer@1 (line 163) | |
698 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@45 (line 853) | |
699 | + 0x000001f23702d3e8: a4bc ffe9 | 30fc ffff | 418b 510c | 48c1 e203 | 4883 fa00 | 0f84 58fc | ffff 4889 | |
700 | + | |
701 | + 0x000001f23702d404: ; {runtime_call g1_pre_barrier_slow} | |
702 | + 0x000001f23702d404: 1424 e8f5 | cabc ffe9 | 4afc ffff | 4883 f800 | 0f84 5ffc | ffff 4c89 | |
703 | + | |
704 | + 0x000001f23702d41c: ; {runtime_call g1_post_barrier_slow} | |
705 | + 0x000001f23702d41c: 0c24 e8dd | cdbc ffe9 | 51fc ffff | 488d 8424 | e000 0000 | 4889 0424 | |
706 | + | |
707 | + 0x000001f23702d434: ; {runtime_call monitorexit_nofpu Runtime1 stub} | |
708 | + 0x000001f23702d434: e8c7 a9bc | ffe9 66fc | ffff 4889 | |
709 | + | |
710 | + 0x000001f23702d440: ; {runtime_call throw_class_cast_exception Runtime1 stub} | |
711 | + 0x000001f23702d440: 1424 e8d9 | |
712 | + | |
713 | + 0x000001f23702d444: ; ImmutableOopMap {[160]=Oop [168]=Oop [144]=Oop [152]=Oop } | |
714 | + ;*checkcast {reexecute=0 rethrow=0 return_oop=0} | |
715 | + ; - jdk.internal.loader.Resource::getByteBuffer@13 (line 165) | |
716 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@45 (line 853) | |
717 | + 0x000001f23702d444: 97bc ff48 | |
718 | + | |
719 | + 0x000001f23702d448: ; {runtime_call fast_new_instance Runtime1 stub} | |
720 | + 0x000001f23702d448: 8bd2 e8b1 | |
721 | + | |
722 | + 0x000001f23702d44c: ; ImmutableOopMap {[160]=Oop [168]=Oop [144]=Oop [184]=Oop r9=Oop } | |
723 | + ;*new {reexecute=0 rethrow=0 return_oop=0} | |
724 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@61 (line 856) | |
725 | + 0x000001f23702d44c: 7cbc ffe9 | abfd ffff | |
726 | + | |
727 | + 0x000001f23702d454: ; {internal_word} | |
728 | + 0x000001f23702d454: 49ba 5cd2 | 0237 f201 | 0000 4d89 | 9760 0300 | |
729 | + | |
730 | + 0x000001f23702d464: ; {runtime_call SafepointBlob} | |
731 | + 0x000001f23702d464: 00e9 965f | b2ff 488b | |
732 | + | |
733 | + 0x000001f23702d46c: ; {runtime_call fast_new_instance Runtime1 stub} | |
734 | + 0x000001f23702d46c: d2e8 8e7c | |
735 | + | |
736 | + 0x000001f23702d470: ; ImmutableOopMap {[160]=Oop [144]=Oop [168]=Oop [200]=Oop r9=Oop } | |
737 | + ;*new {reexecute=0 rethrow=0 return_oop=0} | |
738 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@95 (line 861) | |
739 | + 0x000001f23702d470: bcff e988 | |
740 | + | |
741 | + 0x000001f23702d474: ; {runtime_call throw_null_pointer_exception Runtime1 stub} | |
742 | + 0x000001f23702d474: feff ffe8 | |
743 | + | |
744 | + 0x000001f23702d478: ; ImmutableOopMap {[160]=Oop [144]=Oop [208]=Oop rax=Oop [200]=Oop } | |
745 | + ;*arraylength {reexecute=0 rethrow=0 return_oop=0} | |
746 | + ; - jdk.internal.loader.BuiltinClassLoader::defineClass@114 (line 862) | |
747 | + 0x000001f23702d478: a470 bcff | |
748 | + | |
749 | + 0x000001f23702d47c: ; {internal_word} | |
750 | + 0x000001f23702d47c: 49ba 7cd3 | 0237 f201 | 0000 4d89 | 9760 0300 | |
751 | + | |
752 | + 0x000001f23702d48c: ; {runtime_call SafepointBlob} | |
753 | + 0x000001f23702d48c: 00e9 6e5f | b2ff 488d | 8424 e000 | 0000 4889 | |
754 | + | |
755 | + 0x000001f23702d49c: ; {runtime_call monitorexit_nofpu Runtime1 stub} | |
756 | + 0x000001f23702d49c: 0424 e85d | a9bc ffe9 | 23ff ffff | 9090 498b | 87d8 0300 | 0049 c787 | d803 0000 | 0000 0000 | |
757 | + 0x000001f23702d4bc: 49c7 87e0 | 0300 0000 | 0000 0048 | 81c4 0001 | |
758 | + | |
759 | + 0x000001f23702d4cc: ; {runtime_call unwind_exception Runtime1 stub} | |
760 | + 0x000001f23702d4cc: 0000 5de9 | 2c61 bcff | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 | |
761 | +[Stub Code] | |
762 | + 0x000001f23702d4e0: ; {no_reloc} | |
763 | + 0x000001f23702d4e0: 0f1f 4400 | |
764 | + | |
765 | + 0x000001f23702d4e4: ; {static_stub} | |
766 | + 0x000001f23702d4e4: 0048 bb00 | 0000 0000 | |
767 | + | |
768 | + 0x000001f23702d4ec: ; {runtime_call} | |
769 | + 0x000001f23702d4ec: 0000 00e9 | fbff ffff | |
770 | + | |
771 | + 0x000001f23702d4f4: ; {static_stub} | |
772 | + 0x000001f23702d4f4: 9048 bb00 | 0000 0000 | |
773 | + | |
774 | + 0x000001f23702d4fc: ; {runtime_call} | |
775 | + 0x000001f23702d4fc: 0000 00e9 | fbff ffff | |
776 | + | |
777 | + 0x000001f23702d504: ; {static_stub} | |
778 | + 0x000001f23702d504: 9048 bb00 | 0000 0000 | |
779 | + | |
780 | + 0x000001f23702d50c: ; {runtime_call} | |
781 | + 0x000001f23702d50c: 0000 00e9 | fbff ffff | |
782 | + | |
783 | + 0x000001f23702d514: ; {static_stub} | |
784 | + 0x000001f23702d514: 9048 bb00 | 0000 0000 | |
785 | + | |
786 | + 0x000001f23702d51c: ; {runtime_call} | |
787 | + 0x000001f23702d51c: 0000 00e9 | fbff ffff | |
788 | + | |
789 | + 0x000001f23702d524: ; {static_stub} | |
790 | + 0x000001f23702d524: 9048 bb00 | 0000 0000 | |
791 | + | |
792 | + 0x000001f23702d52c: ; {runtime_call} | |
793 | + 0x000001f23702d52c: 0000 00e9 | fbff ffff | |
794 | + | |
795 | + 0x000001f23702d534: ; {static_stub} | |
796 | + 0x000001f23702d534: 9048 bb00 | 0000 0000 | |
797 | + | |
798 | + 0x000001f23702d53c: ; {runtime_call} | |
799 | + 0x000001f23702d53c: 0000 00e9 | fbff ffff | |
800 | + | |
801 | + 0x000001f23702d544: ; {static_stub} | |
802 | + 0x000001f23702d544: 9048 bb00 | 0000 0000 | |
803 | + | |
804 | + 0x000001f23702d54c: ; {runtime_call} | |
805 | + 0x000001f23702d54c: 0000 00e9 | fbff ffff | |
806 | + | |
807 | + 0x000001f23702d554: ; {static_stub} | |
808 | + 0x000001f23702d554: 9048 bb00 | 0000 0000 | |
809 | + | |
810 | + 0x000001f23702d55c: ; {runtime_call} | |
811 | + 0x000001f23702d55c: 0000 00e9 | fbff ffff | |
812 | + | |
813 | + 0x000001f23702d564: ; {static_stub} | |
814 | + 0x000001f23702d564: 9048 bb00 | 0000 0000 | |
815 | + | |
816 | + 0x000001f23702d56c: ; {runtime_call} | |
817 | + 0x000001f23702d56c: 0000 00e9 | fbff ffff | |
818 | + | |
819 | + 0x000001f23702d574: ; {static_stub} | |
820 | + 0x000001f23702d574: 9048 bb00 | 0000 0000 | |
821 | + | |
822 | + 0x000001f23702d57c: ; {runtime_call} | |
823 | + 0x000001f23702d57c: 0000 00e9 | fbff ffff | |
824 | + | |
825 | + 0x000001f23702d584: ; {static_stub} | |
826 | + 0x000001f23702d584: 9048 bb00 | 0000 0000 | |
827 | + | |
828 | + 0x000001f23702d58c: ; {runtime_call} | |
829 | + 0x000001f23702d58c: 0000 00e9 | fbff ffff | |
830 | + | |
831 | + 0x000001f23702d594: ; {static_stub} | |
832 | + 0x000001f23702d594: 9048 bb00 | 0000 0000 | |
833 | + | |
834 | + 0x000001f23702d59c: ; {runtime_call} | |
835 | + 0x000001f23702d59c: 0000 00e9 | fbff ffff | |
836 | + | |
837 | + 0x000001f23702d5a4: ; {static_stub} | |
838 | + 0x000001f23702d5a4: 9048 bb00 | 0000 0000 | |
839 | + | |
840 | + 0x000001f23702d5ac: ; {runtime_call} | |
841 | + 0x000001f23702d5ac: 0000 00e9 | fbff ffff | |
842 | + | |
843 | + 0x000001f23702d5b4: ; {static_stub} | |
844 | + 0x000001f23702d5b4: 9048 bb00 | 0000 0000 | |
845 | + | |
846 | + 0x000001f23702d5bc: ; {runtime_call} | |
847 | + 0x000001f23702d5bc: 0000 00e9 | fbff ffff | |
848 | + | |
849 | + 0x000001f23702d5c4: ; {static_stub} | |
850 | + 0x000001f23702d5c4: 9048 bb00 | 0000 0000 | |
851 | + | |
852 | + 0x000001f23702d5cc: ; {runtime_call} | |
853 | + 0x000001f23702d5cc: 0000 00e9 | fbff ffff | |
854 | + | |
855 | + 0x000001f23702d5d4: ; {static_stub} | |
856 | + 0x000001f23702d5d4: 9048 bb00 | 0000 0000 | |
857 | + | |
858 | + 0x000001f23702d5dc: ; {runtime_call} | |
859 | + 0x000001f23702d5dc: 0000 00e9 | fbff ffff | |
860 | + | |
861 | + 0x000001f23702d5e4: ; {static_stub} | |
862 | + 0x000001f23702d5e4: 9048 bbe0 | 0b01 51f2 | |
863 | + | |
864 | + 0x000001f23702d5ec: ; {runtime_call I2C/C2I adapters} | |
865 | + 0x000001f23702d5ec: 0100 00e9 | f75a b1ff | |
866 | +[Exception Handler] | |
867 | + 0x000001f23702d5f4: ; {runtime_call handle_exception_from_callee Runtime1 stub} | |
868 | + 0x000001f23702d5f4: e807 90bc | |
869 | + | |
870 | + 0x000001f23702d5f8: ; {external_word} | |
871 | + 0x000001f23702d5f8: ff48 b990 | f031 d8fc | 7f00 0048 | |
872 | + | |
873 | + 0x000001f23702d604: ; {runtime_call} | |
874 | + 0x000001f23702d604: 83e4 f049 | ba20 f9ff | d7fc 7f00 | 0041 ffd2 | |
875 | + | |
876 | + 0x000001f23702d614: ; {section_word} | |
877 | + 0x000001f23702d614: f449 ba15 | d602 37f2 | 0100 0041 | |
878 | + | |
879 | + 0x000001f23702d620: ; {runtime_call DeoptimizationBlob} | |
880 | + 0x000001f23702d620: 52e9 7a50 | b2ff f4f4 | |
881 | +[/MachCode] | |
882 | + | |
883 | + | |
884 | +Compiled method (c1) 576 1529 ! 1 jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull (64 bytes) | |
885 | + total in heap [0x000001f237022e10,0x000001f237023b48] = 3384 | |
886 | + relocation [0x000001f237022f68,0x000001f237023078] = 272 | |
887 | + main code [0x000001f237023080,0x000001f237023640] = 1472 | |
888 | + stub code [0x000001f237023640,0x000001f237023748] = 264 | |
889 | + oops [0x000001f237023748,0x000001f237023750] = 8 | |
890 | + metadata [0x000001f237023750,0x000001f2370237a0] = 80 | |
891 | + scopes data [0x000001f2370237a0,0x000001f237023948] = 424 | |
892 | + scopes pcs [0x000001f237023948,0x000001f237023af8] = 432 | |
893 | + dependencies [0x000001f237023af8,0x000001f237023b00] = 8 | |
894 | + handler table [0x000001f237023b00,0x000001f237023b18] = 24 | |
895 | + nul chk table [0x000001f237023b18,0x000001f237023b48] = 48 | |
896 | + | |
897 | +[Constant Pool (empty)] | |
898 | + | |
899 | +[MachCode] | |
900 | +[Entry Point] | |
901 | + # {method} {0x000001f25143d2d0} 'findClassOnClassPathOrNull' '(Ljava/lang/String;)Ljava/lang/Class;' in 'jdk/internal/loader/BuiltinClassLoader' | |
902 | + # this: rdx:rdx = 'jdk/internal/loader/BuiltinClassLoader' | |
903 | + # parm0: r8:r8 = 'java/lang/String' | |
904 | + # [sp+0x130] (sp of caller) | |
905 | + 0x000001f237023080: 448b 5208 | 49bb 0000 | 0051 f201 | 0000 4d03 | d34c 3bd0 | |
906 | + | |
907 | + 0x000001f237023094: ; {runtime_call ic_miss_stub} | |
908 | + 0x000001f237023094: 0f85 e699 | b2ff 660f | 1f44 0000 | |
909 | +[Verified Entry Point] | |
910 | + 0x000001f2370230a0: 8984 2400 | 90ff ff55 | 4881 ec20 | 0100 0048 | 8994 24c0 | 0000 004c | 8984 24c8 | 0000 0049 | |
911 | + 0x000001f2370230c0: 3b00 498b | f041 b82e | 0000 0041 | b92f 0000 | 0048 8bd6 | |
912 | + | |
913 | + 0x000001f2370230d4: ; {optimized virtual_call} | |
914 | + 0x000001f2370230d4: 6666 90e8 | |
915 | + | |
916 | + 0x000001f2370230d8: ; ImmutableOopMap {[200]=Oop [192]=Oop } | |
917 | + ;*invokevirtual replace {reexecute=0 rethrow=0 return_oop=0} | |
918 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@5 (line 755) | |
919 | + 0x000001f2370230d8: 84fe e1ff | |
920 | + | |
921 | + 0x000001f2370230dc: ; implicit exception: dispatches to 0x000001f23702354e | |
922 | + 0x000001f2370230dc: 483b 0048 | 83f8 000f | 8419 0000 | 0048 83f8 | 000f 850a | |
923 | + | |
924 | + 0x000001f2370230f0: ; {oop("null"{0x0000000601433fe0})} | |
925 | + 0x000001f2370230f0: 0000 0048 | b8e0 3f43 | 0106 0000 | 00e9 0a00 | |
926 | + | |
927 | + 0x000001f237023100: ; {oop("null"{0x0000000601433fe0})} | |
928 | + 0x000001f237023100: 0000 48b8 | e03f 4301 | 0600 0000 | |
929 | + | |
930 | + 0x000001f23702310c: ; implicit exception: dispatches to 0x000001f237023553 | |
931 | + 0x000001f23702310c: 8b50 1448 | c1e2 038b | 720c 83fe | 00ba 0000 | 0000 0f85 | 0500 0000 | ba01 0000 | 0083 e201 | |
932 | + 0x000001f23702312c: 83fa 000f | 847c 0000 | |
933 | + | |
934 | + 0x000001f237023134: ; {metadata('java/lang/String')} | |
935 | + 0x000001f237023134: 0048 ba70 | e900 51f2 | 0100 0049 | 8b87 0801 | 0000 488d | 7818 493b | bf18 0100 | 000f 8706 | |
936 | + 0x000001f237023154: 0400 0049 | 89bf 0801 | 0000 48c7 | 0001 0000 | 0048 8bca | 49ba 0000 | 0051 f201 | 0000 492b | |
937 | + 0x000001f237023174: ca89 4808 | 4833 c989 | 480c 4833 | c948 8948 | |
938 | + | |
939 | + 0x000001f237023184: ; {oop(".class"{0x0000000601414500})} | |
940 | + 0x000001f237023184: 1049 b800 | 4541 0106 | 0000 0048 | 8bd0 4889 | 8424 d000 | 0000 0f1f | |
941 | + | |
942 | + 0x000001f23702319c: ; {optimized virtual_call} | |
943 | + 0x000001f23702319c: 4400 00e8 | |
944 | + | |
945 | + 0x000001f2370231a0: ; ImmutableOopMap {[200]=Oop [192]=Oop [208]=Oop } | |
946 | + ;*invokespecial <init> {reexecute=0 rethrow=0 return_oop=0} | |
947 | + ; - java.lang.StringConcatHelper::simpleConcat@22 (line 411) | |
948 | + ; - java.lang.String::concat@11 (line 2776) | |
949 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
950 | + 0x000001f2370231a0: dc9b b2ff | 488b b424 | d000 0000 | e926 0100 | 000f be48 | 10c1 e118 | 4c8b c141 | c1f8 1849 | |
951 | + 0x000001f2370231c0: 8bc8 d3fe | 4863 f641 | 83f8 010f | 850d 0000 | 0049 ba00 | 0000 0001 | 0000 0049 | 0bf2 8bce | |
952 | + 0x000001f2370231e0: 83f9 000f | 8cd8 0200 | 0049 ba06 | 0000 0000 | 0000 0049 | 03f2 448b | c641 83f8 | 0048 8984 | |
953 | + 0x000001f237023200: 24e0 0000 | 000f 8c34 | 0200 00b9 | 2000 0000 | 4c8b ce49 | d3f9 458b | c945 0fbe | c949 8bc9 | |
954 | + 0x000001f237023220: 4d8b c841 | |
955 | + | |
956 | + 0x000001f237023224: ; {oop(a 'java/lang/Class'{0x0000000601433db0} = byte)} | |
957 | + 0x000001f237023224: d3e1 49b8 | b03d 4301 | 0600 0000 | |
958 | + | |
959 | + 0x000001f237023230: ; {oop(a 'jdk/internal/misc/Unsafe'{0x0000000601420b50})} | |
960 | + 0x000001f237023230: 48ba 500b | 4201 0600 | 0000 4889 | b424 d800 | 0000 0f1f | |
961 | + | |
962 | + 0x000001f237023244: ; {optimized virtual_call} | |
963 | + 0x000001f237023244: 4400 00e8 | |
964 | + | |
965 | + 0x000001f237023248: ; ImmutableOopMap {[200]=Oop [192]=Oop [224]=Oop } | |
966 | + ;*invokevirtual allocateUninitializedArray {reexecute=0 rethrow=0 return_oop=0} | |
967 | + ; - java.lang.StringConcatHelper::newArray@19 (line 494) | |
968 | + ; - java.lang.StringConcatHelper::simpleConcat@61 (line 421) | |
969 | + ; - java.lang.String::concat@11 (line 2776) | |
970 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
971 | + 0x000001f237023248: 348a e0ff | 4883 f800 | 0f84 2a00 | |
972 | + | |
973 | + 0x000001f237023254: ; {metadata({type array byte})} | |
974 | + 0x000001f237023254: 0000 49b9 | 3867 0051 | f201 0000 | 448b 4008 | 49ba 0000 | 0051 f201 | 0000 4d03 | c24d 3b48 | |
975 | + 0x000001f237023274: 380f 85ef | 0200 00e9 | 0000 0000 | |
976 | + | |
977 | + 0x000001f237023280: ; {oop(".class"{0x0000000601414500})} | |
978 | + 0x000001f237023280: 488b f049 | b900 4541 | 0106 0000 | 0048 8b94 | 24d8 0000 | 004c 8bc6 | 4889 b424 | e800 0000 | |
979 | + 0x000001f2370232a0: 0f1f 8000 | |
980 | + | |
981 | + 0x000001f2370232a4: ; {static_call} | |
982 | + 0x000001f2370232a4: 0000 00e8 | |
983 | + | |
984 | + 0x000001f2370232a8: ; ImmutableOopMap {[200]=Oop [192]=Oop [224]=Oop [232]=Oop } | |
985 | + ;*invokestatic prepend {reexecute=0 rethrow=0 return_oop=0} | |
986 | + ; - java.lang.StringConcatHelper::simpleConcat@71 (line 424) | |
987 | + ; - java.lang.String::concat@11 (line 2776) | |
988 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
989 | + 0x000001f2370232a8: 1470 e6ff | 488b d04c | 8b84 24e8 | 0000 004c | 8b8c 24e0 | |
990 | + | |
991 | + 0x000001f2370232bc: ; {static_call} | |
992 | + 0x000001f2370232bc: 0000 00e8 | |
993 | + | |
994 | + 0x000001f2370232c0: ; ImmutableOopMap {[200]=Oop [192]=Oop [232]=Oop } | |
995 | + ;*invokestatic prepend {reexecute=0 rethrow=0 return_oop=0} | |
996 | + ; - java.lang.StringConcatHelper::simpleConcat@81 (line 425) | |
997 | + ; - java.lang.String::concat@11 (line 2776) | |
998 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
999 | + 0x000001f2370232c0: fc6f e6ff | 488b 9424 | e800 0000 | |
1000 | + | |
1001 | + 0x000001f2370232cc: ; {static_call} | |
1002 | + 0x000001f2370232cc: 4c8b c0e8 | |
1003 | + | |
1004 | + 0x000001f2370232d0: ; ImmutableOopMap {[200]=Oop [192]=Oop } | |
1005 | + ;*invokestatic newString {reexecute=0 rethrow=0 return_oop=0} | |
1006 | + ; - java.lang.StringConcatHelper::simpleConcat@90 (line 426) | |
1007 | + ; - java.lang.String::concat@11 (line 2776) | |
1008 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
1009 | + 0x000001f2370232d0: 4c35 eaff | |
1010 | + | |
1011 | + 0x000001f2370232d4: ; {oop(a 'java/lang/Class'{0x000000060158e0e0} = 'java/lang/System')} | |
1012 | + 0x000001f2370232d4: 488b f049 | b8e0 e058 | 0106 0000 | 0045 8b40 | 7c49 c1e0 | 0349 83f8 | 000f 8567 | 0000 0048 | |
1013 | + 0x000001f2370232f4: 8b94 24c0 | 0000 008b | 7a58 48c1 | e703 483b | 074c 8bc6 | 41b9 0000 | 0000 488b | d766 0f1f | |
1014 | + 0x000001f237023314: ; {optimized virtual_call} | |
1015 | + 0x000001f237023314: 4400 00e8 | |
1016 | + | |
1017 | + 0x000001f237023318: ; ImmutableOopMap {[200]=Oop [192]=Oop } | |
1018 | + ;*invokevirtual getResource {reexecute=0 rethrow=0 return_oop=0} | |
1019 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@26 (line 757) | |
1020 | + 0x000001f237023318: c4fd faff | 4883 f800 | 0f84 f900 | 0000 4c8b | 8424 c800 | 0000 4c8b | c848 8b94 | 24c0 0000 | |
1021 | + 0x000001f237023338: 0066 0f1f | |
1022 | + | |
1023 | + 0x000001f23702333c: ; {optimized virtual_call} | |
1024 | + 0x000001f23702333c: 4400 00e8 | |
1025 | + | |
1026 | + 0x000001f237023340: ; ImmutableOopMap {} | |
1027 | + ;*invokevirtual defineClass {reexecute=0 rethrow=0 return_oop=0} | |
1028 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@37 (line 760) | |
1029 | + 0x000001f237023340: 7c9b 0000 | 4881 c420 | 0100 005d | |
1030 | + | |
1031 | + 0x000001f23702334c: ; {poll_return} | |
1032 | + 0x000001f23702334c: 493b a748 | 0300 000f | 871f 0200 | 00c3 660f | 1f44 0000 | |
1033 | + | |
1034 | + 0x000001f237023360: ; {no_reloc} | |
1035 | + 0x000001f237023360: e938 0200 | 0000 0000 | 0000 e938 | 0200 004c | 8b84 24c0 | 0000 004c | 8bce 488b | bc24 c800 | |
1036 | + 0x000001f237023380: 0000 488b | d048 8984 | 24f0 0000 | |
1037 | + | |
1038 | + 0x000001f23702338c: ; {optimized virtual_call} | |
1039 | + 0x000001f23702338c: 0066 90e8 | |
1040 | + | |
1041 | + 0x000001f237023390: ; ImmutableOopMap {[240]=Oop } | |
1042 | + ;*invokespecial <init> {reexecute=0 rethrow=0 return_oop=0} | |
1043 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@52 (line 768) | |
1044 | + 0x000001f237023390: ec99 b2ff | |
1045 | + | |
1046 | + 0x000001f237023394: ; {static_call} | |
1047 | + 0x000001f237023394: 6666 90e8 | |
1048 | + | |
1049 | + 0x000001f237023398: ; ImmutableOopMap {[240]=Oop } | |
1050 | + ;*invokestatic getCallerClass {reexecute=0 rethrow=0 return_oop=0} | |
1051 | + ; - java.security.AccessController::doPrivileged@2 (line 318) | |
1052 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@57 (line 781) | |
1053 | + 0x000001f237023398: e49f b2ff | 488b 9424 | f000 0000 | 4889 8424 | f800 0000 | 9048 b8ff | ffff ffff | |
1054 | + | |
1055 | + 0x000001f2370233b4: ; {virtual_call} | |
1056 | + 0x000001f2370233b4: ffff ffe8 | |
1057 | + | |
1058 | + 0x000001f2370233b8: ; ImmutableOopMap {[248]=Oop } | |
1059 | + ;*invokeinterface run {reexecute=0 rethrow=0 return_oop=0} | |
1060 | + ; - java.security.AccessController::executePrivileged@29 (line 776) | |
1061 | + ; - java.security.AccessController::doPrivileged@5 (line 318) | |
1062 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@57 (line 781) | |
1063 | + 0x000001f2370233b8: c49c b2ff | 4883 f800 | 0f84 2800 | |
1064 | + | |
1065 | + 0x000001f2370233c4: ; {metadata('java/lang/Class')} | |
1066 | + 0x000001f2370233c4: 0000 48bf | 2817 0051 | f201 0000 | 8b50 0849 | ba00 0000 | 51f2 0100 | 0049 03d2 | 483b fa0f | |
1067 | + 0x000001f2370233e4: 85cb 0100 | 00e9 0000 | 0000 4881 | c420 0100 | |
1068 | + | |
1069 | + 0x000001f2370233f4: ; {poll_return} | |
1070 | + 0x000001f2370233f4: 005d 493b | a748 0300 | 000f 87ba | 0100 00c3 | 498b 87d8 | 0300 004d | 33d2 4d89 | 97d8 0300 | |
1071 | + 0x000001f237023414: 004d 33d2 | 4d89 97e0 | |
1072 | + | |
1073 | + 0x000001f23702341c: ; {oop(NULL)} | |
1074 | + 0x000001f23702341c: 0300 0048 | b800 0000 | 0000 0000 | 0048 81c4 | 2001 0000 | |
1075 | + | |
1076 | + 0x000001f237023430: ; {poll_return} | |
1077 | + 0x000001f237023430: 5d49 3ba7 | 4803 0000 | 0f87 9501 | |
1078 | + | |
1079 | + 0x000001f23702343c: ; {metadata('java/lang/OutOfMemoryError')} | |
1080 | + 0x000001f23702343c: 0000 c348 | baf0 ea08 | 51f2 0100 | 0049 8b87 | 0801 0000 | 488d 7828 | 493b bf18 | 0100 000f | |
1081 | + 0x000001f23702345c: 8788 0100 | 0049 89bf | 0801 0000 | 48c7 0001 | 0000 0048 | 8bca 49ba | 0000 0051 | f201 0000 | |
1082 | + 0x000001f23702347c: 492b ca89 | 4808 4833 | c989 480c | 4833 c948 | 8948 1048 | 8948 1848 | |
1083 | + | |
1084 | + 0x000001f237023494: ; {oop("Overflow: String length out of range"{0x00000006017225d8})} | |
1085 | + 0x000001f237023494: 8948 2049 | b8d8 2572 | 0106 0000 | 0048 8bd0 | 4889 8424 | 0001 0000 | |
1086 | + | |
1087 | + 0x000001f2370234ac: ; {optimized virtual_call} | |
1088 | + 0x000001f2370234ac: 6666 90e8 | |
1089 | + | |
1090 | + 0x000001f2370234b0: ; ImmutableOopMap {[224]=Oop [200]=Oop [192]=Oop [256]=Oop } | |
1091 | + ;*invokespecial <init> {reexecute=0 rethrow=0 return_oop=0} | |
1092 | + ; - java.lang.StringConcatHelper::checkOverflow@13 (line 57) | |
1093 | + ; - java.lang.StringConcatHelper::mix@23 (line 138) | |
1094 | + ; - java.lang.StringConcatHelper::simpleConcat@54 (line 420) | |
1095 | + ; - java.lang.String::concat@11 (line 2776) | |
1096 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
1097 | + 0x000001f2370234b0: cc98 b2ff | 488b 8424 | 0001 0000 | e961 0100 | 0048 8984 | 24e0 0000 | |
1098 | + | |
1099 | + 0x000001f2370234c8: ; {metadata('java/lang/OutOfMemoryError')} | |
1100 | + 0x000001f2370234c8: 0048 baf0 | ea08 51f2 | 0100 0049 | 8b87 0801 | 0000 488d | 7828 493b | bf18 0100 | 000f 870b | |
1101 | + 0x000001f2370234e8: 0100 0049 | 89bf 0801 | 0000 48c7 | 0001 0000 | 0048 8bca | 49ba 0000 | 0051 f201 | 0000 492b | |
1102 | + 0x000001f237023508: ca89 4808 | 4833 c989 | 480c 4833 | c948 8948 | 1048 8948 | 1848 8948 | |
1103 | + | |
1104 | + 0x000001f237023520: ; {oop("Overflow: String length out of range"{0x00000006017225d8})} | |
1105 | + 0x000001f237023520: 2049 b8d8 | 2572 0106 | 0000 0048 | 8bd0 4889 | 8424 0801 | |
1106 | + | |
1107 | + 0x000001f237023534: ; {optimized virtual_call} | |
1108 | + 0x000001f237023534: 0000 90e8 | |
1109 | + | |
1110 | + 0x000001f237023538: ; ImmutableOopMap {[192]=Oop [200]=Oop [264]=Oop [224]=Oop } | |
1111 | + ;*invokespecial <init> {reexecute=0 rethrow=0 return_oop=0} | |
1112 | + ; - java.lang.StringConcatHelper::checkOverflow@13 (line 57) | |
1113 | + ; - java.lang.StringConcatHelper::mix@23 (line 138) | |
1114 | + ; - java.lang.StringConcatHelper::simpleConcat@46 (line 419) | |
1115 | + ; - java.lang.String::concat@11 (line 2776) | |
1116 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
1117 | + 0x000001f237023538: 4498 b2ff | 488b 8424 | 0801 0000 | e9d9 0000 | |
1118 | + | |
1119 | + 0x000001f237023548: ; {runtime_call throw_null_pointer_exception Runtime1 stub} | |
1120 | + 0x000001f237023548: 00e8 d20f | |
1121 | + | |
1122 | + 0x000001f23702354c: ; ImmutableOopMap {r8=Oop [200]=Oop [192]=Oop } | |
1123 | + ;*invokevirtual replace {reexecute=0 rethrow=0 return_oop=0} | |
1124 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@5 (line 755) | |
1125 | + ; {runtime_call throw_null_pointer_exception Runtime1 stub} | |
1126 | + 0x000001f23702354c: bdff e8cd | |
1127 | + | |
1128 | + 0x000001f237023550: ; ImmutableOopMap {[200]=Oop [192]=Oop rax=Oop } | |
1129 | + ;*invokevirtual concat {reexecute=0 rethrow=0 return_oop=0} | |
1130 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
1131 | + ; {runtime_call throw_null_pointer_exception Runtime1 stub} | |
1132 | + 0x000001f237023550: 0fbd ffe8 | |
1133 | + | |
1134 | + 0x000001f237023554: ; ImmutableOopMap {[200]=Oop [192]=Oop rax=Oop } | |
1135 | + ;*invokevirtual isEmpty {reexecute=0 rethrow=0 return_oop=0} | |
1136 | + ; - java.lang.StringConcatHelper::simpleConcat@11 (line 409) | |
1137 | + ; - java.lang.String::concat@11 (line 2776) | |
1138 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
1139 | + 0x000001f237023554: c80f bdff | |
1140 | + | |
1141 | + 0x000001f237023558: ; {runtime_call throw_null_pointer_exception Runtime1 stub} | |
1142 | + 0x000001f237023558: e8c3 0fbd | |
1143 | + | |
1144 | + 0x000001f23702355c: ; ImmutableOopMap {[200]=Oop [192]=Oop rax=Oop } | |
1145 | + ;*arraylength {reexecute=0 rethrow=0 return_oop=0} | |
1146 | + ; - java.lang.String::isEmpty@4 (line 1496) | |
1147 | + ; - java.lang.StringConcatHelper::simpleConcat@11 (line 409) | |
1148 | + ; - java.lang.String::concat@11 (line 2776) | |
1149 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
1150 | + 0x000001f23702355c: ff48 8bd2 | |
1151 | + | |
1152 | + 0x000001f237023560: ; {runtime_call fast_new_instance Runtime1 stub} | |
1153 | + 0x000001f237023560: e89b 1bbd | |
1154 | + | |
1155 | + 0x000001f237023564: ; ImmutableOopMap {[200]=Oop [192]=Oop } | |
1156 | + ;*new {reexecute=0 rethrow=0 return_oop=0} | |
1157 | + ; - java.lang.StringConcatHelper::simpleConcat@17 (line 411) | |
1158 | + ; - java.lang.String::concat@11 (line 2776) | |
1159 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
1160 | + 0x000001f237023564: ffe9 1bfc | ffff 4889 | |
1161 | + | |
1162 | + 0x000001f23702356c: ; {runtime_call throw_class_cast_exception Runtime1 stub} | |
1163 | + 0x000001f23702356c: 0424 e8ad | |
1164 | + | |
1165 | + 0x000001f237023570: ; ImmutableOopMap {[200]=Oop [192]=Oop [224]=Oop } | |
1166 | + ;*checkcast {reexecute=0 rethrow=0 return_oop=0} | |
1167 | + ; - java.lang.StringConcatHelper::newArray@22 (line 494) | |
1168 | + ; - java.lang.StringConcatHelper::simpleConcat@61 (line 421) | |
1169 | + ; - java.lang.String::concat@11 (line 2776) | |
1170 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
1171 | + ; {runtime_call throw_null_pointer_exception Runtime1 stub} | |
1172 | + 0x000001f237023570: 36bd ffe8 | |
1173 | + | |
1174 | + 0x000001f237023574: ; ImmutableOopMap {[200]=Oop rsi=Oop rdx=Oop [192]=Oop rdi=Oop } | |
1175 | + ;*invokevirtual getResource {reexecute=0 rethrow=0 return_oop=0} | |
1176 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@26 (line 757) | |
1177 | + 0x000001f237023574: a80f bdff | |
1178 | + | |
1179 | + 0x000001f237023578: ; {internal_word} | |
1180 | + 0x000001f237023578: 49ba 4c33 | 0237 f201 | 0000 4d89 | 9760 0300 | |
1181 | + | |
1182 | + 0x000001f237023588: ; {runtime_call SafepointBlob} | |
1183 | + 0x000001f237023588: 00e9 72fe | |
1184 | + | |
1185 | + 0x000001f23702358c: ; {metadata(NULL)} | |
1186 | + 0x000001f23702358c: b2ff 48ba | 0000 0000 | 0000 0000 | b800 0f05 | |
1187 | + | |
1188 | + 0x000001f23702359c: ; {runtime_call load_klass_patching Runtime1 stub} | |
1189 | + 0x000001f23702359c: 0ae8 de52 | |
1190 | + | |
1191 | + 0x000001f2370235a0: ; ImmutableOopMap {rsi=Oop [200]=Oop [192]=Oop } | |
1192 | + ;*new {reexecute=1 rethrow=0 return_oop=0} | |
1193 | + ; - (reexecute) jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@45 (line 768) | |
1194 | + 0x000001f2370235a0: bdff e9b9 | fdff ff48 | |
1195 | + | |
1196 | + 0x000001f2370235a8: ; {runtime_call new_instance Runtime1 stub} | |
1197 | + 0x000001f2370235a8: 8bd2 e851 | |
1198 | + | |
1199 | + 0x000001f2370235ac: ; ImmutableOopMap {rsi=Oop [200]=Oop [192]=Oop } | |
1200 | + ;*new {reexecute=0 rethrow=0 return_oop=0} | |
1201 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@45 (line 768) | |
1202 | + 0x000001f2370235ac: 15bd ffe9 | bbfd ffff | 4889 0424 | |
1203 | + | |
1204 | + 0x000001f2370235b8: ; {runtime_call throw_class_cast_exception Runtime1 stub} | |
1205 | + 0x000001f2370235b8: e863 36bd | |
1206 | + | |
1207 | + 0x000001f2370235bc: ; ImmutableOopMap {} | |
1208 | + ;*checkcast {reexecute=0 rethrow=0 return_oop=0} | |
1209 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@60 (line 781) | |
1210 | + ; {internal_word} | |
1211 | + 0x000001f2370235bc: ff49 baf6 | 3302 37f2 | 0100 004d | 8997 6003 | |
1212 | + | |
1213 | + 0x000001f2370235cc: ; {runtime_call SafepointBlob} | |
1214 | + 0x000001f2370235cc: 0000 e92d | |
1215 | + | |
1216 | + 0x000001f2370235d0: ; {internal_word} | |
1217 | + 0x000001f2370235d0: feb2 ff49 | ba31 3402 | 37f2 0100 | 004d 8997 | 6003 0000 | |
1218 | + | |
1219 | + 0x000001f2370235e4: ; {runtime_call SafepointBlob} | |
1220 | + 0x000001f2370235e4: e917 feb2 | ff48 8bd2 | |
1221 | + | |
1222 | + 0x000001f2370235ec: ; {runtime_call fast_new_instance Runtime1 stub} | |
1223 | + 0x000001f2370235ec: e80f 1bbd | |
1224 | + | |
1225 | + 0x000001f2370235f0: ; ImmutableOopMap {[224]=Oop [200]=Oop [192]=Oop } | |
1226 | + ;*new {reexecute=0 rethrow=0 return_oop=0} | |
1227 | + ; - java.lang.StringConcatHelper::checkOverflow@7 (line 57) | |
1228 | + ; - java.lang.StringConcatHelper::mix@23 (line 138) | |
1229 | + ; - java.lang.StringConcatHelper::simpleConcat@54 (line 420) | |
1230 | + ; - java.lang.String::concat@11 (line 2776) | |
1231 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
1232 | + 0x000001f2370235f0: ffe9 a1fe | ffff 488b | |
1233 | + | |
1234 | + 0x000001f2370235f8: ; {runtime_call fast_new_instance Runtime1 stub} | |
1235 | + 0x000001f2370235f8: d2e8 021b | |
1236 | + | |
1237 | + 0x000001f2370235fc: ; ImmutableOopMap {[200]=Oop [192]=Oop [224]=Oop } | |
1238 | + ;*new {reexecute=0 rethrow=0 return_oop=0} | |
1239 | + ; - java.lang.StringConcatHelper::checkOverflow@7 (line 57) | |
1240 | + ; - java.lang.StringConcatHelper::mix@23 (line 138) | |
1241 | + ; - java.lang.StringConcatHelper::simpleConcat@46 (line 419) | |
1242 | + ; - java.lang.String::concat@11 (line 2776) | |
1243 | + ; - jdk.internal.loader.BuiltinClassLoader::findClassOnClassPathOrNull@10 (line 755) | |
1244 | + 0x000001f2370235fc: bdff e91e | ffff ff90 | 9049 8b87 | d803 0000 | 49c7 87d8 | 0300 0000 | 0000 0049 | c787 e003 | |
1245 | + 0x000001f23702361c: 0000 0000 | 0000 4881 | c420 0100 | |
1246 | + | |
1247 | + 0x000001f237023628: ; {runtime_call unwind_exception Runtime1 stub} | |
1248 | + 0x000001f237023628: 005d e9d1 | ffbc fff4 | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 | |
1249 | +[Stub Code] | |
1250 | + 0x000001f237023640: ; {no_reloc} | |
1251 | + 0x000001f237023640: 0f1f 4400 | |
1252 | + | |
1253 | + 0x000001f237023644: ; {static_stub} | |
1254 | + 0x000001f237023644: 0048 bb00 | 0000 0000 | |
1255 | + | |
1256 | + 0x000001f23702364c: ; {runtime_call} | |
1257 | + 0x000001f23702364c: 0000 00e9 | fbff ffff | |
1258 | + | |
1259 | + 0x000001f237023654: ; {static_stub} | |
1260 | + 0x000001f237023654: 9048 bb00 | 0000 0000 | |
1261 | + | |
1262 | + 0x000001f23702365c: ; {runtime_call} | |
1263 | + 0x000001f23702365c: 0000 00e9 | fbff ffff | |
1264 | + | |
1265 | + 0x000001f237023664: ; {static_stub} | |
1266 | + 0x000001f237023664: 9048 bb00 | 0000 0000 | |
1267 | + | |
1268 | + 0x000001f23702366c: ; {runtime_call} | |
1269 | + 0x000001f23702366c: 0000 00e9 | fbff ffff | |
1270 | + | |
1271 | + 0x000001f237023674: ; {static_stub} | |
1272 | + 0x000001f237023674: 9048 bb00 | 0000 0000 | |
1273 | + | |
1274 | + 0x000001f23702367c: ; {runtime_call} | |
1275 | + 0x000001f23702367c: 0000 00e9 | fbff ffff | |
1276 | + | |
1277 | + 0x000001f237023684: ; {static_stub} | |
1278 | + 0x000001f237023684: 9048 bb00 | 0000 0000 | |
1279 | + | |
1280 | + 0x000001f23702368c: ; {runtime_call} | |
1281 | + 0x000001f23702368c: 0000 00e9 | fbff ffff | |
1282 | + | |
1283 | + 0x000001f237023694: ; {static_stub} | |
1284 | + 0x000001f237023694: 9048 bb00 | 0000 0000 | |
1285 | + | |
1286 | + 0x000001f23702369c: ; {runtime_call} | |
1287 | + 0x000001f23702369c: 0000 00e9 | fbff ffff | |
1288 | + | |
1289 | + 0x000001f2370236a4: ; {static_stub} | |
1290 | + 0x000001f2370236a4: 9048 bb00 | 0000 0000 | |
1291 | + | |
1292 | + 0x000001f2370236ac: ; {runtime_call} | |
1293 | + 0x000001f2370236ac: 0000 00e9 | fbff ffff | |
1294 | + | |
1295 | + 0x000001f2370236b4: ; {static_stub} | |
1296 | + 0x000001f2370236b4: 9048 bba8 | ce43 51f2 | |
1297 | + | |
1298 | + 0x000001f2370236bc: ; {runtime_call I2C/C2I adapters} | |
1299 | + 0x000001f2370236bc: 0100 00e9 | 1d5d b2ff | |
1300 | + | |
1301 | + 0x000001f2370236c4: ; {static_stub} | |
1302 | + 0x000001f2370236c4: 9048 bb00 | 0000 0000 | |
1303 | + | |
1304 | + 0x000001f2370236cc: ; {runtime_call} | |
1305 | + 0x000001f2370236cc: 0000 00e9 | fbff ffff | |
1306 | + | |
1307 | + 0x000001f2370236d4: ; {static_stub} | |
1308 | + 0x000001f2370236d4: 9048 bb00 | 0000 0000 | |
1309 | + | |
1310 | + 0x000001f2370236dc: ; {runtime_call} | |
1311 | + 0x000001f2370236dc: 0000 00e9 | fbff ffff | |
1312 | + | |
1313 | + 0x000001f2370236e4: ; {static_stub} | |
1314 | + 0x000001f2370236e4: 9048 bb00 | 0000 0000 | |
1315 | + | |
1316 | + 0x000001f2370236ec: ; {runtime_call} | |
1317 | + 0x000001f2370236ec: 0000 00e9 | fbff ffff | |
1318 | + | |
1319 | + 0x000001f2370236f4: ; {static_stub} | |
1320 | + 0x000001f2370236f4: 9048 bb00 | 0000 0000 | |
1321 | + | |
1322 | + 0x000001f2370236fc: ; {runtime_call} | |
1323 | + 0x000001f2370236fc: 0000 00e9 | fbff ffff | |
1324 | + | |
1325 | + 0x000001f237023704: ; {static_stub} | |
1326 | + 0x000001f237023704: 9048 bb00 | 0000 0000 | |
1327 | + | |
1328 | + 0x000001f23702370c: ; {runtime_call} | |
1329 | + 0x000001f23702370c: 0000 00e9 | fbff ffff | |
1330 | +[Exception Handler] | |
1331 | + 0x000001f237023714: ; {runtime_call handle_exception_from_callee Runtime1 stub} | |
1332 | + 0x000001f237023714: e8e7 2ebd | |
1333 | + | |
1334 | + 0x000001f237023718: ; {external_word} | |
1335 | + 0x000001f237023718: ff48 b990 | f031 d8fc | 7f00 0048 | |
1336 | + | |
1337 | + 0x000001f237023724: ; {runtime_call} | |
1338 | + 0x000001f237023724: 83e4 f049 | ba20 f9ff | d7fc 7f00 | 0041 ffd2 | |
1339 | + | |
1340 | + 0x000001f237023734: ; {section_word} | |
1341 | + 0x000001f237023734: f449 ba35 | 3702 37f2 | 0100 0041 | |
1342 | + | |
1343 | + 0x000001f237023740: ; {runtime_call DeoptimizationBlob} | |
1344 | + 0x000001f237023740: 52e9 5aef | b2ff f4f4 | |
1345 | +[/MachCode] | |
1346 | + | |
1347 | + | |
1348 | +--------------- P R O C E S S --------------- | |
1349 | + | |
1350 | +Threads class SMR info: | |
1351 | +_java_thread_list=0x000001f296541c60, length=18, elements={ | |
1352 | +0x000001f22da2ca00, 0x000001f24f8adb50, 0x000001f24f8aeaf0, 0x000001f2502dac10, | |
1353 | +0x000001f2502db9a0, 0x000001f2502df390, 0x000001f2502dfc60, 0x000001f2502e0940, | |
1354 | +0x000001f2502f4f50, 0x000001f2503ca640, 0x000001f2502d09c0, 0x000001f2503ceb40, | |
1355 | +0x000001f2504b9300, 0x000001f250541700, 0x000001f250b74010, 0x000001f250b78a60, | |
1356 | +0x000001f296533130, 0x000001f296541430 | |
1357 | +} | |
1358 | + | |
1359 | +Java Threads: ( => current thread ) | |
1360 | + 0x000001f22da2ca00 JavaThread "main" [_thread_blocked, id=15788, stack(0x000000b7f0a00000,0x000000b7f0b00000)] | |
1361 | + 0x000001f24f8adb50 JavaThread "Reference Handler" daemon [_thread_blocked, id=6652, stack(0x000000b7f1100000,0x000000b7f1200000)] | |
1362 | + 0x000001f24f8aeaf0 JavaThread "Finalizer" daemon [_thread_blocked, id=11100, stack(0x000000b7f1200000,0x000000b7f1300000)] | |
1363 | + 0x000001f2502dac10 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=14736, stack(0x000000b7f1300000,0x000000b7f1400000)] | |
1364 | + 0x000001f2502db9a0 JavaThread "Attach Listener" daemon [_thread_blocked, id=6896, stack(0x000000b7f1400000,0x000000b7f1500000)] | |
1365 | + 0x000001f2502df390 JavaThread "Service Thread" daemon [_thread_blocked, id=14384, stack(0x000000b7f1500000,0x000000b7f1600000)] | |
1366 | + 0x000001f2502dfc60 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=4984, stack(0x000000b7f1600000,0x000000b7f1700000)] | |
1367 | + 0x000001f2502e0940 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=5680, stack(0x000000b7f1700000,0x000000b7f1800000)] | |
1368 | + 0x000001f2502f4f50 JavaThread "Sweeper thread" daemon [_thread_blocked, id=15980, stack(0x000000b7f1800000,0x000000b7f1900000)] | |
1369 | + 0x000001f2503ca640 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=5964, stack(0x000000b7f1900000,0x000000b7f1a00000)] | |
1370 | + 0x000001f2502d09c0 JavaThread "C1 CompilerThread1" daemon [_thread_blocked, id=12768, stack(0x000000b7f1a00000,0x000000b7f1b00000)] | |
1371 | + 0x000001f2503ceb40 JavaThread "C1 CompilerThread2" daemon [_thread_blocked, id=4428, stack(0x000000b7f1b00000,0x000000b7f1c00000)] | |
1372 | + 0x000001f2504b9300 JavaThread "C1 CompilerThread3" daemon [_thread_blocked, id=6476, stack(0x000000b7f1c00000,0x000000b7f1d00000)] | |
1373 | + 0x000001f250541700 JavaThread "Notification Thread" daemon [_thread_blocked, id=3468, stack(0x000000b7f1d00000,0x000000b7f1e00000)] | |
1374 | + 0x000001f250b74010 JavaThread "RMI TCP Accept-0" daemon [_thread_in_native, id=13112, stack(0x000000b7f1e00000,0x000000b7f1f00000)] | |
1375 | + 0x000001f250b78a60 JavaThread "Monitor Ctrl-Break" daemon [_thread_in_native, id=2064, stack(0x000000b7f2000000,0x000000b7f2100000)] | |
1376 | +=>0x000001f296533130 JavaThread "Thread-2" [_thread_in_vm, id=2564, stack(0x000000b7f2c00000,0x000000b7f2d00000)] | |
1377 | + 0x000001f296541430 JavaThread "Monitor Ctrl-Break" daemon [_thread_in_native, id=16260, stack(0x000000b7f2e00000,0x000000b7f2f00000)] | |
1378 | + | |
1379 | +Other Threads: | |
1380 | + 0x000001f24f8a7020 VMThread "VM Thread" [stack: 0x000000b7f1000000,0x000000b7f1100000] [id=14828] | |
1381 | + 0x000001f24f8b2fc0 WatcherThread [stack: 0x000000b7f1f00000,0x000000b7f2000000] [id=15908] | |
1382 | + 0x000001f22dadbbe0 GCTaskThread "GC Thread#0" [stack: 0x000000b7f0b00000,0x000000b7f0c00000] [id=15164] | |
1383 | + 0x000001f250e909d0 GCTaskThread "GC Thread#1" [stack: 0x000000b7f2100000,0x000000b7f2200000] [id=15652] | |
1384 | + 0x000001f250e90c90 GCTaskThread "GC Thread#2" [stack: 0x000000b7f2200000,0x000000b7f2300000] [id=15292] | |
1385 | + 0x000001f250e1b660 GCTaskThread "GC Thread#3" [stack: 0x000000b7f2300000,0x000000b7f2400000] [id=8092] | |
1386 | + 0x000001f250e1b920 GCTaskThread "GC Thread#4" [stack: 0x000000b7f2400000,0x000000b7f2500000] [id=12908] | |
1387 | + 0x000001f250e1bbe0 GCTaskThread "GC Thread#5" [stack: 0x000000b7f2500000,0x000000b7f2600000] [id=15492] | |
1388 | + 0x000001f250e1c320 GCTaskThread "GC Thread#6" [stack: 0x000000b7f2600000,0x000000b7f2700000] [id=16196] | |
1389 | + 0x000001f250d92b00 GCTaskThread "GC Thread#7" [stack: 0x000000b7f2700000,0x000000b7f2800000] [id=15536] | |
1390 | + 0x000001f250d92dc0 GCTaskThread "GC Thread#8" [stack: 0x000000b7f2800000,0x000000b7f2900000] [id=14772] | |
1391 | + 0x000001f250d93080 GCTaskThread "GC Thread#9" [stack: 0x000000b7f2900000,0x000000b7f2a00000] [id=1520] | |
1392 | + 0x000001f22da4ad10 ConcurrentGCThread "G1 Main Marker" [stack: 0x000000b7f0c00000,0x000000b7f0d00000] [id=14892] | |
1393 | + 0x000001f22daed5b0 ConcurrentGCThread "G1 Conc#0" [stack: 0x000000b7f0d00000,0x000000b7f0e00000] [id=5648] | |
1394 | + 0x000001f24f79c230 ConcurrentGCThread "G1 Refine#0" [stack: 0x000000b7f0e00000,0x000000b7f0f00000] [id=1592] | |
1395 | + 0x000001f250d97be0 ConcurrentGCThread "G1 Refine#1" [stack: 0x000000b7f2a00000,0x000000b7f2b00000] [id=6260] | |
1396 | + 0x000001f250eacc40 ConcurrentGCThread "G1 Refine#2" [stack: 0x000000b7f2b00000,0x000000b7f2c00000] [id=5728] | |
1397 | + 0x000001f24f79cb70 ConcurrentGCThread "G1 Service" [stack: 0x000000b7f0f00000,0x000000b7f1000000] [id=15764] | |
1398 | + | |
1399 | +Threads with active compile tasks: | |
1400 | + | |
1401 | +VM state: not at safepoint (normal execution) | |
1402 | + | |
1403 | +VM Mutex/Monitor currently owned by a thread: None | |
1404 | + | |
1405 | +Heap address: 0x0000000601000000, size: 8176 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 | |
1406 | + | |
1407 | +CDS archive(s) mapped at: [0x000001f251000000-0x000001f251bd0000-0x000001f251bd0000), size 12386304, SharedBaseAddress: 0x000001f251000000, ArchiveRelocationMode: 1. | |
1408 | +Compressed class space mapped at: 0x000001f252000000-0x000001f292000000, reserved size: 1073741824 | |
1409 | +Narrow klass base: 0x000001f251000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 | |
1410 | + | |
1411 | +GC Precious Log: | |
1412 | + CPUs: 12 total, 12 available | |
1413 | + Memory: 32697M | |
1414 | + Large Page Support: Disabled | |
1415 | + NUMA Support: Disabled | |
1416 | + Compressed Oops: Enabled (Zero based) | |
1417 | + Heap Region Size: 4M | |
1418 | + Heap Min Capacity: 8M | |
1419 | + Heap Initial Capacity: 512M | |
1420 | + Heap Max Capacity: 8176M | |
1421 | + Pre-touch: Disabled | |
1422 | + Parallel Workers: 10 | |
1423 | + Concurrent Workers: 3 | |
1424 | + Concurrent Refinement Workers: 10 | |
1425 | + Periodic GC: Disabled | |
1426 | + | |
1427 | +Heap: | |
1428 | + garbage-first heap total 524288K, used 26505K [0x0000000601000000, 0x0000000800000000) | |
1429 | + region size 4096K, 6 young (24576K), 1 survivors (4096K) | |
1430 | + Metaspace used 7729K, committed 7872K, reserved 1114112K | |
1431 | + class space used 919K, committed 960K, reserved 1048576K | |
1432 | + | |
1433 | +Heap Regions: E=young(eden), S=young(survivor), O=old, HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, OA=open archive, CA=closed archive, TAMS=top-at-mark-start (previous, next) | |
1434 | +| 0|0x0000000601000000, 0x0000000601400000, 0x0000000601400000|100%| O| |TAMS 0x0000000601000000, 0x0000000601000000| Untracked | |
1435 | +| 1|0x0000000601400000, 0x0000000601800000, 0x0000000601800000|100%| O| |TAMS 0x0000000601400000, 0x0000000601400000| Untracked | |
1436 | +| 2|0x0000000601800000, 0x000000060183ba00, 0x0000000601c00000| 5%| O| |TAMS 0x0000000601800000, 0x0000000601800000| Untracked | |
1437 | +| 3|0x0000000601c00000, 0x0000000601c00000, 0x0000000602000000| 0%| F| |TAMS 0x0000000601c00000, 0x0000000601c00000| Untracked | |
1438 | +| 4|0x0000000602000000, 0x0000000602000000, 0x0000000602400000| 0%| F| |TAMS 0x0000000602000000, 0x0000000602000000| Untracked | |
1439 | +| 5|0x0000000602400000, 0x0000000602400000, 0x0000000602800000| 0%| F| |TAMS 0x0000000602400000, 0x0000000602400000| Untracked | |
1440 | +| 6|0x0000000602800000, 0x0000000602800000, 0x0000000602c00000| 0%| F| |TAMS 0x0000000602800000, 0x0000000602800000| Untracked | |
1441 | +| 7|0x0000000602c00000, 0x0000000602c00000, 0x0000000603000000| 0%| F| |TAMS 0x0000000602c00000, 0x0000000602c00000| Untracked | |
1442 | +| 8|0x0000000603000000, 0x0000000603000000, 0x0000000603400000| 0%| F| |TAMS 0x0000000603000000, 0x0000000603000000| Untracked | |
1443 | +| 9|0x0000000603400000, 0x0000000603400000, 0x0000000603800000| 0%| F| |TAMS 0x0000000603400000, 0x0000000603400000| Untracked | |
1444 | +| 10|0x0000000603800000, 0x0000000603800000, 0x0000000603c00000| 0%| F| |TAMS 0x0000000603800000, 0x0000000603800000| Untracked | |
1445 | +| 11|0x0000000603c00000, 0x0000000603c00000, 0x0000000604000000| 0%| F| |TAMS 0x0000000603c00000, 0x0000000603c00000| Untracked | |
1446 | +| 12|0x0000000604000000, 0x0000000604000000, 0x0000000604400000| 0%| F| |TAMS 0x0000000604000000, 0x0000000604000000| Untracked | |
1447 | +| 13|0x0000000604400000, 0x0000000604400000, 0x0000000604800000| 0%| F| |TAMS 0x0000000604400000, 0x0000000604400000| Untracked | |
1448 | +| 14|0x0000000604800000, 0x0000000604800000, 0x0000000604c00000| 0%| F| |TAMS 0x0000000604800000, 0x0000000604800000| Untracked | |
1449 | +| 15|0x0000000604c00000, 0x0000000604c00000, 0x0000000605000000| 0%| F| |TAMS 0x0000000604c00000, 0x0000000604c00000| Untracked | |
1450 | +| 16|0x0000000605000000, 0x0000000605000000, 0x0000000605400000| 0%| F| |TAMS 0x0000000605000000, 0x0000000605000000| Untracked | |
1451 | +| 17|0x0000000605400000, 0x0000000605400000, 0x0000000605800000| 0%| F| |TAMS 0x0000000605400000, 0x0000000605400000| Untracked | |
1452 | +| 18|0x0000000605800000, 0x0000000605800000, 0x0000000605c00000| 0%| F| |TAMS 0x0000000605800000, 0x0000000605800000| Untracked | |
1453 | +| 19|0x0000000605c00000, 0x0000000605c00000, 0x0000000606000000| 0%| F| |TAMS 0x0000000605c00000, 0x0000000605c00000| Untracked | |
1454 | +| 20|0x0000000606000000, 0x0000000606000000, 0x0000000606400000| 0%| F| |TAMS 0x0000000606000000, 0x0000000606000000| Untracked | |
1455 | +| 21|0x0000000606400000, 0x0000000606400000, 0x0000000606800000| 0%| F| |TAMS 0x0000000606400000, 0x0000000606400000| Untracked | |
1456 | +| 22|0x0000000606800000, 0x0000000606800000, 0x0000000606c00000| 0%| F| |TAMS 0x0000000606800000, 0x0000000606800000| Untracked | |
1457 | +| 23|0x0000000606c00000, 0x0000000606c00000, 0x0000000607000000| 0%| F| |TAMS 0x0000000606c00000, 0x0000000606c00000| Untracked | |
1458 | +| 24|0x0000000607000000, 0x0000000607000000, 0x0000000607400000| 0%| F| |TAMS 0x0000000607000000, 0x0000000607000000| Untracked | |
1459 | +| 25|0x0000000607400000, 0x0000000607400000, 0x0000000607800000| 0%| F| |TAMS 0x0000000607400000, 0x0000000607400000| Untracked | |
1460 | +| 26|0x0000000607800000, 0x0000000607800000, 0x0000000607c00000| 0%| F| |TAMS 0x0000000607800000, 0x0000000607800000| Untracked | |
1461 | +| 27|0x0000000607c00000, 0x0000000607c00000, 0x0000000608000000| 0%| F| |TAMS 0x0000000607c00000, 0x0000000607c00000| Untracked | |
1462 | +| 28|0x0000000608000000, 0x0000000608000000, 0x0000000608400000| 0%| F| |TAMS 0x0000000608000000, 0x0000000608000000| Untracked | |
1463 | +| 29|0x0000000608400000, 0x0000000608400000, 0x0000000608800000| 0%| F| |TAMS 0x0000000608400000, 0x0000000608400000| Untracked | |
1464 | +| 30|0x0000000608800000, 0x0000000608800000, 0x0000000608c00000| 0%| F| |TAMS 0x0000000608800000, 0x0000000608800000| Untracked | |
1465 | +| 31|0x0000000608c00000, 0x0000000608c00000, 0x0000000609000000| 0%| F| |TAMS 0x0000000608c00000, 0x0000000608c00000| Untracked | |
1466 | +| 32|0x0000000609000000, 0x0000000609000000, 0x0000000609400000| 0%| F| |TAMS 0x0000000609000000, 0x0000000609000000| Untracked | |
1467 | +| 33|0x0000000609400000, 0x0000000609400000, 0x0000000609800000| 0%| F| |TAMS 0x0000000609400000, 0x0000000609400000| Untracked | |
1468 | +| 34|0x0000000609800000, 0x0000000609800000, 0x0000000609c00000| 0%| F| |TAMS 0x0000000609800000, 0x0000000609800000| Untracked | |
1469 | +| 35|0x0000000609c00000, 0x0000000609c00000, 0x000000060a000000| 0%| F| |TAMS 0x0000000609c00000, 0x0000000609c00000| Untracked | |
1470 | +| 36|0x000000060a000000, 0x000000060a000000, 0x000000060a400000| 0%| F| |TAMS 0x000000060a000000, 0x000000060a000000| Untracked | |
1471 | +| 37|0x000000060a400000, 0x000000060a400000, 0x000000060a800000| 0%| F| |TAMS 0x000000060a400000, 0x000000060a400000| Untracked | |
1472 | +| 38|0x000000060a800000, 0x000000060a800000, 0x000000060ac00000| 0%| F| |TAMS 0x000000060a800000, 0x000000060a800000| Untracked | |
1473 | +| 39|0x000000060ac00000, 0x000000060ac00000, 0x000000060b000000| 0%| F| |TAMS 0x000000060ac00000, 0x000000060ac00000| Untracked | |
1474 | +| 40|0x000000060b000000, 0x000000060b000000, 0x000000060b400000| 0%| F| |TAMS 0x000000060b000000, 0x000000060b000000| Untracked | |
1475 | +| 41|0x000000060b400000, 0x000000060b400000, 0x000000060b800000| 0%| F| |TAMS 0x000000060b400000, 0x000000060b400000| Untracked | |
1476 | +| 42|0x000000060b800000, 0x000000060b800000, 0x000000060bc00000| 0%| F| |TAMS 0x000000060b800000, 0x000000060b800000| Untracked | |
1477 | +| 43|0x000000060bc00000, 0x000000060bc00000, 0x000000060c000000| 0%| F| |TAMS 0x000000060bc00000, 0x000000060bc00000| Untracked | |
1478 | +| 44|0x000000060c000000, 0x000000060c000000, 0x000000060c400000| 0%| F| |TAMS 0x000000060c000000, 0x000000060c000000| Untracked | |
1479 | +| 45|0x000000060c400000, 0x000000060c400000, 0x000000060c800000| 0%| F| |TAMS 0x000000060c400000, 0x000000060c400000| Untracked | |
1480 | +| 46|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000, 0x000000060c800000| Untracked | |
1481 | +| 47|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000, 0x000000060cc00000| Untracked | |
1482 | +| 48|0x000000060d000000, 0x000000060d000000, 0x000000060d400000| 0%| F| |TAMS 0x000000060d000000, 0x000000060d000000| Untracked | |
1483 | +| 49|0x000000060d400000, 0x000000060d400000, 0x000000060d800000| 0%| F| |TAMS 0x000000060d400000, 0x000000060d400000| Untracked | |
1484 | +| 50|0x000000060d800000, 0x000000060d800000, 0x000000060dc00000| 0%| F| |TAMS 0x000000060d800000, 0x000000060d800000| Untracked | |
1485 | +| 51|0x000000060dc00000, 0x000000060dc00000, 0x000000060e000000| 0%| F| |TAMS 0x000000060dc00000, 0x000000060dc00000| Untracked | |
1486 | +| 52|0x000000060e000000, 0x000000060e000000, 0x000000060e400000| 0%| F| |TAMS 0x000000060e000000, 0x000000060e000000| Untracked | |
1487 | +| 53|0x000000060e400000, 0x000000060e400000, 0x000000060e800000| 0%| F| |TAMS 0x000000060e400000, 0x000000060e400000| Untracked | |
1488 | +| 54|0x000000060e800000, 0x000000060e800000, 0x000000060ec00000| 0%| F| |TAMS 0x000000060e800000, 0x000000060e800000| Untracked | |
1489 | +| 55|0x000000060ec00000, 0x000000060ec00000, 0x000000060f000000| 0%| F| |TAMS 0x000000060ec00000, 0x000000060ec00000| Untracked | |
1490 | +| 56|0x000000060f000000, 0x000000060f000000, 0x000000060f400000| 0%| F| |TAMS 0x000000060f000000, 0x000000060f000000| Untracked | |
1491 | +| 57|0x000000060f400000, 0x000000060f400000, 0x000000060f800000| 0%| F| |TAMS 0x000000060f400000, 0x000000060f400000| Untracked | |
1492 | +| 58|0x000000060f800000, 0x000000060f800000, 0x000000060fc00000| 0%| F| |TAMS 0x000000060f800000, 0x000000060f800000| Untracked | |
1493 | +| 59|0x000000060fc00000, 0x000000060fc00000, 0x0000000610000000| 0%| F| |TAMS 0x000000060fc00000, 0x000000060fc00000| Untracked | |
1494 | +| 60|0x0000000610000000, 0x0000000610000000, 0x0000000610400000| 0%| F| |TAMS 0x0000000610000000, 0x0000000610000000| Untracked | |
1495 | +| 61|0x0000000610400000, 0x0000000610400000, 0x0000000610800000| 0%| F| |TAMS 0x0000000610400000, 0x0000000610400000| Untracked | |
1496 | +| 62|0x0000000610800000, 0x0000000610800000, 0x0000000610c00000| 0%| F| |TAMS 0x0000000610800000, 0x0000000610800000| Untracked | |
1497 | +| 63|0x0000000610c00000, 0x0000000610c00000, 0x0000000611000000| 0%| F| |TAMS 0x0000000610c00000, 0x0000000610c00000| Untracked | |
1498 | +| 64|0x0000000611000000, 0x0000000611000000, 0x0000000611400000| 0%| F| |TAMS 0x0000000611000000, 0x0000000611000000| Untracked | |
1499 | +| 65|0x0000000611400000, 0x0000000611400000, 0x0000000611800000| 0%| F| |TAMS 0x0000000611400000, 0x0000000611400000| Untracked | |
1500 | +| 66|0x0000000611800000, 0x0000000611800000, 0x0000000611c00000| 0%| F| |TAMS 0x0000000611800000, 0x0000000611800000| Untracked | |
1501 | +| 67|0x0000000611c00000, 0x0000000611c00000, 0x0000000612000000| 0%| F| |TAMS 0x0000000611c00000, 0x0000000611c00000| Untracked | |
1502 | +| 68|0x0000000612000000, 0x0000000612000000, 0x0000000612400000| 0%| F| |TAMS 0x0000000612000000, 0x0000000612000000| Untracked | |
1503 | +| 69|0x0000000612400000, 0x0000000612400000, 0x0000000612800000| 0%| F| |TAMS 0x0000000612400000, 0x0000000612400000| Untracked | |
1504 | +| 70|0x0000000612800000, 0x0000000612800000, 0x0000000612c00000| 0%| F| |TAMS 0x0000000612800000, 0x0000000612800000| Untracked | |
1505 | +| 71|0x0000000612c00000, 0x0000000612c00000, 0x0000000613000000| 0%| F| |TAMS 0x0000000612c00000, 0x0000000612c00000| Untracked | |
1506 | +| 72|0x0000000613000000, 0x0000000613000000, 0x0000000613400000| 0%| F| |TAMS 0x0000000613000000, 0x0000000613000000| Untracked | |
1507 | +| 73|0x0000000613400000, 0x0000000613400000, 0x0000000613800000| 0%| F| |TAMS 0x0000000613400000, 0x0000000613400000| Untracked | |
1508 | +| 74|0x0000000613800000, 0x0000000613800000, 0x0000000613c00000| 0%| F| |TAMS 0x0000000613800000, 0x0000000613800000| Untracked | |
1509 | +| 75|0x0000000613c00000, 0x0000000613c00000, 0x0000000614000000| 0%| F| |TAMS 0x0000000613c00000, 0x0000000613c00000| Untracked | |
1510 | +| 76|0x0000000614000000, 0x0000000614000000, 0x0000000614400000| 0%| F| |TAMS 0x0000000614000000, 0x0000000614000000| Untracked | |
1511 | +| 77|0x0000000614400000, 0x0000000614400000, 0x0000000614800000| 0%| F| |TAMS 0x0000000614400000, 0x0000000614400000| Untracked | |
1512 | +| 78|0x0000000614800000, 0x0000000614800000, 0x0000000614c00000| 0%| F| |TAMS 0x0000000614800000, 0x0000000614800000| Untracked | |
1513 | +| 79|0x0000000614c00000, 0x0000000614c00000, 0x0000000615000000| 0%| F| |TAMS 0x0000000614c00000, 0x0000000614c00000| Untracked | |
1514 | +| 80|0x0000000615000000, 0x0000000615000000, 0x0000000615400000| 0%| F| |TAMS 0x0000000615000000, 0x0000000615000000| Untracked | |
1515 | +| 81|0x0000000615400000, 0x0000000615400000, 0x0000000615800000| 0%| F| |TAMS 0x0000000615400000, 0x0000000615400000| Untracked | |
1516 | +| 82|0x0000000615800000, 0x0000000615800000, 0x0000000615c00000| 0%| F| |TAMS 0x0000000615800000, 0x0000000615800000| Untracked | |
1517 | +| 83|0x0000000615c00000, 0x0000000615c00000, 0x0000000616000000| 0%| F| |TAMS 0x0000000615c00000, 0x0000000615c00000| Untracked | |
1518 | +| 84|0x0000000616000000, 0x0000000616000000, 0x0000000616400000| 0%| F| |TAMS 0x0000000616000000, 0x0000000616000000| Untracked | |
1519 | +| 85|0x0000000616400000, 0x0000000616400000, 0x0000000616800000| 0%| F| |TAMS 0x0000000616400000, 0x0000000616400000| Untracked | |
1520 | +| 86|0x0000000616800000, 0x0000000616800000, 0x0000000616c00000| 0%| F| |TAMS 0x0000000616800000, 0x0000000616800000| Untracked | |
1521 | +| 87|0x0000000616c00000, 0x0000000616c00000, 0x0000000617000000| 0%| F| |TAMS 0x0000000616c00000, 0x0000000616c00000| Untracked | |
1522 | +| 88|0x0000000617000000, 0x0000000617000000, 0x0000000617400000| 0%| F| |TAMS 0x0000000617000000, 0x0000000617000000| Untracked | |
1523 | +| 89|0x0000000617400000, 0x0000000617400000, 0x0000000617800000| 0%| F| |TAMS 0x0000000617400000, 0x0000000617400000| Untracked | |
1524 | +| 90|0x0000000617800000, 0x0000000617800000, 0x0000000617c00000| 0%| F| |TAMS 0x0000000617800000, 0x0000000617800000| Untracked | |
1525 | +| 91|0x0000000617c00000, 0x0000000617c00000, 0x0000000618000000| 0%| F| |TAMS 0x0000000617c00000, 0x0000000617c00000| Untracked | |
1526 | +| 92|0x0000000618000000, 0x0000000618000000, 0x0000000618400000| 0%| F| |TAMS 0x0000000618000000, 0x0000000618000000| Untracked | |
1527 | +| 93|0x0000000618400000, 0x0000000618400000, 0x0000000618800000| 0%| F| |TAMS 0x0000000618400000, 0x0000000618400000| Untracked | |
1528 | +| 94|0x0000000618800000, 0x0000000618800000, 0x0000000618c00000| 0%| F| |TAMS 0x0000000618800000, 0x0000000618800000| Untracked | |
1529 | +| 95|0x0000000618c00000, 0x0000000618c00000, 0x0000000619000000| 0%| F| |TAMS 0x0000000618c00000, 0x0000000618c00000| Untracked | |
1530 | +| 96|0x0000000619000000, 0x0000000619000000, 0x0000000619400000| 0%| F| |TAMS 0x0000000619000000, 0x0000000619000000| Untracked | |
1531 | +| 97|0x0000000619400000, 0x0000000619400000, 0x0000000619800000| 0%| F| |TAMS 0x0000000619400000, 0x0000000619400000| Untracked | |
1532 | +| 98|0x0000000619800000, 0x0000000619800000, 0x0000000619c00000| 0%| F| |TAMS 0x0000000619800000, 0x0000000619800000| Untracked | |
1533 | +| 99|0x0000000619c00000, 0x0000000619c00000, 0x000000061a000000| 0%| F| |TAMS 0x0000000619c00000, 0x0000000619c00000| Untracked | |
1534 | +| 100|0x000000061a000000, 0x000000061a000000, 0x000000061a400000| 0%| F| |TAMS 0x000000061a000000, 0x000000061a000000| Untracked | |
1535 | +| 101|0x000000061a400000, 0x000000061a400000, 0x000000061a800000| 0%| F| |TAMS 0x000000061a400000, 0x000000061a400000| Untracked | |
1536 | +| 102|0x000000061a800000, 0x000000061a800000, 0x000000061ac00000| 0%| F| |TAMS 0x000000061a800000, 0x000000061a800000| Untracked | |
1537 | +| 103|0x000000061ac00000, 0x000000061ac00000, 0x000000061b000000| 0%| F| |TAMS 0x000000061ac00000, 0x000000061ac00000| Untracked | |
1538 | +| 104|0x000000061b000000, 0x000000061b000000, 0x000000061b400000| 0%| F| |TAMS 0x000000061b000000, 0x000000061b000000| Untracked | |
1539 | +| 105|0x000000061b400000, 0x000000061b400000, 0x000000061b800000| 0%| F| |TAMS 0x000000061b400000, 0x000000061b400000| Untracked | |
1540 | +| 106|0x000000061b800000, 0x000000061b800000, 0x000000061bc00000| 0%| F| |TAMS 0x000000061b800000, 0x000000061b800000| Untracked | |
1541 | +| 107|0x000000061bc00000, 0x000000061bc00000, 0x000000061c000000| 0%| F| |TAMS 0x000000061bc00000, 0x000000061bc00000| Untracked | |
1542 | +| 108|0x000000061c000000, 0x000000061c000000, 0x000000061c400000| 0%| F| |TAMS 0x000000061c000000, 0x000000061c000000| Untracked | |
1543 | +| 109|0x000000061c400000, 0x000000061c400000, 0x000000061c800000| 0%| F| |TAMS 0x000000061c400000, 0x000000061c400000| Untracked | |
1544 | +| 110|0x000000061c800000, 0x000000061c800000, 0x000000061cc00000| 0%| F| |TAMS 0x000000061c800000, 0x000000061c800000| Untracked | |
1545 | +| 111|0x000000061cc00000, 0x000000061cc00000, 0x000000061d000000| 0%| F| |TAMS 0x000000061cc00000, 0x000000061cc00000| Untracked | |
1546 | +| 112|0x000000061d000000, 0x000000061d000000, 0x000000061d400000| 0%| F| |TAMS 0x000000061d000000, 0x000000061d000000| Untracked | |
1547 | +| 113|0x000000061d400000, 0x000000061d400000, 0x000000061d800000| 0%| F| |TAMS 0x000000061d400000, 0x000000061d400000| Untracked | |
1548 | +| 114|0x000000061d800000, 0x000000061d800000, 0x000000061dc00000| 0%| F| |TAMS 0x000000061d800000, 0x000000061d800000| Untracked | |
1549 | +| 115|0x000000061dc00000, 0x000000061dc00000, 0x000000061e000000| 0%| F| |TAMS 0x000000061dc00000, 0x000000061dc00000| Untracked | |
1550 | +| 116|0x000000061e000000, 0x000000061e000000, 0x000000061e400000| 0%| F| |TAMS 0x000000061e000000, 0x000000061e000000| Untracked | |
1551 | +| 117|0x000000061e400000, 0x000000061e400000, 0x000000061e800000| 0%| F| |TAMS 0x000000061e400000, 0x000000061e400000| Untracked | |
1552 | +| 118|0x000000061e800000, 0x000000061e800000, 0x000000061ec00000| 0%| F| |TAMS 0x000000061e800000, 0x000000061e800000| Untracked | |
1553 | +| 119|0x000000061ec00000, 0x000000061ec00000, 0x000000061f000000| 0%| F| |TAMS 0x000000061ec00000, 0x000000061ec00000| Untracked | |
1554 | +| 120|0x000000061f000000, 0x000000061f000000, 0x000000061f400000| 0%| F| |TAMS 0x000000061f000000, 0x000000061f000000| Untracked | |
1555 | +| 121|0x000000061f400000, 0x000000061f400000, 0x000000061f800000| 0%| F| |TAMS 0x000000061f400000, 0x000000061f400000| Untracked | |
1556 | +| 122|0x000000061f800000, 0x000000061f9a6ab0, 0x000000061fc00000| 41%| S|CS|TAMS 0x000000061f800000, 0x000000061f800000| Complete | |
1557 | +| 123|0x000000061fc00000, 0x000000061fc63540, 0x0000000620000000| 9%| E| |TAMS 0x000000061fc00000, 0x000000061fc00000| Complete | |
1558 | +| 124|0x0000000620000000, 0x0000000620400000, 0x0000000620400000|100%| E|CS|TAMS 0x0000000620000000, 0x0000000620000000| Complete | |
1559 | +| 125|0x0000000620400000, 0x0000000620800000, 0x0000000620800000|100%| E|CS|TAMS 0x0000000620400000, 0x0000000620400000| Complete | |
1560 | +| 126|0x0000000620800000, 0x0000000620c00000, 0x0000000620c00000|100%| E|CS|TAMS 0x0000000620800000, 0x0000000620800000| Complete | |
1561 | +| 127|0x0000000620c00000, 0x0000000621000000, 0x0000000621000000|100%| E|CS|TAMS 0x0000000620c00000, 0x0000000620c00000| Complete | |
1562 | + | |
1563 | +Card table byte_map: [0x000001f23b5a0000,0x000001f23c5a0000] _byte_map_base: 0x000001f238598000 | |
1564 | + | |
1565 | +Marking Bits (Prev, Next): (CMBitMap*) 0x000001f22da4a410, (CMBitMap*) 0x000001f22da4a450 | |
1566 | + Prev Bits: [0x000001f23d5a0000, 0x000001f245560000) | |
1567 | + Next Bits: [0x000001f245560000, 0x000001f24d520000) | |
1568 | + | |
1569 | +Polling page: 0x000001f22d7e0000 | |
1570 | + | |
1571 | +Metaspace: | |
1572 | + | |
1573 | +Usage: | |
1574 | + Non-class: 6.65 MB used. | |
1575 | + Class: 919.23 KB used. | |
1576 | + Both: 7.55 MB used. | |
1577 | + | |
1578 | +Virtual space: | |
1579 | + Non-class space: 64.00 MB reserved, 6.75 MB ( 11%) committed, 1 nodes. | |
1580 | + Class space: 1.00 GB reserved, 960.00 KB ( <1%) committed, 1 nodes. | |
1581 | + Both: 1.06 GB reserved, 7.69 MB ( <1%) committed. | |
1582 | + | |
1583 | +Chunk freelists: | |
1584 | + Non-Class: 9.11 MB | |
1585 | + Class: 15.01 MB | |
1586 | + Both: 24.12 MB | |
1587 | + | |
1588 | +MaxMetaspaceSize: unlimited | |
1589 | +CompressedClassSpaceSize: 1.00 GB | |
1590 | +Initial GC threshold: 21.00 MB | |
1591 | +Current GC threshold: 21.00 MB | |
1592 | +CDS: on | |
1593 | +MetaspaceReclaimPolicy: balanced | |
1594 | + - commit_granule_bytes: 65536. | |
1595 | + - commit_granule_words: 8192. | |
1596 | + - virtual_space_node_default_size: 8388608. | |
1597 | + - enlarge_chunks_in_place: 1. | |
1598 | + - new_chunks_are_fully_committed: 0. | |
1599 | + - uncommit_free_chunks: 1. | |
1600 | + - use_allocation_guard: 0. | |
1601 | + - handle_deallocations: 1. | |
1602 | + | |
1603 | + | |
1604 | +Internal statistics: | |
1605 | + | |
1606 | +num_allocs_failed_limit: 0. | |
1607 | +num_arena_births: 128. | |
1608 | +num_arena_deaths: 0. | |
1609 | +num_vsnodes_births: 2. | |
1610 | +num_vsnodes_deaths: 0. | |
1611 | +num_space_committed: 123. | |
1612 | +num_space_uncommitted: 0. | |
1613 | +num_chunks_returned_to_freelist: 0. | |
1614 | +num_chunks_taken_from_freelist: 249. | |
1615 | +num_chunk_merges: 0. | |
1616 | +num_chunk_splits: 161. | |
1617 | +num_chunks_enlarged: 106. | |
1618 | +num_inconsistent_stats: 0. | |
1619 | + | |
1620 | +CodeCache: size=49152Kb used=5496Kb max_used=5496Kb free=43655Kb | |
1621 | + bounds [0x000001f236b00000, 0x000001f237060000, 0x000001f239b00000] | |
1622 | + total_blobs=2130 nmethods=1657 adapters=398 | |
1623 | + compilation: enabled | |
1624 | + stopped_count=0, restarted_count=0 | |
1625 | + full_count=0 | |
1626 | + | |
1627 | +Compilation events (20 events): | |
1628 | +Event: 0.524 Thread 0x000001f2502d09c0 1649 1 java.lang.invoke.LambdaFormEditor$TransformKey::inRange (36 bytes) | |
1629 | +Event: 0.524 Thread 0x000001f2502e0940 nmethod 1648 0x000001f237058a90 code [0x000001f237058c20, 0x000001f237058d08] | |
1630 | +Event: 0.524 Thread 0x000001f2504b9300 nmethod 1647 0x000001f237058d90 code [0x000001f237058f40, 0x000001f2370590c8] | |
1631 | +Event: 0.524 Thread 0x000001f2502d09c0 nmethod 1649 0x000001f237059190 code [0x000001f237059320, 0x000001f2370593d8] | |
1632 | +Event: 0.525 Thread 0x000001f2504b9300 1650 ! 1 java.io.WinNTFileSystem::resolve (362 bytes) | |
1633 | +Event: 0.527 Thread 0x000001f2504b9300 nmethod 1650 0x000001f237059490 code [0x000001f237059a60, 0x000001f23705b848] | |
1634 | +Event: 0.528 Thread 0x000001f2504b9300 1651 1 org.jetbrains.coverage.org.objectweb.asm.ByteVector::put112 (80 bytes) | |
1635 | +Event: 0.528 Thread 0x000001f2504b9300 nmethod 1651 0x000001f23705c790 code [0x000001f23705c920, 0x000001f23705cac8] | |
1636 | +Event: 0.529 Thread 0x000001f2504b9300 1652 1 java.lang.reflect.Field::getModifiers (5 bytes) | |
1637 | +Event: 0.529 Thread 0x000001f2504b9300 nmethod 1652 0x000001f23705cc10 code [0x000001f23705cda0, 0x000001f23705ce78] | |
1638 | +Event: 0.529 Thread 0x000001f2504b9300 1653 ! 1 java.lang.invoke.MethodHandle::setVarargs (25 bytes) | |
1639 | +Event: 0.529 Thread 0x000001f2502e0940 1654 1 java.lang.invoke.MemberName::isVarargs (23 bytes) | |
1640 | +Event: 0.530 Thread 0x000001f2502e0940 nmethod 1654 0x000001f23705cf10 code [0x000001f23705d0a0, 0x000001f23705d1f8] | |
1641 | +Event: 0.530 Thread 0x000001f2504b9300 nmethod 1653 0x000001f23705d290 code [0x000001f23705d440, 0x000001f23705d678] | |
1642 | +Event: 0.530 Thread 0x000001f2503ceb40 1655 1 java.util.zip.ZipEntry::getName (5 bytes) | |
1643 | +Event: 0.530 Thread 0x000001f2503ceb40 nmethod 1655 0x000001f23705d790 code [0x000001f23705d920, 0x000001f23705d9f8] | |
1644 | +Event: 0.531 Thread 0x000001f2502e0940 1656 1 java.net.URI::getRawFragment (5 bytes) | |
1645 | +Event: 0.531 Thread 0x000001f2504b9300 1657 1 java.net.URI::getRawQuery (5 bytes) | |
1646 | +Event: 0.531 Thread 0x000001f2504b9300 nmethod 1657 0x000001f23705da90 code [0x000001f23705dc20, 0x000001f23705dcf8] | |
1647 | +Event: 0.531 Thread 0x000001f2502e0940 nmethod 1656 0x000001f23705dd90 code [0x000001f23705df20, 0x000001f23705dff8] | |
1648 | + | |
1649 | +GC Heap History (4 events): | |
1650 | +Event: 0.335 GC heap before | |
1651 | +{Heap before GC invocations=0 (full 0): | |
1652 | + garbage-first heap total 524288K, used 20480K [0x0000000601000000, 0x0000000800000000) | |
1653 | + region size 4096K, 6 young (24576K), 0 survivors (0K) | |
1654 | + Metaspace used 5375K, committed 5568K, reserved 1114112K | |
1655 | + class space used 611K, committed 704K, reserved 1048576K | |
1656 | +} | |
1657 | +Event: 0.338 GC heap after | |
1658 | +{Heap after GC invocations=1 (full 0): | |
1659 | + garbage-first heap total 524288K, used 8272K [0x0000000601000000, 0x0000000800000000) | |
1660 | + region size 4096K, 1 young (4096K), 1 survivors (4096K) | |
1661 | + Metaspace used 5375K, committed 5568K, reserved 1114112K | |
1662 | + class space used 611K, committed 704K, reserved 1048576K | |
1663 | +} | |
1664 | +Event: 0.449 GC heap before | |
1665 | +{Heap before GC invocations=1 (full 0): | |
1666 | + garbage-first heap total 524288K, used 28752K [0x0000000601000000, 0x0000000800000000) | |
1667 | + region size 4096K, 6 young (24576K), 1 survivors (4096K) | |
1668 | + Metaspace used 6842K, committed 7040K, reserved 1114112K | |
1669 | + class space used 804K, committed 896K, reserved 1048576K | |
1670 | +} | |
1671 | +Event: 0.451 GC heap after | |
1672 | +{Heap after GC invocations=2 (full 0): | |
1673 | + garbage-first heap total 524288K, used 10121K [0x0000000601000000, 0x0000000800000000) | |
1674 | + region size 4096K, 1 young (4096K), 1 survivors (4096K) | |
1675 | + Metaspace used 6842K, committed 7040K, reserved 1114112K | |
1676 | + class space used 804K, committed 896K, reserved 1048576K | |
1677 | +} | |
1678 | + | |
1679 | +Deoptimization events (0 events): | |
1680 | +No events | |
1681 | + | |
1682 | +Classes unloaded (0 events): | |
1683 | +No events | |
1684 | + | |
1685 | +Classes redefined (0 events): | |
1686 | +No events | |
1687 | + | |
1688 | +Internal exceptions (20 events): | |
1689 | +Event: 0.174 Thread 0x000001f22da2ca00 Exception <a 'java/lang/IncompatibleClassChangeError'{0x00000006207e5bc0}: Found class java.lang.Object, but interface was expected> (0x00000006207e5bc0) | |
1690 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 826] | |
1691 | +Event: 0.174 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x00000006207ebf50}: 'void java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(java.lang.Object, java.lang.Object)'> (0x00000006207ebf50) | |
1692 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1693 | +Event: 0.201 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x0000000620168e80}: 'int java.lang.invoke.DirectMethodHandle$Holder.invokeSpecial(java.lang.Object, java.lang.Object, java.lang.Object)'> (0x0000000620168e80) | |
1694 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1695 | +Event: 0.226 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x00000006203058b0}: 'void java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(java.lang.Object, java.lang.Object, java.lang.Object)'> (0x00000006203058b0) | |
1696 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1697 | +Event: 0.232 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x000000062036af98}: 'int java.lang.invoke.DirectMethodHandle$Holder.invokeSpecialIFC(java.lang.Object, java.lang.Object, java.lang.Object)'> (0x000000062036af98) | |
1698 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1699 | +Event: 0.247 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x000000061fc49978}: 'java.lang.Object java.lang.invoke.DirectMethodHandle$Holder.invokeStaticInit(java.lang.Object, int, int, int, int)'> (0x000000061fc49978) | |
1700 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1701 | +Event: 0.267 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x000000061fccfd78}: 'java.lang.Object java.lang.invoke.DirectMethodHandle$Holder.invokeStaticInit(java.lang.Object, java.lang.Object, int, int, int, int)'> (0x000000061fccfd78) | |
1702 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1703 | +Event: 0.275 Thread 0x000001f22da2ca00 Exception <a 'java/lang/ClassNotFoundException'{0x000000061fd11c18}: javax/management/remote/rmi/RMIServerImpl_Skel> (0x000000061fd11c18) | |
1704 | +thrown [s\open\src\hotspot\share\classfile\systemDictionary.cpp, line 256] | |
1705 | +Event: 0.359 Thread 0x000001f22da2ca00 Exception <a 'java/lang/ClassNotFoundException'{0x0000000620fee4b0}: javax/smartcardio/CardPermission> (0x0000000620fee4b0) | |
1706 | +thrown [s\open\src\hotspot\share\classfile\systemDictionary.cpp, line 256] | |
1707 | +Event: 0.360 Thread 0x000001f22da2ca00 Exception <a 'java/io/FileNotFoundException'{0x0000000620ffef48}> (0x0000000620ffef48) | |
1708 | +thrown [s\open\src\hotspot\share\prims\jni.cpp, line 516] | |
1709 | +Event: 0.370 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x00000006208f4d18}: 'java.lang.Object java.lang.invoke.DirectMethodHandle$Holder.invokeSpecial(java.lang.Object, java.lang.Object, java.lang.Object, long, java.lang.Object)'> (0x00000006208f4d18) | |
1710 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1711 | +Event: 0.370 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x00000006208f88e8}: 'java.lang.Object java.lang.invoke.Invokers$Holder.linkToTargetMethod(java.lang.Object, long, java.lang.Object, java.lang.Object)'> (0x00000006208f88e8) | |
1712 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1713 | +Event: 0.411 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x0000000620013688}: 'void java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object)'> (0x0000000620013688) | |
1714 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1715 | +Event: 0.433 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x000000061fcfec50}: 'int java.lang.invoke.DirectMethodHandle$Holder.invokeStaticInit(java.lang.Object, java.lang.Object)'> (0x000000061fcfec50) | |
1716 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1717 | +Event: 0.435 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x000000061fd38d20}: 'void java.lang.invoke.DirectMethodHandle$Holder.invokeInterface(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object)'> (0x000000061fd38d20) | |
1718 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1719 | +Event: 0.475 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x000000062090ce80}: 'java.lang.Object java.lang.invoke.DirectMethodHandle$Holder.invokeInterface(java.lang.Object, java.lang.Object)'> (0x000000062090ce80) | |
1720 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1721 | +Event: 0.484 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x0000000620b0f148}: 'java.lang.Object java.lang.invoke.DirectMethodHandle$Holder.invokeSpecialIFC(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object)'> (0x0000000620b0f148) | |
1722 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1723 | +Event: 0.485 Thread 0x000001f22da2ca00 Exception <a 'java/lang/NoSuchMethodError'{0x0000000620b45788}: 'java.lang.Object java.lang.invoke.DirectMethodHandle$Holder.invokeInterface(java.lang.Object, java.lang.Object, java.lang.Object)'> (0x0000000620b45788) | |
1724 | +thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 759] | |
1725 | +Event: 0.525 Thread 0x000001f29653ed40 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'{0x000000062023a070}: Index 0 out of bounds for length 0> (0x000000062023a070) | |
1726 | +thrown [s\open\src\hotspot\share\interpreter\interpreterRuntime.cpp, line 428] | |
1727 | +Event: 0.525 Thread 0x000001f29653ed40 Exception <a 'java/lang/reflect/InvocationTargetException'{0x000000062023a888}> (0x000000062023a888) | |
1728 | +thrown [s\open\src\hotspot\share\runtime\reflection.cpp, line 1121] | |
1729 | + | |
1730 | +VM Operations (20 events): | |
1731 | +Event: 0.106 Executing VM operation: HandshakeAllThreads | |
1732 | +Event: 0.106 Executing VM operation: HandshakeAllThreads done | |
1733 | +Event: 0.155 Executing VM operation: HandshakeAllThreads | |
1734 | +Event: 0.155 Executing VM operation: HandshakeAllThreads done | |
1735 | +Event: 0.240 Executing VM operation: HandshakeAllThreads | |
1736 | +Event: 0.240 Executing VM operation: HandshakeAllThreads done | |
1737 | +Event: 0.275 Executing VM operation: HandshakeAllThreads | |
1738 | +Event: 0.275 Executing VM operation: HandshakeAllThreads done | |
1739 | +Event: 0.305 Executing VM operation: HandshakeAllThreads | |
1740 | +Event: 0.305 Executing VM operation: HandshakeAllThreads done | |
1741 | +Event: 0.335 Executing VM operation: G1CollectForAllocation | |
1742 | +Event: 0.338 Executing VM operation: G1CollectForAllocation done | |
1743 | +Event: 0.339 Executing VM operation: HandshakeAllThreads | |
1744 | +Event: 0.339 Executing VM operation: HandshakeAllThreads done | |
1745 | +Event: 0.449 Executing VM operation: G1CollectForAllocation | |
1746 | +Event: 0.451 Executing VM operation: G1CollectForAllocation done | |
1747 | +Event: 0.523 Executing VM operation: HandshakeAllThreads | |
1748 | +Event: 0.523 Executing VM operation: HandshakeAllThreads done | |
1749 | +Event: 0.523 Executing VM operation: HandshakeAllThreads | |
1750 | +Event: 0.523 Executing VM operation: HandshakeAllThreads done | |
1751 | + | |
1752 | +Events (20 events): | |
1753 | +Event: 0.528 loading class org/springframework/beans/BeanInfoFactory | |
1754 | +Event: 0.528 loading class org/springframework/beans/BeanInfoFactory done | |
1755 | +Event: 0.529 loading class java/beans/BeanInfo | |
1756 | +Event: 0.529 loading class java/beans/BeanInfo done | |
1757 | +Event: 0.529 loading class org/springframework/data/util/KotlinBeanInfoFactory | |
1758 | +Event: 0.529 loading class org/springframework/data/util/KotlinBeanInfoFactory done | |
1759 | +Event: 0.529 loading class org/springframework/boot/devtools/restart/Restarter | |
1760 | +Event: 0.529 loading class org/springframework/boot/devtools/restart/Restarter done | |
1761 | +Event: 0.529 loading class org/springframework/util/ConcurrentReferenceHashMap$EntrySet | |
1762 | +Event: 0.529 loading class org/springframework/util/ConcurrentReferenceHashMap$EntrySet done | |
1763 | +Event: 0.530 loading class org/springframework/util/ConcurrentReferenceHashMap$EntryIterator | |
1764 | +Event: 0.530 loading class org/springframework/util/ConcurrentReferenceHashMap$EntryIterator done | |
1765 | +Event: 0.530 loading class org/springframework/core/annotation/AnnotationUtils | |
1766 | +Event: 0.530 loading class org/springframework/core/annotation/AnnotationUtils done | |
1767 | +Event: 0.532 loading class org/springframework/core/annotation/AnnotationTypeMappings | |
1768 | +Event: 0.532 loading class org/springframework/core/annotation/AnnotationTypeMappings done | |
1769 | +Event: 0.533 loading class org/springframework/core/annotation/IntrospectionFailureLogger | |
1770 | +Event: 0.533 loading class org/springframework/core/annotation/IntrospectionFailureLogger done | |
1771 | +Event: 0.533 loading class org/springframework/core/annotation/IntrospectionFailureLogger$1 | |
1772 | +Event: 0.533 loading class org/springframework/core/annotation/IntrospectionFailureLogger$1 done | |
1773 | + | |
1774 | + | |
1775 | +Dynamic libraries: | |
1776 | +0x00007ff782270000 - 0x00007ff782280000 C:\Program Files\Java\jdk-17\bin\java.exe | |
1777 | +0x00007ffd29110000 - 0x00007ffd29308000 C:\WINDOWS\SYSTEM32\ntdll.dll | |
1778 | +0x00007ffd27ef0000 - 0x00007ffd27fad000 C:\WINDOWS\System32\KERNEL32.DLL | |
1779 | +0x00007ffd26a80000 - 0x00007ffd26d76000 C:\WINDOWS\System32\KERNELBASE.dll | |
1780 | +0x00007ffd26df0000 - 0x00007ffd26ef0000 C:\WINDOWS\System32\ucrtbase.dll | |
1781 | +0x00007ffd112f0000 - 0x00007ffd1130b000 C:\Program Files\Java\jdk-17\bin\VCRUNTIME140.dll | |
1782 | +0x00007ffd15770000 - 0x00007ffd15789000 C:\Program Files\Java\jdk-17\bin\jli.dll | |
1783 | +0x00007ffd28370000 - 0x00007ffd28420000 C:\WINDOWS\System32\ADVAPI32.dll | |
1784 | +0x00007ffd27140000 - 0x00007ffd271de000 C:\WINDOWS\System32\msvcrt.dll | |
1785 | +0x00007ffd284c0000 - 0x00007ffd28560000 C:\WINDOWS\System32\sechost.dll | |
1786 | +0x00007ffd28700000 - 0x00007ffd28823000 C:\WINDOWS\System32\RPCRT4.dll | |
1787 | +0x00007ffd269a0000 - 0x00007ffd269c7000 C:\WINDOWS\System32\bcrypt.dll | |
1788 | +0x00007ffd28bb0000 - 0x00007ffd28d4f000 C:\WINDOWS\System32\USER32.dll | |
1789 | +0x00007ffd267c0000 - 0x00007ffd267e2000 C:\WINDOWS\System32\win32u.dll | |
1790 | +0x00007ffd0b9c0000 - 0x00007ffd0bc5a000 C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.4355_none_60b8b9eb71f62e16\COMCTL32.dll | |
1791 | +0x00007ffd28a00000 - 0x00007ffd28a2b000 C:\WINDOWS\System32\GDI32.dll | |
1792 | +0x00007ffd26ef0000 - 0x00007ffd27007000 C:\WINDOWS\System32\gdi32full.dll | |
1793 | +0x00007ffd270a0000 - 0x00007ffd2713d000 C:\WINDOWS\System32\msvcp_win.dll | |
1794 | +0x00007ffd20880000 - 0x00007ffd2088a000 C:\WINDOWS\SYSTEM32\VERSION.dll | |
1795 | +0x00007ffd28480000 - 0x00007ffd284b2000 C:\WINDOWS\System32\IMM32.DLL | |
1796 | +0x00007ffd21ab0000 - 0x00007ffd21abc000 C:\Program Files\Java\jdk-17\bin\vcruntime140_1.dll | |
1797 | +0x00007ffcef8a0000 - 0x00007ffcef92e000 C:\Program Files\Java\jdk-17\bin\msvcp140.dll | |
1798 | +0x00007ffcd7a50000 - 0x00007ffcd8630000 C:\Program Files\Java\jdk-17\bin\server\jvm.dll | |
1799 | +0x00007ffd289f0000 - 0x00007ffd289f8000 C:\WINDOWS\System32\PSAPI.DLL | |
1800 | +0x00007ffd1e6d0000 - 0x00007ffd1e6f7000 C:\WINDOWS\SYSTEM32\WINMM.dll | |
1801 | +0x00007ffd106c0000 - 0x00007ffd106c9000 C:\WINDOWS\SYSTEM32\WSOCK32.dll | |
1802 | +0x00007ffd28a90000 - 0x00007ffd28afb000 C:\WINDOWS\System32\WS2_32.dll | |
1803 | +0x00007ffd24660000 - 0x00007ffd24672000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll | |
1804 | +0x00007ffd10c50000 - 0x00007ffd10c5a000 C:\Program Files\Java\jdk-17\bin\jimage.dll | |
1805 | +0x00007ffd12340000 - 0x00007ffd12524000 C:\WINDOWS\SYSTEM32\DBGHELP.DLL | |
1806 | +0x00007ffd12280000 - 0x00007ffd122b4000 C:\WINDOWS\SYSTEM32\dbgcore.DLL | |
1807 | +0x00007ffd27010000 - 0x00007ffd27092000 C:\WINDOWS\System32\bcryptPrimitives.dll | |
1808 | +0x00007ffd0d6e0000 - 0x00007ffd0d6ee000 C:\Program Files\Java\jdk-17\bin\instrument.dll | |
1809 | +0x00007ffd0bec0000 - 0x00007ffd0bee5000 C:\Program Files\Java\jdk-17\bin\java.dll | |
1810 | +0x00007ffd0c000000 - 0x00007ffd0c018000 C:\Program Files\Java\jdk-17\bin\zip.dll | |
1811 | +0x00007ffcef7c0000 - 0x00007ffcef897000 C:\Program Files\Java\jdk-17\bin\jsvml.dll | |
1812 | +0x00007ffd271e0000 - 0x00007ffd2794b000 C:\WINDOWS\System32\SHELL32.dll | |
1813 | +0x00007ffd24860000 - 0x00007ffd24ffd000 C:\WINDOWS\SYSTEM32\windows.storage.dll | |
1814 | +0x00007ffd28d70000 - 0x00007ffd290c3000 C:\WINDOWS\System32\combase.dll | |
1815 | +0x00007ffd261e0000 - 0x00007ffd2620e000 C:\WINDOWS\SYSTEM32\Wldp.dll | |
1816 | +0x00007ffd285c0000 - 0x00007ffd2868d000 C:\WINDOWS\System32\OLEAUT32.dll | |
1817 | +0x00007ffd281e0000 - 0x00007ffd2828d000 C:\WINDOWS\System32\SHCORE.dll | |
1818 | +0x00007ffd286a0000 - 0x00007ffd286f5000 C:\WINDOWS\System32\shlwapi.dll | |
1819 | +0x00007ffd266f0000 - 0x00007ffd26714000 C:\WINDOWS\SYSTEM32\profapi.dll | |
1820 | +0x00007ffcfdec0000 - 0x00007ffcfded9000 C:\Program Files\Java\jdk-17\bin\net.dll | |
1821 | +0x00007ffd20280000 - 0x00007ffd2038a000 C:\WINDOWS\SYSTEM32\WINHTTP.dll | |
1822 | +0x00007ffd25f40000 - 0x00007ffd25faa000 C:\WINDOWS\system32\mswsock.dll | |
1823 | +0x00007ffcf0160000 - 0x00007ffcf0176000 C:\Program Files\Java\jdk-17\bin\nio.dll | |
1824 | +0x00007ffd25c10000 - 0x00007ffd25cdb000 C:\WINDOWS\SYSTEM32\DNSAPI.dll | |
1825 | +0x00007ffd25bd0000 - 0x00007ffd25c0b000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL | |
1826 | +0x00007ffd28690000 - 0x00007ffd28698000 C:\WINDOWS\System32\NSI.dll | |
1827 | +0x00007ffd1d010000 - 0x00007ffd1d01a000 C:\Windows\System32\rasadhlp.dll | |
1828 | +0x00007ffd1d490000 - 0x00007ffd1d510000 C:\WINDOWS\System32\fwpuclnt.dll | |
1829 | +0x00007ffd04b90000 - 0x00007ffd04b9a000 C:\Program Files\Java\jdk-17\bin\management.dll | |
1830 | +0x00007ffcfdeb0000 - 0x00007ffcfdebb000 C:\Program Files\Java\jdk-17\bin\management_ext.dll | |
1831 | +0x00007ffd26140000 - 0x00007ffd26158000 C:\WINDOWS\SYSTEM32\CRYPTSP.dll | |
1832 | +0x00007ffd257f0000 - 0x00007ffd25824000 C:\WINDOWS\system32\rsaenh.dll | |
1833 | +0x00007ffd266a0000 - 0x00007ffd266ce000 C:\WINDOWS\SYSTEM32\USERENV.dll | |
1834 | +0x00007ffd26130000 - 0x00007ffd2613c000 C:\WINDOWS\SYSTEM32\CRYPTBASE.dll | |
1835 | +0x00007ffd207e0000 - 0x00007ffd207f7000 C:\WINDOWS\SYSTEM32\dhcpcsvc6.DLL | |
1836 | +0x00007ffd20c60000 - 0x00007ffd20c7d000 C:\WINDOWS\SYSTEM32\dhcpcsvc.DLL | |
1837 | +0x00007ffd10560000 - 0x00007ffd10577000 C:\WINDOWS\system32\napinsp.dll | |
1838 | +0x00007ffd10540000 - 0x00007ffd1055b000 C:\WINDOWS\system32\pnrpnsp.dll | |
1839 | +0x00007ffd22150000 - 0x00007ffd2216d000 C:\WINDOWS\system32\NLAapi.dll | |
1840 | +0x00007ffd10580000 - 0x00007ffd10595000 C:\WINDOWS\system32\wshbth.dll | |
1841 | +0x00007ffd102d0000 - 0x00007ffd102e2000 C:\WINDOWS\System32\winrnr.dll | |
1842 | +0x00007ffd0d6f0000 - 0x00007ffd0d70a000 C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\bin\breakgen64.dll | |
1843 | + | |
1844 | +dbghelp: loaded successfully - version: 4.0.5 - missing functions: none | |
1845 | +symbol engine: initialized successfully - sym options: 0x614 - pdb path: .;C:\Program Files\Java\jdk-17\bin;C:\WINDOWS\SYSTEM32;C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.4355_none_60b8b9eb71f62e16;C:\Program Files\Java\jdk-17\bin\server;C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\bin | |
1846 | + | |
1847 | +VM Arguments: | |
1848 | +jvm_args: -javaagent:C:\Users\takensoft\AppData\Local\JetBrains\IntelliJIdea2020.1\testAgent\intellij-coverage-agent-1.0.508.jar=C:\Users\takensoft\AppData\Local\Temp\coverageargs -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Didea.launcher.port=53797 -Didea.launcher.bin.path=C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\bin -Dfile.encoding=UTF-8 | |
1849 | +java_command: com.intellij.rt.execution.application.AppMainV2 com.example.educatback.EducatBackApplication | |
1850 | +java_class_path (initial): C:\Users\takensoft\Documents\takensoft\backend\educatBack\build\classes\java\main;C:\Users\takensoft\Documents\takensoft\backend\educatBack\build\resources\main;C:\Users\takensoft\.gradle\caches\modules-2\files-2.1\org.projectlombok\lombok\1.18.32\17d46b3e205515e1e8efd3ee4d57ce8018914163\lombok-1.18.32.jar;C:\Users\takensoft\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-data-jpa\3.2.5\99c1272c135f1c44b0c94ed0b65dca9b201323b7\spring-boot-starter-data-jpa-3.2.5.jar;C:\Users\takensoft\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-security\3.2.5\8ce0f176dfcf9a0b3b5d76babd971057f009961d\spring-boot-starter-security-3.2.5.jar;C:\Users\takensoft\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-validation\3.2.5\3757dceb20eca3880ee1fb5f07159e42c7f7405\spring-boot-starter-validation-3.2.5.jar;C:\Users\takensoft\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-web\3.2.5\664d75553c6af42122d4db645f4924a95084e382\spring-boot-starter-web-3.2.5.jar;C:\Users\takensoft\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-aop\3.2.5\1c6c5d81e6c7f8b3e255c9e384153e9f52a93d1b\spring-boot-starter-aop-3.2.5.jar;C:\Users\takensoft\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-jdbc\3.2.5\2fc156645b02bef43dcd4e697ae6f4ba9388a978\spring-boot-starter-jdbc-3.2.5.jar;C:\Users\takensoft\.gradle\caches\modules-2\files-2.1\org.hibernate.orm\hibernate-core\6.4.4.Final\5c9decb3c5a70bf7801d41fc32633416c26be069\hibernate-core-6.4.4.Final.jar;C:\Users\takensoft\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-jpa\3.2.5\f5c674caedc0132c7865b9a2edaa04b8f5351262\spring-data-jpa-3.2.5.jar;C:\Users\takensoft\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aspects\6.1.6\409aba797564c23c08e2307f2df728aed117e914\spring-aspects-6.1.6.jar;C:\Users\takensoft\.grad | |
1851 | +Launcher Type: SUN_STANDARD | |
1852 | + | |
1853 | +[Global flags] | |
1854 | + intx CICompilerCount = 4 {product} {ergonomic} | |
1855 | + uint ConcGCThreads = 3 {product} {ergonomic} | |
1856 | + uint G1ConcRefinementThreads = 10 {product} {ergonomic} | |
1857 | + size_t G1HeapRegionSize = 4194304 {product} {ergonomic} | |
1858 | + uintx GCDrainStackTargetSize = 64 {product} {ergonomic} | |
1859 | + size_t InitialHeapSize = 536870912 {product} {ergonomic} | |
1860 | + bool ManagementServer = true {product} {command line} | |
1861 | + size_t MarkStackSize = 4194304 {product} {ergonomic} | |
1862 | + size_t MaxHeapSize = 8573157376 {product} {ergonomic} | |
1863 | + size_t MaxNewSize = 5142216704 {product} {ergonomic} | |
1864 | + size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} | |
1865 | + size_t MinHeapSize = 8388608 {product} {ergonomic} | |
1866 | + uintx NonProfiledCodeHeapSize = 0 {pd product} {ergonomic} | |
1867 | + bool ProfileInterpreter = false {pd product} {command line} | |
1868 | + uintx ProfiledCodeHeapSize = 0 {pd product} {ergonomic} | |
1869 | + size_t SoftMaxHeapSize = 8573157376 {manageable} {ergonomic} | |
1870 | + intx TieredStopAtLevel = 1 {product} {command line} | |
1871 | + bool UseCompressedClassPointers = true {product lp64_product} {ergonomic} | |
1872 | + bool UseCompressedOops = true {product lp64_product} {ergonomic} | |
1873 | + bool UseG1GC = true {product} {ergonomic} | |
1874 | + bool UseLargePagesIndividualAllocation = false {pd product} {ergonomic} | |
1875 | + | |
1876 | +Logging: | |
1877 | +Log output configuration: | |
1878 | + #0: stdout all=warning uptime,level,tags | |
1879 | + #1: stderr all=off uptime,level,tags | |
1880 | + | |
1881 | +Environment Variables: | |
1882 | +JAVA_HOME=C:\Program Files\Java\jdk-17 | |
1883 | +PATH=C:\Program Files\Java\jdk-17\bin;C:\Program Files\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Bandizip\;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\Users\takensoft\AppData\Local\Microsoft\WindowsApps;C:\Users\takensoft\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\takensoft\AppData\Roaming\npm;C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\bin; | |
1884 | +USERNAME=takensoft | |
1885 | +OS=Windows_NT | |
1886 | +PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 165 Stepping 3, GenuineIntel | |
1887 | + | |
1888 | + | |
1889 | + | |
1890 | +--------------- S Y S T E M --------------- | |
1891 | + | |
1892 | +OS: | |
1893 | + Windows 10 , 64 bit Build 19041 (10.0.19041.3636) | |
1894 | +OS uptime: 0 days 1:16 hours | |
1895 | + | |
1896 | +CPU: total 12 (initial active 12) (6 cores per cpu, 2 threads per core) family 6 model 165 stepping 3 microcode 0xe0, cx8, cmov, fxsr, ht, mmx, 3dnowpref, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, lzcnt, tsc, tscinvbit, avx, avx2, aes, erms, clmul, bmi1, bmi2, adx, fma, vzeroupper, clflush, clflushopt | |
1897 | + | |
1898 | +Memory: 4k page, system-wide physical 32697M (18762M free) | |
1899 | +TotalPageFile size 37817M (AvailPageFile size 17588M) | |
1900 | +current process WorkingSet (physical memory assigned to process): 93M, peak: 93M | |
1901 | +current process commit charge ("private bytes"): 631M, peak: 631M | |
1902 | + | |
1903 | +vm_info: Java HotSpot(TM) 64-Bit Server VM (17.0.11+7-LTS-207) for windows-amd64 JRE (17.0.11+7-LTS-207), built on Mar 11 2024 19:01:50 by "mach5one" with MS VC++ 17.6 (VS2022) | |
1904 | + | |
1905 | +END. |
+++ settings.gradle
... | ... | @@ -0,0 +1,1 @@ |
1 | +rootProject.name = 'educatBack' |
+++ src/main/java/com/example/educatback/Application/Auth/CustomUserDetailsService.java
... | ... | @@ -0,0 +1,28 @@ |
1 | +package com.example.educatback.Application.Auth; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Member; | |
4 | +import com.example.educatback.model.repository.MemberRepository; | |
5 | +import lombok.RequiredArgsConstructor; | |
6 | +import org.springframework.context.annotation.Primary; | |
7 | +import org.springframework.security.core.userdetails.UserDetails; | |
8 | +import org.springframework.security.core.userdetails.UserDetailsService; | |
9 | +import org.springframework.security.core.userdetails.UsernameNotFoundException; | |
10 | +import org.springframework.stereotype.Service; | |
11 | + | |
12 | +//로그인을 위한 서비스 | |
13 | +@Service | |
14 | +@RequiredArgsConstructor | |
15 | +@Primary | |
16 | +public class CustomUserDetailsService implements UserDetailsService { | |
17 | + | |
18 | + private final MemberRepository userRepository; | |
19 | + | |
20 | + @Override | |
21 | + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { | |
22 | + //이 사용자가 있는 사용자인지 확인 | |
23 | + Member entity = userRepository.findById(username) | |
24 | + .orElseThrow(() -> new UsernameNotFoundException("username not found")); | |
25 | + | |
26 | + return entity; | |
27 | + } | |
28 | +}(파일 끝에 줄바꿈 문자 없음) |
+++ src/main/java/com/example/educatback/Application/LoginAppService.java
... | ... | @@ -0,0 +1,28 @@ |
1 | +package com.example.educatback.Application; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Member; | |
4 | +import com.example.educatback.model.repository.MemberRepository; | |
5 | +import lombok.RequiredArgsConstructor; | |
6 | +import org.springframework.security.core.userdetails.UserDetails; | |
7 | +import org.springframework.security.core.userdetails.UserDetailsService; | |
8 | +import org.springframework.security.core.userdetails.UsernameNotFoundException; | |
9 | +import org.springframework.stereotype.Service; | |
10 | + | |
11 | +@Service | |
12 | +@RequiredArgsConstructor | |
13 | +public class LoginAppService implements UserDetailsService { | |
14 | + | |
15 | + private final MemberRepository memberRepository; | |
16 | + | |
17 | + @Override | |
18 | + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { | |
19 | + Member member = memberRepository.findById(username) | |
20 | + .orElseThrow(() -> new UsernameNotFoundException("User not found with username: " + username)); | |
21 | + | |
22 | + return org.springframework.security.core.userdetails.User | |
23 | + .withUsername(member.getUsername()) | |
24 | + .password(member.getPassword()) | |
25 | + .roles("USER") | |
26 | + .build(); | |
27 | + } | |
28 | +}(파일 끝에 줄바꿈 문자 없음) |
+++ src/main/java/com/example/educatback/Application/MemberAppService.java
... | ... | @@ -0,0 +1,89 @@ |
1 | +package com.example.educatback.Application; | |
2 | + | |
3 | +import com.example.educatback.DuplicateIdException; | |
4 | +import com.example.educatback.controller.request.MemberRequest; | |
5 | +import com.example.educatback.controller.response.MemberResponse; | |
6 | +import com.example.educatback.model.entity.Member; | |
7 | +import com.example.educatback.model.entity.Solved; | |
8 | +import com.example.educatback.model.repository.MemberRepository; | |
9 | +import jakarta.persistence.EntityNotFoundException; | |
10 | +import jakarta.transaction.Transactional; | |
11 | +import lombok.RequiredArgsConstructor; | |
12 | +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | |
13 | +import org.springframework.stereotype.Service; | |
14 | + | |
15 | +import java.util.List; | |
16 | +import java.util.Optional; | |
17 | + | |
18 | +@Service | |
19 | +@RequiredArgsConstructor | |
20 | +public class MemberAppService { | |
21 | + private final MemberRepository memberRepository; | |
22 | + //회원가입 | |
23 | + @Transactional | |
24 | + public MemberResponse.Detail createMember(MemberRequest.Create memberRequest){ | |
25 | + | |
26 | + // 중복된 아이디 검사 | |
27 | + Optional<Member> existingMember = memberRepository.findById(memberRequest.getId()); | |
28 | + if (existingMember.isPresent()) { | |
29 | + // 중복된 아이디가 있을 경우 클라이언트에게 중복 에러 응답을 반환합니다. | |
30 | + throw new DuplicateIdException("ID '" + memberRequest.getId() + "' is already in use."); | |
31 | + } | |
32 | + var result = new BCryptPasswordEncoder().encode(memberRequest.getPassword()); | |
33 | + | |
34 | + Member member = Member.builder() | |
35 | + .name(memberRequest.getName()) | |
36 | + .username(memberRequest.getId()) | |
37 | + .password(result) | |
38 | + .focus(50) | |
39 | + .grammar(50) | |
40 | + .sentence(50) | |
41 | + .understand(50) | |
42 | + .expression(50) | |
43 | + .word(50) | |
44 | + .grade(memberRequest.getGrade()) | |
45 | + .gender(memberRequest.getGender()) | |
46 | + .build(); | |
47 | + | |
48 | + Member savedMember = memberRepository.save(member); | |
49 | + | |
50 | + return MemberResponse.Detail.of(savedMember); | |
51 | + } | |
52 | + | |
53 | + @Transactional | |
54 | + public MemberResponse.Detail getMember(String memberId){ | |
55 | + Optional<Member> existingMember = memberRepository.findById(memberId); | |
56 | + if (!existingMember.isPresent()) { | |
57 | + throw new EntityNotFoundException("ID '" + memberId + "' 없다 이놈아"); | |
58 | + } | |
59 | + Member member = existingMember.get(); | |
60 | + | |
61 | + MemberResponse.Detail memberDetail = MemberResponse.Detail.of(member); | |
62 | + | |
63 | + return memberDetail; | |
64 | + } | |
65 | + | |
66 | + @Transactional | |
67 | + public MemberResponse.Rating getMemberRating(String memberId){ | |
68 | + Optional<Member> existingMember = memberRepository.findById(memberId); | |
69 | + if (!existingMember.isPresent()) { | |
70 | + throw new EntityNotFoundException("ID '" + memberId + "' 없다 이놈아"); | |
71 | + } | |
72 | + Member member = existingMember.get(); | |
73 | + | |
74 | + MemberResponse.Rating memberRating = MemberResponse.Rating.of(member); | |
75 | + | |
76 | + return memberRating; | |
77 | + } | |
78 | + | |
79 | + @Transactional | |
80 | + public List<Solved> getSolvedByMember(String memberId) { | |
81 | + System.out.println("solved 하기전"); | |
82 | + Optional<Member> member = memberRepository.findById(memberId); | |
83 | + if (!member.isPresent()) { | |
84 | + throw new EntityNotFoundException("Member not found"); | |
85 | + } | |
86 | + System.out.println("solved 하고나서"); | |
87 | + return member.get().getSolveds(); | |
88 | + } | |
89 | +} |
+++ src/main/java/com/example/educatback/Application/ScoreLogService.java
... | ... | @@ -0,0 +1,41 @@ |
1 | +package com.example.educatback.Application; | |
2 | + | |
3 | +import com.example.educatback.controller.response.ScoreLogResponseDTO; | |
4 | +import com.example.educatback.model.entity.Member; | |
5 | +import com.example.educatback.model.entity.ScoreLog; | |
6 | +import com.example.educatback.model.repository.MemberRepository; | |
7 | +import com.example.educatback.model.repository.ScoreLogRepository; | |
8 | +import lombok.RequiredArgsConstructor; | |
9 | +import org.springframework.beans.factory.annotation.Autowired; | |
10 | +import org.springframework.stereotype.Service; | |
11 | + | |
12 | +import java.util.List; | |
13 | +import java.util.stream.Collectors; | |
14 | + | |
15 | +@Service | |
16 | +@RequiredArgsConstructor | |
17 | +public class ScoreLogService { | |
18 | + @Autowired | |
19 | + private ScoreLogRepository scoreLogRepository; | |
20 | + | |
21 | + @Autowired | |
22 | + private MemberRepository memberRepository; | |
23 | + | |
24 | + public List<ScoreLogResponseDTO> getScoreLogsForMember(String username) { | |
25 | + Member member = memberRepository.findById(username) | |
26 | + .orElseThrow(() -> new RuntimeException("Member not found")); | |
27 | + List<ScoreLog> scoreLogs = scoreLogRepository.findLatestByMemberGroupedByDate(member); | |
28 | + return scoreLogs.stream() | |
29 | + .map(ScoreLogResponseDTO::fromEntity) | |
30 | + .collect(Collectors.toList()); | |
31 | + } | |
32 | + | |
33 | + public List<ScoreLogResponseDTO.DailyAverageScore> getDailyAverageScoresForMember(String username) { | |
34 | + Member member = memberRepository.findById(username) | |
35 | + .orElseThrow(() -> new RuntimeException("Member not found")); | |
36 | + List<Object[]> averages = scoreLogRepository.findDailyAverageScoresByMember(member); | |
37 | + return averages.stream() | |
38 | + .map(ScoreLogResponseDTO.DailyAverageScore::fromObjectArray) | |
39 | + .collect(Collectors.toList()); | |
40 | + } | |
41 | +} |
+++ src/main/java/com/example/educatback/Application/SolvedService.java
... | ... | @@ -0,0 +1,28 @@ |
1 | +package com.example.educatback.Application; | |
2 | + | |
3 | +import com.example.educatback.model.entity.StudyType; | |
4 | +import com.example.educatback.model.repository.SolvedRepository; | |
5 | +import org.springframework.beans.factory.annotation.Autowired; | |
6 | +import org.springframework.stereotype.Service; | |
7 | + | |
8 | +import java.util.HashMap; | |
9 | +import java.util.List; | |
10 | +import java.util.Map; | |
11 | + | |
12 | +@Service | |
13 | +public class SolvedService { | |
14 | + | |
15 | + @Autowired | |
16 | + private SolvedRepository solvedRepository; | |
17 | + | |
18 | + public Map<StudyType, Long> getStudyTypeCounts() { | |
19 | + List<Object[]> results = solvedRepository.findStudyTypeCount(); | |
20 | + Map<StudyType, Long> studyTypeCountMap = new HashMap<>(); | |
21 | + for (Object[] result : results) { | |
22 | + StudyType studyType = (StudyType) result[0]; | |
23 | + Long count = (Long) result[1]; | |
24 | + studyTypeCountMap.put(studyType, count); | |
25 | + } | |
26 | + return studyTypeCountMap; | |
27 | + } | |
28 | +} |
+++ src/main/java/com/example/educatback/Application/StudyAnswerAppService.java
... | ... | @@ -0,0 +1,189 @@ |
1 | +package com.example.educatback.Application; | |
2 | + | |
3 | +import com.example.educatback.controller.request.StudyAnswerRequest; | |
4 | +import com.example.educatback.controller.response.SolvedResponse; | |
5 | +import com.example.educatback.model.entity.*; | |
6 | +import com.example.educatback.model.repository.*; | |
7 | +import jakarta.persistence.EntityNotFoundException; | |
8 | +import jakarta.transaction.Transactional; | |
9 | +import lombok.RequiredArgsConstructor; | |
10 | +import org.springframework.stereotype.Service; | |
11 | + | |
12 | +import java.util.Optional; | |
13 | + | |
14 | + | |
15 | + | |
16 | + @Service | |
17 | + @RequiredArgsConstructor | |
18 | + public class StudyAnswerAppService { | |
19 | + private final SolvedRepository solvedRepository; | |
20 | + private final StudyRepository studyRepository; | |
21 | + private final WordBundleRepository wordBundleRepository; | |
22 | + private final SentenceDiaryRepository sentenceDiaryRepository; | |
23 | + private final TravelRepository travelRepository; | |
24 | + private final CountryElementRepository countryElementRepository; | |
25 | + private final WorldRepository worldRepository; | |
26 | + private final SentenceAbsorbRepository sentenceAbsorbRepository; | |
27 | + private final MemberRepository memberRepository; | |
28 | + private final GrammarFairyRepository grammarFairyRepository; | |
29 | + private final GrammarLandRepository grammarLandRepository; | |
30 | + private final WordAbsorbRepository wordAbsorbRepository; | |
31 | + private final ScoreLogRepository scoreLogRepository; | |
32 | + | |
33 | + @Transactional | |
34 | + public SolvedResponse checkAnswer(StudyAnswerRequest.Save request, String userId) { | |
35 | + // 요청에서 필요한 정보 추출 | |
36 | + Long studyId = request.getId(); | |
37 | + String answer = request.getAnswer(); | |
38 | + int time = request.getTime(); | |
39 | + int level = request.getLevel(); | |
40 | + // studyId로 해당하는 study를 가져옴 | |
41 | + Study study = studyRepository.findById(studyId) | |
42 | + .orElseThrow(() -> new EntityNotFoundException("Study not found with ID: " + studyId)); | |
43 | + Member member = memberRepository.findById(userId) | |
44 | + .orElseThrow(() -> new EntityNotFoundException("Member not found with ID: " + userId)); | |
45 | + System.out.println("스터디가 담겼니??"+study); | |
46 | + // studyType에 따라 적절한 엔티티의 정답과 비교 | |
47 | + String correctAnswer; | |
48 | + switch (study.getStudyType()) { | |
49 | + case 단어뭉치: | |
50 | + WordBundle wordBundle = wordBundleRepository.findByStudyId(studyId) | |
51 | + .orElseThrow(() -> new EntityNotFoundException("WordBundle not found for Study ID: " + studyId)); | |
52 | + correctAnswer = wordBundle.getWord(); | |
53 | + break; | |
54 | + case 문장일기: | |
55 | + SentenceDiary sentenceDiary = sentenceDiaryRepository.findByStudyId(studyId) | |
56 | + .orElseThrow(() -> new EntityNotFoundException("SentenceDiary not found for Study ID: " + studyId)); | |
57 | + | |
58 | + correctAnswer = sentenceDiary.getSentence(); | |
59 | + break; | |
60 | + case 동요세상: | |
61 | + case 동화세상: | |
62 | + World world = worldRepository.findByStudyIdAndLevel(studyId, level) | |
63 | + .orElseThrow(() -> new EntityNotFoundException("World not found for Study ID: " + studyId + " and level: " + level)); | |
64 | + correctAnswer = world.getAnswer(); | |
65 | + break; | |
66 | + case 동요나라: | |
67 | + CountryElement countryElement = countryElementRepository.findByStudyIdAndLevel(studyId, level) | |
68 | + .orElseThrow(() -> new EntityNotFoundException("CountryElement not found for Study ID: " + studyId + " and level: " + level)); | |
69 | + correctAnswer = countryElement.getAnswer(); | |
70 | + break; | |
71 | + case 동화여행: | |
72 | + Travel travel = travelRepository.findByStudyIdAndLevel(studyId, level) | |
73 | + .orElseThrow(() -> new EntityNotFoundException("Travel not found for Study ID: " + studyId + " and level: " + level)); | |
74 | + correctAnswer = travel.getAnswer(); | |
75 | + break; | |
76 | + case 문장쏙쏙: | |
77 | + SentenceAbsorb sentenceAbsorb = sentenceAbsorbRepository.findByStudyIdAndLevel(studyId, level) | |
78 | + .orElseThrow(() -> new EntityNotFoundException("SentenceAbsorb not found for Study ID: " + studyId + " and level: " + level)); | |
79 | + correctAnswer = sentenceAbsorb.getAnswer(); | |
80 | + break; | |
81 | + case 문법요정: | |
82 | + GrammarFairy grammarFairy = grammarFairyRepository.findByStudyIdAndLevel(studyId, level) | |
83 | + .orElseThrow(() -> new EntityNotFoundException("GrammarFairy not found for Study ID: " + studyId + " and level: " + level)); | |
84 | + correctAnswer = grammarFairy.getAnswer(); | |
85 | + break; | |
86 | + case 문법랜드: | |
87 | + GrammarLand grammarLand = grammarLandRepository.findByStudyIdAndLevel(studyId, level) | |
88 | + .orElseThrow(() -> new EntityNotFoundException("GrammarLand not found for Study ID: " + studyId + " and level: " + level)); | |
89 | + correctAnswer = grammarLand.getAnswer(); | |
90 | + break; | |
91 | + case 어휘력쑥쑥: | |
92 | + WordAbsorb wordAbsorb = wordAbsorbRepository.findByStudyIdAndLevel(studyId, level) | |
93 | + .orElseThrow(() -> new EntityNotFoundException("WordAbsorb not found for Study ID: " + studyId + " and level: " + level)); | |
94 | + System.out.println("wordAbsorb해보기"+wordAbsorb.getAnswer()); | |
95 | + correctAnswer = wordAbsorb.getAnswer(); | |
96 | + break; | |
97 | + default: | |
98 | + throw new UnsupportedOperationException("Study type not supported: " + study.getStudyType()); | |
99 | + } | |
100 | + System.out.println("이걸 잘봐라라라ㅏ라라라ㅏ라라ㅏ라라"+correctAnswer); | |
101 | + // 정답 검증 및 solved의 is_checked 설정 | |
102 | + int isChecked = answer.toLowerCase().equals(correctAnswer.toLowerCase()) ? 1 : 2; | |
103 | + | |
104 | + if(isChecked == 1){ //맞춘 경우 | |
105 | + switch (study.getStudyType()) { | |
106 | + case 단어뭉치, 어휘력쑥쑥: | |
107 | + member.setWord(member.getWord()+5); | |
108 | + break; | |
109 | + case 문장일기, 문장쏙쏙: | |
110 | + member.setSentence(member.getSentence()+5); | |
111 | + break; | |
112 | + case 동요세상, 동요나라: | |
113 | + member.setExpression(member.getExpression()+5); | |
114 | + break; | |
115 | + case 동화세상, 동화여행: | |
116 | + member.setUnderstand(member.getUnderstand()+5); | |
117 | + break; | |
118 | + case 문법요정, 문법랜드: | |
119 | + member.setGrammar(member.getGrammar()+5); | |
120 | + break; | |
121 | + default: | |
122 | + throw new UnsupportedOperationException("Study type not supported: " + study.getStudyType()); | |
123 | + } | |
124 | + if(request.getTime()<=60&&request.getTime()>40){ | |
125 | + member.setFocus(member.getFocus()+3); | |
126 | + } else if (request.getTime() <= 40 && request.getTime() > 20) { | |
127 | + member.setFocus(member.getFocus()+2); | |
128 | + } | |
129 | + else { | |
130 | + member.setFocus(member.getFocus()+1); | |
131 | + } | |
132 | + memberRepository.save(member); | |
133 | + } | |
134 | + else{ //틀린 경우 | |
135 | + switch (study.getStudyType()) { | |
136 | + case 단어뭉치, 어휘력쑥쑥: | |
137 | + member.setWord(member.getWord()-5); | |
138 | + break; | |
139 | + case 문장일기, 문장쏙쏙: | |
140 | + member.setSentence(member.getSentence()-5); | |
141 | + break; | |
142 | + case 동요세상, 동요나라: | |
143 | + member.setExpression(member.getExpression()-5); | |
144 | + break; | |
145 | + case 동화세상, 동화여행: | |
146 | + member.setUnderstand(member.getUnderstand()-5); | |
147 | + break; | |
148 | + case 문법요정, 문법랜드: | |
149 | + member.setGrammar(member.getGrammar()-5); | |
150 | + break; | |
151 | + default: | |
152 | + throw new UnsupportedOperationException("Study type not supported: " + study.getStudyType()); | |
153 | + } | |
154 | + if(request.getTime()<=60&&request.getTime()>40){ | |
155 | + member.setFocus(member.getFocus()-3); | |
156 | + } else if (request.getTime() <= 40 && request.getTime() > 20) { | |
157 | + member.setFocus(member.getFocus()-2); | |
158 | + } | |
159 | + else { | |
160 | + member.setFocus(member.getFocus()-1); | |
161 | + } | |
162 | + memberRepository.save(member); | |
163 | + } | |
164 | + System.out.println("socreLog 하는중임"); | |
165 | + ScoreLog scoreLog = new ScoreLog(); | |
166 | + scoreLog.setMember(member); | |
167 | + scoreLog.setWord(member.getWord()); | |
168 | + scoreLog.setFocus(member.getFocus()); | |
169 | + scoreLog.setGrammar(member.getGrammar()); | |
170 | + scoreLog.setExpression(member.getExpression()); | |
171 | + scoreLog.setSentence(member.getSentence()); | |
172 | + scoreLog.setUnderstand(member.getUnderstand()); | |
173 | + | |
174 | + scoreLogRepository.save(scoreLog); | |
175 | + System.out.println("socreLog 끝남"); | |
176 | + // study와 연결된 solved 생성 | |
177 | + Solved solved = new Solved(); | |
178 | + solved.setAnswer(answer); | |
179 | + solved.setIsChecked(isChecked); | |
180 | + solved.setStudy(study); | |
181 | + solved.setMember(member); | |
182 | + solved.setTime(60-time); | |
183 | + solved.setLevel(level); | |
184 | + System.out.println("여기까지들어가니??????????????????????????????"); | |
185 | + // SolvedResponse 객체 생성 및 반환 | |
186 | + return SolvedResponse.from(solvedRepository.save(solved)); | |
187 | + } | |
188 | + } | |
189 | + |
+++ src/main/java/com/example/educatback/Application/StudyAppService.java
... | ... | @@ -0,0 +1,9 @@ |
1 | +package com.example.educatback.Application; | |
2 | + | |
3 | +import lombok.RequiredArgsConstructor; | |
4 | +import org.springframework.stereotype.Service; | |
5 | + | |
6 | +@Service | |
7 | +@RequiredArgsConstructor | |
8 | +public class StudyAppService { | |
9 | +} |
+++ src/main/java/com/example/educatback/Auth/CustomAuthenticationFilter.java
... | ... | @@ -0,0 +1,72 @@ |
1 | +package com.example.educatback.Auth; | |
2 | + | |
3 | +import com.fasterxml.jackson.databind.ObjectMapper; | |
4 | +import jakarta.servlet.ServletException; | |
5 | +import jakarta.servlet.http.HttpServletRequest; | |
6 | +import jakarta.servlet.http.HttpServletResponse; | |
7 | +import lombok.Data; | |
8 | +import org.springframework.security.core.Authentication; | |
9 | +import org.springframework.security.core.AuthenticationException; | |
10 | +import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; | |
11 | +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; | |
12 | +import org.springframework.util.StringUtils; | |
13 | + | |
14 | +import java.io.IOException; | |
15 | + | |
16 | +//컨트롤러 이전에 검사하는 필터 | |
17 | +public class CustomAuthenticationFilter extends AbstractAuthenticationProcessingFilter { | |
18 | + | |
19 | + private ObjectMapper objectMapper = new ObjectMapper(); | |
20 | + | |
21 | + public CustomAuthenticationFilter() { | |
22 | + // url과 일치할 경우 해당 필터가 동작합니다. | |
23 | + super(new AntPathRequestMatcher("/login")); | |
24 | + } | |
25 | + @Override | |
26 | + public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) | |
27 | + throws AuthenticationException, IOException, ServletException { | |
28 | + | |
29 | + // 해당 요청이 POST 인지 확인 | |
30 | + if(!isPost(request)) { | |
31 | + throw new IllegalStateException("Authentication is not supported"); | |
32 | + } | |
33 | + | |
34 | + // POST 이면 body 를 AccountDto( 로그인 정보 DTO ) 에 매핑 | |
35 | + AccountDto accountDto = objectMapper.readValue(request.getReader(), AccountDto.class); | |
36 | + | |
37 | + // ID, PASSWORD 가 있는지 확인 | |
38 | + if(!StringUtils.hasLength(accountDto.getUsername()) | |
39 | + || !StringUtils.hasLength(accountDto.getPassword())) { | |
40 | + throw new IllegalArgumentException("id나 비밀번호를 둘 다 입력하세요."); | |
41 | + } | |
42 | + | |
43 | + // 처음에는 인증 되지 않은 토큰 생성 | |
44 | + CustomAuthenticationToken token = new CustomAuthenticationToken( | |
45 | + accountDto.getUsername(), | |
46 | + accountDto.getPassword() | |
47 | + ); | |
48 | + | |
49 | + // Manager 에게 인증 처리 | |
50 | + Authentication authenticate = getAuthenticationManager().authenticate(token); | |
51 | + | |
52 | + return authenticate; | |
53 | + } | |
54 | + | |
55 | + //포스트 요청인지 아닌지 확인 | |
56 | + private boolean isPost(HttpServletRequest request) { | |
57 | + | |
58 | + if("POST".equals(request.getMethod())) { | |
59 | + return true; | |
60 | + } | |
61 | + | |
62 | + return false; | |
63 | + } | |
64 | + | |
65 | + //이거에 맞춰서 request를 보내야함 | |
66 | + @Data | |
67 | + public static class AccountDto { | |
68 | + private String username; | |
69 | + private String password; | |
70 | + } | |
71 | + | |
72 | +} |
+++ src/main/java/com/example/educatback/Auth/CustomAuthenticationProvider.java
... | ... | @@ -0,0 +1,40 @@ |
1 | +package com.example.educatback.Auth; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Member; | |
4 | +import lombok.RequiredArgsConstructor; | |
5 | +import org.springframework.security.authentication.AuthenticationProvider; | |
6 | +import org.springframework.security.authentication.BadCredentialsException; | |
7 | +import org.springframework.security.core.Authentication; | |
8 | +import org.springframework.security.core.AuthenticationException; | |
9 | +import org.springframework.security.core.userdetails.UserDetailsService; | |
10 | +import org.springframework.security.crypto.password.PasswordEncoder; | |
11 | +import org.springframework.stereotype.Component; | |
12 | + | |
13 | +// 사실상 이게 로그인 컨트롤러 받은 요청을 서비스와 함께 처리 | |
14 | +@Component | |
15 | +@RequiredArgsConstructor | |
16 | +public class CustomAuthenticationProvider implements AuthenticationProvider { | |
17 | + | |
18 | + private final UserDetailsService userDetailsService; | |
19 | + private final PasswordEncoder passwordEncoder; | |
20 | + | |
21 | + @Override | |
22 | + public Authentication authenticate(Authentication authentication) throws AuthenticationException { | |
23 | + | |
24 | + String loginId = authentication.getName(); | |
25 | + String password = (String) authentication.getCredentials(); | |
26 | + | |
27 | + Member entity = (Member) userDetailsService.loadUserByUsername(loginId); | |
28 | + | |
29 | + if(!passwordEncoder.matches(password, entity.getPassword())) { | |
30 | + throw new BadCredentialsException("Invalid Password"); | |
31 | + } | |
32 | + | |
33 | + return new CustomAuthenticationToken(entity, null, entity.getAuthorities()); | |
34 | + } | |
35 | + | |
36 | + @Override | |
37 | + public boolean supports(Class<?> authentication) { | |
38 | + return authentication.equals(CustomAuthenticationToken.class); | |
39 | + } | |
40 | +}(파일 끝에 줄바꿈 문자 없음) |
+++ src/main/java/com/example/educatback/Auth/CustomAuthenticationToken.java
... | ... | @@ -0,0 +1,61 @@ |
1 | +package com.example.educatback.Auth; | |
2 | + | |
3 | +import org.springframework.security.authentication.AbstractAuthenticationToken; | |
4 | +import org.springframework.security.core.GrantedAuthority; | |
5 | +import org.springframework.security.core.SpringSecurityCoreVersion; | |
6 | +import org.springframework.util.Assert; | |
7 | + | |
8 | +import java.util.Collection; | |
9 | + | |
10 | +//토큰DTO나 엔티티라고 생각, 생성과 삭제 메소드가 있음. | |
11 | +//AbstractAuthenticationToken 을 상속받은 것이고 사실상 저 클래스와 코드가 동일하다. | |
12 | +public class CustomAuthenticationToken extends AbstractAuthenticationToken { | |
13 | + | |
14 | + private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID; | |
15 | + | |
16 | + private final Object principal; | |
17 | + | |
18 | + private Object credentials; | |
19 | + | |
20 | + | |
21 | + // 인증 전 생성자 | |
22 | + public CustomAuthenticationToken(Object principal, Object credentials) { | |
23 | + super(null); | |
24 | + this.principal = principal; | |
25 | + this.credentials = credentials; | |
26 | + setAuthenticated(false); | |
27 | + } | |
28 | + | |
29 | + // 인증 후 생성자 | |
30 | + public CustomAuthenticationToken(Object principal, Object credentials, | |
31 | + Collection<? extends GrantedAuthority> authorities) { | |
32 | + super(authorities); | |
33 | + this.principal = principal; | |
34 | + this.credentials = credentials; | |
35 | + super.setAuthenticated(true); | |
36 | + } | |
37 | + | |
38 | + @Override | |
39 | + public Object getCredentials() { | |
40 | + return this.credentials; | |
41 | + } | |
42 | + | |
43 | + @Override | |
44 | + public Object getPrincipal() { | |
45 | + return this.principal; | |
46 | + } | |
47 | + | |
48 | + @Override | |
49 | + public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException { | |
50 | + Assert.isTrue(!isAuthenticated, | |
51 | + "Cannot set this token to trusted - use constructor which takes a GrantedAuthority list instead"); | |
52 | + super.setAuthenticated(false); | |
53 | + } | |
54 | + | |
55 | + @Override | |
56 | + public void eraseCredentials() { | |
57 | + super.eraseCredentials(); | |
58 | + this.credentials = null; | |
59 | + } | |
60 | + | |
61 | +} |
+++ src/main/java/com/example/educatback/Auth/CustomLoginAuthenticationEntryPoint.java
... | ... | @@ -0,0 +1,20 @@ |
1 | +package com.example.educatback.Auth; | |
2 | + | |
3 | +import jakarta.servlet.http.HttpServletRequest; | |
4 | +import jakarta.servlet.http.HttpServletResponse; | |
5 | +import org.springframework.security.core.AuthenticationException; | |
6 | +import org.springframework.security.web.AuthenticationEntryPoint; | |
7 | +import org.springframework.stereotype.Component; | |
8 | + | |
9 | +import java.io.IOException; | |
10 | + | |
11 | +//권한이 없는 경우 여기와서 에러메시지를 보내줌 | |
12 | +@Component | |
13 | +public class CustomLoginAuthenticationEntryPoint implements AuthenticationEntryPoint { | |
14 | + @Override | |
15 | + public void commence(HttpServletRequest request, | |
16 | + HttpServletResponse response, | |
17 | + AuthenticationException authException) throws IOException { | |
18 | + response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "UnAuthorized"); | |
19 | + } | |
20 | +}(파일 끝에 줄바꿈 문자 없음) |
+++ src/main/java/com/example/educatback/Auth/ResultHandler/CustomAccessDeniedHandler.java
... | ... | @@ -0,0 +1,19 @@ |
1 | +package com.example.educatback.Auth.ResultHandler; | |
2 | + | |
3 | +import jakarta.servlet.http.HttpServletRequest; | |
4 | +import jakarta.servlet.http.HttpServletResponse; | |
5 | +import org.springframework.security.access.AccessDeniedException; | |
6 | +import org.springframework.security.web.access.AccessDeniedHandler; | |
7 | +import org.springframework.stereotype.Component; | |
8 | + | |
9 | +import java.io.IOException; | |
10 | + | |
11 | +@Component | |
12 | +public class CustomAccessDeniedHandler implements AccessDeniedHandler { | |
13 | + @Override | |
14 | + public void handle(HttpServletRequest request, HttpServletResponse response, | |
15 | + AccessDeniedException accessDeniedException) throws IOException { | |
16 | + response.sendError(HttpServletResponse.SC_FORBIDDEN, "Access is denied"); | |
17 | + } | |
18 | + | |
19 | +}(파일 끝에 줄바꿈 문자 없음) |
+++ src/main/java/com/example/educatback/Auth/ResultHandler/CustomAuthenticationFailureHandler.java
... | ... | @@ -0,0 +1,45 @@ |
1 | +package com.example.educatback.Auth.ResultHandler; | |
2 | + | |
3 | +import com.fasterxml.jackson.databind.ObjectMapper; | |
4 | +import jakarta.servlet.http.HttpServletRequest; | |
5 | +import jakarta.servlet.http.HttpServletResponse; | |
6 | +import lombok.extern.slf4j.Slf4j; | |
7 | +import org.springframework.http.HttpStatus; | |
8 | +import org.springframework.http.MediaType; | |
9 | +import org.springframework.security.authentication.BadCredentialsException; | |
10 | +import org.springframework.security.authentication.CredentialsExpiredException; | |
11 | +import org.springframework.security.authentication.DisabledException; | |
12 | +import org.springframework.security.core.AuthenticationException; | |
13 | +import org.springframework.security.web.authentication.AuthenticationFailureHandler; | |
14 | +import org.springframework.stereotype.Component; | |
15 | + | |
16 | +import java.io.IOException; | |
17 | + | |
18 | +@Slf4j | |
19 | +@Component | |
20 | +public class CustomAuthenticationFailureHandler implements AuthenticationFailureHandler { | |
21 | + | |
22 | + | |
23 | + private ObjectMapper objectMapper = new ObjectMapper(); | |
24 | + | |
25 | + @Override | |
26 | + public void onAuthenticationFailure(HttpServletRequest request, | |
27 | + HttpServletResponse response, | |
28 | + AuthenticationException exception) throws IOException { | |
29 | + | |
30 | + String errMsg = "Invalid Username or Password"; | |
31 | + | |
32 | + response.setStatus(HttpStatus.UNAUTHORIZED.value()); | |
33 | + response.setContentType(MediaType.APPLICATION_JSON_VALUE); | |
34 | + | |
35 | + if(exception instanceof BadCredentialsException) { | |
36 | + errMsg = "Invalid Username or Password"; | |
37 | + } else if(exception instanceof DisabledException) { | |
38 | + errMsg = "Locked"; | |
39 | + } else if(exception instanceof CredentialsExpiredException) { | |
40 | + errMsg = "Expired password"; | |
41 | + } | |
42 | + | |
43 | + objectMapper.writeValue(response.getWriter(), errMsg); | |
44 | + } | |
45 | +}(파일 끝에 줄바꿈 문자 없음) |
+++ src/main/java/com/example/educatback/Auth/ResultHandler/CustomAuthenticationSuccessHandler.java
... | ... | @@ -0,0 +1,34 @@ |
1 | +package com.example.educatback.Auth.ResultHandler; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Member; | |
4 | +import com.fasterxml.jackson.databind.ObjectMapper; | |
5 | +import jakarta.servlet.http.HttpServletRequest; | |
6 | +import jakarta.servlet.http.HttpServletResponse; | |
7 | +import lombok.extern.slf4j.Slf4j; | |
8 | +import org.springframework.http.HttpStatus; | |
9 | +import org.springframework.http.MediaType; | |
10 | +import org.springframework.security.core.Authentication; | |
11 | +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; | |
12 | +import org.springframework.stereotype.Component; | |
13 | + | |
14 | +import java.io.IOException; | |
15 | + | |
16 | +@Slf4j | |
17 | +@Component | |
18 | +public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler { | |
19 | + | |
20 | + private ObjectMapper objectMapper = new ObjectMapper(); | |
21 | + | |
22 | + @Override | |
23 | + public void onAuthenticationSuccess(HttpServletRequest request, | |
24 | + HttpServletResponse response, | |
25 | + Authentication authentication) throws IOException { | |
26 | + | |
27 | + Member user = (Member) authentication.getPrincipal(); | |
28 | + | |
29 | + response.setStatus(HttpStatus.OK.value()); | |
30 | + response.setContentType(MediaType.APPLICATION_JSON_VALUE); | |
31 | + | |
32 | + objectMapper.writeValue(response.getWriter(), user); | |
33 | + } | |
34 | +}(파일 끝에 줄바꿈 문자 없음) |
+++ src/main/java/com/example/educatback/DuplicateIdException.java
... | ... | @@ -0,0 +1,7 @@ |
1 | +package com.example.educatback; | |
2 | + | |
3 | +public class DuplicateIdException extends RuntimeException { | |
4 | + public DuplicateIdException(String message) { | |
5 | + super(message); | |
6 | + } | |
7 | +}(파일 끝에 줄바꿈 문자 없음) |
+++ src/main/java/com/example/educatback/EducatBackApplication.java
... | ... | @@ -0,0 +1,13 @@ |
1 | +package com.example.educatback; | |
2 | + | |
3 | +import org.springframework.boot.SpringApplication; | |
4 | +import org.springframework.boot.autoconfigure.SpringBootApplication; | |
5 | + | |
6 | +@SpringBootApplication | |
7 | +public class EducatBackApplication { | |
8 | + | |
9 | + public static void main(String[] args) { | |
10 | + SpringApplication.run(EducatBackApplication.class, args); | |
11 | + } | |
12 | + | |
13 | +} |
+++ src/main/java/com/example/educatback/aspects/LoggingAspect.java
... | ... | @@ -0,0 +1,44 @@ |
1 | +package com.example.educatback.aspects; | |
2 | + | |
3 | +import org.aspectj.lang.JoinPoint; | |
4 | +import org.aspectj.lang.annotation.AfterReturning; | |
5 | +import org.aspectj.lang.annotation.Aspect; | |
6 | +import org.aspectj.lang.annotation.Before; | |
7 | +import org.slf4j.Logger; | |
8 | +import org.slf4j.LoggerFactory; | |
9 | +import org.springframework.stereotype.Component; | |
10 | + | |
11 | +@Aspect | |
12 | +@Component | |
13 | +public class LoggingAspect { | |
14 | + | |
15 | + private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |
16 | + | |
17 | + //컨트롤러 메시지 로깅 | |
18 | + @Before("execution(* com.example.educatback.controller.*.*(..))") | |
19 | + public void logControllerMethodsBefore(JoinPoint joinPoint) { | |
20 | + String methodName = joinPoint.getSignature().getName(); | |
21 | + logger.info("컨트롤러 method 실행: ", methodName); | |
22 | + } | |
23 | + | |
24 | + @AfterReturning(pointcut = "execution(* com.example.educatback.controller.*.*(..))", returning = "result") | |
25 | + public void logControllerMethodsAfterReturning(JoinPoint joinPoint, Object result) { | |
26 | + String methodName = joinPoint.getSignature().getName(); | |
27 | + logger.info("Controller method {} executed successfully with result: {}", methodName, result); | |
28 | + } | |
29 | + | |
30 | + | |
31 | + // 리포지토리 메서드 로깅 | |
32 | + @Before("execution(* com.example.educatback.model.repository.*.*(..))") | |
33 | + public void logRepositoryMethodsBefore(JoinPoint joinPoint) { | |
34 | + String methodName = joinPoint.getSignature().getName(); | |
35 | + logger.info("Calling repository method: {}", methodName); | |
36 | + } | |
37 | + | |
38 | + @AfterReturning(pointcut = "execution(* com.example.educatback.model.repository.*.*(..))", returning = "result") | |
39 | + public void logRepositoryMethodsAfterReturning(JoinPoint joinPoint, Object result) { | |
40 | + String methodName = joinPoint.getSignature().getName(); | |
41 | + logger.info("Repository method {} executed successfully with result: {}", methodName, result); | |
42 | + } | |
43 | +} | |
44 | + |
+++ src/main/java/com/example/educatback/config/SecurityConfig.java
... | ... | @@ -0,0 +1,109 @@ |
1 | +package com.example.educatback.config; | |
2 | + | |
3 | +import com.example.educatback.Auth.CustomAuthenticationFilter; | |
4 | +import com.example.educatback.Auth.CustomLoginAuthenticationEntryPoint; | |
5 | +import com.example.educatback.Auth.ResultHandler.CustomAccessDeniedHandler; | |
6 | +import com.example.educatback.Auth.ResultHandler.CustomAuthenticationFailureHandler; | |
7 | +import com.example.educatback.Auth.ResultHandler.CustomAuthenticationSuccessHandler; | |
8 | +import jakarta.servlet.http.HttpServletResponse; | |
9 | +import jakarta.servlet.http.HttpSession; | |
10 | +import lombok.RequiredArgsConstructor; | |
11 | +import org.springframework.context.annotation.Bean; | |
12 | +import org.springframework.context.annotation.Configuration; | |
13 | +import org.springframework.security.authentication.AuthenticationManager; | |
14 | +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; | |
15 | +import org.springframework.security.config.annotation.web.builders.HttpSecurity; | |
16 | +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; | |
17 | +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | |
18 | +import org.springframework.security.crypto.password.PasswordEncoder; | |
19 | +import org.springframework.security.web.SecurityFilterChain; | |
20 | +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; | |
21 | +import org.springframework.security.web.context.DelegatingSecurityContextRepository; | |
22 | +import org.springframework.security.web.context.HttpSessionSecurityContextRepository; | |
23 | +import org.springframework.security.web.context.RequestAttributeSecurityContextRepository; | |
24 | +import org.springframework.web.cors.CorsConfiguration; | |
25 | +import org.springframework.web.cors.CorsConfigurationSource; | |
26 | +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; | |
27 | + | |
28 | +import java.util.List; | |
29 | + | |
30 | +@Configuration | |
31 | +@EnableWebSecurity | |
32 | +@RequiredArgsConstructor | |
33 | +public class SecurityConfig { | |
34 | + | |
35 | + private final CustomAuthenticationSuccessHandler customAuthenticationSuccessHandler; | |
36 | + private final CustomAuthenticationFailureHandler customAuthenticationFailureHandler; | |
37 | + private final CustomLoginAuthenticationEntryPoint authenticationEntryPoint; | |
38 | + private final AuthenticationConfiguration authenticationConfiguration; | |
39 | + private final CustomAccessDeniedHandler accessDeniedHandler; | |
40 | + | |
41 | + @Bean | |
42 | + public PasswordEncoder passwordEncoder(){ | |
43 | + return new BCryptPasswordEncoder(); | |
44 | + } | |
45 | + @Bean | |
46 | + public CorsConfigurationSource corsConfigurationSource() { | |
47 | + CorsConfiguration configuration = new CorsConfiguration(); | |
48 | + configuration.setAllowedOrigins(List.of("http://localhost:3000")); // 클라이언트 애플리케이션의 도메인 | |
49 | + configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS")); | |
50 | + configuration.setAllowedHeaders(List.of("authorization", "content-type", "x-auth-token")); | |
51 | + configuration.setAllowCredentials(true); // 쿠키를 포함한 요청 허용 | |
52 | + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); | |
53 | + source.registerCorsConfiguration("/**", configuration); // 모든 경로에 대해 이 CORS 정책 적용 | |
54 | + return source; | |
55 | + } | |
56 | + @Bean | |
57 | + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { | |
58 | + | |
59 | + http.csrf(AbstractHttpConfigurer->AbstractHttpConfigurer.disable()); | |
60 | + http | |
61 | + .authorizeHttpRequests(authorize -> | |
62 | + authorize | |
63 | + .requestMatchers("/register", "/login", "/logout", "/").permitAll()// '/register', '/login' 경로는 모두에게 허용 | |
64 | + .requestMatchers("/**").authenticated() // '/**' 경로는 인증된 사용자에게만 허용 | |
65 | + .anyRequest().permitAll()).cors(cors->cors.configurationSource(corsConfigurationSource())) | |
66 | + // 그 외의 모든 요청은 모두에게 허용 | |
67 | + .addFilterBefore(ajaxAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class) | |
68 | + .exceptionHandling(config -> config | |
69 | + .authenticationEntryPoint(authenticationEntryPoint) | |
70 | + .accessDeniedHandler(accessDeniedHandler)) | |
71 | + .logout(logout -> logout | |
72 | + .logoutUrl("/logout") | |
73 | + .invalidateHttpSession(true) | |
74 | + .clearAuthentication(true) | |
75 | + .deleteCookies("JSESSIONID") | |
76 | + .logoutSuccessHandler((request, response, authentication) -> { | |
77 | + HttpSession session = request.getSession(false); | |
78 | + if (session != null) { | |
79 | + session.invalidate(); | |
80 | + } | |
81 | + response.setStatus(HttpServletResponse.SC_OK); | |
82 | + response.getWriter().write("Logout Successful"); | |
83 | + })); | |
84 | + return http.build(); | |
85 | + } | |
86 | + | |
87 | + @Bean | |
88 | + public CustomAuthenticationFilter ajaxAuthenticationFilter() throws Exception { | |
89 | + CustomAuthenticationFilter customAuthenticationFilter = new CustomAuthenticationFilter(); | |
90 | + customAuthenticationFilter.setAuthenticationManager(authenticationManager()); | |
91 | + customAuthenticationFilter.setAuthenticationSuccessHandler(customAuthenticationSuccessHandler); | |
92 | + customAuthenticationFilter.setAuthenticationFailureHandler(customAuthenticationFailureHandler); | |
93 | + | |
94 | + // ** | |
95 | + customAuthenticationFilter.setSecurityContextRepository( | |
96 | + new DelegatingSecurityContextRepository( | |
97 | + new RequestAttributeSecurityContextRepository(), | |
98 | + new HttpSessionSecurityContextRepository() | |
99 | + )); | |
100 | + | |
101 | + return customAuthenticationFilter; | |
102 | + } | |
103 | + | |
104 | + @Bean | |
105 | + public AuthenticationManager authenticationManager() throws Exception { | |
106 | + return authenticationConfiguration.getAuthenticationManager(); | |
107 | + } | |
108 | + | |
109 | +}(파일 끝에 줄바꿈 문자 없음) |
+++ src/main/java/com/example/educatback/controller/MemberController.java
... | ... | @@ -0,0 +1,87 @@ |
1 | +package com.example.educatback.controller; | |
2 | + | |
3 | +import com.example.educatback.Application.MemberAppService; | |
4 | +import com.example.educatback.DuplicateIdException; | |
5 | +import com.example.educatback.controller.request.MemberRequest; | |
6 | +import com.example.educatback.controller.response.ApiResponse; | |
7 | +import com.example.educatback.controller.response.MemberResponse; | |
8 | +import com.example.educatback.controller.response.ResponseCode; | |
9 | +import com.example.educatback.controller.response.SolvedResponse; | |
10 | +import com.example.educatback.model.entity.Solved; | |
11 | +import jakarta.persistence.EntityNotFoundException; | |
12 | +import jakarta.validation.Valid; | |
13 | +import lombok.RequiredArgsConstructor; | |
14 | +import org.springframework.security.core.annotation.AuthenticationPrincipal; | |
15 | +import org.springframework.security.core.userdetails.UserDetails; | |
16 | +import org.springframework.web.bind.MethodArgumentNotValidException; | |
17 | +import org.springframework.web.bind.annotation.*; | |
18 | + | |
19 | +import java.util.List; | |
20 | +import java.util.stream.Collectors; | |
21 | + | |
22 | +@RestController | |
23 | +@RequestMapping | |
24 | +@RequiredArgsConstructor | |
25 | +public class MemberController { | |
26 | + private final MemberAppService memberAppService; | |
27 | + | |
28 | + @PostMapping("/register") | |
29 | + public ApiResponse<MemberResponse.Detail> create(@Valid @RequestBody MemberRequest.Create memberRequest) { | |
30 | + try { | |
31 | + MemberResponse.Detail member = memberAppService.createMember(memberRequest); | |
32 | + return ApiResponse.response(true, ResponseCode.Created, member); | |
33 | + } catch (Exception e) { | |
34 | + | |
35 | + return handleException(e); | |
36 | + } | |
37 | + } | |
38 | + | |
39 | + | |
40 | + | |
41 | + | |
42 | + @GetMapping("/rating") | |
43 | + public ApiResponse<Object> rating(@AuthenticationPrincipal UserDetails auth) { | |
44 | + try { | |
45 | + MemberResponse.Rating member = memberAppService.getMemberRating(auth.getUsername()); | |
46 | + return ApiResponse.response(true, ResponseCode.OK, member); | |
47 | + } catch (Exception e) { | |
48 | + return handleException(e); | |
49 | + } | |
50 | + } | |
51 | + | |
52 | + @GetMapping("/member") | |
53 | + public ApiResponse<Object> show(@AuthenticationPrincipal UserDetails auth) { | |
54 | + try { | |
55 | + MemberResponse.Detail member = memberAppService.getMember(auth.getUsername()); | |
56 | + return ApiResponse.response(true, ResponseCode.OK, member); | |
57 | + } catch (Exception e) { | |
58 | + return handleException(e); | |
59 | + } | |
60 | + } | |
61 | + @GetMapping("/member/solved") | |
62 | + public ApiResponse<List<SolvedResponse>> listSolvedByMember(@AuthenticationPrincipal UserDetails user) { | |
63 | + try { | |
64 | + List<Solved> solveds = memberAppService.getSolvedByMember(user.getUsername()); | |
65 | + List<SolvedResponse> solvedResponses = solveds.stream().map(SolvedResponse::from).collect(Collectors.toList()); | |
66 | + return ApiResponse.response(true, ResponseCode.OK, solvedResponses); | |
67 | + } catch (Exception e) { | |
68 | + return handleException(e); | |
69 | + } | |
70 | + } | |
71 | + | |
72 | + private <T> ApiResponse<T> handleException(Exception e) { | |
73 | + if (e instanceof MethodArgumentNotValidException) { | |
74 | + return ApiResponse.response(false, ResponseCode.ValidationError, null); | |
75 | + } | |
76 | + | |
77 | + if (e instanceof DuplicateIdException) { | |
78 | + return ApiResponse.response(false, ResponseCode.DuplicateError, null); | |
79 | + } | |
80 | + | |
81 | + if (e instanceof EntityNotFoundException) { | |
82 | + return ApiResponse.response(false, ResponseCode.NOT_FOUND, null); | |
83 | + } | |
84 | + return ApiResponse.response(false, ResponseCode.InternalServerError, null); | |
85 | + } | |
86 | + | |
87 | +} |
+++ src/main/java/com/example/educatback/controller/ScoreLogController.java
... | ... | @@ -0,0 +1,33 @@ |
1 | +package com.example.educatback.controller; | |
2 | + | |
3 | +import com.example.educatback.Application.ScoreLogService; | |
4 | +import com.example.educatback.controller.response.ScoreLogResponseDTO; | |
5 | +import com.example.educatback.model.entity.Member; | |
6 | +import com.example.educatback.model.repository.MemberRepository; | |
7 | +import lombok.RequiredArgsConstructor; | |
8 | +import org.springframework.beans.factory.annotation.Autowired; | |
9 | +import org.springframework.security.core.annotation.AuthenticationPrincipal; | |
10 | +import org.springframework.security.core.userdetails.UserDetails; | |
11 | +import org.springframework.web.bind.annotation.GetMapping; | |
12 | +import org.springframework.web.bind.annotation.RequestMapping; | |
13 | +import org.springframework.web.bind.annotation.RestController; | |
14 | + | |
15 | +import java.util.List; | |
16 | + | |
17 | +@RestController | |
18 | +@RequestMapping("/scorelog") | |
19 | +@RequiredArgsConstructor | |
20 | +public class ScoreLogController { | |
21 | + @Autowired | |
22 | + private ScoreLogService scoreLogService; | |
23 | + | |
24 | + @GetMapping("/latest") | |
25 | + public List<ScoreLogResponseDTO> getLatestScoreLogs(@AuthenticationPrincipal UserDetails user) { | |
26 | + return scoreLogService.getScoreLogsForMember(user.getUsername()); | |
27 | + } | |
28 | + | |
29 | + @GetMapping("/averages") | |
30 | + public List<ScoreLogResponseDTO.DailyAverageScore> getDailyAverageScores(@AuthenticationPrincipal UserDetails user) { | |
31 | + return scoreLogService.getDailyAverageScoresForMember(user.getUsername()); | |
32 | + } | |
33 | +} |
+++ src/main/java/com/example/educatback/controller/SolvedController.java
... | ... | @@ -0,0 +1,27 @@ |
1 | +package com.example.educatback.controller; | |
2 | + | |
3 | +import com.example.educatback.Application.SolvedService; | |
4 | +import com.example.educatback.model.entity.StudyType; | |
5 | +import lombok.RequiredArgsConstructor; | |
6 | +import org.springframework.beans.factory.annotation.Autowired; | |
7 | +import org.springframework.http.ResponseEntity; | |
8 | +import org.springframework.web.bind.annotation.GetMapping; | |
9 | +import org.springframework.web.bind.annotation.RequestMapping; | |
10 | +import org.springframework.web.bind.annotation.RestController; | |
11 | + | |
12 | +import java.util.Map; | |
13 | + | |
14 | +@RestController | |
15 | +@RequestMapping("/solved") | |
16 | +@RequiredArgsConstructor | |
17 | +public class SolvedController { | |
18 | + | |
19 | + @Autowired | |
20 | + private SolvedService solvedService; | |
21 | + | |
22 | + @GetMapping("/count") | |
23 | + public ResponseEntity<Map<StudyType, Long>> getStudyTypeCounts() { | |
24 | + Map<StudyType, Long> studyTypeCounts = solvedService.getStudyTypeCounts(); | |
25 | + return ResponseEntity.ok(studyTypeCounts); | |
26 | + } | |
27 | +} |
+++ src/main/java/com/example/educatback/controller/StudyAnswerController.java
... | ... | @@ -0,0 +1,52 @@ |
1 | +package com.example.educatback.controller; | |
2 | + | |
3 | +import com.example.educatback.Application.MemberAppService; | |
4 | +import com.example.educatback.Application.StudyAnswerAppService; | |
5 | +import com.example.educatback.DuplicateIdException; | |
6 | +import com.example.educatback.controller.request.MemberRequest; | |
7 | +import com.example.educatback.controller.request.StudyAnswerRequest; | |
8 | +import com.example.educatback.controller.response.ApiResponse; | |
9 | +import com.example.educatback.controller.response.ResponseCode; | |
10 | +import com.example.educatback.controller.response.SolvedResponse; | |
11 | +import jakarta.persistence.EntityNotFoundException; | |
12 | +import jakarta.validation.Valid; | |
13 | +import lombok.RequiredArgsConstructor; | |
14 | +import org.springframework.security.core.annotation.AuthenticationPrincipal; | |
15 | +import org.springframework.security.core.userdetails.UserDetails; | |
16 | +import org.springframework.web.bind.MethodArgumentNotValidException; | |
17 | +import org.springframework.web.bind.annotation.PostMapping; | |
18 | +import org.springframework.web.bind.annotation.RequestBody; | |
19 | +import org.springframework.web.bind.annotation.RequestMapping; | |
20 | +import org.springframework.web.bind.annotation.RestController; | |
21 | + | |
22 | +@RestController | |
23 | +@RequestMapping("/studyAnswer") | |
24 | +@RequiredArgsConstructor | |
25 | +public class StudyAnswerController { | |
26 | + private final StudyAnswerAppService studyAnswerAppService; | |
27 | + | |
28 | + @PostMapping("/checkAnswer") | |
29 | + public ApiResponse<SolvedResponse> checkAnswer(@RequestBody StudyAnswerRequest.Save request, @AuthenticationPrincipal UserDetails user) { | |
30 | + try { | |
31 | + SolvedResponse solvedResponse = studyAnswerAppService.checkAnswer(request, user.getUsername()); | |
32 | + return ApiResponse.response(true, ResponseCode.SUCCESS, solvedResponse); | |
33 | + } catch (Exception e) { | |
34 | + return handleException(e); | |
35 | + } | |
36 | + } | |
37 | + private <T> ApiResponse<T> handleException(Exception e) { | |
38 | + if (e instanceof MethodArgumentNotValidException) { | |
39 | + return ApiResponse.response(false, ResponseCode.ValidationError, null); | |
40 | + } | |
41 | + | |
42 | + if (e instanceof DuplicateIdException) { | |
43 | + return ApiResponse.response(false, ResponseCode.DuplicateError, null); | |
44 | + } | |
45 | + | |
46 | + if (e instanceof EntityNotFoundException) { | |
47 | + return ApiResponse.response(false, ResponseCode.NOT_FOUND, null); | |
48 | + } | |
49 | + return ApiResponse.response(false, ResponseCode.InternalServerError, null); | |
50 | + } | |
51 | + | |
52 | +} |
+++ src/main/java/com/example/educatback/controller/StudyController.java
... | ... | @@ -0,0 +1,20 @@ |
1 | +package com.example.educatback.controller; | |
2 | + | |
3 | +import com.example.educatback.Application.MemberAppService; | |
4 | +import com.example.educatback.controller.request.MemberRequest; | |
5 | +import com.example.educatback.controller.response.ApiResponse; | |
6 | +import com.example.educatback.controller.response.MemberResponse; | |
7 | +import com.example.educatback.controller.response.ResponseCode; | |
8 | +import jakarta.validation.Valid; | |
9 | +import lombok.RequiredArgsConstructor; | |
10 | +import org.springframework.web.bind.annotation.PostMapping; | |
11 | +import org.springframework.web.bind.annotation.RequestBody; | |
12 | +import org.springframework.web.bind.annotation.RequestMapping; | |
13 | +import org.springframework.web.bind.annotation.RestController; | |
14 | + | |
15 | +@RestController | |
16 | +@RequestMapping("/study") | |
17 | +@RequiredArgsConstructor | |
18 | +public class StudyController { | |
19 | + | |
20 | +} |
+++ src/main/java/com/example/educatback/controller/StudyTypeController.java
... | ... | @@ -0,0 +1,339 @@ |
1 | +package com.example.educatback.controller; | |
2 | + | |
3 | +import com.example.educatback.controller.response.StudyLevelResponse; | |
4 | +import com.example.educatback.controller.response.StudyTypeResponse; | |
5 | +import com.example.educatback.model.entity.*; | |
6 | +import com.example.educatback.model.repository.*; | |
7 | +import lombok.RequiredArgsConstructor; | |
8 | +import org.springframework.security.core.annotation.AuthenticationPrincipal; | |
9 | +import org.springframework.security.core.userdetails.UserDetails; | |
10 | +import org.springframework.web.bind.annotation.*; | |
11 | + | |
12 | +import java.util.Optional; | |
13 | + | |
14 | +@RestController | |
15 | +@RequestMapping("/studyType") | |
16 | +@RequiredArgsConstructor | |
17 | +public class StudyTypeController { | |
18 | + | |
19 | + private final StudyRepository studyRepository; | |
20 | + private final WordAbsorbRepository wordAbsorbRepository; | |
21 | + private final WordBundleRepository wordBundleRepository; | |
22 | + private final SentenceAbsorbRepository sentenceAbsorbRepository; | |
23 | + private final SentenceDiaryRepository sentenceDiaryRepository; | |
24 | + private final GrammarFairyRepository grammarFairyRepository; | |
25 | + private final GrammarLandRepository grammarLandRepository; | |
26 | + private final TravelRepository travelRepository; | |
27 | + private final WorldRepository worldRepository; | |
28 | + private final CountryElementRepository countryElementRepository; | |
29 | + private final MemberRepository memberRepository; | |
30 | + | |
31 | + | |
32 | + @GetMapping("/wordAbsorb") | |
33 | + public StudyLevelResponse.WordAbsorbLevel getWordAbsorb(@AuthenticationPrincipal UserDetails auth, | |
34 | + @RequestParam int chapter, | |
35 | + @RequestParam int lesson, | |
36 | + @RequestParam int studyType){ | |
37 | + | |
38 | + StudyType type = null; | |
39 | + if(studyType == 1) { | |
40 | + type = StudyType.어휘력쑥쑥; | |
41 | + } | |
42 | + Optional<Member> optionalMember = memberRepository.findById(auth.getUsername()); | |
43 | + | |
44 | + Member member = optionalMember.get(); | |
45 | + | |
46 | + Optional<Study> optionalStudy = studyRepository.findByGradeAndChapterAndLessonAndStudyType(member.getGrade(), chapter, lesson, type); | |
47 | + | |
48 | + Study study = optionalStudy.get(); | |
49 | + | |
50 | + System.out.println(study.getId() + "--------------------------------------"); | |
51 | + | |
52 | + Optional<WordAbsorb> wordAbsorb1 = wordAbsorbRepository.findByStudyIdAndLevel(study.getId(), 1); | |
53 | + Optional<WordAbsorb> wordAbsorb2 = wordAbsorbRepository.findByStudyIdAndLevel(study.getId(), 2); | |
54 | + | |
55 | + | |
56 | + StudyTypeResponse.DetailWordAbsorb detailWordAbsorb1 = StudyTypeResponse.DetailWordAbsorb.of(wordAbsorb1.get()); | |
57 | + StudyTypeResponse.DetailWordAbsorb detailWordAbsorb2 = StudyTypeResponse.DetailWordAbsorb.of(wordAbsorb2.get()); | |
58 | + | |
59 | + | |
60 | + return StudyLevelResponse.WordAbsorbLevel.of(detailWordAbsorb1, detailWordAbsorb2); | |
61 | + } | |
62 | + | |
63 | + | |
64 | + | |
65 | + @GetMapping("/wordBundle") | |
66 | + public StudyTypeResponse.DetailWordBundle getWordBundle(@AuthenticationPrincipal UserDetails auth, | |
67 | + @RequestParam int chapter, | |
68 | + @RequestParam int lesson, | |
69 | + @RequestParam int studyType){ | |
70 | + | |
71 | + StudyType type = null; | |
72 | + if(studyType == 2) { | |
73 | + type = StudyType.단어뭉치; | |
74 | + } | |
75 | + | |
76 | + Optional<Member> optionalMember = memberRepository.findById(auth.getUsername()); | |
77 | + | |
78 | + Member member = optionalMember.get(); | |
79 | + | |
80 | + Optional<Study> optionalStudy = studyRepository.findByGradeAndChapterAndLessonAndStudyType(member.getGrade(), chapter, lesson, type); | |
81 | + | |
82 | + Study study = optionalStudy.get(); | |
83 | + | |
84 | + Optional<WordBundle> optionalWordBundle = wordBundleRepository.findByStudyId(study.getId()); | |
85 | + | |
86 | + WordBundle wordBundle = optionalWordBundle.get(); | |
87 | + | |
88 | + return StudyTypeResponse.DetailWordBundle.of(wordBundle); | |
89 | + } | |
90 | + | |
91 | + @GetMapping("/sentenceDiary") | |
92 | + public StudyTypeResponse.DetailSentenceDiary getSentenceDiary(@AuthenticationPrincipal UserDetails auth, | |
93 | + @RequestParam int chapter, | |
94 | + @RequestParam int lesson, | |
95 | + @RequestParam int studyType){ | |
96 | + | |
97 | + StudyType type = null; | |
98 | + if(studyType == 3) { | |
99 | + type = StudyType.문장일기; | |
100 | + } | |
101 | + | |
102 | + Optional<Member> optionalMember = memberRepository.findById(auth.getUsername()); | |
103 | + | |
104 | + Member member = optionalMember.get(); | |
105 | + | |
106 | + Optional<Study> optionalStudy = studyRepository.findByGradeAndChapterAndLessonAndStudyType(member.getGrade(), chapter, lesson, type); | |
107 | + | |
108 | + Study study = optionalStudy.get(); | |
109 | + | |
110 | + Optional<SentenceDiary> optionalSentenceDiary = sentenceDiaryRepository.findByStudyId(study.getId()); | |
111 | + | |
112 | + SentenceDiary sentenceDiary = optionalSentenceDiary.get(); | |
113 | + | |
114 | + return StudyTypeResponse.DetailSentenceDiary.of(sentenceDiary); | |
115 | + } | |
116 | + | |
117 | + @GetMapping("/sentenceAbsorb") | |
118 | + public StudyLevelResponse.SentenceAbsorbLevel getSentenceAbsorb(@AuthenticationPrincipal UserDetails auth, | |
119 | + @RequestParam int chapter, | |
120 | + @RequestParam int lesson, | |
121 | + @RequestParam int studyType){ | |
122 | + | |
123 | + StudyType type = null; | |
124 | + if(studyType == 4) { | |
125 | + type = StudyType.문장쏙쏙; | |
126 | + } | |
127 | + | |
128 | + Optional<Member> optionalMember = memberRepository.findById(auth.getUsername()); | |
129 | + | |
130 | + Member member = optionalMember.get(); | |
131 | + | |
132 | + Optional<Study> optionalStudy = studyRepository.findByGradeAndChapterAndLessonAndStudyType(member.getGrade(), chapter, lesson, type); | |
133 | + | |
134 | + Study study = optionalStudy.get(); | |
135 | + | |
136 | + Optional<SentenceAbsorb> sentenceAbsorb1 = sentenceAbsorbRepository.findByStudyIdAndLevel(study.getId(), 1); | |
137 | + Optional<SentenceAbsorb> sentenceAbsorb2 = sentenceAbsorbRepository.findByStudyIdAndLevel(study.getId(), 2); | |
138 | + | |
139 | + | |
140 | + StudyTypeResponse.DetailSentenceAbsorb detailSentenceAbsorb1 = StudyTypeResponse.DetailSentenceAbsorb.of(sentenceAbsorb1.get()); | |
141 | + StudyTypeResponse.DetailSentenceAbsorb detailSentenceAbsorb2 = StudyTypeResponse.DetailSentenceAbsorb.of(sentenceAbsorb2.get()); | |
142 | + | |
143 | + | |
144 | + return StudyLevelResponse.SentenceAbsorbLevel.of(detailSentenceAbsorb1, detailSentenceAbsorb2); | |
145 | + } | |
146 | + | |
147 | + @GetMapping("/grammarFairy") | |
148 | + public StudyLevelResponse.GrammarFairyLevel getGrammarFairy(@AuthenticationPrincipal UserDetails auth, | |
149 | + @RequestParam int chapter, | |
150 | + @RequestParam int lesson, | |
151 | + @RequestParam int studyType){ | |
152 | + | |
153 | + StudyType type = null; | |
154 | + if(studyType == 5) { | |
155 | + type = StudyType.문법요정; | |
156 | + } | |
157 | + | |
158 | + Optional<Member> optionalMember = memberRepository.findById(auth.getUsername()); | |
159 | + | |
160 | + Member member = optionalMember.get(); | |
161 | + | |
162 | + Optional<Study> optionalStudy = studyRepository.findByGradeAndChapterAndLessonAndStudyType(member.getGrade(), chapter, lesson, type); | |
163 | + | |
164 | + Study study = optionalStudy.get(); | |
165 | + | |
166 | + Optional<GrammarFairy> grammarFairy1 = grammarFairyRepository.findByStudyIdAndLevel(study.getId(), 1); | |
167 | + Optional<GrammarFairy> grammarFairy2 = grammarFairyRepository.findByStudyIdAndLevel(study.getId(), 2); | |
168 | + | |
169 | + | |
170 | + StudyTypeResponse.DetailGrammarFairy detailGrammarFairy1 = StudyTypeResponse.DetailGrammarFairy.of(grammarFairy1.get()); | |
171 | + StudyTypeResponse.DetailGrammarFairy detailGrammarFairy2 = StudyTypeResponse.DetailGrammarFairy.of(grammarFairy2.get()); | |
172 | + | |
173 | + | |
174 | + return StudyLevelResponse.GrammarFairyLevel.of(detailGrammarFairy1, detailGrammarFairy2); | |
175 | + } | |
176 | + | |
177 | + @GetMapping("/grammarLand") | |
178 | + public StudyLevelResponse.GrammarLandLevel getGrammarLand(@AuthenticationPrincipal UserDetails auth, | |
179 | + @RequestParam int chapter, | |
180 | + @RequestParam int lesson, | |
181 | + @RequestParam int studyType){ | |
182 | + | |
183 | + StudyType type = null; | |
184 | + if(studyType == 6) { | |
185 | + type = StudyType.문법랜드; | |
186 | + } | |
187 | + | |
188 | + Optional<Member> optionalMember = memberRepository.findById(auth.getUsername()); | |
189 | + | |
190 | + Member member = optionalMember.get(); | |
191 | + | |
192 | + Optional<Study> optionalStudy = studyRepository.findByGradeAndChapterAndLessonAndStudyType(member.getGrade(), chapter, lesson, type); | |
193 | + | |
194 | + Study study = optionalStudy.get(); | |
195 | + | |
196 | + System.out.println(study.getId()); | |
197 | + | |
198 | + Optional<GrammarLand> grammarLand1 = grammarLandRepository.findByStudyIdAndLevel(study.getId(), 1); | |
199 | + Optional<GrammarLand> grammarLand2 = grammarLandRepository.findByStudyIdAndLevel(study.getId(), 2); | |
200 | + | |
201 | + System.out.println(grammarLand1); | |
202 | + System.out.println(grammarLand2); | |
203 | + | |
204 | + StudyTypeResponse.DetailGrammarLand detailGrammarLand1 = StudyTypeResponse.DetailGrammarLand.of(grammarLand1.get()); | |
205 | + StudyTypeResponse.DetailGrammarLand detailGrammarLand2 = StudyTypeResponse.DetailGrammarLand.of(grammarLand2.get()); | |
206 | + | |
207 | + | |
208 | + return StudyLevelResponse.GrammarLandLevel.of(detailGrammarLand1, detailGrammarLand2); | |
209 | + } | |
210 | + | |
211 | + @GetMapping("/bookTravel") | |
212 | + public StudyLevelResponse.BookTravelLevel getBookTravel(@AuthenticationPrincipal UserDetails auth, | |
213 | + @RequestParam int chapter, | |
214 | + @RequestParam int lesson, | |
215 | + @RequestParam int studyType){ | |
216 | + | |
217 | + StudyType type = null; | |
218 | + if(studyType == 7) { | |
219 | + type = StudyType.동화여행; | |
220 | + } | |
221 | + | |
222 | + Optional<Member> optionalMember = memberRepository.findById(auth.getUsername()); | |
223 | + | |
224 | + Member member = optionalMember.get(); | |
225 | + | |
226 | + Optional<Study> optionalStudy = studyRepository.findByGradeAndChapterAndLessonAndStudyType(member.getGrade(), chapter, lesson, type); | |
227 | + | |
228 | + Study study = optionalStudy.get(); | |
229 | + | |
230 | + System.out.println(study.getId()); | |
231 | + | |
232 | + Optional<Travel> travel1 = travelRepository.findByStudyIdAndLevel(study.getId(), 1); | |
233 | + Optional<Travel> travel2 = travelRepository.findByStudyIdAndLevel(study.getId(), 2); | |
234 | + | |
235 | + StudyTypeResponse.DetailTravel detailTravel1 = StudyTypeResponse.DetailTravel.of(travel1.get()); | |
236 | + StudyTypeResponse.DetailTravel detailTravel2 = StudyTypeResponse.DetailTravel.of(travel2.get()); | |
237 | + | |
238 | + | |
239 | + return StudyLevelResponse.BookTravelLevel.of(detailTravel1, detailTravel2); | |
240 | + } | |
241 | + | |
242 | + @GetMapping("/bookWorld") | |
243 | + public StudyLevelResponse.WorldLevel getBookWorld(@AuthenticationPrincipal UserDetails auth, | |
244 | + @RequestParam int chapter, | |
245 | + @RequestParam int lesson, | |
246 | + @RequestParam int studyType){ | |
247 | + | |
248 | + StudyType type = null; | |
249 | + if(studyType == 8) { | |
250 | + type = StudyType.동화세상; | |
251 | + } | |
252 | + | |
253 | + Optional<Member> optionalMember = memberRepository.findById(auth.getUsername()); | |
254 | + | |
255 | + Member member = optionalMember.get(); | |
256 | + | |
257 | + Optional<Study> optionalStudy = studyRepository.findByGradeAndChapterAndLessonAndStudyType(member.getGrade(), chapter, lesson, type); | |
258 | + | |
259 | + Study study = optionalStudy.get(); | |
260 | + | |
261 | + System.out.println(study.getId()); | |
262 | + | |
263 | + Optional<World> world1 = worldRepository.findByStudyIdAndLevel(study.getId(), 1); | |
264 | + Optional<World> world2 = worldRepository.findByStudyIdAndLevel(study.getId(), 2); | |
265 | + | |
266 | + StudyTypeResponse.DetailWorld detailWorld1 = StudyTypeResponse.DetailWorld.of(world1.get()); | |
267 | + StudyTypeResponse.DetailWorld detailWorld2 = StudyTypeResponse.DetailWorld.of(world2.get()); | |
268 | + | |
269 | + | |
270 | + return StudyLevelResponse.WorldLevel.of(detailWorld1, detailWorld2); | |
271 | + } | |
272 | + | |
273 | + @GetMapping("/songWorld") | |
274 | + public StudyLevelResponse.WorldLevel getSongWorld(@AuthenticationPrincipal UserDetails auth, | |
275 | + @RequestParam int chapter, | |
276 | + @RequestParam int lesson, | |
277 | + @RequestParam int studyType){ | |
278 | + | |
279 | + StudyType type = null; | |
280 | + if(studyType == 9) { | |
281 | + type = StudyType.동요세상; | |
282 | + } | |
283 | + | |
284 | + Optional<Member> optionalMember = memberRepository.findById(auth.getUsername()); | |
285 | + | |
286 | + Member member = optionalMember.get(); | |
287 | + | |
288 | + Optional<Study> optionalStudy = studyRepository.findByGradeAndChapterAndLessonAndStudyType(member.getGrade(), chapter, lesson, type); | |
289 | + | |
290 | + Study study = optionalStudy.get(); | |
291 | + | |
292 | + System.out.println(study.getId()); | |
293 | + | |
294 | + Optional<World> world1 = worldRepository.findByStudyIdAndLevel(study.getId(), 1); | |
295 | + Optional<World> world2 = worldRepository.findByStudyIdAndLevel(study.getId(), 2); | |
296 | + | |
297 | + StudyTypeResponse.DetailWorld detailWorld1 = StudyTypeResponse.DetailWorld.of(world1.get()); | |
298 | + StudyTypeResponse.DetailWorld detailWorld2 = StudyTypeResponse.DetailWorld.of(world2.get()); | |
299 | + | |
300 | + | |
301 | + return StudyLevelResponse.WorldLevel.of(detailWorld1, detailWorld2); | |
302 | + } | |
303 | + | |
304 | + @GetMapping("/songCountry") | |
305 | + public StudyLevelResponse.SongCountryLevel getSongCountry(@AuthenticationPrincipal UserDetails auth, | |
306 | + @RequestParam int chapter, | |
307 | + @RequestParam int lesson, | |
308 | + @RequestParam int studyType){ | |
309 | + | |
310 | + StudyType type = null; | |
311 | + if(studyType == 10) { | |
312 | + type = StudyType.동요나라; | |
313 | + } | |
314 | + | |
315 | + Optional<Member> optionalMember = memberRepository.findById(auth.getUsername()); | |
316 | + | |
317 | + Member member = optionalMember.get(); | |
318 | + | |
319 | + Optional<Study> optionalStudy = studyRepository.findByGradeAndChapterAndLessonAndStudyType(member.getGrade(), chapter, lesson, type); | |
320 | + | |
321 | + Study study = optionalStudy.get(); | |
322 | + | |
323 | + Optional<CountryElement> countryElement1 = countryElementRepository.findByStudyIdAndLevel(study.getId(), 1); | |
324 | + Optional<CountryElement> countryElement2 = countryElementRepository.findByStudyIdAndLevel(study.getId(), 2); | |
325 | + | |
326 | + System.out.println(countryElement1); | |
327 | + System.out.println(countryElement2); | |
328 | + | |
329 | + | |
330 | + StudyTypeResponse.DetailCountryElement detailCountryElement1 = StudyTypeResponse.DetailCountryElement.of(countryElement1.get()); | |
331 | + StudyTypeResponse.DetailCountryElement detailCountryElement2 = StudyTypeResponse.DetailCountryElement.of(countryElement2.get()); | |
332 | + | |
333 | + | |
334 | + return StudyLevelResponse.SongCountryLevel.of(detailCountryElement1, detailCountryElement2); | |
335 | + } | |
336 | + | |
337 | + | |
338 | +} | |
339 | + |
+++ src/main/java/com/example/educatback/controller/request/MemberRequest.java
... | ... | @@ -0,0 +1,32 @@ |
1 | +package com.example.educatback.controller.request; | |
2 | + | |
3 | +import jakarta.validation.constraints.Max; | |
4 | +import jakarta.validation.constraints.Min; | |
5 | +import jakarta.validation.constraints.NotBlank; | |
6 | +import lombok.Data; | |
7 | + | |
8 | +public class MemberRequest { | |
9 | + @Data | |
10 | + public static class Create{ | |
11 | + @NotBlank | |
12 | + private String id; | |
13 | + @NotBlank | |
14 | + private String name; | |
15 | + @NotBlank | |
16 | + private String password; | |
17 | + @Min(1) // 최소 1 이상의 값이어야 함을 지정 | |
18 | + private int grade; | |
19 | + @NotBlank | |
20 | + private String gender; | |
21 | + } | |
22 | + | |
23 | + @Data | |
24 | + public static class Update{ | |
25 | + @NotBlank | |
26 | + private String name; | |
27 | + @NotBlank | |
28 | + private String password; | |
29 | + } | |
30 | + | |
31 | + | |
32 | +} |
+++ src/main/java/com/example/educatback/controller/request/StudyAnswerRequest.java
... | ... | @@ -0,0 +1,21 @@ |
1 | +package com.example.educatback.controller.request; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Study; | |
4 | +import jakarta.validation.constraints.Min; | |
5 | +import jakarta.validation.constraints.NotBlank; | |
6 | +import jakarta.validation.constraints.NotEmpty; | |
7 | +import lombok.Data; | |
8 | + | |
9 | +public class StudyAnswerRequest { | |
10 | + @Data | |
11 | + public static class Save{ | |
12 | + | |
13 | + private Long id; // study_id | |
14 | + | |
15 | + private String answer; | |
16 | + | |
17 | + private int time; | |
18 | + | |
19 | + private int level; | |
20 | + } | |
21 | +} |
+++ src/main/java/com/example/educatback/controller/request/StudyTypeRequest.java
... | ... | @@ -0,0 +1,21 @@ |
1 | +package com.example.educatback.controller.request; | |
2 | + | |
3 | +import jakarta.validation.constraints.NotBlank; | |
4 | +import lombok.Data; | |
5 | + | |
6 | +public class StudyTypeRequest { | |
7 | + | |
8 | + @Data | |
9 | + public static class GetPlanet{ | |
10 | + @NotBlank | |
11 | + private int lesson; | |
12 | + @NotBlank | |
13 | + private int chapter; | |
14 | + @NotBlank // 최소 1 이상의 값이어야 함을 지정 | |
15 | + private int grade; | |
16 | + @NotBlank | |
17 | + private Enum type; | |
18 | + } | |
19 | + | |
20 | + | |
21 | +} |
+++ src/main/java/com/example/educatback/controller/response/ApiResponse.java
... | ... | @@ -0,0 +1,20 @@ |
1 | +package com.example.educatback.controller.response; | |
2 | + | |
3 | +import lombok.Builder; | |
4 | +import lombok.Data; | |
5 | + | |
6 | +@Data | |
7 | +@Builder | |
8 | +public class ApiResponse<E> { | |
9 | + private ResponseCode code; | |
10 | + private E data; | |
11 | + private boolean result; | |
12 | + | |
13 | + public static <E> ApiResponse<E> response(boolean result, ResponseCode code, E data){ | |
14 | + return ApiResponse.<E>builder() | |
15 | + .result(result) | |
16 | + .code(code) | |
17 | + .data(data) | |
18 | + .build(); | |
19 | + } | |
20 | +} |
+++ src/main/java/com/example/educatback/controller/response/MemberResponse.java
... | ... | @@ -0,0 +1,59 @@ |
1 | +package com.example.educatback.controller.response; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Member; | |
4 | +import jakarta.persistence.Column; | |
5 | +import lombok.Builder; | |
6 | +import lombok.Data; | |
7 | + | |
8 | +public class MemberResponse { | |
9 | + @Data | |
10 | + @Builder | |
11 | + public static class Detail { | |
12 | + private String id; | |
13 | + private String password; | |
14 | + private String name; | |
15 | + private int grade; | |
16 | + public static Detail of(Member member) { | |
17 | + return Detail.builder() | |
18 | + .id(member.getUsername()) | |
19 | + .password(member.getPassword()) | |
20 | + .name(member.getName()) | |
21 | + .grade(member.getGrade()) | |
22 | + .build(); | |
23 | + } | |
24 | + } | |
25 | + @Data | |
26 | + @Builder | |
27 | + public static class Login { | |
28 | + private String id; | |
29 | + | |
30 | + public static Login of(Member member) { | |
31 | + return Login.builder() | |
32 | + .id(member.getUsername()) | |
33 | + .build(); | |
34 | + } | |
35 | + } | |
36 | + | |
37 | + @Data | |
38 | + @Builder | |
39 | + public static class Rating { | |
40 | + private int focus; | |
41 | + private int expression; | |
42 | + private int understand; | |
43 | + private int word; | |
44 | + private int sentence; | |
45 | + private int grammar; | |
46 | + | |
47 | + public static Rating of(Member member) { | |
48 | + return Rating.builder() | |
49 | + .focus(member.getFocus()) | |
50 | + .expression(member.getExpression()) | |
51 | + .understand(member.getUnderstand()) | |
52 | + .word(member.getWord()) | |
53 | + .sentence(member.getSentence()) | |
54 | + .grammar(member.getGrammar()) | |
55 | + .build(); | |
56 | + } | |
57 | + } | |
58 | + | |
59 | +} |
+++ src/main/java/com/example/educatback/controller/response/ResponseCode.java
... | ... | @@ -0,0 +1,18 @@ |
1 | +package com.example.educatback.controller.response; | |
2 | + | |
3 | +import lombok.AllArgsConstructor; | |
4 | +import lombok.Getter; | |
5 | + | |
6 | +@Getter | |
7 | +@AllArgsConstructor | |
8 | +public enum ResponseCode { | |
9 | + OK(200000), | |
10 | + Created(201000), | |
11 | + SUCCESS(201000), | |
12 | + BAD_REQUEST(400000), | |
13 | + NOT_FOUND(404000), | |
14 | + ValidationError(400000), | |
15 | + InternalServerError(500000), | |
16 | + DuplicateError(409000); | |
17 | + int code; | |
18 | +} |
+++ src/main/java/com/example/educatback/controller/response/ScoreLogResponseDTO.java
... | ... | @@ -0,0 +1,64 @@ |
1 | +package com.example.educatback.controller.response; | |
2 | + | |
3 | +import com.example.educatback.model.entity.ScoreLog; | |
4 | +import lombok.Builder; | |
5 | +import lombok.Data; | |
6 | + | |
7 | +import java.sql.Date; | |
8 | +import java.time.LocalDate; | |
9 | +import java.time.LocalDateTime; | |
10 | + | |
11 | +@Data | |
12 | +@Builder | |
13 | +public class ScoreLogResponseDTO { | |
14 | + | |
15 | + private Long id; | |
16 | + private int focus; | |
17 | + private int expression; | |
18 | + private int understand; | |
19 | + private int word; | |
20 | + private int sentence; | |
21 | + private int grammar; | |
22 | + private LocalDateTime createdAt; | |
23 | + | |
24 | + public static ScoreLogResponseDTO fromEntity(ScoreLog scoreLog) { | |
25 | + return ScoreLogResponseDTO.builder() | |
26 | + .id(scoreLog.getId()) | |
27 | + .focus(scoreLog.getFocus()) | |
28 | + .expression(scoreLog.getExpression()) | |
29 | + .understand(scoreLog.getUnderstand()) | |
30 | + .word(scoreLog.getWord()) | |
31 | + .sentence(scoreLog.getSentence()) | |
32 | + .grammar(scoreLog.getGrammar()) | |
33 | + .createdAt(scoreLog.getCreatedAt()) | |
34 | + .build(); | |
35 | + } | |
36 | + | |
37 | + @Data | |
38 | + @Builder | |
39 | + public static class DailyAverageScore { | |
40 | + private LocalDateTime dateTime; | |
41 | + private double avgFocus; | |
42 | + private double avgExpression; | |
43 | + private double avgUnderstand; | |
44 | + private double avgWord; | |
45 | + private double avgSentence; | |
46 | + private double avgGrammar; | |
47 | + | |
48 | + public static DailyAverageScore fromObjectArray(Object[] objects) { | |
49 | + // Convert java.sql.Date to LocalDateTime | |
50 | + LocalDate date = ((Date) objects[0]).toLocalDate(); | |
51 | + LocalDateTime dateTime = date.atStartOfDay(); // If you want to convert date to start of the day | |
52 | + | |
53 | + return DailyAverageScore.builder() | |
54 | + .dateTime(dateTime) | |
55 | + .avgFocus((double) objects[1]) | |
56 | + .avgExpression((double) objects[2]) | |
57 | + .avgUnderstand((double) objects[3]) | |
58 | + .avgWord((double) objects[4]) | |
59 | + .avgSentence((double) objects[5]) | |
60 | + .avgGrammar((double) objects[6]) | |
61 | + .build(); | |
62 | + } | |
63 | + } | |
64 | +}(파일 끝에 줄바꿈 문자 없음) |
+++ src/main/java/com/example/educatback/controller/response/SolvedResponse.java
... | ... | @@ -0,0 +1,23 @@ |
1 | +package com.example.educatback.controller.response; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Solved; | |
4 | +import lombok.Builder; | |
5 | +import lombok.Data; | |
6 | + | |
7 | +@Data | |
8 | +@Builder | |
9 | +public class SolvedResponse { | |
10 | + private Long id; | |
11 | + private int isChecked; | |
12 | + private String answer; | |
13 | + private StudyResponse study; | |
14 | + | |
15 | + public static SolvedResponse from(Solved solved) { | |
16 | + return SolvedResponse.builder() | |
17 | + .id(solved.getId()) | |
18 | + .isChecked(solved.getIsChecked()) | |
19 | + .answer(solved.getAnswer()) | |
20 | + .study(StudyResponse.from(solved.getStudy())) | |
21 | + .build(); | |
22 | + } | |
23 | +} |
+++ src/main/java/com/example/educatback/controller/response/StudyChoiceResponse.java
... | ... | @@ -0,0 +1,136 @@ |
1 | +package com.example.educatback.controller.response; | |
2 | + | |
3 | +import com.example.educatback.model.entity.*; | |
4 | +import lombok.Builder; | |
5 | +import lombok.Data; | |
6 | + | |
7 | +public class StudyChoiceResponse { | |
8 | + | |
9 | + @Data | |
10 | + @Builder | |
11 | + public static class DetailWordAbsorbThree{ | |
12 | + private Long id; | |
13 | + private String element; | |
14 | + | |
15 | + public static DetailWordAbsorbThree of(WordAbsorbThree wordAbsorbThree){ | |
16 | + return DetailWordAbsorbThree.builder() | |
17 | + .id(wordAbsorbThree.getId()) | |
18 | + .element(wordAbsorbThree.getElement()) | |
19 | + .build(); | |
20 | + } | |
21 | + } | |
22 | + | |
23 | + | |
24 | + @Data | |
25 | + @Builder | |
26 | + public static class DetailSentenceAbsorbThree { | |
27 | + private Long id; | |
28 | + private String element; | |
29 | + | |
30 | + public static DetailSentenceAbsorbThree of(SentenceAbsorbThree sentenceAbsorbThree) { | |
31 | + return DetailSentenceAbsorbThree.builder() | |
32 | + .id(sentenceAbsorbThree.getId()) | |
33 | + .element(sentenceAbsorbThree.getElement()) | |
34 | + .build(); | |
35 | + } | |
36 | + } | |
37 | + | |
38 | + | |
39 | + | |
40 | + @Data | |
41 | + @Builder | |
42 | + public static class DetailGrammarFairyTwo { | |
43 | + private Long id; | |
44 | + private String element; | |
45 | + // No need for study field as GrammarFairyTwo doesn't seem to have a Study association | |
46 | + | |
47 | + public static DetailGrammarFairyTwo of(GrammarFairyTwo grammarFairyTwo) { | |
48 | + return DetailGrammarFairyTwo.builder() | |
49 | + .id(grammarFairyTwo.getId()) | |
50 | + .element(grammarFairyTwo.getElement()) | |
51 | + .build(); | |
52 | + } | |
53 | + } | |
54 | + | |
55 | + @Data | |
56 | + @Builder | |
57 | + public static class DetailTravelThree { | |
58 | + private Long id; | |
59 | + private String element; | |
60 | + // No need for study field as TravelThree doesn't seem to have a Study association | |
61 | + | |
62 | + public static DetailTravelThree of(TravelThree travelThree) { | |
63 | + return DetailTravelThree.builder() | |
64 | + .id(travelThree.getId()) | |
65 | + .element(travelThree.getElement()) | |
66 | + .build(); | |
67 | + } | |
68 | + } | |
69 | + | |
70 | + @Data | |
71 | + @Builder | |
72 | + public static class DetailTravelSlide { | |
73 | + private Long id; | |
74 | + private Integer sequence; | |
75 | + private String image; | |
76 | + private String sentence; | |
77 | + // No need for study field as TravelSlide doesn't seem to have a Study association | |
78 | + | |
79 | + public static DetailTravelSlide of(TravelSlide travelSlide) { | |
80 | + return DetailTravelSlide.builder() | |
81 | + .id(travelSlide.getId()) | |
82 | + .sequence(travelSlide.getSequence()) | |
83 | + .image(travelSlide.getImage()) | |
84 | + .sentence(travelSlide.getSentence()) | |
85 | + .build(); | |
86 | + } | |
87 | + } | |
88 | + | |
89 | + @Data | |
90 | + @Builder | |
91 | + public static class DetailWorldThree { | |
92 | + private Long id; | |
93 | + private String image; | |
94 | + private String element; | |
95 | + // No need for world field as WorldThree doesn't seem to have a World association | |
96 | + | |
97 | + public static DetailWorldThree of(WorldThree worldThree) { | |
98 | + return DetailWorldThree.builder() | |
99 | + .id(worldThree.getId()) | |
100 | + .element(worldThree.getElement()) | |
101 | + .build(); | |
102 | + } | |
103 | + } | |
104 | + | |
105 | + @Data | |
106 | + @Builder | |
107 | + public static class DetailCountryThree { | |
108 | + private Long id; | |
109 | + private String element; | |
110 | + | |
111 | + public static DetailCountryThree of(CountryThree countryThree) { | |
112 | + return DetailCountryThree.builder() | |
113 | + .id(countryThree.getId()) | |
114 | + .element(countryThree.getElement()) | |
115 | + .build(); | |
116 | + } | |
117 | + } | |
118 | + | |
119 | + @Data | |
120 | + @Builder | |
121 | + public static class DetailCountryTwoFiles { | |
122 | + private Long id; | |
123 | + private String element; | |
124 | + private String sentence; | |
125 | + private String sentenceMeaning; | |
126 | + | |
127 | + public static DetailCountryTwoFiles of(CountryTwoFiles countryTwoFiles) { | |
128 | + return DetailCountryTwoFiles.builder() | |
129 | + .id(countryTwoFiles.getId()) | |
130 | + .element(countryTwoFiles.getElement()) | |
131 | + .sentence(countryTwoFiles.getSentence()) | |
132 | + .sentenceMeaning(countryTwoFiles.getSentenceMeaning()) | |
133 | + .build(); | |
134 | + } | |
135 | + } | |
136 | +} |
+++ src/main/java/com/example/educatback/controller/response/StudyLevelResponse.java
... | ... | @@ -0,0 +1,113 @@ |
1 | +package com.example.educatback.controller.response; | |
2 | + | |
3 | +import com.example.educatback.model.entity.GrammarFairy; | |
4 | +import lombok.Builder; | |
5 | +import lombok.Data; | |
6 | + | |
7 | +public class StudyLevelResponse { | |
8 | + | |
9 | + @Data | |
10 | + @Builder | |
11 | + public static class WordAbsorbLevel { | |
12 | + private StudyTypeResponse.DetailWordAbsorb basic; | |
13 | + private StudyTypeResponse.DetailWordAbsorb deep; | |
14 | + // 필요에 따라 더 많은 필드 추가 가능 | |
15 | + | |
16 | + public static WordAbsorbLevel of(StudyTypeResponse.DetailWordAbsorb basic, StudyTypeResponse.DetailWordAbsorb deep) { | |
17 | + return WordAbsorbLevel.builder() | |
18 | + .basic(basic) | |
19 | + .deep(deep) | |
20 | + .build(); | |
21 | + } | |
22 | + } | |
23 | + | |
24 | + @Data | |
25 | + @Builder | |
26 | + public static class SentenceAbsorbLevel { | |
27 | + private StudyTypeResponse.DetailSentenceAbsorb basic; | |
28 | + private StudyTypeResponse.DetailSentenceAbsorb deep; | |
29 | + // 필요에 따라 더 많은 필드 추가 가능 | |
30 | + | |
31 | + public static SentenceAbsorbLevel of(StudyTypeResponse.DetailSentenceAbsorb basic, StudyTypeResponse.DetailSentenceAbsorb deep) { | |
32 | + return SentenceAbsorbLevel.builder() | |
33 | + .basic(basic) | |
34 | + .deep(deep) | |
35 | + .build(); | |
36 | + } | |
37 | + } | |
38 | + | |
39 | + @Data | |
40 | + @Builder | |
41 | + public static class GrammarFairyLevel { | |
42 | + private StudyTypeResponse.DetailGrammarFairy basic; | |
43 | + private StudyTypeResponse.DetailGrammarFairy deep; | |
44 | + // 필요에 따라 더 많은 필드 추가 가능 | |
45 | + | |
46 | + public static GrammarFairyLevel of(StudyTypeResponse.DetailGrammarFairy basic, StudyTypeResponse.DetailGrammarFairy deep) { | |
47 | + return GrammarFairyLevel.builder() | |
48 | + .basic(basic) | |
49 | + .deep(deep) | |
50 | + .build(); | |
51 | + } | |
52 | + } | |
53 | + | |
54 | + @Data | |
55 | + @Builder | |
56 | + public static class GrammarLandLevel { | |
57 | + private StudyTypeResponse.DetailGrammarLand basic; | |
58 | + private StudyTypeResponse.DetailGrammarLand deep; | |
59 | + // 필요에 따라 더 많은 필드 추가 가능 | |
60 | + | |
61 | + public static GrammarLandLevel of(StudyTypeResponse.DetailGrammarLand basic, StudyTypeResponse.DetailGrammarLand deep) { | |
62 | + return GrammarLandLevel.builder() | |
63 | + .basic(basic) | |
64 | + .deep(deep) | |
65 | + .build(); | |
66 | + } | |
67 | + } | |
68 | + | |
69 | + @Data | |
70 | + @Builder | |
71 | + public static class BookTravelLevel { | |
72 | + private StudyTypeResponse.DetailTravel basic; | |
73 | + private StudyTypeResponse.DetailTravel deep; | |
74 | + // 필요에 따라 더 많은 필드 추가 가능 | |
75 | + | |
76 | + public static BookTravelLevel of(StudyTypeResponse.DetailTravel basic, StudyTypeResponse.DetailTravel deep) { | |
77 | + return BookTravelLevel.builder() | |
78 | + .basic(basic) | |
79 | + .deep(deep) | |
80 | + .build(); | |
81 | + } | |
82 | + } | |
83 | + | |
84 | + @Data | |
85 | + @Builder | |
86 | + public static class WorldLevel { | |
87 | + private StudyTypeResponse.DetailWorld basic; | |
88 | + private StudyTypeResponse.DetailWorld deep; | |
89 | + // 필요에 따라 더 많은 필드 추가 가능 | |
90 | + | |
91 | + public static WorldLevel of(StudyTypeResponse.DetailWorld basic, StudyTypeResponse.DetailWorld deep) { | |
92 | + return WorldLevel.builder() | |
93 | + .basic(basic) | |
94 | + .deep(deep) | |
95 | + .build(); | |
96 | + } | |
97 | + } | |
98 | + | |
99 | + @Data | |
100 | + @Builder | |
101 | + public static class SongCountryLevel { | |
102 | + private StudyTypeResponse.DetailCountryElement basic; | |
103 | + private StudyTypeResponse.DetailCountryElement deep; | |
104 | + // 필요에 따라 더 많은 필드 추가 가능 | |
105 | + | |
106 | + public static SongCountryLevel of(StudyTypeResponse.DetailCountryElement basic, StudyTypeResponse.DetailCountryElement deep) { | |
107 | + return SongCountryLevel.builder() | |
108 | + .basic(basic) | |
109 | + .deep(deep) | |
110 | + .build(); | |
111 | + } | |
112 | + } | |
113 | +} |
+++ src/main/java/com/example/educatback/controller/response/StudyResponse.java
... | ... | @@ -0,0 +1,26 @@ |
1 | +package com.example.educatback.controller.response; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Study; | |
4 | +import com.example.educatback.model.entity.StudyType; | |
5 | +import lombok.Builder; | |
6 | +import lombok.Data; | |
7 | + | |
8 | +@Data | |
9 | +@Builder | |
10 | +public class StudyResponse { | |
11 | + private Long id; | |
12 | + private StudyType studyType; | |
13 | + private Integer grade; | |
14 | + private Integer chapter; | |
15 | + private Integer lesson; | |
16 | + | |
17 | + public static StudyResponse from(Study study) { | |
18 | + return StudyResponse.builder() | |
19 | + .id(study.getId()) | |
20 | + .studyType(study.getStudyType()) | |
21 | + .grade(study.getGrade()) | |
22 | + .chapter(study.getChapter()) | |
23 | + .lesson(study.getLesson()) | |
24 | + .build(); | |
25 | + } | |
26 | +} |
+++ src/main/java/com/example/educatback/controller/response/StudyTypeResponse.java
... | ... | @@ -0,0 +1,294 @@ |
1 | +package com.example.educatback.controller.response; | |
2 | + | |
3 | +import com.example.educatback.model.entity.*; | |
4 | +import lombok.Builder; | |
5 | +import lombok.Data; | |
6 | + | |
7 | +import java.util.List; | |
8 | +import java.util.stream.Collectors; | |
9 | + | |
10 | +public class StudyTypeResponse { | |
11 | + @Data | |
12 | + @Builder | |
13 | + public static class DetailWordAbsorb { | |
14 | + private String word; | |
15 | + private String wordMeaning; | |
16 | + private String file; | |
17 | + private String image; | |
18 | + private String answer; | |
19 | + private int level; | |
20 | + private List<StudyChoiceResponse.DetailWordAbsorbThree> wordAbsorbThrees; | |
21 | + private StudyResponse studyResponse; | |
22 | + public static StudyTypeResponse.DetailWordAbsorb of(WordAbsorb wordAbsorb) { | |
23 | + List<StudyChoiceResponse.DetailWordAbsorbThree> wordAbsorbThreeElements = wordAbsorb.getWordAbsorbThrees().stream() | |
24 | + .map(StudyChoiceResponse.DetailWordAbsorbThree::of) | |
25 | + .collect(Collectors.toList()); | |
26 | + return DetailWordAbsorb.builder() | |
27 | + .word(wordAbsorb.getWord()) | |
28 | + .wordMeaning(wordAbsorb.getWordMeaning()) | |
29 | + .file(wordAbsorb.getFile()) | |
30 | + .image(wordAbsorb.getImage()) | |
31 | + .answer(wordAbsorb.getAnswer()) | |
32 | + .level(wordAbsorb.getLevel()) | |
33 | + .studyResponse(StudyResponse.from(wordAbsorb.getStudy())) | |
34 | + .wordAbsorbThrees(wordAbsorbThreeElements) | |
35 | + .build(); | |
36 | + } | |
37 | + } | |
38 | + | |
39 | + @Data | |
40 | + @Builder | |
41 | + public static class DetailWordBundle { | |
42 | + private String word; | |
43 | + private String word_meaning; | |
44 | + private String file; | |
45 | + private String image; | |
46 | + private String sentence; | |
47 | + private String sentence_meaning; | |
48 | + private String sentence_file; | |
49 | + private StudyResponse studyResponse; | |
50 | + | |
51 | + public static StudyTypeResponse.DetailWordBundle of(WordBundle wordBundle) { | |
52 | + | |
53 | + return DetailWordBundle.builder() | |
54 | + .word(wordBundle.getWord()) | |
55 | + .word_meaning(wordBundle.getWordMeaning()) | |
56 | + .file(wordBundle.getWordFile()) | |
57 | + .image(wordBundle.getImage()) | |
58 | + .sentence(wordBundle.getSentence()) | |
59 | + .sentence_meaning(wordBundle.getSentenceMeaning()) | |
60 | + .sentence_file(wordBundle.getSentenceFile()) | |
61 | + .studyResponse(StudyResponse.from(wordBundle.getStudy())) | |
62 | + .build(); | |
63 | + } | |
64 | + } | |
65 | + | |
66 | + @Data | |
67 | + @Builder | |
68 | + public static class DetailSentenceDiary { | |
69 | + private Long id; | |
70 | + private String sentence; | |
71 | + private String sentence_problem; | |
72 | + private String sentence_meaning; | |
73 | + private String image; | |
74 | + private String file; | |
75 | + private String question; | |
76 | + private StudyResponse studyResponse; | |
77 | + | |
78 | + public static StudyTypeResponse.DetailSentenceDiary of(SentenceDiary sentenceDiary) { | |
79 | + return StudyTypeResponse.DetailSentenceDiary.builder() | |
80 | + .id(sentenceDiary.getId()) | |
81 | + .sentence(sentenceDiary.getSentence()) | |
82 | + .sentence_problem(sentenceDiary.getSentenceQuestion()) | |
83 | + .sentence_meaning(sentenceDiary.getSentenceMeaning()) | |
84 | + .image(sentenceDiary.getImage()) | |
85 | + .file(sentenceDiary.getFile()) | |
86 | + .question(sentenceDiary.getQuestion()) | |
87 | + .studyResponse(StudyResponse.from(sentenceDiary.getStudy())) | |
88 | + .build(); | |
89 | + } | |
90 | + } | |
91 | + | |
92 | + @Data | |
93 | + @Builder | |
94 | + public static class DetailSentenceAbsorb { | |
95 | + private Long id; | |
96 | + private String sentence; | |
97 | + private String sentence_meaning; | |
98 | + private String image; | |
99 | + private String file; | |
100 | + private String example; | |
101 | + private int level; | |
102 | + private String question; | |
103 | + private StudyResponse studyResponse; | |
104 | + private List<StudyChoiceResponse.DetailSentenceAbsorbThree> sentenceAbsorbThreeElements; // List of elements from SentenceAbsorbThree | |
105 | + | |
106 | + public static StudyTypeResponse.DetailSentenceAbsorb of(SentenceAbsorb sentenceAbsorb) { | |
107 | + List<StudyChoiceResponse.DetailSentenceAbsorbThree> sentenceAbsorbThreeList = sentenceAbsorb.getSentenceAbsorbThree().stream() | |
108 | + .map(StudyChoiceResponse.DetailSentenceAbsorbThree::of) | |
109 | + .collect(Collectors.toList()); | |
110 | + | |
111 | + return DetailSentenceAbsorb.builder() | |
112 | + .id(sentenceAbsorb.getId()) | |
113 | + .sentence(sentenceAbsorb.getSentence()) | |
114 | + .sentence_meaning(sentenceAbsorb.getSentenceMeaning()) | |
115 | + .image(sentenceAbsorb.getImage()) | |
116 | + .file(sentenceAbsorb.getFile()) | |
117 | + .example(sentenceAbsorb.getExample()) | |
118 | + .level(sentenceAbsorb.getLevel()) | |
119 | + .question(sentenceAbsorb.getQuestion()) | |
120 | + .studyResponse(StudyResponse.from(sentenceAbsorb.getStudy())) | |
121 | + .sentenceAbsorbThreeElements(sentenceAbsorbThreeList) | |
122 | + .build(); | |
123 | + } | |
124 | + } | |
125 | + | |
126 | + @Data | |
127 | + @Builder | |
128 | + public static class DetailGrammarFairy { | |
129 | + private Long id; | |
130 | + private String sentence; | |
131 | + private String explanation; | |
132 | + private String question; | |
133 | + private String answer; | |
134 | + private String example; | |
135 | + private int level; | |
136 | + private List<StudyChoiceResponse.DetailGrammarFairyTwo> grammarFairyTwoElements; // List of elements from GrammarFairyTwo | |
137 | + private StudyResponse studyResponse; | |
138 | + private String sentenceFairy; | |
139 | + | |
140 | + public static StudyTypeResponse.DetailGrammarFairy of(GrammarFairy grammarFairy) { | |
141 | + List<StudyChoiceResponse.DetailGrammarFairyTwo> grammarFairyTwoElements = grammarFairy.getGrammarFairyTwo().stream() | |
142 | + .map(StudyChoiceResponse.DetailGrammarFairyTwo::of) | |
143 | + .collect(Collectors.toList()); | |
144 | + | |
145 | + return DetailGrammarFairy.builder() | |
146 | + .id(grammarFairy.getId()) | |
147 | + .sentence(grammarFairy.getSentence()) | |
148 | + .explanation(grammarFairy.getExplanation()) | |
149 | + .question(grammarFairy.getQuestion()) | |
150 | + .answer(grammarFairy.getAnswer()) | |
151 | + .example(grammarFairy.getExample()) | |
152 | + .level(grammarFairy.getLevel()) | |
153 | + .grammarFairyTwoElements(grammarFairyTwoElements) | |
154 | + .studyResponse(StudyResponse.from(grammarFairy.getStudy())) | |
155 | + .sentenceFairy(grammarFairy.getSentenceFairy()) | |
156 | + .build(); | |
157 | + } | |
158 | + } | |
159 | + | |
160 | + @Data | |
161 | + @Builder | |
162 | + public static class DetailGrammarLand { | |
163 | + private Long id; | |
164 | + private String sentence1; | |
165 | + private String sentence2; | |
166 | + private String explanation; | |
167 | + private String example; | |
168 | + private String answer; | |
169 | + private int level; | |
170 | + private StudyResponse studyResponse; | |
171 | + | |
172 | + public static StudyTypeResponse.DetailGrammarLand of(GrammarLand grammarLand) { | |
173 | + return DetailGrammarLand.builder() | |
174 | + .id(grammarLand.getId()) | |
175 | + .sentence1(grammarLand.getSentence1()) | |
176 | + .sentence2(grammarLand.getSentence2()) | |
177 | + .explanation(grammarLand.getExplanation()) | |
178 | + .example(grammarLand.getExample()) | |
179 | + .answer(grammarLand.getAnswer()) | |
180 | + .level(grammarLand.getLevel()) | |
181 | + .studyResponse(StudyResponse.from(grammarLand.getStudy())) | |
182 | + .build(); | |
183 | + } | |
184 | + } | |
185 | + | |
186 | + @Data | |
187 | + @Builder | |
188 | + public static class DetailTravel { | |
189 | + private Long id; | |
190 | + private String question; | |
191 | + private String example; | |
192 | + private String answer; | |
193 | + private String image; | |
194 | + private int level; | |
195 | + private StudyResponse studyResponse; | |
196 | + private List<StudyChoiceResponse.DetailTravelSlide> travelSlides; // Change here | |
197 | + private List<StudyChoiceResponse.DetailTravelThree> travelThrees; | |
198 | + | |
199 | + public static StudyTypeResponse.DetailTravel of(Travel travel) { | |
200 | + List<StudyChoiceResponse.DetailTravelSlide> travelSlides = travel.getTravelSlides().stream() | |
201 | + .map(StudyChoiceResponse.DetailTravelSlide::of) | |
202 | + .collect(Collectors.toList()); | |
203 | + | |
204 | + List<StudyChoiceResponse.DetailTravelThree> travelThreeElements = travel.getTravelThrees().stream() | |
205 | + .map(StudyChoiceResponse.DetailTravelThree::of) | |
206 | + .collect(Collectors.toList()); | |
207 | + | |
208 | + return DetailTravel.builder() | |
209 | + .id(travel.getId()) | |
210 | + .question(travel.getQuestion()) | |
211 | + .example(travel.getExample()) | |
212 | + .answer(travel.getAnswer()) | |
213 | + .image(travel.getImage()) | |
214 | + .level(travel.getLevel()) | |
215 | + .studyResponse(StudyResponse.from(travel.getStudy())) | |
216 | + .travelSlides(travelSlides) | |
217 | + .travelThrees(travelThreeElements) | |
218 | + .build(); | |
219 | + } | |
220 | + } | |
221 | + | |
222 | + @Data | |
223 | + @Builder | |
224 | + public static class DetailWorld { | |
225 | + private Long id; | |
226 | + private String image; | |
227 | + private String sentenceMeaning; | |
228 | + private String sentence; | |
229 | + private String sentenceFocusing; | |
230 | + private String focusingMeaning; | |
231 | + private String question; | |
232 | + private String answer; | |
233 | + private String file; | |
234 | + private int level; | |
235 | + private StudyResponse studyResponse; | |
236 | + private List<StudyChoiceResponse.DetailWorldThree> worldThrees; | |
237 | + | |
238 | + public static DetailWorld of(World world) { | |
239 | + List<StudyChoiceResponse.DetailWorldThree> worldThreeElements = world.getWorldThrees().stream() | |
240 | + .map(StudyChoiceResponse.DetailWorldThree::of) | |
241 | + .collect(Collectors.toList()); | |
242 | + | |
243 | + return DetailWorld.builder() | |
244 | + .id(world.getId()) | |
245 | + .image(world.getImage()) | |
246 | + .sentenceMeaning(world.getSentenceMeaning()) | |
247 | + .sentence(world.getSentence()) | |
248 | + .sentenceFocusing(world.getSentenceFocusing()) | |
249 | + .focusingMeaning(world.getFocusingMeaning()) | |
250 | + .question(world.getQuestion()) | |
251 | + .answer(world.getAnswer()) | |
252 | + .file(world.getFile()) | |
253 | + .level(world.getLevel()) | |
254 | + .worldThrees(worldThreeElements) | |
255 | + .studyResponse(StudyResponse.from(world.getStudy())) | |
256 | + .build(); | |
257 | + } | |
258 | + } | |
259 | + | |
260 | + @Data | |
261 | + @Builder | |
262 | + public static class DetailCountryElement { | |
263 | + private Long id; | |
264 | + private String image; | |
265 | + private String question; | |
266 | + private String answer; | |
267 | + private String sentence; | |
268 | + private String sentenceMeaning; | |
269 | + private List<StudyChoiceResponse.DetailCountryThree> countryThrees; | |
270 | + private List<StudyChoiceResponse.DetailCountryTwoFiles> countryTwoFiles; | |
271 | + private StudyResponse studyResponse; | |
272 | + | |
273 | + public static DetailCountryElement of(CountryElement countryElement) { | |
274 | + List<StudyChoiceResponse.DetailCountryThree> countryThreeElements = countryElement.getCountryThrees().stream() | |
275 | + .map(StudyChoiceResponse.DetailCountryThree::of) | |
276 | + .collect(Collectors.toList()); | |
277 | + List<StudyChoiceResponse.DetailCountryTwoFiles> countryTwoFiles = countryElement.getCountryTwoFiles().stream() | |
278 | + .map(StudyChoiceResponse.DetailCountryTwoFiles::of) | |
279 | + .collect(Collectors.toList()); | |
280 | + | |
281 | + return DetailCountryElement.builder() | |
282 | + .id(countryElement.getId()) | |
283 | + .image(countryElement.getImage()) | |
284 | + .question(countryElement.getQuestion()) | |
285 | + .answer(countryElement.getAnswer()) | |
286 | + .sentence(countryElement.getSentence()) | |
287 | + .sentenceMeaning(countryElement.getSentenceMeaning()) | |
288 | + .countryThrees(countryThreeElements) | |
289 | + .countryTwoFiles(countryTwoFiles) | |
290 | + .studyResponse(StudyResponse.from(countryElement.getStudy())) | |
291 | + .build(); | |
292 | + } | |
293 | + } | |
294 | +} |
+++ src/main/java/com/example/educatback/model/entity/Analysis.java
... | ... | @@ -0,0 +1,18 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +@Entity | |
7 | +@Builder | |
8 | +@NoArgsConstructor | |
9 | +@Getter | |
10 | +@AllArgsConstructor | |
11 | +@Setter | |
12 | +@Table(name = "Analysis") | |
13 | +public class Analysis { | |
14 | + @Id | |
15 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
16 | + @Column(name = "id") | |
17 | + private Long id; | |
18 | +} |
+++ src/main/java/com/example/educatback/model/entity/CountryElement.java
... | ... | @@ -0,0 +1,43 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +import java.util.ArrayList; | |
7 | +import java.util.List; | |
8 | + | |
9 | +@Entity | |
10 | +@Builder | |
11 | +@NoArgsConstructor | |
12 | +@Getter | |
13 | +@AllArgsConstructor | |
14 | +@Setter | |
15 | +@Table(name = "CountryElement") | |
16 | +public class CountryElement { | |
17 | + @Id | |
18 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
19 | + @Column(name = "id") | |
20 | + private Long id; | |
21 | + | |
22 | + | |
23 | + @Column(name = "question") | |
24 | + private String question; | |
25 | + @Column(name = "answer") | |
26 | + private String answer; | |
27 | + @Column(name = "level") | |
28 | + private int level; | |
29 | + @Column(name = "sentence") | |
30 | + private String sentence; | |
31 | + @Column(name = "sentenceMeaning") | |
32 | + private String sentenceMeaning; | |
33 | + @Column(name = "image") | |
34 | + private String image; | |
35 | + | |
36 | + @ManyToOne | |
37 | + private Study study; | |
38 | + | |
39 | + @OneToMany(mappedBy = "countryElement") | |
40 | + private List<CountryThree> countryThrees = new ArrayList<>(); | |
41 | + @OneToMany(mappedBy = "countryElement") | |
42 | + private List<CountryTwoFiles> countryTwoFiles = new ArrayList<>(); | |
43 | +} |
+++ src/main/java/com/example/educatback/model/entity/CountryThree.java
... | ... | @@ -0,0 +1,24 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +@Entity | |
7 | +@Builder | |
8 | +@NoArgsConstructor | |
9 | +@Getter | |
10 | +@AllArgsConstructor | |
11 | +@Setter | |
12 | +@Table(name = "CountryThree") | |
13 | +public class CountryThree { | |
14 | + @Id | |
15 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
16 | + @Column(name = "id") | |
17 | + private Long id; | |
18 | + | |
19 | + @Column(name = "element") | |
20 | + private String element; | |
21 | + | |
22 | + @ManyToOne | |
23 | + private CountryElement countryElement; | |
24 | +} |
+++ src/main/java/com/example/educatback/model/entity/CountryTwoFiles.java
... | ... | @@ -0,0 +1,29 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +@Entity | |
7 | +@Builder | |
8 | +@NoArgsConstructor | |
9 | +@Getter | |
10 | +@AllArgsConstructor | |
11 | +@Setter | |
12 | +@Table(name = "CountryTwoFiles") | |
13 | +public class CountryTwoFiles { | |
14 | + @Id | |
15 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
16 | + @Column(name = "id") | |
17 | + private Long id; | |
18 | + | |
19 | + @Column(name = "element") | |
20 | + private String element; | |
21 | + | |
22 | + @Column(name = "sentence") | |
23 | + private String sentence; | |
24 | + @Column(name = "sentence_meaning") | |
25 | + private String sentenceMeaning; | |
26 | + | |
27 | + @ManyToOne | |
28 | + private CountryElement countryElement; | |
29 | +} |
+++ src/main/java/com/example/educatback/model/entity/GrammarFairy.java
... | ... | @@ -0,0 +1,49 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | + | |
4 | +import jakarta.persistence.*; | |
5 | +import lombok.*; | |
6 | + | |
7 | +import java.util.ArrayList; | |
8 | +import java.util.List; | |
9 | + | |
10 | +@Entity | |
11 | +@Builder | |
12 | +@NoArgsConstructor | |
13 | +@Getter | |
14 | +@AllArgsConstructor | |
15 | +@Setter | |
16 | +@Table(name = "GrammarFairy") | |
17 | +public class GrammarFairy { | |
18 | + @Id | |
19 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
20 | + @Column(name = "id") | |
21 | + private Long id; | |
22 | + | |
23 | + @Column(name = "sentence") | |
24 | + private String sentence; | |
25 | + | |
26 | + @Column(name = "explanation") | |
27 | + private String explanation; | |
28 | + | |
29 | + @Column(name = "question") | |
30 | + private String question; | |
31 | + | |
32 | + @Column(name = "answer") | |
33 | + private String answer; | |
34 | + | |
35 | + @Column(name = "example") | |
36 | + private String example; | |
37 | + | |
38 | + @Column(name = "level") | |
39 | + private int level; | |
40 | + | |
41 | + @OneToMany(mappedBy = "grammarFairy") | |
42 | + private List<GrammarFairyTwo> GrammarFairyTwo = new ArrayList<>(); | |
43 | + | |
44 | + @ManyToOne | |
45 | + private Study study; | |
46 | + | |
47 | + @Column(name = "sentence_fairy") | |
48 | + private String sentenceFairy; | |
49 | +} |
+++ src/main/java/com/example/educatback/model/entity/GrammarFairyTwo.java
... | ... | @@ -0,0 +1,24 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +@Entity | |
7 | +@Builder | |
8 | +@NoArgsConstructor | |
9 | +@Getter | |
10 | +@AllArgsConstructor | |
11 | +@Setter | |
12 | +@Table(name = "grammarFairyTwo") | |
13 | +public class GrammarFairyTwo { | |
14 | + @Id | |
15 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
16 | + @Column(name = "id") | |
17 | + private Long id; | |
18 | + | |
19 | + @Column(name = "element") | |
20 | + private String element; | |
21 | + | |
22 | + @ManyToOne | |
23 | + private GrammarFairy grammarFairy; | |
24 | +} |
+++ src/main/java/com/example/educatback/model/entity/GrammarLand.java
... | ... | @@ -0,0 +1,39 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +@Entity | |
7 | +@Builder | |
8 | +@NoArgsConstructor | |
9 | +@Getter | |
10 | +@AllArgsConstructor | |
11 | +@Setter | |
12 | +@Table(name = "GrammarLand") | |
13 | +public class GrammarLand { | |
14 | + @Id | |
15 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
16 | + @Column(name = "id") | |
17 | + private Long id; | |
18 | + | |
19 | + @Column(name = "sentence1") | |
20 | + private String sentence1; | |
21 | + | |
22 | + @Column(name = "sentence2") | |
23 | + private String sentence2; | |
24 | + | |
25 | + @Column(name = "explanation") | |
26 | + private String explanation; | |
27 | + | |
28 | + @Column(name = "example") | |
29 | + private String example; | |
30 | + | |
31 | + @Column(name = "answer") | |
32 | + private String answer; | |
33 | + | |
34 | + @Column(name = "level") | |
35 | + private int level; | |
36 | + | |
37 | + @ManyToOne | |
38 | + private Study study; | |
39 | +} |
+++ src/main/java/com/example/educatback/model/entity/Member.java
... | ... | @@ -0,0 +1,111 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import com.fasterxml.jackson.annotation.JsonIgnore; | |
4 | +import jakarta.persistence.*; | |
5 | +import lombok.*; | |
6 | +import org.springframework.security.core.GrantedAuthority; | |
7 | +import org.springframework.security.core.authority.SimpleGrantedAuthority; | |
8 | +import org.springframework.security.core.userdetails.UserDetails; | |
9 | + | |
10 | +import java.time.LocalDateTime; | |
11 | +import java.util.ArrayList; | |
12 | +import java.util.Collection; | |
13 | +import java.util.List; | |
14 | + | |
15 | +@Entity | |
16 | +@Builder | |
17 | +@NoArgsConstructor | |
18 | +@Getter | |
19 | +@AllArgsConstructor | |
20 | +@Setter | |
21 | +@Table(name = "Member") | |
22 | +public class Member implements UserDetails { | |
23 | + @Id | |
24 | + @Column(name = "id") | |
25 | + private String username; | |
26 | + | |
27 | + @Column(name = "pw") | |
28 | + private String password; | |
29 | + | |
30 | + @Column(name = "name") | |
31 | + private String name; | |
32 | + @Column(name = "grade") | |
33 | + private int grade; | |
34 | + @Column | |
35 | + private String role; | |
36 | + | |
37 | + @Column(name = "focus") | |
38 | + private int focus; | |
39 | + @Column(name = "expression") | |
40 | + private int expression; | |
41 | + @Column(name = "understand") | |
42 | + private int understand; | |
43 | + @Column(name = "word") | |
44 | + private int word; | |
45 | + @Column(name = "sentence") | |
46 | + private int sentence; | |
47 | + @Column(name = "grammar") | |
48 | + private int grammar; | |
49 | + @Column(name = "gender") | |
50 | + private String gender; | |
51 | + @Column(name = "created_at") | |
52 | + private LocalDateTime createdAt; | |
53 | + @Column(name = "updated_at") | |
54 | + private LocalDateTime updatedAt; | |
55 | + | |
56 | + @OneToMany(mappedBy = "member") | |
57 | + private List<Solved> solveds; | |
58 | + | |
59 | + @OneToMany(mappedBy = "member") | |
60 | + private List<ScoreLog> scoreLogs; | |
61 | + @Override | |
62 | + public Collection<? extends GrantedAuthority> getAuthorities() { | |
63 | + | |
64 | + List<GrantedAuthority> roles = new ArrayList<>(); | |
65 | +// roles.add(new SimpleGrantedAuthority(role)); | |
66 | + if (role != null) { | |
67 | + roles.add(new SimpleGrantedAuthority(role)); | |
68 | + } | |
69 | + return roles; | |
70 | + } | |
71 | + | |
72 | + @Override | |
73 | + public String getPassword() { | |
74 | + return password; | |
75 | + } | |
76 | + | |
77 | + @Override | |
78 | + public String getUsername() { | |
79 | + return username; | |
80 | + } | |
81 | + | |
82 | + @Override | |
83 | + public boolean isAccountNonExpired() { | |
84 | + return true; | |
85 | + } | |
86 | + | |
87 | + @Override | |
88 | + public boolean isAccountNonLocked() { | |
89 | + return true; | |
90 | + } | |
91 | + | |
92 | + @Override | |
93 | + public boolean isCredentialsNonExpired() { | |
94 | + return true; | |
95 | + } | |
96 | + | |
97 | + @Override | |
98 | + public boolean isEnabled() { | |
99 | + return true; | |
100 | + } | |
101 | + | |
102 | + @PrePersist | |
103 | + public void prePersist() { | |
104 | + this.createdAt = LocalDateTime.now(); | |
105 | + this.updatedAt = LocalDateTime.now(); | |
106 | + } | |
107 | + @PreUpdate | |
108 | + public void preUpdate() { | |
109 | + this.updatedAt = LocalDateTime.now(); | |
110 | + } | |
111 | +} |
+++ src/main/java/com/example/educatback/model/entity/ScoreLog.java
... | ... | @@ -0,0 +1,45 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +import java.time.LocalDateTime; | |
7 | + | |
8 | +@Entity | |
9 | +@Builder | |
10 | +@NoArgsConstructor | |
11 | +@Getter | |
12 | +@AllArgsConstructor | |
13 | +@Setter | |
14 | +@Table(name = "ScoreLog") | |
15 | +public class ScoreLog { | |
16 | + @Id | |
17 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
18 | + @Column(name = "id") | |
19 | + private Long id; | |
20 | + | |
21 | + | |
22 | + @Column(name = "focus") | |
23 | + private int focus; | |
24 | + @Column(name = "expression") | |
25 | + private int expression; | |
26 | + @Column(name = "understand") | |
27 | + private int understand; | |
28 | + @Column(name = "word") | |
29 | + private int word; | |
30 | + @Column(name = "sentence") | |
31 | + private int sentence; | |
32 | + @Column(name = "grammar") | |
33 | + private int grammar; | |
34 | + | |
35 | + @Column(name = "created_at") | |
36 | + private LocalDateTime createdAt; | |
37 | + | |
38 | + @ManyToOne | |
39 | + private Member member; | |
40 | + | |
41 | + @PrePersist | |
42 | + public void prePersist() { | |
43 | + this.createdAt = LocalDateTime.now(); | |
44 | + } | |
45 | +} |
+++ src/main/java/com/example/educatback/model/entity/SentenceAbsorb.java
... | ... | @@ -0,0 +1,51 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +import java.util.ArrayList; | |
7 | +import java.util.List; | |
8 | + | |
9 | +@Entity | |
10 | +@Builder | |
11 | +@NoArgsConstructor | |
12 | +@Getter | |
13 | +@AllArgsConstructor | |
14 | +@Setter | |
15 | +@Table(name = "SentenceAbsorb") | |
16 | +public class SentenceAbsorb { | |
17 | + @Id | |
18 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
19 | + @Column(name = "id") | |
20 | + private Long id; | |
21 | + | |
22 | + @Column(name = "sentence") | |
23 | + private String sentence; | |
24 | + | |
25 | + @Column(name = "sentence_meaning") | |
26 | + private String sentenceMeaning; | |
27 | + | |
28 | + @Column(name = "image") | |
29 | + private String image; | |
30 | + | |
31 | + @Column(name = "file") | |
32 | + private String file; | |
33 | + | |
34 | + @Column(name = "example") | |
35 | + private String example; | |
36 | + | |
37 | + @Column(name = "level") | |
38 | + private int level; | |
39 | + | |
40 | + @Column(name = "question") | |
41 | + private String question; | |
42 | + | |
43 | + @Column(name = "answer") | |
44 | + private String answer; | |
45 | + | |
46 | + @ManyToOne | |
47 | + private Study study; | |
48 | + | |
49 | + @OneToMany(mappedBy = "SentenceAbsorb") | |
50 | + private List<SentenceAbsorbThree> sentenceAbsorbThree = new ArrayList<>(); | |
51 | +} |
+++ src/main/java/com/example/educatback/model/entity/SentenceAbsorbThree.java
... | ... | @@ -0,0 +1,23 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +@Entity | |
7 | +@Builder | |
8 | +@NoArgsConstructor | |
9 | +@Getter | |
10 | +@AllArgsConstructor | |
11 | +@Setter | |
12 | +@Table(name = "SentenceAbsorbThree") | |
13 | +public class SentenceAbsorbThree { | |
14 | + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) | |
15 | + @Column(name = "id") | |
16 | + private Long id; | |
17 | + | |
18 | + @Column(name = "element") | |
19 | + private String element; | |
20 | + | |
21 | + @ManyToOne | |
22 | + private SentenceAbsorb SentenceAbsorb; | |
23 | +} |
+++ src/main/java/com/example/educatback/model/entity/SentenceDiary.java
... | ... | @@ -0,0 +1,39 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +@Entity | |
7 | +@Builder | |
8 | +@NoArgsConstructor | |
9 | +@Getter | |
10 | +@AllArgsConstructor | |
11 | +@Setter | |
12 | +@Table(name = "SentenceDiary") | |
13 | +public class SentenceDiary { | |
14 | + @Id | |
15 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
16 | + @Column(name = "id") | |
17 | + private Long id; | |
18 | + | |
19 | + @Column(name = "sentence") | |
20 | + private String sentence; | |
21 | + | |
22 | + @Column(name = "sentence_problem") | |
23 | + private String sentenceQuestion; | |
24 | + | |
25 | + @Column(name = "sentence_meaning") | |
26 | + private String sentenceMeaning; | |
27 | + | |
28 | + @Column(name = "image") | |
29 | + private String image; | |
30 | + | |
31 | + @Column(name = "file") | |
32 | + private String file; | |
33 | + | |
34 | + @Column(name = "question") | |
35 | + private String question; | |
36 | + | |
37 | + @ManyToOne | |
38 | + private Study study; | |
39 | +} |
+++ src/main/java/com/example/educatback/model/entity/Solved.java
... | ... | @@ -0,0 +1,43 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +import java.time.LocalDateTime; | |
7 | + | |
8 | +@Entity | |
9 | +@Builder | |
10 | +@NoArgsConstructor | |
11 | +@Getter | |
12 | +@AllArgsConstructor | |
13 | +@Setter | |
14 | +@Table(name = "Solved") | |
15 | +public class Solved { | |
16 | + @Id | |
17 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
18 | + @Column(name = "id") | |
19 | + private Long id; | |
20 | + | |
21 | + @Column(name = "is_checked") | |
22 | + private int isChecked; | |
23 | + @Column(name = "answer") | |
24 | + private String answer; | |
25 | + | |
26 | + @Column(name = "create_at") | |
27 | + private LocalDateTime createAt; | |
28 | + @Column(name = "time") | |
29 | + private int time; | |
30 | + @Column(name = "level") | |
31 | + private int level; | |
32 | + @ManyToOne | |
33 | + private Member member; | |
34 | + | |
35 | + @ManyToOne | |
36 | + @JoinColumn(name = "study_id") | |
37 | + private Study study; | |
38 | + | |
39 | + @PrePersist | |
40 | + public void prePersist() { | |
41 | + this.createAt = LocalDateTime.now(); | |
42 | + } | |
43 | +} |
+++ src/main/java/com/example/educatback/model/entity/Study.java
... | ... | @@ -0,0 +1,62 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +import java.util.List; | |
7 | + | |
8 | +@Entity | |
9 | +@Builder | |
10 | +@NoArgsConstructor | |
11 | +@Getter | |
12 | +@AllArgsConstructor | |
13 | +@Setter | |
14 | +@Table(name = "Study") | |
15 | +public class Study { | |
16 | + @Id | |
17 | + @Column(name = "id") | |
18 | + private Long id; | |
19 | + | |
20 | + @Enumerated(EnumType.STRING) | |
21 | + @Column(name = "study_type") | |
22 | + private StudyType studyType; | |
23 | + | |
24 | + @Column(name = "grade") | |
25 | + private Integer grade; | |
26 | + | |
27 | + @Column(name = "chapter") | |
28 | + private Integer chapter; | |
29 | + | |
30 | + @Column(name = "lesson") | |
31 | + private Integer lesson; | |
32 | + | |
33 | + @OneToMany(mappedBy = "study") | |
34 | + private List<WordAbsorb> wordAbsorbs; | |
35 | + | |
36 | + @OneToMany(mappedBy = "study") | |
37 | + private List<WordBundle> wordBundles; | |
38 | + | |
39 | + @OneToMany(mappedBy = "study") | |
40 | + private List<CountryElement> countryElements; | |
41 | + | |
42 | + @OneToMany(mappedBy = "study") | |
43 | + private List<GrammarFairy> grammarFairies; | |
44 | + | |
45 | + @OneToMany(mappedBy = "study") | |
46 | + private List<GrammarLand> grammarLands; | |
47 | + | |
48 | + @OneToMany(mappedBy = "study") | |
49 | + private List<SentenceAbsorb> sentenceAbsorbs; | |
50 | + | |
51 | + @OneToMany(mappedBy = "study") | |
52 | + private List<SentenceDiary> sentenceDiaries; | |
53 | + | |
54 | + @OneToMany(mappedBy = "study") | |
55 | + private List<Travel> travels; | |
56 | + | |
57 | + @OneToMany(mappedBy = "study") | |
58 | + private List<World> worlds; | |
59 | + | |
60 | + @OneToMany(mappedBy = "study") | |
61 | + private List<Solved> solveds; | |
62 | +} |
+++ src/main/java/com/example/educatback/model/entity/StudyType.java
... | ... | @@ -0,0 +1,5 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +public enum StudyType { | |
4 | + 단어뭉치, 어휘력쑥쑥,문장일기,문장쏙쏙,문법요정,문법랜드,동화여행,동화세상,동요세상,동요나라; | |
5 | +} |
+++ src/main/java/com/example/educatback/model/entity/Travel.java
... | ... | @@ -0,0 +1,44 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +import java.util.ArrayList; | |
7 | +import java.util.List; | |
8 | + | |
9 | +@Entity | |
10 | +@Builder | |
11 | +@NoArgsConstructor | |
12 | +@Getter | |
13 | +@AllArgsConstructor | |
14 | +@Setter | |
15 | +@Table(name = "Travel") | |
16 | +public class Travel { | |
17 | + @Id | |
18 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
19 | + @Column(name = "id") | |
20 | + private Long id; | |
21 | + | |
22 | + @Column(name = "question") | |
23 | + private String question; | |
24 | + @Column(name = "example") | |
25 | + private String example; | |
26 | + @Column(name = "answer") | |
27 | + private String answer; | |
28 | + @Column(name = "image") | |
29 | + private String image; | |
30 | + | |
31 | + @Column(name = "level") | |
32 | + private int level; | |
33 | + | |
34 | + @ManyToOne | |
35 | + private Study study; | |
36 | + | |
37 | + | |
38 | + | |
39 | + @OneToMany(mappedBy = "travel") | |
40 | + private List<TravelSlide> travelSlides = new ArrayList<>(); | |
41 | + | |
42 | + @OneToMany(mappedBy = "travel") | |
43 | + private List<TravelThree> travelThrees = new ArrayList<>(); | |
44 | +} |
+++ src/main/java/com/example/educatback/model/entity/TravelSlide.java
... | ... | @@ -0,0 +1,27 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +@Entity | |
7 | +@Builder | |
8 | +@NoArgsConstructor | |
9 | +@Getter | |
10 | +@AllArgsConstructor | |
11 | +@Setter | |
12 | +@Table(name = "TravelSlide") | |
13 | +public class TravelSlide { | |
14 | + @Id | |
15 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
16 | + @Column(name = "id") | |
17 | + private Long id; | |
18 | + | |
19 | + @Column(name = "sequence") | |
20 | + private Integer sequence; | |
21 | + @Column(name = "image") | |
22 | + private String image; | |
23 | + @Column(name = "sentence") | |
24 | + private String sentence; | |
25 | + @ManyToOne | |
26 | + private Travel travel; | |
27 | +} |
+++ src/main/java/com/example/educatback/model/entity/TravelThree.java
... | ... | @@ -0,0 +1,24 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +@Entity | |
7 | +@Builder | |
8 | +@NoArgsConstructor | |
9 | +@Getter | |
10 | +@AllArgsConstructor | |
11 | +@Setter | |
12 | +@Table(name = "TravelThree") | |
13 | +public class TravelThree { | |
14 | + @Id | |
15 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
16 | + @Column(name = "id") | |
17 | + private Long id; | |
18 | + | |
19 | + @Column(name = "element") | |
20 | + private String element; | |
21 | + | |
22 | + @ManyToOne | |
23 | + private Travel travel; | |
24 | +} |
+++ src/main/java/com/example/educatback/model/entity/WordAbsorb.java
... | ... | @@ -0,0 +1,42 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +import java.util.ArrayList; | |
7 | +import java.util.List; | |
8 | + | |
9 | +@Entity | |
10 | +@Builder | |
11 | +@NoArgsConstructor | |
12 | +@Getter | |
13 | +@AllArgsConstructor | |
14 | +@Setter | |
15 | +@Table(name = "WordAbsorb") | |
16 | +public class WordAbsorb { | |
17 | + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) | |
18 | + @Column(name = "id") | |
19 | + private Long id; | |
20 | + | |
21 | + @Column(name = "word") | |
22 | + private String word; | |
23 | + @Column(name = "word_meaning") | |
24 | + private String wordMeaning; | |
25 | + | |
26 | + @Column(name = "image") | |
27 | + private String image; | |
28 | + @Column(name = "file") | |
29 | + private String file; | |
30 | + | |
31 | + @Column(name = "answer") | |
32 | + private String answer; | |
33 | + | |
34 | + @Column(name = "level") | |
35 | + private int level; | |
36 | + | |
37 | + @ManyToOne | |
38 | + private Study study; | |
39 | + | |
40 | + @OneToMany(mappedBy = "wordAbsorb") | |
41 | + private List<WordAbsorbThree> wordAbsorbThrees = new ArrayList<>(); | |
42 | +} |
+++ src/main/java/com/example/educatback/model/entity/WordAbsorbThree.java
... | ... | @@ -0,0 +1,23 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +@Entity | |
7 | +@Builder | |
8 | +@NoArgsConstructor | |
9 | +@Getter | |
10 | +@AllArgsConstructor | |
11 | +@Setter | |
12 | +@Table(name = "WordAbsorbThree") | |
13 | +public class WordAbsorbThree { | |
14 | + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) | |
15 | + @Column(name = "id") | |
16 | + private Long id; | |
17 | + | |
18 | + @Column(name = "element") | |
19 | + private String element; | |
20 | + | |
21 | + @ManyToOne | |
22 | + private WordAbsorb wordAbsorb; | |
23 | +} |
+++ src/main/java/com/example/educatback/model/entity/WordBundle.java
... | ... | @@ -0,0 +1,38 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +@Entity | |
7 | +@Builder | |
8 | +@NoArgsConstructor | |
9 | +@Getter | |
10 | +@AllArgsConstructor | |
11 | +@Setter | |
12 | +@Table(name = "WordBundle") | |
13 | +public class WordBundle { | |
14 | + @Id | |
15 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
16 | + @Column(name = "id") | |
17 | + private Long id; | |
18 | + | |
19 | + @Column(name = "word") | |
20 | + private String word; | |
21 | + @Column(name = "word_meaning") | |
22 | + private String wordMeaning; | |
23 | + @Column(name = "word_file") | |
24 | + private String wordFile; | |
25 | + | |
26 | + @Column(name = "sentence") | |
27 | + private String sentence; | |
28 | + @Column(name = "sentence_meaning") | |
29 | + private String sentenceMeaning; | |
30 | + @Column(name = "sentence_file") | |
31 | + private String sentenceFile; | |
32 | + | |
33 | + @Column(name = "image") | |
34 | + private String image; | |
35 | + | |
36 | + @ManyToOne | |
37 | + private Study study; | |
38 | +} |
+++ src/main/java/com/example/educatback/model/entity/World.java
... | ... | @@ -0,0 +1,46 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +import java.util.ArrayList; | |
7 | +import java.util.List; | |
8 | + | |
9 | +@Entity | |
10 | +@Builder | |
11 | +@NoArgsConstructor | |
12 | +@Getter | |
13 | +@AllArgsConstructor | |
14 | +@Setter | |
15 | +@Table(name = "World") | |
16 | +public class World { | |
17 | + @Id | |
18 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
19 | + @Column(name = "id") | |
20 | + private Long id; | |
21 | + | |
22 | + @Column(name = "image") | |
23 | + private String image; | |
24 | + @Column(name = "sentence_meaning") | |
25 | + private String sentenceMeaning; | |
26 | + @Column(name = "sentence") | |
27 | + private String sentence; | |
28 | + @Column(name = "sentence_focusing") | |
29 | + private String sentenceFocusing; | |
30 | + @Column(name = "focusing_meaning") | |
31 | + private String focusingMeaning; | |
32 | + @Column(name = "question") | |
33 | + private String question; | |
34 | + @Column(name = "answer") | |
35 | + private String answer; | |
36 | + @Column(name = "file") | |
37 | + private String file; | |
38 | + @Column(name = "level") | |
39 | + private int level; | |
40 | + | |
41 | + @ManyToOne | |
42 | + private Study study; | |
43 | + | |
44 | + @OneToMany(mappedBy = "world") | |
45 | + private List<WorldThree> worldThrees = new ArrayList<>(); | |
46 | +} |
+++ src/main/java/com/example/educatback/model/entity/WorldThree.java
... | ... | @@ -0,0 +1,24 @@ |
1 | +package com.example.educatback.model.entity; | |
2 | + | |
3 | +import jakarta.persistence.*; | |
4 | +import lombok.*; | |
5 | + | |
6 | +@Entity | |
7 | +@Builder | |
8 | +@NoArgsConstructor | |
9 | +@Getter | |
10 | +@AllArgsConstructor | |
11 | +@Setter | |
12 | +@Table(name = "WorldThree") | |
13 | +public class WorldThree { | |
14 | + @Id | |
15 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
16 | + @Column(name = "id") | |
17 | + private Long id; | |
18 | + | |
19 | + @Column(name = "element") | |
20 | + private String element; | |
21 | + | |
22 | + @ManyToOne | |
23 | + private World world; | |
24 | +} |
+++ src/main/java/com/example/educatback/model/repository/AnalysisRepository.java
... | ... | @@ -0,0 +1,8 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Analysis; | |
4 | +import com.example.educatback.model.entity.Member; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +public interface AnalysisRepository extends JpaRepository<Analysis, Long> { | |
8 | +} |
+++ src/main/java/com/example/educatback/model/repository/CountryElementRepository.java
... | ... | @@ -0,0 +1,13 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.CountryElement; | |
4 | +import com.example.educatback.model.entity.Member; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +import java.util.Optional; | |
8 | + | |
9 | +public interface CountryElementRepository extends JpaRepository<CountryElement, Long> { | |
10 | + Optional<CountryElement> findByStudyId(Long studyId); | |
11 | + | |
12 | + Optional<CountryElement> findByStudyIdAndLevel(Long studyId, int level); | |
13 | +} |
+++ src/main/java/com/example/educatback/model/repository/CountryThreeRepository.java
... | ... | @@ -0,0 +1,8 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.CountryElement; | |
4 | +import com.example.educatback.model.entity.CountryThree; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +public interface CountryThreeRepository extends JpaRepository<CountryThree, Long> { | |
8 | +} |
+++ src/main/java/com/example/educatback/model/repository/CountryTwoFilesRepository.java
... | ... | @@ -0,0 +1,8 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.CountryElement; | |
4 | +import com.example.educatback.model.entity.CountryTwoFiles; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +public interface CountryTwoFilesRepository extends JpaRepository<CountryTwoFiles, Long> { | |
8 | +} |
+++ src/main/java/com/example/educatback/model/repository/GrammarFairyRepository.java
... | ... | @@ -0,0 +1,13 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.CountryElement; | |
4 | +import com.example.educatback.model.entity.GrammarFairy; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +import java.util.Optional; | |
8 | + | |
9 | +public interface GrammarFairyRepository extends JpaRepository<GrammarFairy, Long> { | |
10 | + Optional<GrammarFairy> findByStudyId(Long studyId); | |
11 | + | |
12 | + Optional<GrammarFairy> findByStudyIdAndLevel(Long studyId, int level); | |
13 | +} |
+++ src/main/java/com/example/educatback/model/repository/GrammarFairyTwoRepository.java
... | ... | @@ -0,0 +1,8 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.CountryElement; | |
4 | +import com.example.educatback.model.entity.GrammarFairyTwo; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +public interface GrammarFairyTwoRepository extends JpaRepository<GrammarFairyTwo, Long> { | |
8 | +} |
+++ src/main/java/com/example/educatback/model/repository/GrammarLandRepository.java
... | ... | @@ -0,0 +1,13 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.CountryElement; | |
4 | +import com.example.educatback.model.entity.GrammarLand; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +import java.util.Optional; | |
8 | + | |
9 | +public interface GrammarLandRepository extends JpaRepository<GrammarLand, Long> { | |
10 | + Optional<GrammarLand> findByStudyId(Long studyId); | |
11 | + | |
12 | + Optional<GrammarLand> findByStudyIdAndLevel(Long studyId, int level); | |
13 | +} |
+++ src/main/java/com/example/educatback/model/repository/MemberRepository.java
... | ... | @@ -0,0 +1,7 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Member; | |
4 | +import org.springframework.data.jpa.repository.JpaRepository; | |
5 | + | |
6 | +public interface MemberRepository extends JpaRepository<Member, String> { | |
7 | +} |
+++ src/main/java/com/example/educatback/model/repository/ScoreLogRepository.java
... | ... | @@ -0,0 +1,21 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.CountryElement; | |
4 | +import com.example.educatback.model.entity.Member; | |
5 | +import com.example.educatback.model.entity.ScoreLog; | |
6 | +import org.springframework.data.jpa.repository.JpaRepository; | |
7 | +import org.springframework.data.jpa.repository.Query; | |
8 | + | |
9 | +import java.util.List; | |
10 | + | |
11 | +public interface ScoreLogRepository extends JpaRepository<ScoreLog, Long> { | |
12 | + @Query("SELECT s FROM ScoreLog s WHERE s.member = :member AND s.createdAt IN " + | |
13 | + "(SELECT MAX(s2.createdAt) FROM ScoreLog s2 WHERE s2.member = :member GROUP BY FUNCTION('date', s2.createdAt))") | |
14 | + List<ScoreLog> findLatestByMemberGroupedByDate(Member member); | |
15 | + | |
16 | + @Query("SELECT FUNCTION('date', s.createdAt) as date, " + | |
17 | + "AVG(s.focus) as avgFocus, AVG(s.expression) as avgExpression, AVG(s.understand) as avgUnderstand, " + | |
18 | + "AVG(s.word) as avgWord, AVG(s.sentence) as avgSentence, AVG(s.grammar) as avgGrammar " + | |
19 | + "FROM ScoreLog s WHERE s.member = :member GROUP BY FUNCTION('date', s.createdAt)") | |
20 | + List<Object[]> findDailyAverageScoresByMember(Member member); | |
21 | +} |
+++ src/main/java/com/example/educatback/model/repository/SentenceAbsorbRepository.java
... | ... | @@ -0,0 +1,13 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.CountryElement; | |
4 | +import com.example.educatback.model.entity.SentenceAbsorb; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +import java.util.Optional; | |
8 | + | |
9 | +public interface SentenceAbsorbRepository extends JpaRepository<SentenceAbsorb, Long> { | |
10 | + Optional<SentenceAbsorb> findByStudyId(Long studyId); | |
11 | + | |
12 | + Optional<SentenceAbsorb> findByStudyIdAndLevel(Long studyId, int level); | |
13 | +} |
+++ src/main/java/com/example/educatback/model/repository/SentenceAbsorbThreeRepository.java
... | ... | @@ -0,0 +1,8 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.CountryElement; | |
4 | +import com.example.educatback.model.entity.SentenceAbsorbThree; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +public interface SentenceAbsorbThreeRepository extends JpaRepository<SentenceAbsorbThree, Long> { | |
8 | +} |
+++ src/main/java/com/example/educatback/model/repository/SentenceDiaryRepository.java
... | ... | @@ -0,0 +1,10 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.SentenceDiary; | |
4 | +import org.springframework.data.jpa.repository.JpaRepository; | |
5 | + | |
6 | +import java.util.Optional; | |
7 | + | |
8 | +public interface SentenceDiaryRepository extends JpaRepository<SentenceDiary, Long> { | |
9 | + Optional<SentenceDiary> findByStudyId(Long studyId); | |
10 | +} |
+++ src/main/java/com/example/educatback/model/repository/SolvedRepository.java
... | ... | @@ -0,0 +1,12 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Solved; | |
4 | +import org.springframework.data.jpa.repository.JpaRepository; | |
5 | +import org.springframework.data.jpa.repository.Query; | |
6 | + | |
7 | +import java.util.List; | |
8 | + | |
9 | +public interface SolvedRepository extends JpaRepository<Solved, Long> { | |
10 | + @Query("SELECT s.study.studyType, COUNT(s) FROM Solved s GROUP BY s.study.studyType ORDER BY COUNT(s) DESC") | |
11 | + List<Object[]> findStudyTypeCount(); | |
12 | +} |
+++ src/main/java/com/example/educatback/model/repository/StudyRepository.java
... | ... | @@ -0,0 +1,17 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Member; | |
4 | +import com.example.educatback.model.entity.Study; | |
5 | +import com.example.educatback.model.entity.StudyType; | |
6 | +import org.springframework.data.jpa.repository.JpaRepository; | |
7 | +import org.springframework.data.repository.query.Param; | |
8 | + | |
9 | +import java.util.Optional; | |
10 | + | |
11 | +public interface StudyRepository extends JpaRepository<Study, Long> { | |
12 | + Optional<Study> findByGradeAndChapterAndLessonAndStudyType(@Param("grade") int grade, | |
13 | + @Param("chapter") int chapter, | |
14 | + @Param("lesson") int lesson, | |
15 | + @Param("studyType") StudyType studyType); | |
16 | + | |
17 | +} |
+++ src/main/java/com/example/educatback/model/repository/TravelRepository.java
... | ... | @@ -0,0 +1,13 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Study; | |
4 | +import com.example.educatback.model.entity.Travel; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +import java.util.Optional; | |
8 | + | |
9 | +public interface TravelRepository extends JpaRepository<Travel, Long> { | |
10 | + Optional<Travel> findByStudyId(Long studyId); | |
11 | + | |
12 | + Optional<Travel> findByStudyIdAndLevel(Long studyId, int level); | |
13 | +} |
+++ src/main/java/com/example/educatback/model/repository/TravelSlideRepository.java
... | ... | @@ -0,0 +1,8 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Study; | |
4 | +import com.example.educatback.model.entity.TravelSlide; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +public interface TravelSlideRepository extends JpaRepository<TravelSlide, Long> { | |
8 | +} |
+++ src/main/java/com/example/educatback/model/repository/TravelThreeRepository.java
... | ... | @@ -0,0 +1,8 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Study; | |
4 | +import com.example.educatback.model.entity.TravelThree; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +public interface TravelThreeRepository extends JpaRepository<TravelThree, Long> { | |
8 | +} |
+++ src/main/java/com/example/educatback/model/repository/WordAbsorbRepository.java
... | ... | @@ -0,0 +1,15 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Study; | |
4 | +import com.example.educatback.model.entity.WordAbsorb; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +import java.util.List; | |
8 | +import java.util.Optional; | |
9 | + | |
10 | +public interface WordAbsorbRepository extends JpaRepository<WordAbsorb, Long> { | |
11 | + List<WordAbsorb> findByStudyId(Long studyId); | |
12 | + Optional<WordAbsorb> findByStudy(Study study); | |
13 | + | |
14 | + Optional<WordAbsorb> findByStudyIdAndLevel(Long studyId, int level); | |
15 | +} |
+++ src/main/java/com/example/educatback/model/repository/WordAbsorbThreeRepository.java
... | ... | @@ -0,0 +1,8 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Study; | |
4 | +import com.example.educatback.model.entity.WordAbsorbThree; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +public interface WordAbsorbThreeRepository extends JpaRepository<WordAbsorbThree, Long> { | |
8 | +} |
+++ src/main/java/com/example/educatback/model/repository/WordBundleRepository.java
... | ... | @@ -0,0 +1,11 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Study; | |
4 | +import com.example.educatback.model.entity.WordBundle; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +import java.util.Optional; | |
8 | + | |
9 | +public interface WordBundleRepository extends JpaRepository<WordBundle, Long> { | |
10 | + Optional<WordBundle> findByStudyId(Long studyId); | |
11 | +} |
+++ src/main/java/com/example/educatback/model/repository/WorldRepository.java
... | ... | @@ -0,0 +1,13 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.Study; | |
4 | +import com.example.educatback.model.entity.World; | |
5 | +import org.springframework.data.jpa.repository.JpaRepository; | |
6 | + | |
7 | +import java.util.Optional; | |
8 | + | |
9 | +public interface WorldRepository extends JpaRepository<World, Long> { | |
10 | + Optional<World> findByStudyId(Long studyId); | |
11 | + | |
12 | + Optional<World> findByStudyIdAndLevel(Long studyId, int level); | |
13 | +} |
+++ src/main/java/com/example/educatback/model/repository/WorldThreeRepository.java
... | ... | @@ -0,0 +1,7 @@ |
1 | +package com.example.educatback.model.repository; | |
2 | + | |
3 | +import com.example.educatback.model.entity.WorldThree; | |
4 | +import org.springframework.data.jpa.repository.JpaRepository; | |
5 | + | |
6 | +public interface WorldThreeRepository extends JpaRepository<WorldThree, Long> { | |
7 | +} |
+++ src/main/resources/application.properties
... | ... | @@ -0,0 +1,19 @@ |
1 | +spring.application.name=educatBack | |
2 | +# db?? | |
3 | +spring.datasource.url=jdbc:mysql://210.180.118.83/edu_tech_test | |
4 | +spring.datasource.username=takensoft | |
5 | +spring.datasource.password=tts96314728!@ | |
6 | +` | |
7 | +# Hibernate ???? ??? ? ???? ????? ?? ????. | |
8 | +spring.jpa.hibernate.ddl-auto=update | |
9 | +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect | |
10 | + | |
11 | +# ???? sql? ?? | |
12 | +spring.jpa.show-sql=true | |
13 | +#sql? ?? ????. | |
14 | +spring.jpa.properties.hibernate.format_sql=true | |
15 | +logging.level.org.hibernate.SQL=DEBUG | |
16 | +logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE | |
17 | + | |
18 | +server.servlet.session.timeout=30m | |
19 | +server.servlet.session.cookie.max-age=30m(파일 끝에 줄바꿈 문자 없음) |
+++ src/test/java/com/example/educatback/EducatBackApplicationTests.java
... | ... | @@ -0,0 +1,13 @@ |
1 | +package com.example.educatback; | |
2 | + | |
3 | +import org.junit.jupiter.api.Test; | |
4 | +import org.springframework.boot.test.context.SpringBootTest; | |
5 | + | |
6 | +@SpringBootTest | |
7 | +class EducatBackApplicationTests { | |
8 | + | |
9 | + @Test | |
10 | + void contextLoads() { | |
11 | + } | |
12 | + | |
13 | +} |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?