\def\xlstjavakwstyle{\xlstGetStyle{literals}}%
\def\xlstjavaannotations{\xlstGetStyle{comments}\itshape}%
\def\xlstjavaprintf#1{\xlstGet{keywordB}{#1}}
\lstdefinelanguage{lJava}{%
number suffixes={eEfFdDlL},
keywordstyle = [5]\xlstjavakwstyle, % for other literals :D
keywordstyle = [6]\xlstjavaannotations, % for annotations
sensitive, % we are case sensitive
deletekeywords = {<>\,},alsoletter={@_},alsoother={[]},
comment=[l]{//},
moredelim=**[is][{\xlsthlbox{xlstwarning}}]{|warn|}{|warn|},
moredelim=**[is][{\xlsthlboxd{\xlstcustom}}]{|custom|}{|custom|},
moredelim=[is][]{|plain|}{|plain|},
moredelim=[is][\xlstGetStyle{highlight}]{|ihl|}{|ihl|},
moredelim=**[is][\xlstGetStyle{numbers}]{|num|}{|num|},
moredelim=**[is][\xlstGetStyle{literals}]{|str|}{|str|},
moredelim=**[is][\xlstGetStyle{comments}]{|cmt|}{|cmt|},
moredelim=**[is][\itshape\bfseries]{|bhl|}{|bhl|},
morecomment  =[s]{/*}{*/},
morestring = [s]"", % maybe use d?
morestring = [s]'',
morekeywords = {abstract,public,private,protected,static,class,interface,@interface,final,const,instanceof,synchronized,native,null,transient,volatile,default,extends,implements,import,package,new,for,goto,if,else,try,switch,case,catch,finally,break,continue,label,return,throw,throws,while,enum,do,assert,record},
morekeywords = [2]{boolean,Boolean,byte,Byte,char,Char,%
    double,Double,float,Float,int,Integer,Character,%
    long,Long,short,Short,this,super,void,String,var},
morekeywords = [3]{System,Objects,Stream,List,Map,Queue,Deque,ArrayList,SingleLinkedList,SortedList,SortedSet,Set,HashMap,Tree,HashSet,FileReader,BufferedReader,InputStream,BufferedInputStream,BufferedOutputStream,OutputStream,FileInputStream,FileOutputStream,FileWriter,File,LocalDate,Node,DocumentBuilder,Document,NodeList,Transformer,SimpleDateFormat,ArrayIndexOutOfBoundsException,IndexOutOfBoundsException,ArithmeticException,Error,InternalError,NoSuchElementException,BufferOverflowException,%
TransformerFactory,StreamResult,StreamSource,DriverManager,Connection,Statement,ResultSet,PreparedStatement,Text,Font,Application,Leaf,Component,Composite,Runtime,ExecutorService,Math,Executors,LinkedList,Callable,Cloneable,ExecutionException,InterruptedException,TimeUnit,Future,Thread,Predicate,Function,Color,Scene,Pattern,Matcher,Event,Camera,EventHandler,EventListener,EventType,Observer,Observable,ObservableList,ObservableMap,ObservableArray,Button,Pos,%
Scanner,Arrays,Calendar,GregorianCalendar,Date,UUID,Point,Element,Circle,Rectangle,Richtung,Schiene,FileChooser,Worker,InputStreamReader,Task,Service,IntStream,PrintWriter,PrintStream,Socket,ServerSocket,Lebewesen,Student,Dozent,Mensch,AbstractList,Sortable,Comparable,Throwable,Drawable,Moveable,Consumeable,AtomicByte,AtomicShort,AtomicInteger,AtomicLong,AtomicFloat,AtomicDouble,AtomicReference,Random,Query,Persistence,Attributes,Files,Paths,Collectors,Collection,Iterable,Iterator,Object,EOFException,NullPointerException,ClassNotFoundException,IOException,XPathConstants,ParseException,SQLException,Exception,RuntimeException,Runnable,IllegalStateException,UnaryOperator,IllegalArgumentException,GenerationType,Assertions,Executable,Duration,Class,Method,Locale,Executor,RecursiveTask,RecursiveAction,ForkJoinPool,ForkJoinTask,ThreadPoolExecutor,CountDownLatch,CyclicBarrier,Phaser,Semaphore,Collections,CopyOnWriteArrayList,CopyOnWriteArraySet,ConcurrentSkipListSet,ConcurrentSkipListMap,ConcurrentLinkedQueue,ConcurrentHashMap,ConcurrentMap,SynchronousQueue,PriorityBlockingQueue,LinkedBlockingQueue,LinkedTransferQueue,DelayQueue,ArrayBlockingQueue,TransferQueue,BlockingQueue,BlockingDequeue,AbstractExecutorService,PriorityQueue,ConcurrentModificationException,CallerRunsPolicy,ReentrantLock,Vector,ByteVector,ShortVector,IntVector,LongVector,FloatVector,DoubleVector,VectorShape,VectorMask,VectorSpecies,AtomicStampedReference,AtomicMarkableReference,ActionEvent,Remote,UnicastRemoteObject,LocalRegistry,RemoteException,Naming,MarshalException,KafkaProducer,ProducerRecord,Properties,ConsumerRecord,KakfaConsumer,NegativeArraySizeException,InvalidParameterException},
morekeywords=[4]{EMPTY,MAX_VALUE,MIN_VALUE,IDENTITY},
morekeywords=[5]{true,false},
morekeywords=[6]{@Override,@NonNull,@Test,@TestAnnotation,@Target,@Retention,@Repeatable,@Deprecated,@Documented,@RetentionPolicy,@BeforeEach,@AfterEach,@BeforeAll,@AfterAll,@ParameterizedTest,@MethodSource,@Order,@TestMethodOrder,@ValueSource,@DisplayName,@Repeatedtest,@TestInstance,@Tag,@Nullable,@ToString,@Getter,@Setter,@EqualsAndHashCode,@Slf4j},
add to literate={\\u}{{\xlstGet{keywordB}{\textbackslash u}}}2 {\\n}{{\xlstGet{keywordB}{\textbackslash n}}}2 {\\r}{{\xlstGet{keywordB}{\textbackslash r}}}2 {\\t}{{\xlstGet{keywordB}{\textbackslash t}}}2 {\\0}{{\xlstGet{keywordB}{\textbackslash 0}}}2 {\\033[}{{\xlstGet{keywordB}{\textbackslash033[}}}4 {\\\\}{{\xlstGet{keywordB}{\textbackslash\textbackslash}}}2 {\%c}{{\xlstjavaprintf{\%c}}}2 {\%d}{{\xlstjavaprintf{\%d}}}2 {\%s}{{\xlstjavaprintf{\%s}}}2 {\%n}{{\xlstjavaprintf{\%n}}}2 {\%b}{{\xlstjavaprintf{\%b}}}2 {\\"}{{\xlstGet{keywordB}{\textbackslash\dq}}}2 {:_:}{{\xlstGet{numbers}{\_}}}1%
}

\RegisterLanguage{java}{lJava}