Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

throw error on primary key set #253

Merged
merged 11 commits into from
Feb 14, 2022
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/
desistefanova marked this conversation as resolved.
Show resolved Hide resolved

- name: Run generator tests
run: dart test --reporter expanded --coverage ./coverage/
run: dart test --reporter expanded --coverage ./coverage/ --test-randomize-ordering-seed random
working-directory: ./generator/
desistefanova marked this conversation as resolved.
Show resolved Hide resolved

- 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
desistefanova marked this conversation as resolved.
Show resolved Hide resolved
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});";
desistefanova marked this conversation as resolved.
Show resolved Hide resolved
});

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