diff --git a/arkoala-arkts/arkui/src/sts/arkui.sts b/arkoala-arkts/arkui/src/sts/arkui.sts new file mode 100644 index 0000000000000000000000000000000000000000..1c2a9a8304cdc46537b642a1bd6a7d30c6a0c89a --- /dev/null +++ b/arkoala-arkts/arkui/src/sts/arkui.sts @@ -0,0 +1,64 @@ +// Annotations + +export @interface BuilderLambda { + value: string +} + +export @interface Component {} + +export @interface State {} + +export @interface memo {} + +// Imitation of CommonMethod +export interface CommonMethod { + width(value: number) +} + +export class StructBase { + //@BuilderLambda("instantiateImpl") + static $_instantiate, OptionsS> ( + factory: () => S, + options: OptionsS + ): S { + const instance = factory() + return instance + } + + static instantiateImpl, OptionsS>( + builder: (instance: S)=>S, + factory: () => S, + options: OptionsS + ) { + const instance = factory() + builder(instance) + } +} + +export interface ColumnOptions {} +export class ArkColumnComponent {} + +// An attempt to put down a component +export class Column { + @BuilderLambda("instantiateImpl") + @memo + static $_instantiate( + factory: () => Column, + options?: ColumnOptions, + content?: () => void + ): ArkColumnComponent { + return factory() + } + + @memo + static instantiateImpl( + @memo builder: (instance: ArkColumnComponent)=>ArkColumnComponent, + factory: () => Column, + options?: ColumnOptions, + @memo content?: () => void + ) { + + // ArkStruct(builder, factory, options, style) + } +} + diff --git a/arkoala-arkts/libarkts/examples/input/library.sts b/arkoala-arkts/libarkts/examples/input/library.sts new file mode 100644 index 0000000000000000000000000000000000000000..9d7a1f0e13cbef43c547d3047989555cab2c8ef0 --- /dev/null +++ b/arkoala-arkts/libarkts/examples/input/library.sts @@ -0,0 +1 @@ +export @interface Component {} diff --git a/arkoala-arkts/libarkts/examples/input/main.sts b/arkoala-arkts/libarkts/examples/input/main.sts index e26d1d1f527317ac34aa2a3b1248a9a6e0432ff7..2d248dd46e326706c990e6817f19b2fc921a12dc 100644 --- a/arkoala-arkts/libarkts/examples/input/main.sts +++ b/arkoala-arkts/libarkts/examples/input/main.sts @@ -1,10 +1,11 @@ +import { Component } from "./library" + /* Library code */ class StructBase {} @interface BuilderLambda { value: string } -@interface Component {} /* User code */ // @interface __Options_MyComponent {} diff --git a/arkoala-arkts/libarkts/examples/src/component-transformer.ts b/arkoala-arkts/libarkts/examples/src/component-transformer.ts index 4b4ed420bd6bf7aa9d67aa705a23a62b5b26f823..c90be1ffd77cec2cfea63a1124484324d8c0aca5 100644 --- a/arkoala-arkts/libarkts/examples/src/component-transformer.ts +++ b/arkoala-arkts/libarkts/examples/src/component-transformer.ts @@ -59,8 +59,8 @@ export class ComponentTransformer extends AbstractVisitor { node, [ // importDecl, - ...interfaceDeclarations, - ...node.statements + ...node.statements, + ...interfaceDeclarations ] ) } diff --git a/arkoala-arkts/user/arktsconfig-pure-sts.json b/arkoala-arkts/user/arktsconfig-pure-sts.json new file mode 100644 index 0000000000000000000000000000000000000000..ad58a8b95eadd5e7c56a393942b3c5d6ce586602 --- /dev/null +++ b/arkoala-arkts/user/arktsconfig-pure-sts.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "package": "@ohos.example", + "outDir": "build/sts/abc", + "baseUrl": ".", + "paths": { + "ohos.arkui": ["../arkui/src/sts/arkui.sts"] + }, + "plugins": [ + { + "transform": "../libarkts/examples/build/src/example-parsed-transformer.js", + "stage": "parsed" + }, + { + "transform": "../libarkts/examples/build/src/example-checked-transformer.js", + "stage": "checked" + } + ] + }, + "include": [ + "./src/ets/hello.sts" + ] +} diff --git a/arkoala-arkts/user/package.json b/arkoala-arkts/user/package.json index 9fced01c0d1383376af88cecc2bf642fe4cd6b57..5508f64ed1516d0e7607c671ef87819bbdffb6e8 100644 --- a/arkoala-arkts/user/package.json +++ b/arkoala-arkts/user/package.json @@ -13,7 +13,7 @@ "unmemoize:all": "npm run unmemoize:runtime && npm run unmemoize:arkui-no-common && npm run unmemoize:arkui-common && npm run unmemoize", "build:user": "npm run unmemoize:all && npm run build:user:inc", "build:user:inc": "fast-arktsc --input-files ./arktsconfig-run-unmemoized.json --output-dir ./build --compiler ../../incremental/tools/panda/arkts/arktsc --link-name user && ninja ${NINJA_OPTIONS} -f build/build.ninja", - + "build:user:pure-sts": "../../incremental/tools/panda/arkts/arktsc-capi --file src/sts/hello.sts --arktsconfig arktsconfig-pure-sts.json --output build/sts/abc/hello.abc --dump-plugin-ast", "pack": "npm run cli-tools:check && cd app && DEVECO_SDK_HOME=../../../arkoala/ohos-sdk/ohos-sdk ../command-line-tools/hvigor/bin/hvigorw --no-daemon --mode module -p product=default -p module=user@default assembleHar", "har-arm32": "npm run build:user && npm run --prefix ../../arkoala/ohos-sdk download && node scripts/build-har.mjs --name user --arch arm32 && npm run pack", "har-arm64": "npm run build:user && npm run --prefix ../../arkoala/ohos-sdk download && node scripts/build-har.mjs --name user --arch arm64 && npm run pack", diff --git a/arkoala-arkts/user/src/sts/hello.sts b/arkoala-arkts/user/src/sts/hello.sts new file mode 100644 index 0000000000000000000000000000000000000000..33bb8cbce1e2039eae549b93dcbccf9b72ef9277 --- /dev/null +++ b/arkoala-arkts/user/src/sts/hello.sts @@ -0,0 +1,28 @@ +import { Component } from "ohos.arkui" +import { StructBase } from "ohos.arkui" +import { Column, ColumnOptions } from "ohos.arkui" + +@Component +struct StsTestComponent { + build() { + // StsChildComponent() + StsChildComponent.$_instantiate( + ()=> new StsChildComponent(), + {} as __Options_StsChildComponent + ) + } +} + +@Component +struct StsChildComponent { + build() { + // Column() {} +/* + Column.$_instantiate( + () => new Column(), + {} as ColumnOptions, + ) {} +*/ + } +} +