Code review comment: Can't we use `this` where the symbol table is needed instead of getting it from the context here? This doesn't have to be a global variable anyway, right?

Code before review:
private SymbolTable(CompilerContext context) {
context.put(SYM_TABLE_KEY, this);
this.names = Names.getInstance(context);
this.symbolTable = SymbolTable.getInstance(context);
this.rootPkgNode = (BLangPackage) TreeBuilder.createPackageNode();
this.rootPkgSymbol = new BPackageSymbol(PackageID.ANNOTATIONS, null, null, BUILTIN);
this.builtinPos = new BLangDiagnosticLocation(Names.EMPTY.value, -1, -1,
-1, -1);
this.rootPkgNode.pos = this.builtinPos;
this.rootPkgNode.symbol = this.rootPkgSymbol;
this.rootScope = new Scope(rootPkgSymbol);
this.rootPkgSymbol.scope = this.rootScope;
this.rootPkgSymbol.pos = this.builtinPos;
this.notFoundSymbol = new BSymbol(SymTag.NIL, Flags.PUBLIC, Names.INVALID, rootPkgSymbol.pkgID, noType,
rootPkgSymbol, builtinPos, SymbolOrigin.VIRTUAL);
initializeType(intType, TypeKind.INT.typeName(), BUILTIN);
initializeType(byteType, TypeKind.BYTE.typeName(), BUILTIN);
initializeType(floatType, TypeKind.FLOAT.typeName(), BUILTIN);
initializeType(decimalType, TypeKind.DECIMAL.typeName(), BUILTIN);
initializeType(stringType, TypeKind.STRING.typeName(), BUILTIN);
initializeType(booleanType, TypeKind.BOOLEAN.typeName(), BUILTIN);
initializeType(jsonType, TypeKind.JSON.typeName(), BUILTIN);
initializeType(xmlType, TypeKind.XML.typeName(), BUILTIN);
initializeType(streamType, TypeKind.STREAM.typeName(), BUILTIN);
initializeType(tableType, TypeKind.TABLE.typeName(), BUILTIN);
initializeType(mapType, TypeKind.MAP.typeName(), VIRTUAL);
initializeType(mapStringType, TypeKind.MAP.typeName(), VIRTUAL);
initializeType(mapAnydataType, TypeKind.MAP.typeName(), VIRTUAL);
initializeType(futureType, TypeKind.FUTURE.typeName(), BUILTIN);
initializeType(anyType, TypeKind.ANY.typeName(), BUILTIN);
initializeType(anydataType, TypeKind.ANYDATA.typeName(), BUILTIN);
initializeType(nilType, TypeKind.NIL.typeName(), BUILTIN);
initializeType(neverType, TypeKind.NEVER.typeName(), BUILTIN);
initializeType(handleType, TypeKind.HANDLE.typeName(), BUILTIN);
initializeType(typeDesc, TypeKind.TYPEDESC.typeName(), BUILTIN);
initializeType(readonlyType, TypeKind.READONLY.typeName(), BUILTIN);
initializeTSymbol(signed32IntType, Names.SIGNED32, PackageID.INT);
initializeTSymbol(signed16IntType, Names.SIGNED16, PackageID.INT);
initializeTSymbol(signed8IntType, Names.SIGNED8, PackageID.INT);
initializeTSymbol(unsigned32IntType, Names.UNSIGNED32, PackageID.INT);
initializeTSymbol(unsigned16IntType, Names.UNSIGNED16, PackageID.INT);
initializeTSymbol(unsigned8IntType, Names.UNSIGNED8, PackageID.INT);
initializeTSymbol(charStringType, Names.CHAR, PackageID.STRING);
initializeTSymbol(xmlElementType, Names.XML_ELEMENT, PackageID.XML);
initializeTSymbol(xmlPIType, Names.XML_PI, PackageID.XML);
initializeTSymbol(xmlCommentType, Names.XML_COMMENT, PackageID.XML);
initializeTSymbol(xmlTextType, Names.XML_TEXT, PackageID.XML);
BLangLiteral trueLiteral = new BLangLiteral();
trueLiteral.type = this.booleanType;
trueLiteral.value = Boolean.TRUE;
BTypeSymbol finiteTypeSymbol = Symbols.createTypeSymbol(SymTag.FINITE_TYPE, Flags.PUBLIC,
names.fromString("$anonType$TRUE"),
rootPkgNode.packageID, null, rootPkgNode.symbol.owner,
this.builtinPos, VIRTUAL);
this.trueType = new BFiniteType(finiteTypeSymbol, new HashSet<>() {{
add(trueLiteral);
}});
this.anyAndReadonly =
ImmutableTypeCloner.getImmutableIntersectionType((SelectivelyImmutableReferenceType) this.anyType,
this.symbolTable, names);
initializeType(this.anyAndReadonly, TypeKind.ANYANDREADONLY.typeName(), BUILTIN);
}

