Motivation:
Package org.graalvm.collections is used throughout the Pkl codebase. It is most heavily used in the Truffle interpreter, which requires putting most collection methods behind @TruffleBoundary. At the moment, this is done by wrapping collection methods with static methods declared in classes EconomicMaps and EconomicSets. However, static wrapper methods are inconvenient to use, decrease code readability, add some overhead, and are easy to forget about.
Changes:
vendor package org.graalvm.collections into org.pkl.core.collection
org.graalvm.collections is licensed under: The Universal Permissive License (UPL), Version 1.0
annotate most public methods with @TruffleBoundary
add @Nullable annotations
switching to JSpecify will enable more accurate nullability checks
remove prefix tree classes (not used in Pkl)
make no other code changes to simplify review/updates
inline and remove EconomicMaps/Sets wrapper methods
replace usages of EconomicMaps.equals/hashCode with EconomicMapUtil.equals/hashCode
fix ProjectDeps.hashCode()
Result:
Cleaner, safer, and more efficient code.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/apple/pkl/pull/795
**Author:** [@odenix](https://github.com/odenix)
**Created:** 11/10/2024
**Status:** 🔄 Open
**Base:** `main` ← **Head:** `vendor-collections`
---
### 📝 Commits (1)
- [`7a12edd`](https://github.com/apple/pkl/commit/7a12edd8d724fc36d69331ab529f097dce1ba2d5) Vendor org.graalvm.collections
### 📊 Changes
**63 files changed** (+2608 additions, -492 deletions)
<details>
<summary>View changed files</summary>
📝 `pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java` (+12 -13)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorElementNode.java` (+1 -2)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorEntryNode.java` (+1 -2)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorMemberNode.java` (+3 -4)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorPredicateMemberNode.java` (+5 -6)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorPropertyNode.java` (+1 -2)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorSpreadNode.java` (+7 -8)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/generator/WriteForVariablesNode.java` (+2 -3)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/literal/AmendModuleNode.java` (+1 -1)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/literal/ConstantEntriesLiteralNode.java` (+1 -1)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/literal/ElementsEntriesLiteralNode.java` (+6 -6)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/literal/ElementsLiteralNode.java` (+5 -6)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/literal/EntriesLiteralNode.java` (+7 -10)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/literal/PropertiesLiteralNode.java` (+1 -1)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/literal/SpecializedObjectLiteralNode.java` (+9 -10)
📝 `pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ReadGlobNode.java` (+1 -1)
📝 `pkl-core/src/main/java/org/pkl/core/ast/member/ClassNode.java` (+1 -1)
📝 `pkl-core/src/main/java/org/pkl/core/ast/type/TypeNode.java` (+9 -9)
➕ `pkl-core/src/main/java/org/pkl/core/collection/EconomicMap.java` (+275 -0)
➕ `pkl-core/src/main/java/org/pkl/core/collection/EconomicMapImpl.java` (+869 -0)
_...and 43 more files_
</details>
### 📄 Description
Motivation:
Package org.graalvm.collections is used throughout the Pkl codebase. It is most heavily used in the Truffle interpreter, which requires putting most collection methods behind @TruffleBoundary. At the moment, this is done by wrapping collection methods with static methods declared in classes EconomicMaps and EconomicSets. However, static wrapper methods are inconvenient to use, decrease code readability, add some overhead, and are easy to forget about.
Changes:
- vendor package org.graalvm.collections into org.pkl.core.collection
- org.graalvm.collections is licensed under: The Universal Permissive License (UPL), Version 1.0
- vendored version: https://github.com/oracle/graal/tree/graal-23.0.3/sdk/src/org.graalvm.collections/src/org/graalvm/collections
- add package-info.java with original license
- annotate most public methods with `@TruffleBoundary`
- add `@Nullable` annotations
- switching to JSpecify will enable more accurate nullability checks
- remove prefix tree classes (not used in Pkl)
- make no other code changes to simplify review/updates
- inline and remove EconomicMaps/Sets wrapper methods
- replace usages of EconomicMaps.equals/hashCode with EconomicMapUtil.equals/hashCode
- fix ProjectDeps.hashCode()
Result:
Cleaner, safer, and more efficient code.
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/apple/pkl/pull/795
Author: @odenix
Created: 11/10/2024
Status: 🔄 Open
Base:
main← Head:vendor-collections📝 Commits (1)
7a12eddVendor org.graalvm.collections📊 Changes
63 files changed (+2608 additions, -492 deletions)
View changed files
📝
pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java(+12 -13)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorElementNode.java(+1 -2)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorEntryNode.java(+1 -2)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorMemberNode.java(+3 -4)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorPredicateMemberNode.java(+5 -6)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorPropertyNode.java(+1 -2)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorSpreadNode.java(+7 -8)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/generator/WriteForVariablesNode.java(+2 -3)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/literal/AmendModuleNode.java(+1 -1)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/literal/ConstantEntriesLiteralNode.java(+1 -1)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/literal/ElementsEntriesLiteralNode.java(+6 -6)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/literal/ElementsLiteralNode.java(+5 -6)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/literal/EntriesLiteralNode.java(+7 -10)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/literal/PropertiesLiteralNode.java(+1 -1)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/literal/SpecializedObjectLiteralNode.java(+9 -10)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ReadGlobNode.java(+1 -1)📝
pkl-core/src/main/java/org/pkl/core/ast/member/ClassNode.java(+1 -1)📝
pkl-core/src/main/java/org/pkl/core/ast/type/TypeNode.java(+9 -9)➕
pkl-core/src/main/java/org/pkl/core/collection/EconomicMap.java(+275 -0)➕
pkl-core/src/main/java/org/pkl/core/collection/EconomicMapImpl.java(+869 -0)...and 43 more files
📄 Description
Motivation:
Package org.graalvm.collections is used throughout the Pkl codebase. It is most heavily used in the Truffle interpreter, which requires putting most collection methods behind @TruffleBoundary. At the moment, this is done by wrapping collection methods with static methods declared in classes EconomicMaps and EconomicSets. However, static wrapper methods are inconvenient to use, decrease code readability, add some overhead, and are easy to forget about.
Changes:
@TruffleBoundary@NullableannotationsResult:
Cleaner, safer, and more efficient code.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.