public class com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser extends com.datastax.oss.driver.internal.core.metadata.schema.parsing.RelationParser
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser
super_class: com.datastax.oss.driver.internal.core.metadata.schema.parsing.RelationParser
{
private static final org.slf4j.Logger LOG;
descriptor: Lorg/slf4j/Logger;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=1, locals=0, args_size=0
0: ldc Lcom/datastax/oss/driver/internal/core/metadata/schema/parsing/ViewParser;
invokestatic org.slf4j.LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
putstatic com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser.LOG:Lorg/slf4j/Logger;
return
LocalVariableTable:
Start End Slot Name Signature
public void <init>(com.datastax.oss.driver.internal.core.metadata.schema.queries.SchemaRows, com.datastax.oss.driver.internal.core.context.InternalDriverContext);
descriptor: (Lcom/datastax/oss/driver/internal/core/metadata/schema/queries/SchemaRows;Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 0
aload 1
aload 2
invokespecial com.datastax.oss.driver.internal.core.metadata.schema.parsing.RelationParser.<init>:(Lcom/datastax/oss/driver/internal/core/metadata/schema/queries/SchemaRows;Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;)V
1: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lcom/datastax/oss/driver/internal/core/metadata/schema/parsing/ViewParser;
0 2 1 rows Lcom/datastax/oss/driver/internal/core/metadata/schema/queries/SchemaRows;
0 2 2 context Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
MethodParameters:
Name Flags
rows
context
public com.datastax.oss.driver.api.core.metadata.schema.ViewMetadata parseView(com.datastax.oss.driver.internal.core.adminrequest.AdminRow, com.datastax.oss.driver.api.core.CqlIdentifier, java.util.Map<com.datastax.oss.driver.api.core.CqlIdentifier, com.datastax.oss.driver.api.core.type.UserDefinedType>);
descriptor: (Lcom/datastax/oss/driver/internal/core/adminrequest/AdminRow;Lcom/datastax/oss/driver/api/core/CqlIdentifier;Ljava/util/Map;)Lcom/datastax/oss/driver/api/core/metadata/schema/ViewMetadata;
flags: (0x0001) ACC_PUBLIC
Code:
stack=12, locals=18, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 1
ldc "view_name"
invokevirtual com.datastax.oss.driver.internal.core.adminrequest.AdminRow.getString:(Ljava/lang/String;)Ljava/lang/String;
invokestatic com.datastax.oss.driver.api.core.CqlIdentifier.fromInternal:(Ljava/lang/String;)Lcom/datastax/oss/driver/api/core/CqlIdentifier;
astore 4
start local 4 1: aload 1
ldc "id"
invokevirtual com.datastax.oss.driver.internal.core.adminrequest.AdminRow.getUuid:(Ljava/lang/String;)Ljava/util/UUID;
astore 5
start local 5 2: aload 1
ldc "base_table_name"
invokevirtual com.datastax.oss.driver.internal.core.adminrequest.AdminRow.getString:(Ljava/lang/String;)Ljava/lang/String;
invokestatic com.datastax.oss.driver.api.core.CqlIdentifier.fromInternal:(Ljava/lang/String;)Lcom/datastax/oss/driver/api/core/CqlIdentifier;
astore 6
start local 6 3: aload 1
ldc "include_all_columns"
invokevirtual com.datastax.oss.driver.internal.core.adminrequest.AdminRow.getBoolean:(Ljava/lang/String;)Ljava/lang/Boolean;
iconst_0
invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
invokestatic com.datastax.oss.driver.shaded.guava.common.base.MoreObjects.firstNonNull:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
checkcast java.lang.Boolean
invokevirtual java.lang.Boolean.booleanValue:()Z
4: istore 7
start local 7 5: aload 1
ldc "where_clause"
invokevirtual com.datastax.oss.driver.internal.core.adminrequest.AdminRow.getString:(Ljava/lang/String;)Ljava/lang/String;
astore 8
start local 8 6: aload 0
getfield com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser.rows:Lcom/datastax/oss/driver/internal/core/metadata/schema/queries/SchemaRows;
invokeinterface com.datastax.oss.driver.internal.core.metadata.schema.queries.SchemaRows.columns:()Ljava/util/Map;
aload 2
invokestatic com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMultimap.of:()Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableMultimap;
invokeinterface java.util.Map.getOrDefault:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
checkcast com.datastax.oss.driver.shaded.guava.common.collect.Multimap
aload 4
invokeinterface com.datastax.oss.driver.shaded.guava.common.collect.Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
7: invokestatic com.datastax.oss.driver.internal.core.metadata.schema.parsing.RawColumn.toRawColumns:(Ljava/util/Collection;)Ljava/util/List;
8: astore 9
start local 9 9: aload 9
invokeinterface java.util.List.isEmpty:()Z
ifeq 17
10: getstatic com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser.LOG:Lorg/slf4j/Logger;
11: ldc "[{}] Processing VIEW refresh for {}.{} but found no matching rows, skipping"
iconst_3
anewarray java.lang.Object
dup
iconst_0
12: aload 0
getfield com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser.logPrefix:Ljava/lang/String;
aastore
dup
iconst_1
13: aload 2
aastore
dup
iconst_2
14: aload 4
aastore
15: invokeinterface org.slf4j.Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
16: aconst_null
areturn
17: StackMap locals: com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser com.datastax.oss.driver.internal.core.adminrequest.AdminRow com.datastax.oss.driver.api.core.CqlIdentifier java.util.Map com.datastax.oss.driver.api.core.CqlIdentifier java.util.UUID com.datastax.oss.driver.api.core.CqlIdentifier int java.lang.String java.util.List
StackMap stack:
aload 9
invokestatic java.util.Collections.sort:(Ljava/util/List;)V
18: invokestatic com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap.builder:()Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableMap$Builder;
astore 10
start local 10 19: invokestatic com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList.builder:()Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableList$Builder;
astore 11
start local 11 20: invokestatic com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap.builder:()Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableMap$Builder;
21: astore 12
start local 12 22: aload 9
invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
astore 14
goto 39
StackMap locals: com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser com.datastax.oss.driver.internal.core.adminrequest.AdminRow com.datastax.oss.driver.api.core.CqlIdentifier java.util.Map com.datastax.oss.driver.api.core.CqlIdentifier java.util.UUID com.datastax.oss.driver.api.core.CqlIdentifier int java.lang.String java.util.List com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder top java.util.Iterator
StackMap stack:
23: aload 14
invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
checkcast com.datastax.oss.driver.internal.core.metadata.schema.parsing.RawColumn
astore 13
start local 13 24: aload 0
getfield com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser.rows:Lcom/datastax/oss/driver/internal/core/metadata/schema/queries/SchemaRows;
invokeinterface com.datastax.oss.driver.internal.core.metadata.schema.queries.SchemaRows.dataTypeParser:()Lcom/datastax/oss/driver/internal/core/metadata/schema/parsing/DataTypeParser;
aload 2
aload 13
getfield com.datastax.oss.driver.internal.core.metadata.schema.parsing.RawColumn.dataType:Ljava/lang/String;
aload 3
aload 0
getfield com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser.context:Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
invokeinterface com.datastax.oss.driver.internal.core.metadata.schema.parsing.DataTypeParser.parse:(Lcom/datastax/oss/driver/api/core/CqlIdentifier;Ljava/lang/String;Ljava/util/Map;Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;)Lcom/datastax/oss/driver/api/core/type/DataType;
astore 15
start local 15 25: new com.datastax.oss.driver.internal.core.metadata.schema.DefaultColumnMetadata
dup
26: aload 2
aload 4
aload 13
getfield com.datastax.oss.driver.internal.core.metadata.schema.parsing.RawColumn.name:Lcom/datastax/oss/driver/api/core/CqlIdentifier;
aload 15
aload 13
getfield com.datastax.oss.driver.internal.core.metadata.schema.parsing.RawColumn.kind:Ljava/lang/String;
ldc "static"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
27: invokespecial com.datastax.oss.driver.internal.core.metadata.schema.DefaultColumnMetadata.<init>:(Lcom/datastax/oss/driver/api/core/CqlIdentifier;Lcom/datastax/oss/driver/api/core/CqlIdentifier;Lcom/datastax/oss/driver/api/core/CqlIdentifier;Lcom/datastax/oss/driver/api/core/type/DataType;Z)V
28: astore 16
start local 16 29: aload 13
getfield com.datastax.oss.driver.internal.core.metadata.schema.parsing.RawColumn.kind:Ljava/lang/String;
dup
astore 17
invokevirtual java.lang.String.hashCode:()I
lookupswitch { // 2
-1695655030: 30
240290728: 31
default: 38
}
StackMap locals: com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser com.datastax.oss.driver.internal.core.adminrequest.AdminRow com.datastax.oss.driver.api.core.CqlIdentifier java.util.Map com.datastax.oss.driver.api.core.CqlIdentifier java.util.UUID com.datastax.oss.driver.api.core.CqlIdentifier int java.lang.String java.util.List com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder com.datastax.oss.driver.internal.core.metadata.schema.parsing.RawColumn java.util.Iterator com.datastax.oss.driver.api.core.type.DataType com.datastax.oss.driver.api.core.metadata.schema.ColumnMetadata java.lang.String
StackMap stack:
30: aload 17
ldc "partition_key"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifne 32
goto 38
StackMap locals:
StackMap stack:
31: aload 17
ldc "clustering"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifne 34
goto 38
32: StackMap locals:
StackMap stack:
aload 11
aload 16
invokevirtual com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder.add:(Ljava/lang/Object;)Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableList$Builder;
pop
33: goto 38
34: StackMap locals:
StackMap stack:
aload 12
35: aload 16
aload 13
getfield com.datastax.oss.driver.internal.core.metadata.schema.parsing.RawColumn.reversed:Z
ifeq 36
getstatic com.datastax.oss.driver.api.core.metadata.schema.ClusteringOrder.DESC:Lcom/datastax/oss/driver/api/core/metadata/schema/ClusteringOrder;
goto 37
StackMap locals: com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser com.datastax.oss.driver.internal.core.adminrequest.AdminRow com.datastax.oss.driver.api.core.CqlIdentifier java.util.Map com.datastax.oss.driver.api.core.CqlIdentifier java.util.UUID com.datastax.oss.driver.api.core.CqlIdentifier int java.lang.String java.util.List com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder com.datastax.oss.driver.internal.core.metadata.schema.parsing.RawColumn java.util.Iterator com.datastax.oss.driver.api.core.type.DataType com.datastax.oss.driver.api.core.metadata.schema.ColumnMetadata java.lang.String
StackMap stack: com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder com.datastax.oss.driver.api.core.metadata.schema.ColumnMetadata
36: getstatic com.datastax.oss.driver.api.core.metadata.schema.ClusteringOrder.ASC:Lcom/datastax/oss/driver/api/core/metadata/schema/ClusteringOrder;
37: StackMap locals: com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser com.datastax.oss.driver.internal.core.adminrequest.AdminRow com.datastax.oss.driver.api.core.CqlIdentifier java.util.Map com.datastax.oss.driver.api.core.CqlIdentifier java.util.UUID com.datastax.oss.driver.api.core.CqlIdentifier int java.lang.String java.util.List com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder com.datastax.oss.driver.internal.core.metadata.schema.parsing.RawColumn java.util.Iterator com.datastax.oss.driver.api.core.type.DataType com.datastax.oss.driver.api.core.metadata.schema.ColumnMetadata java.lang.String
StackMap stack: com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder com.datastax.oss.driver.api.core.metadata.schema.ColumnMetadata com.datastax.oss.driver.api.core.metadata.schema.ClusteringOrder
invokevirtual com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder.put:(Ljava/lang/Object;Ljava/lang/Object;)Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableMap$Builder;
pop
38: StackMap locals:
StackMap stack:
aload 10
aload 16
invokeinterface com.datastax.oss.driver.api.core.metadata.schema.ColumnMetadata.getName:()Lcom/datastax/oss/driver/api/core/CqlIdentifier;
aload 16
invokevirtual com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder.put:(Ljava/lang/Object;Ljava/lang/Object;)Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableMap$Builder;
pop
end local 16 end local 15 end local 13 39: StackMap locals: com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser com.datastax.oss.driver.internal.core.adminrequest.AdminRow com.datastax.oss.driver.api.core.CqlIdentifier java.util.Map com.datastax.oss.driver.api.core.CqlIdentifier java.util.UUID com.datastax.oss.driver.api.core.CqlIdentifier int java.lang.String java.util.List com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder top java.util.Iterator
StackMap stack:
aload 14
invokeinterface java.util.Iterator.hasNext:()Z
ifne 23
40: aload 0
aload 1
invokevirtual com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser.parseOptions:(Lcom/datastax/oss/driver/internal/core/adminrequest/AdminRow;)Ljava/util/Map;
astore 13
start local 13 41: goto 51
end local 13 StackMap locals: com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser com.datastax.oss.driver.internal.core.adminrequest.AdminRow com.datastax.oss.driver.api.core.CqlIdentifier java.util.Map com.datastax.oss.driver.api.core.CqlIdentifier java.util.UUID com.datastax.oss.driver.api.core.CqlIdentifier int java.lang.String java.util.List com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder
StackMap stack: java.lang.Exception
42: astore 14
start local 14 43: getstatic com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser.LOG:Lorg/slf4j/Logger;
44: ldc "[{}] Error while parsing options for {}.{}, getOptions() will be empty"
iconst_4
anewarray java.lang.Object
dup
iconst_0
45: aload 0
getfield com.datastax.oss.driver.internal.core.metadata.schema.parsing.ViewParser.logPrefix:Ljava/lang/String;
aastore
dup
iconst_1
46: aload 2
aastore
dup
iconst_2
47: aload 4
aastore
dup
iconst_3
48: aload 14
aastore
49: invokestatic com.datastax.oss.driver.internal.core.util.Loggers.warnWithException:(Lorg/slf4j/Logger;Ljava/lang/String;[Ljava/lang/Object;)V
50: invokestatic java.util.Collections.emptyMap:()Ljava/util/Map;
astore 13
end local 14 start local 13 51: StackMap locals: java.util.Map
StackMap stack:
new com.datastax.oss.driver.internal.core.metadata.schema.DefaultViewMetadata
dup
52: aload 2
53: aload 4
54: aload 6
55: iload 7
56: aload 8
57: aload 5
58: aload 11
invokevirtual com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder.build:()Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableList;
59: aload 12
invokevirtual com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder.build:()Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableMap;
60: aload 10
invokevirtual com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder.build:()Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableMap;
61: aload 13
62: invokespecial com.datastax.oss.driver.internal.core.metadata.schema.DefaultViewMetadata.<init>:(Lcom/datastax/oss/driver/api/core/CqlIdentifier;Lcom/datastax/oss/driver/api/core/CqlIdentifier;Lcom/datastax/oss/driver/api/core/CqlIdentifier;ZLjava/lang/String;Ljava/util/UUID;Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableList;Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableMap;Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableMap;Ljava/util/Map;)V
areturn
end local 13 end local 12 end local 11 end local 10 end local 9 end local 8 end local 7 end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 63 0 this Lcom/datastax/oss/driver/internal/core/metadata/schema/parsing/ViewParser;
0 63 1 viewRow Lcom/datastax/oss/driver/internal/core/adminrequest/AdminRow;
0 63 2 keyspaceId Lcom/datastax/oss/driver/api/core/CqlIdentifier;
0 63 3 userTypes Ljava/util/Map<Lcom/datastax/oss/driver/api/core/CqlIdentifier;Lcom/datastax/oss/driver/api/core/type/UserDefinedType;>;
1 63 4 viewId Lcom/datastax/oss/driver/api/core/CqlIdentifier;
2 63 5 uuid Ljava/util/UUID;
3 63 6 baseTableId Lcom/datastax/oss/driver/api/core/CqlIdentifier;
5 63 7 includesAllColumns Z
6 63 8 whereClause Ljava/lang/String;
9 63 9 rawColumns Ljava/util/List<Lcom/datastax/oss/driver/internal/core/metadata/schema/parsing/RawColumn;>;
19 63 10 allColumnsBuilder Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableMap$Builder<Lcom/datastax/oss/driver/api/core/CqlIdentifier;Lcom/datastax/oss/driver/api/core/metadata/schema/ColumnMetadata;>;
20 63 11 partitionKeyBuilder Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableList$Builder<Lcom/datastax/oss/driver/api/core/metadata/schema/ColumnMetadata;>;
22 63 12 clusteringColumnsBuilder Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableMap$Builder<Lcom/datastax/oss/driver/api/core/metadata/schema/ColumnMetadata;Lcom/datastax/oss/driver/api/core/metadata/schema/ClusteringOrder;>;
24 39 13 raw Lcom/datastax/oss/driver/internal/core/metadata/schema/parsing/RawColumn;
25 39 15 dataType Lcom/datastax/oss/driver/api/core/type/DataType;
29 39 16 column Lcom/datastax/oss/driver/api/core/metadata/schema/ColumnMetadata;
41 42 13 options Ljava/util/Map<Lcom/datastax/oss/driver/api/core/CqlIdentifier;Ljava/lang/Object;>;
51 63 13 options Ljava/util/Map<Lcom/datastax/oss/driver/api/core/CqlIdentifier;Ljava/lang/Object;>;
43 51 14 e Ljava/lang/Exception;
Exception table:
from to target type
40 41 42 Class java.lang.Exception
Signature: (Lcom/datastax/oss/driver/internal/core/adminrequest/AdminRow;Lcom/datastax/oss/driver/api/core/CqlIdentifier;Ljava/util/Map<Lcom/datastax/oss/driver/api/core/CqlIdentifier;Lcom/datastax/oss/driver/api/core/type/UserDefinedType;>;)Lcom/datastax/oss/driver/api/core/metadata/schema/ViewMetadata;
MethodParameters:
Name Flags
viewRow
keyspaceId
userTypes
}
SourceFile: "ViewParser.java"
InnerClasses:
public final Builder = com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder of com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList
public Builder = com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder of com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap
RuntimeVisibleAnnotations:
net.jcip.annotations.ThreadSafe()