Release v2023.1.33
Type-safe SQL
- Query types are instantly available as you type native SQL of any complexity in your Java code
- Schema types are automatically derived from your database, providing type-safe CRUD, decoupled TX, and more
- No ORM, No DSL, No wiring, and No code generation build steps
Tuple expressions
Tuple expressions provide concise syntax to group named data items in a lightweight structure.
var t = (name: "Bob", age: "35");
System.out.println("Name: " + t.name + " Age: " + t.age);
var t = (person.name, person.age);
System.out.println("Name: " + t.name + " Age: " + t.age);
Forwarding and True Delegation
Favor composition over inheritance. Use @link
and @part
for automatic interface implementation forwarding and delegation.
class MyClass implements MyInterface {
@link MyInterface myInterface; // transfers calls on MyInterface to myInterface
public MyClass(MyInterface myInterface) {
this.myInterface = myInterface; // dynamically configure behavior
}
// No need to implement MyInterface here, but you can override myInterface as needed
}
auto
type inference
auto
type inference for local vars, fields, and method return types- Enables multiple return values for methods
import manifold.ext.rt.api.auto;
var result = findMinMax(data);
System.out.println("Minimum: " + result.min + " Maximum: " + result.max);
auto findMinMax(int[] data) {
if(data == null || data.length == 0) return null;
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for(int i: data) {
if(i < min) min = i;
if(i > max) max = i;
}
return min, max;
}
Multidimensional index operator
Property inference on record types
Java 21 Support
IntelliJ IDEA & Android Studio plugin improvements
- Comprehensive support for all new features including type-safe SQL, forwarding & delegation, tuples, etc.
- Many performance improvements and bug fixes toward an improved user experience in the IDE
- Support IDEA Chinese Language Pack
Fixes & feature requests
#536: manifold-graphql: override java-graphql ParserOptions which are not applicable to compile-time use e.g., maxTokens
#535: Intellij plugin: suppress "non-final field 'x' in enum..." issues re @val
usage
#533: Intellij plugin: suppress false positive errors re manifold string templates
#532: Intellij plugin: string template processing is disabled in annotations due to wide usage of ${} templating in many annotation libraries
#531: Fix ProcessCanceledExceptions, forward exceptions directly during "slow operations" handling, esp. ProcessCanceledException
#529: Suppress error/warning messages in Chinese as well as English, translate/map message filters to Chinese (Simplified) Language Pack.
#528: Use private tags to execute "slow operations", centralize how/where these are executed
#525: Preprocessor: Enable IDE to use SymbolProviders according to module dependencies
#520: Provide error message when attempting to use a method ref for a method returning auto
, must use lambda in this case (for now)
#516: Fix NoClassDefFoundError: com/intellij/lang/java/parser/BasicStatementParser (affected IJ versions: 2023.2.2, 2023.2.3)
#497: IntelliJ plugin: Complete JDK 21 support
#495: IntelliJ plugin: Improve performance and stability of manifold fragments in IntelliJ
#494: IntelliJ plugin: Fix fragment error reporting
#489: Fix "cannot implement" interface error using delegation with @link
in JDK 21
#488: Fix tuple expr passed directly as argument to method (was broken in jdk 11+)
#483: Unintended behavior for manifold-prop annotation parameters
#479: Unintended behavior when using both manifold-delegation and manifold-props
#478: Support abstract enum methods with manifold-ext
#477: Field access from inside the class on a @set
field
#476: Fix issue with using annotation processors e.g., lombok, mixed with manifold
#474: Fix regression in 2023.1.15 where new fragment delimiters can interfere with string templates
#473: Change fragment delimiters
#471: Change return type to be compatible with SequencedCollection#reversed
#470: Support "short" runtime methods
#468: Avoid adding bootstrap block to sidecar classes
#467: IntelliJ plugin: support error/warning highlights in fragments (in prep for manifold-sql)
#466: IntelliJ plugin: Deprecated class usage results in compilation error in IntelliJ IDEA
#451: IntelliJ plugin: Invalid warning message re older manifold version in project than in intellij plugin
#449: Remedy a java symbol resolve issue where a field and an inner class share the same name
#446: Use MathContext.128 for big decimal division
#436: Fix mapstruct handling of default interface methods
#422: Fix self type bug with arrays
#423: Add support for forwarding and delegation
#421: IntelliJ plugin: auto, like var, should be highlighted as a keyword
#418: Compiling from IntelliJ can cause UnsupportedClassVersionError using the preprocessor and using pre-JDK 17
#417: Class cannot be converted Issue
#416: Unqualified static varargs extension method call results in compiler error
#414: Using JDK 17+ in preview mode + using an annotation processor causes NPE
#412: "Variable expected" error involving multidimensional index operator in assignment
#411: Intermittent "Incorrect CachedValue use" errors
#400: Support getter/setter extension methods as property access for manifold-props
#409: Intellij plugin: fix generic extension method type parameter inference regression
#408: Support Valhalla EA Jdk releases
#407: Fix compile error using latest JDK 20 EA release (build 28)
#406: IntelliJ plugin: "Incorrect CachedValue use:" errors reported with property and extension caching
#405: IntelliJ plugin: many issues in latest 2022.3 release with renaming files/elements, other related issues
#404: Using ReflectUtil with JDK 19 cannot set value on static final field on an interface
#403: Extension methods on inner classes not working in some cases
#402: IntelliJ plugin: Exception when using tuple expressions without adding manifold-tuple/manifold-tuple-rt
#396: Handle expression in foreach stmt where the expression type structurally implements Iterator and a class extension exists that makes Iterable structural
#395: Support property inference on record types
#394: Support EA release of JDK 20
#393: Java 17+: fix $ escape char for string templates
#392: Cast as raw generic type
#387: Tree is null for module-info file, do not process
#380: Fix regression involving fields as structurally equivalent to get/set methods
#382: Fix instanceof pattern matching issue related to parser changes in latest IntelliJ release
#376: Support an explicit typed variable having an implicit typed initializer expression
#375: Policy change: support only LTS versions of JDKs and the latest release
#373: New Feature: multiple return types via auto
and enhanced tuple expressions
#372: New Feature: type-safe tuple expressions
#371: New Feature: auto
type inference for local vars, fields, and method return types
#364: Add @Expires
annotation to prevent extension methods from duplicating JDK methods
#355: fix instanceof Pattern Matching within if-statement condition (Cannot Find Symbol)
#351: Increment/decrement operators on properties cause compiler exception in Java 11+
#349: Support non-public extension methods
#348: @ThisClass
extension method receiver, provides the calling class of static method
#345: Allow Jailbreak to work when casting