Line under review: this.symbolTable = SymbolTable.getInstance(context);

Code after addressing the review:
private SymbolTable(CompilerContext context) {
context.put(SYM_TABLE_KEY, this);
this.names = Names.getInstance(context);
this.rootPkgNode = (BLangPackage) TreeBuilder.createPackageNode();
this.rootPkgSymbol = new BPackageSymbol(PackageID.ANNOTATIONS, null, null, BUILTIN);
this.builtinPos = new BLangDiagnosticLocation(Names.EMPTY.value, -1, -1,
-1, -1);
this.rootPkgNode.pos = this.builtinPos;
this.rootPkgNode.symbol = this.rootPkgSymbol;
this.rootScope = new Scope(rootPkgSymbol);
this.rootPkgSymbol.scope = this.rootScope;
this.rootPkgSymbol.pos = this.builtinPos;
this.notFoundSymbol = new BSymbol(SymTag.NIL, Flags.PUBLIC, Names.INVALID, rootPkgSymbol.pkgID, noType,
rootPkgSymbol, builtinPos, SymbolOrigin.VIRTUAL);
initializeType(intType, TypeKind.INT.typeName(), BUILTIN);
initializeType(byteType, TypeKind.BYTE.typeName(), BUILTIN);
initializeType(floatType, TypeKind.FLOAT.typeName(), BUILTIN);
initializeType(decimalType, TypeKind.DECIMAL.typeName(), BUILTIN);
initializeType(stringType, TypeKind.STRING.typeName(), BUILTIN);
initializeType(booleanType, TypeKind.BOOLEAN.typeName(), BUILTIN);
initializeType(jsonType, TypeKind.JSON.typeName(), BUILTIN);
initializeType(xmlType, TypeKind.XML.typeName(), BUILTIN);
initializeType(streamType, TypeKind.STREAM.typeName(), BUILTIN);
initializeType(tableType, TypeKind.TABLE.typeName(), BUILTIN);
initializeType(mapType, TypeKind.MAP.typeName(), VIRTUAL);
initializeType(mapStringType, TypeKind.MAP.typeName(), VIRTUAL);
initializeType(mapAnydataType, TypeKind.MAP.typeName(), VIRTUAL);
initializeType(futureType, TypeKind.FUTURE.typeName(), BUILTIN);
initializeType(anyType, TypeKind.ANY.typeName(), BUILTIN);
initializeType(anydataType, TypeKind.ANYDATA.typeName(), BUILTIN);
initializeType(nilType, TypeKind.NIL.typeName(), BUILTIN);
initializeType(neverType, TypeKind.NEVER.typeName(), BUILTIN);
initializeType(handleType, TypeKind.HANDLE.typeName(), BUILTIN);
initializeType(typeDesc, TypeKind.TYPEDESC.typeName(), BUILTIN);
initializeType(readonlyType, TypeKind.READONLY.typeName(), BUILTIN);
initializeTSymbol(signed32IntType, Names.SIGNED32, PackageID.INT);
initializeTSymbol(signed16IntType, Names.SIGNED16, PackageID.INT);
initializeTSymbol(signed8IntType, Names.SIGNED8, PackageID.INT);
initializeTSymbol(unsigned32IntType, Names.UNSIGNED32, PackageID.INT);
initializeTSymbol(unsigned16IntType, Names.UNSIGNED16, PackageID.INT);
initializeTSymbol(unsigned8IntType, Names.UNSIGNED8, PackageID.INT);
initializeTSymbol(charStringType, Names.CHAR, PackageID.STRING);
initializeTSymbol(xmlElementType, Names.XML_ELEMENT, PackageID.XML);
initializeTSymbol(xmlPIType, Names.XML_PI, PackageID.XML);
initializeTSymbol(xmlCommentType, Names.XML_COMMENT, PackageID.XML);
initializeTSymbol(xmlTextType, Names.XML_TEXT, PackageID.XML);
BLangLiteral trueLiteral = new BLangLiteral();
trueLiteral.type = this.booleanType;
trueLiteral.value = Boolean.TRUE;
BTypeSymbol finiteTypeSymbol = Symbols.createTypeSymbol(SymTag.FINITE_TYPE, Flags.PUBLIC,
names.fromString("$anonType$TRUE"),
rootPkgNode.packageID, null, rootPkgNode.symbol.owner,
this.builtinPos, VIRTUAL);
this.trueType = new BFiniteType(finiteTypeSymbol, new HashSet<>() {{
add(trueLiteral);
}});
this.anyAndReadonly =
ImmutableTypeCloner.getImmutableIntersectionType((SelectivelyImmutableReferenceType) this.anyType,
this, names);
initializeType(this.anyAndReadonly, this.anyAndReadonly.effectiveType.name.getValue(), BUILTIN);
}