Skip to content

Commit

Permalink
throw error on primary key set (#253)
Browse files Browse the repository at this point in the history
* throw error on primary key set

* relax final on collections

fix tests

* fix setters in generated constructor to use RealmObject.set directly

* fix generator tests

* run realm_dart tests on generator change.

test only on Linux

* fix working directory

* fix workflow

* fix coverage file path

* get submodule
  • Loading branch information
blagoev committed Feb 14, 2022
1 parent fbeb04b commit e9ef147
Show file tree
Hide file tree
Showing 7 changed files with 84 additions and 122 deletions.
8 changes: 2 additions & 6 deletions .github/workflows/realm-dart-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ on:

jobs:
CI:
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
env:
REALM_CI: true

Expand All @@ -37,14 +37,10 @@ jobs:
- name: Build Realm Dart for Linux
run: ./scripts/build-linux.sh

# Note: This workflow uses the latest stable version of the Dart SDK.
# You can specify other versions if desired, see documentation here:
# https://github.com/dart-lang/setup-dart/blob/main/README.md
# - uses: dart-lang/setup-dart@v1
- name : Setup Dart SDK
uses: dart-lang/setup-dart@main
with:
sdk: beta
sdk: stable

- name: Install dependencies
run: dart pub get
Expand Down
46 changes: 31 additions & 15 deletions .github/workflows/realm-generator.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,32 +14,46 @@ on:
- .github/workflows/realm-generator.yml

jobs:
Generator_CI:
runs-on: ${{ matrix.os }}

strategy:
matrix:
os: [ubuntu-latest, macos-latest] # windows is not tested ue to bug in how error messages are rendered
channel: [stable, beta]

defaults:
run:
working-directory: ./generator/
CI:
runs-on: ubuntu-latest
env:
REALM_CI: true

steps:
- name: Checkout
uses: actions/checkout@v2
with:
submodules: 'recursive'

- name : Setup Dart SDK
uses: dart-lang/setup-dart@main
with:
sdk: ${{ matrix.channel }}
sdk: stable

- name: Install dependencies
- name: Install generator dependencies
run: dart pub get
working-directory: ./generator/

- name: Run generator tests
run: dart test --reporter expanded --test-randomize-ordering-seed random --coverage ./coverage/
run: dart test --reporter expanded --coverage ./coverage/ --test-randomize-ordering-seed random
working-directory: ./generator/

- name: Install realm_dart dependencies
run: dart pub get

- name: Run generator in realm-dart repo
run: |
find . -name "*.g.dart" -delete
dart run build_runner build --delete-conflicting-outputs
- name: Setup Ninja
uses: seanmiddleditch/gha-setup-ninja@master

- name: Build Realm Dart for Linux
run: ./scripts/build-linux.sh

- name: Run realm_dart tests
run: dart test -r expanded --test-randomize-ordering-seed random

- name: Generate generator coverage report
run: |
Expand All @@ -50,16 +64,18 @@ jobs:
--lcov \
--packages .packages \
--report-on lib
working-directory: ./generator/

- name: Publish Generator Coverage
id: publish-generator-coverage
uses: coverallsapp/github-action@1.1.3
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
flag-name: realm_generator
path-to-lcov: ./coverage/lcov.info
path-to-lcov: ./generator/coverage/lcov.info
continue-on-error: true

- name: Output Coveralls response
if: ${{ success() }}
run: echo ${{ steps.publish-generator-coverage.outputs.coveralls-api-result }}
working-directory: ./generator/
9 changes: 0 additions & 9 deletions generator/lib/src/field_element_ex.dart
Original file line number Diff line number Diff line change
Expand Up @@ -185,15 +185,6 @@ extension FieldElementEx on FieldElement {
} else {
// Validate collections
if (type.isRealmCollection) {
if (!isFinal) {
throw RealmInvalidGenerationSourceError(
'Realm collection field must be final',
primarySpan: span,
primaryLabel: 'is not final',
todo: "Add a final keyword to the definition of '$displayName'",
element: this,
);
}
if (type.isNullable) {
throw RealmInvalidGenerationSourceError(
'Realm collections cannot be nullable',
Expand Down
7 changes: 5 additions & 2 deletions generator/lib/src/realm_field_info.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class RealmFieldInfo {
DartType get type => fieldElement.type;

bool get isFinal => fieldElement.isFinal;
bool get isRealmCollection => fieldElement.type.isRealmCollection;
bool get isLate => fieldElement.isLate;
bool get hasDefaultValue => fieldElement.hasInitializer;
bool get optional => type.isNullable;
Expand All @@ -60,11 +61,13 @@ class RealmFieldInfo {
Iterable<String> toCode() sync* {
yield '@override';
yield "$typeName get $name => RealmObject.get<$basicTypeName>(this, '$realmName') as $typeName;";
if (!isFinal) {
bool generateSetter = !isFinal && !primaryKey && !isRealmCollection;
if (generateSetter) {
yield '@override';
yield "set $name(${typeName != typeModelName ? 'covariant ' : ''}$typeName value) => RealmObject.set(this, '$realmName', value);";
} else {
if (isLate) { // we still need to override setter on late final, but just throw error!
bool generateThrowError = isLate || primaryKey || isRealmCollection;
if (generateThrowError) {
yield '@override';
yield "set $name(${typeName != typeModelName ? 'covariant ' : ''}$typeName value) => throw RealmUnsupportedSetError();";
}
Expand Down
5 changes: 1 addition & 4 deletions generator/lib/src/realm_model_info.dart
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,7 @@ class RealmModelInfo {
}

yield* allExceptCollections.map((f) {
if (f.isFinal) {
return "RealmObject.set(this, '${f.name}', ${f.name});"; // since no setter will be created!
}
return 'this.${f.name} = ${f.name};'; // defer to generated setter
return "RealmObject.set(this, '${f.name}', ${f.name});";
});

yield* collections.map((c) {
Expand Down

0 comments on commit e9ef147

Please sign in to comment.