Skip to content

Commit

Permalink
Add more doc comments
Browse files Browse the repository at this point in the history
  • Loading branch information
heshanpadmasiri committed Jul 3, 2024
1 parent ee81c92 commit fb4e472
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 9 deletions.
6 changes: 2 additions & 4 deletions semtypes/src/main/java/io/ballerina/types/PredefinedType.java
Original file line number Diff line number Diff line change
Expand Up @@ -172,9 +172,7 @@ BT_CELL, bddAtom(ATOM_CELL_INNER_MAPPING_RO)
static final BddNode LIST_SUBTYPE_MAPPING_RO = bddAtom(ATOM_LIST_MAPPING_RO);

static final CellSemType CELL_SEMTYPE_VAL = (CellSemType) basicSubtype(BT_CELL, bddAtom(ATOM_CELL_VAL));
private static final CellSemType CELL_SEMTYPE_NEVER = (CellSemType) basicSubtype(BT_CELL, bddAtom(ATOM_CELL_NEVER));
static final CellSemType CELL_SEMTYPE_UNDEF = (CellSemType) basicSubtype(BT_CELL, bddAtom(ATOM_CELL_UNDEF));
// FIXME: index
private static final TypeAtom ATOM_CELL_OBJECT_MEMBER_KIND = predefinedTypeEnv.atomCellObjectMemberKind();
static final CellSemType CELL_SEMTYPE_OBJECT_MEMBER_KIND = (CellSemType) basicSubtype(
BT_CELL, bddAtom(ATOM_CELL_OBJECT_MEMBER_KIND)
Expand All @@ -199,9 +197,9 @@ BT_CELL, bddAtom(ATOM_CELL_OBJECT_MEMBER_VISIBILITY)
public static final TypeAtom ATOM_MAPPING_OBJECT = predefinedTypeEnv.atomMappingObject();
public static final BddNode MAPPING_SUBTYPE_OBJECT = bddAtom(ATOM_MAPPING_OBJECT);

public static final int BDD_REC_ATOM_OBJECT_READONLY = 1;
private static final int BDD_REC_ATOM_OBJECT_READONLY = 1;

public static final RecAtom OBJECT_RO_REC_ATOM = RecAtom.createRecAtom(BDD_REC_ATOM_OBJECT_READONLY);
private static final RecAtom OBJECT_RO_REC_ATOM = RecAtom.createRecAtom(BDD_REC_ATOM_OBJECT_READONLY);
static {
OBJECT_RO_REC_ATOM.setKind(Atom.Kind.MAPPING_ATOM);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -523,7 +523,8 @@ synchronized MappingAtomicType getMappingAtomicObjectRO() {
return mappingAtomicObjectRO;
}

void initializeEnv(Env env) {
// Due to some reason SpotBug thinks this method is overrideable if we don't put final here as well.
final void initializeEnv(Env env) {
fillRecAtoms(env.recListAtoms, initializedRecListAtoms);
fillRecAtoms(env.recMappingAtoms, initializedRecMappingAtoms);
initializedCellAtoms.forEach(each -> env.cellAtom(each.atomicType()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,27 @@ public final class ObjectDefinition implements Definition {

private final MappingDefinition mappingDefinition = new MappingDefinition();

// Each object type is represented as mapping type (with its basic type set to object) as fallows
// {
// "$qualifiers": {
// boolean isolated,
// "client"|"service" network
// },
// [field_name]: {
// "field"|"method" kind,
// "public"|"private" visibility,
// VAL value;
// }
// ...{
// "field" kind,
// "public"|"private" visibility,
// VAL value;
// } | {
// "method" kind,
// "public"|"private" visibility,
// FUNCTION value;
// }
// }
public SemType define(Env env, ObjectQualifiers qualifiers, Collection<Member> members) {
assert validataMembers(members); // This should never happen, so let's not run this in production
CellAtomicType.CellMutability mut = qualifiers.readonly() ? CellAtomicType.CellMutability.CELL_MUT_NONE :
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,16 @@
import static io.ballerina.types.SemTypes.union;
import static io.ballerina.types.subtypedata.CellSubtype.cellContaining;

/**
* Represent {@code object-type-quals} in the spec
*
* @param isolated is object isolated
* @param readonly represent {@code class readonly}. Note this is used to determining "rest" part of the object
* only {@code Member} types must be correctly set as intersection with readonly where
* applicable even with this set to true
* @param networkQualifier is object client, service or none
* @since 2201.10.0
*/
public record ObjectQualifiers(boolean isolated, boolean readonly, NetworkQualifier networkQualifier) {

private final static ObjectQualifiers DEFAULT = new ObjectQualifiers(false, false, NetworkQualifier.None);
Expand All @@ -53,17 +63,17 @@ public enum NetworkQualifier {
private static final SemType CLIENT_TAG = stringConst("client");
private static final Field CLIENT = new Field("network", CLIENT_TAG, true, false);

private static final SemType SERVER_TAG = stringConst("service");
private static final Field SERVER = new Field("network", SERVER_TAG, true, false);
private static final SemType SERVICE_TAG = stringConst("service");
private static final Field SERVICE = new Field("network", SERVICE_TAG, true, false);

// Object can't be both client and service, which is enforced by the enum. We are using a union here so that
// if this is none it matches both
private static final Field NONE = new Field("network", union(CLIENT_TAG, SERVER_TAG), true, false);
private static final Field NONE = new Field("network", union(CLIENT_TAG, SERVICE_TAG), true, false);

private Field field() {
return switch (this) {
case Client -> CLIENT;
case Service -> SERVER;
case Service -> SERVICE;
case None -> NONE;
};
}
Expand Down

0 comments on commit fb4e472

Please sign in to comment.