Skip to content

Latest commit

 

History

History
executable file
·
2227 lines (1628 loc) · 66.8 KB

ChangeLog.md

File metadata and controls

executable file
·
2227 lines (1628 loc) · 66.8 KB

XP Framework Core ChangeLog

?.?.? / ????-??-??

Features

  • Merged PR #345: Support passing floating point numbers to constructor, setting microseconds for util.Date instances. (@thekid)

12.1.0 / 2024-06-23

Features

  • Merged PR #344: Add io.streams.StreamTransfer::transmit() which yields control after each chunk (@thekid)
  • Merged PR #343: Implement a limited in-memory buffer with filesystem overflow: io.streams.Buffer. See also xp-forge/web#118 (@thekid)

12.0.1 / 2024-03-24

Bugfixes

  • Fixed lang.ClassLoader::defineType() to generate correctly typed method forwards for methods with explicitely nullable types. (@thekid)

12.0.0 / 2024-03-23

This major release adopts more PHP 8 semantics, getting rid of the XP annotation syntax with @ and deprecating implicitely nullable types. This is the last major release to support PHP 7, and only does so for its newest version.

Heads up!

  • Removed deprecated Mersenne Twister algorithm from util.Random, see https://wiki.php.net/rfc/deprecations_php_8_3#global_mersenne_twister (@thekid)
  • Removed the deprecated resolve() method from lang.Process. Use lang.CommandLine::resolve() instead! (@thekid)
  • Removed Proxy and InvocationHandler from the lang.reflect package, and AbstractDeferredInvokationHandler from util. See PR #341 (@thekid)

RFCs

  • Implemented xp-framework/rfc#342: Extract compression streams, removing the implementing classes from io.streams. See PR #342. (@thekid)
  • Implemented xp-framework/rfc#336, part 2: Remove XP annotations syntax, which was deprecated in XP 11, released October 2021. See PR #340. (@thekid)
  • Implemented xp-framework/rfc#343, part 1: Drop support for all but the latest PHP 7 release. The minimum required PHP version is now 7.4! (@thekid)

Features

  • Synchronized mime types list with most recent jshttp/mime-db - @thekid
  • Merged PR #338: Set default character set for property files to utf-8 (@thekid)

Bugfixes

11.9.0 / 2024-03-16

Features

  • Removed PHP 5 specific exception handling from lang.Throwable::wrap() (@thekid)
  • Suppressed implicitly nullable parameter types deprecation warning as there is no way of fixing these syntactically as long as we support PHP 7.0. See issue #336 and xp-framework/rfc#343 (@thekid)

11.8.3 / 2023-10-08

Bugfixes

  • Merged PR #335: Fix removing directories with symlinks inside - @thekid

11.8.2 / 2023-07-22

Bugfixes

  • Merged PR #334: Store original attribute names in DETAIL_TARGET_ANNO. This fixes a problem when using old and new reflection libraries in conjunction (@thekid)

11.8.1 / 2023-06-26

Bugfixes

  • Fixed issue #333: Class "lang\ClassLoader" not found - @thekid

11.8.0 / 2023-06-25

Heads up!

  • Merged PR #331: Migrate to new testing library. This makes it easier to run the test suite (now just xp test src/test/php like with any other library) and reduces the installed size by roughly 300 kB. Preliminary work was put into this to make the transition easier:
    • PR #330: Use COMPOSER_ROOT_VERSION and add dependency instead of bundling test library
    • PR #329: Restructure src/test/php - from tests inside the package net.xp_framework.unittest to the package (lang, util, io, xp) they're testing
    • Merged PR #328: Migrate tests to baseless / Assert DSL (@thekid)

11.7.0 / 2023-06-24

Features

11.6.0 / 2023-06-03

Features

11.5.0 / 2022-12-17

Features

  • Made some minor performance optimizations to util.Date constructor (@thekid)
  • Merged PR #322: Defer date.timezone checks until the util.Date class is used, making XP core functionality unrelated to dates useable even if no timezone is set. (@thekid)

Bugfixes

  • Merged PR #321: Fix util.TimeZone::hasDst(), which was broken in multiple regards (@thekid)
  • Fixed issue #320: Call to undefined method util.TimeZone::getName() (@thekid)

11.4.7 / 2022-12-03

Bugfixes

  • Fixed parsing generic definitions with string interpolations - @thekid

11.4.6 / 2022-11-06

Bugfixes

  • Made parsing generic definitions more robust against when not using whitespace between parent class name and class body (@thekid)

11.4.5 / 2022-11-06

Bugfixes

  • Fixed generic function types such as function(T, T): int - @thekid

11.4.4 / 2022-11-06

Bugfixes

  • Fixed possible Undefined array key exceptions in lang.GenericTypes (@thekid)

11.4.3 / 2022-10-21

Bugfixes

  • Fixed issue #317: Single-pair map indentation - @thekid

11.4.2 / 2022-09-03

Bugfixes

11.4.1 / 2022-08-28

Bugfixes

  • Fixed issue #315: Array to string conversion when reading property file sections with arrays or maps (@thekid)

11.4.0 / 2022-08-17

Features

  • Merged PR #314: Delay expansion of values in property files until values are read. This fixes potential information disclosure problems in string representations of util.Property instances, see #312. (@thekid)

11.3.1 / 2022-08-15

Bugfixes

  • Fixed Cannot access property starting with "\0") in util.Comparison (@thekid)

11.3.0 / 2022-07-23

Features

  • Merged PR #311: Make all InputStream & OutputStream implementations implement Value, implementing #310. (@thekid)

11.2.0 / 2022-06-12

Bugfixes

  • Merged PR #309: Use AES-128-CBC instead of DES (in util.Secret); the latter is considered legacy (@thekid)
  • Fixed compatibility with PHP 8.2 for invalid timezones. PHP now reverts to UTC and displays a startup warning if the timezone name is unknown. (@thekid)

Features

11.1.2 / 2022-01-22

Bugfixes

  • Fixed lang.reflect.Parameter::getDefaultValue() to parse parameter annotations correctly (@thekid)

11.1.1 / 2021-12-24

Bugfixes

  • Merged PR #306: Fix qualified annotation names. This includes support for trailing commas in grouped annotations. (@thekid)

11.1.0 / 2021-12-08

Features

  • Improved script loading performance by deferring requiring modules until class loading time. See xp-runners/reference#85 (@thekid)
  • Added preliminary PHP 8.2 support by fixing various issues throughout the code base. Compatibility is tracked in issue #304 (@thekid)
  • Cast given argument to string in io.streams.MemoryInputStream. Passing null will no longer yield warnings in PHP 8.1 (@thekid)

11.0.0 / 2021-10-21

This major release cleans up deprecated and unused features, and takes the next step of phasing out XP annotation syntax in favor of PHP 8's attributes.

Heads up!

  • Merged PR #299: Remove xp::errorAt(). If necessary, access the static xp::$errors map directly (@thekid)
  • Merged PR #298: Remove Runtime::halt() and SystemExit - functionality was never used in any library (@thekid)
  • Merged PR #274: Compact maps with a single key/value pair into one line (@thekid)
  • Merged PR #297: Remove generic application and service exceptions, these classes we unused. (@thekid)
  • Merged PR #296: Remove lang.Runtime::loadLibrary() - the PHP function dl() has been regarded more or less deprecated and has been removed from various SAPIs in the past, see https://www.php.net/dl (@thekid)
  • Merged PR #295: Remove lang.Thread and lang.IllegalThreadStateException, these were Un*x only, wrapping ext/pcntl library functions (@thekid)
  • Merged PR #294: Remove resource provider and import facility - @thekid
  • Merged PR #293: Remove deprecated timezone methods - @thekid
  • Removed deprecated io.streams.MemoryInputStream::getBytes() method (@thekid)
  • Merged PR #292: Remove deprecated reader and writer methods from io.streams (@thekid)
  • Removed deprecated lang.Primitive::$DOUBLE (replaced by FLOAT) (@thekid)
  • Merged PR #291: Remove io.FileUtil - replaced by the io.Files class (@thekid)
  • Merged PR #290: Remove util.PropertyManager - replaced by libraries such as xp-forge/inject (@thekid)
  • Merged PR #289: Remove util.DateUtil and util.DateMath - replaced by the util.Dates class (@thekid)
  • Merged PR #288: Remove util.Calendar class - superseded by the timezone aware API by util.TimeZoneTransition (@thekid)
  • Merged PR #287: Remove util.Component and util.Visitor - these classes were unused (@thekid)
  • Merged PR #286: Remove util.Configurable and util.ConfigurationException, unused except for the anti-pattern class rdbms.ConnectionManager. (@thekid)
  • Renamed master branch to main - @thekid

RFCs

  • Implemented 2nd part of xp-framework/rfc#335: Drop annotation key/value pair syntax, see PR #237. Use PHP 8 named arguments instead! (@thekid)
  • Implemented 2nd part of xp-framework/rfc#336: Deprecating XP annotation syntax. This will raise E_USER_DEPRECATED warnings, see PR #284 (@thekid)

10.16.0 / 2023-06-04

Features

Bugfixes

  • Backported #321 from XP 11: ix util.TimeZone::hasDst(), which was broken in multiple regards (@thekid)
  • Backported #320 from XP 11: Call to undefined method util.TimeZone::getName() (@thekid)
  • Backported #309 from XP 11: Use AES-128-CBC instead of DES (in util.Secret); the latter is considered legacy (@thekid)

10.15.1 / 2021-12-24

Bugfixes

  • Backported PR #306 from XP 11: Correctly support qualified annotation names and trailing commas in grouped annotations (@thekid)

10.15.0 / 2021-10-21

Features

  • Merged PR #301: Add new util.ClassPathPropertySource - @thekid

10.14.0 / 2021-09-26

Features

  • Merged PR #282: Allow overwriting descriptors passed to proc_open() in lang.Process constructor and newInstance(). This can be used for redirection or passing through standard I/O. (@thekid)
  • Merged PR #281: Add lang.CommandLine::resolve(). This method resolves given commands against the system path and returns all found executables, much like Windows' where or POSIX' which -a commands. It supersedes lang.Process::resolve(), which becomes deprecated. (@thekid)

10.13.1 / 2021-09-15

Bugfixes

  • Fixed lang.Environment::variables() to return the complete environment even if the php.ini setting variables_order does not include S. (@thekid)

10.13.0 / 2021-09-12

Features

  • Merged PR #278: Add support for PHP 8.1 readonly properties - @thekid

RFCs

  • Implemented xp-framework/rfc#340: Virtual properties reflection. See PR #275 for implementation details. (@thekid)

10.12.4 / 2021-08-22

Bugfixes

10.12.3 / 2021-08-21

Bugfixes

  • Fixed error date.timezone not configured properly when running on AWS. Their default value for the TZ environment variable is :UTC, which PHP fails to recognize as a valid timezone (while UTC works). (@thekid)

10.12.2 / 2021-08-21

Bugfixes

10.12.1 / 2021-08-05

Bugfixes

  • Prevent resolving types returned by the PHP reflection API by calling the * context function - they already come resolved. (@thekid)

10.12.0 / 2021-08-04

Features

  • Merged PR #277: Add support for PHP 8.1 intersection types - @thekid

Bugfixes

  • Fixed parsing use statements with multiple imports separated by commas, e.g. use ArrayObject, Traversable;. (@thekid)

10.11.1 / 2021-07-25

Bugfixes

  • Fixed lang.XPClass::getDeclaredFields() throwing an exception - @thekid
  • Fixed issue #276: PHP 8.1: offset* / getIterator signature. Made codebase compatible with PHP 8.1 (while keeping PHP 7 support!) by adding the #[ReturnTypeWillChange] in relevant places. (@thekid)

10.11.0 / 2021-06-04

Features

  • Merged PR #273: Fall back to wmic command line tool if com_dotnet extension is not loaded (@thekid)
  • Merged PR #272: Add Environment::platform() and Environment::path() (@thekid)

10.10.0 / 2021-04-25

Features

  • Merged PR #271: Pass NULL to Properties::expanding() to ignore expansion (@thekid)
  • Merged PR #267: Support PHP 8.1 never type in reflection - @thekid

10.9.1 / 2021-04-24

Bugfixes

  • Made XP work when iconv extension is not available but mbstring is, offering a degraded and not 100% compatible experience, see #270 (@thekid)

10.9.0 / 2021-03-20

Features

  • Generated util.MimeType from the media type database over at https://github.com/jshttp/mime-db, which in turn consists of lists compiled from IANA registrations, Apache and Nginx. See issue #264 (@thekid)

Bugfixes

  • Fixed issue #265: Environment::variables() empty on certain environments by replacing $_ENV by $_SERVER, see PR #266 (@thekid)

10.8.1 / 2021-03-14

Bugfixes

  • Fixed issue #263: Warnings in util.Secret with PHP 8.1 - @thekid

10.8.0 / 2021-03-10

Features

  • Merged PR #261, adding forward compatibility with PHP 8.1 enumerations. Adds enum_exists() as well as UnitEnum and BackedEnum interfaces, see https://wiki.php.net/rfc/enumerations (@thekid)

Bugfixes

  • Fixed issue #262: xar command - compile error - @thekid

10.7.0 / 2021-03-06

Features

  • Merged PR #259: Support reflective access to non-constant expressions for parameter defaults (@thekid)

Bugfixes

  • Fixed issue #260: Failed tests on Ubuntu 20.04 - @thekid

10.6.1 / 2021-02-13

Bugfixes

10.6.0 / 2021-01-18

Features

  • Merged PR #253: Add support for nullable types (via lang.Nullable) (@thekid)
  • Merged PR #256: Make it possible to pass a default resolver (*) to Type::resolve() (@thekid)

10.5.3 / 2021-01-17

Bugfixes

  • Fixed issue #257: Nullable union types - @thekid

10.5.2 / 2021-01-16

Bugfixes

  • Handle self, static and parent return and parameter types inside lang.FunctionType::isInstance(). (@thekid)
  • Fixed issue #255: Function return types not taken into account - @thekid

10.5.1 / 2020-11-29

Bugfixes

  • Fixed issue #254: Warning raised inside newinstance() in PHP 7.4+ when using parameter or return type hints. (@thekid)

10.5.0 / 2020-11-26

Features

  • Added support for PHP 8.0, see issue #211:
    • Support PHP 8 attributes in all PHP 7 versions if written without line breaks, adding special eval key to support non-static scalar expressions.
    • Add support for union types for return and parameter types
    • Add forward- and backward compatible handling for various type- checking related changes
    • Verified support with PHP 8.0.0 on Windows and Linux (@thekid)

Bugfixes

  • Fixed util.Random class to use openssl_random_pseudo_bytes() instead uniqid() for creating an IV. (@thekid)

10.4.0 / 2020-11-22

Features

  • Added lang.reflect.Field::getTypeRestriction() which is consistent with the API exposed by method parameter and return types. This adds support for PHP 7.4 property types. (@thekid)
  • Made field, method parameter and return types consistent in that they check for native type syntax before checking meta information except for when that may yield a more specific type (@thekid)
  • Added new method lang.Type::resolve() to correctly resolve types in a given context. Adds support for array<self> and others for return and parameter types, see PR #252 (@thekid)

10.3.3 / 2020-11-22

Bugfixes

  • Fixed static return type being shadowed by self type restriction (@thekid)
  • Fixed specific function types being shadowed when a callable type restriction is present (@thekid)
  • Fixed braced function return types, e.g. @return (function(): int) (@thekid)

10.3.2 / 2020-11-14

Bugfixes

  • Updated bundled test library - fixing PHP 8 compatibility - @thekid
  • Fixed issue #248: PHP 8 native type union causes error - @thekid
  • Fixed string|int type union not being equal to int|string - @thekid

10.3.1 / 2020-10-06

Bugfixes

  • Fixed strspn(): Argument #3 ($offset) must be contained in argument #1 ($str)) warnings, which started appearing in PHP 8.0.0, RC 1. (@thekid)

10.3.0 / 2020-10-04

Features

  • Added support for PHP 8 parameter attributes - @thekid

10.2.0 / 2020-09-23

RFCs

  • Merged PRs #246 and #247, rewriting the code base to PHP 8 attributes (@thekid)
  • Implemented first step of xp-framwwork/rfc#336 by converting PHP 8 attributes into XP annotations: #[Test(true)] will be interpreted the same as #[@test(true)]. This way, converting libraries over to the new syntax can start now. Implementation details in pull request #245.

Features

  • Merged PR #225: Overload newinstance to accept closures for single- method interfaces (like lang.Runnable, for instance). (@thekid)
  • Added support for mixed type, see https://wiki.php.net/rfc/mixed_type_v2 (@thekid)

Bugfixes

10.1.0 / 2020-05-31

Features

  • Improved performance of type lookups for parameters and return types; only looking at the API docs if either no type syntax is used or for array types (e.g. array => string[]) (@thekid)
  • Added lang.reflect.Routine::getReturnTypeRestriction() to be consistent with parameters. (@thekid)

Bugfixes

  • Fixed imports not being resolved inside annotations with functions and closures as values. (@thekid)
  • Merged PR #242: Use ReflectionType API instead of deprecated isArray and isCallable on parameters - for PHP 8 compatibility (see php/php-src#5209). (@thekid)

10.0.5 / 2020-04-05

Bugfixes

10.0.4 / 2020-04-05

Bugfixes

10.0.3 / 2020-03-28

Bugfixes

  • Fixed Array and string offset access syntax with curly braces is deprecated warnings inside lang.reflect.ClassParser (@thekid)

10.0.2 / 2019-12-01

Bugfixes

  • Fixed xp help subcommand raising warnings when rendering markdown (@thekid)

10.0.1 / 2019-12-01

Bugfixes

  • Fixed generics in PHP 8+ by using null-coalesce operator instead of the error suppression operator @. (@thekid)

10.0.0 / 2019-11-29

Bugfixes

  • Merged PR #224: Add missing support for nullable types to is() (@thekid)
  • Fix issue #220: Curly braces in offsets are now deprecated in PHP 7.4 (@thekid)

Features

  • Merged PR #234: Add new method Package::of() which returns the package of a given type (@thekid)
  • Merged PR #233: Allow passing string types to Enum::value[s]Of() (@thekid)
  • Merged PR #227: Add support for PHP 7.4 arrow functions in annotations (@thekid)
  • Merged PR #226: Support getting annotations from anonymous classes (@thekid)
  • Implemented feature request #219, adding util.Date::getMicroSeconds() (@thekid)
  • Merged PR #218: Add new util.Dates class superseding util.DateUtil (@thekid)
  • Merged PR #217: New io.Files class replacing the ill-named FileUtil (@thekid)
  • Added preliminary support for PHP 8.0, which has not yet been released yet, though running the testsuite with its nightly builds yields green. See issue #211 (@thekid)

Heads up!

  • Merged PR #223: Changed object type handling in is() and Type::$OBJECT to be consistent with PHP type system, including closures and generators. (@thekid)
  • Merged PR #216: Remove third & optional "nullsafe" argument to cast() (@thekid)
  • Merged PR #215: Remove deprecated System class - @thekid
  • Merged PR #214: Remove deprecated xp::stringOf() - @thekid
  • Merged PR #213: Remove "double" type in favor of "float" - @thekid
  • Merged PR #212: Remove deprecated getFirstSection() / getNextSection() iteration (from util.Properties) (@thekid)
  • Merged PR #194: Remove deprecated XP registry - @thekid

RFCs

9.10.0 / 2019-10-04

Features

  • Backported XP 10 features for easier adoption:
    • PHP 7.4 arrow functions in annotations (#227)
    • Annotations from anonymous classes (#226)
    • New util.Date::getMicroSeconds() (#219)
    • New util.Dates class superseding util.DateUtil (#218)
    • New io.Files class replacing the ill-named FileUtil (#217) https://github.com/xp-framework/core/projects/1 (@thekid)

9.9.1 / 2019-08-20

Bugfixes

  • Fixed compatibility issue with PHP 7.4 in ClassLoader::defineForward() (@thekid)

9.9.0 / 2019-08-09

Bugfixes

  • Backported from XP 10 various compatibility fixes with PHP 7.4:
    • Fix "Trying to access array offset on value of type null"
    • Refrain from using curly braces used for array offsets
    • Refrain from using deprecated ReflectionType::__toString Prevent "stream_set_option is not implemented!" warnings (@thekid)

9.8.3 / 2019-06-14

Bugfixes

  • Added fix for reflection code raising warnings in PHP 7.4 - @thekid
  • Added fix for typeof() raising warnings in PHP 7.4 - @thekid

9.8.2 / 2019-01-01

Bugfixes

  • Merged PR #208: Ensure filenames and lines match up to parsed code (@thekid)

9.8.1 / 2018-12-28

Bugfixes

  • Fixed issue #210: PHP 7.4 modifiers compatiblity - @thekid

Features

  • Added support for PHP 7.3 (@thekid)

9.8.0 / 2018-10-02

Bugfixes

  • Fixed io.streams.MemoryOutputStream to behave like files when writing beyond stream end: Content is padded with "\0". (@thekid)
  • Fixed io.FileUtil::write() to overwrite open files' contents instead of simply appending the bytes given (@thekid)
  • Fixed io.File::truncate() to retain the file offset on Windows, this way behaving the same as Unix systems. (@thekid)

Features

  • Changed io.streams.FileOutputStream to implement Seekable interface (@thekid)
  • Added io.FileUtil::append() to complement the write() method. (@thekid)
  • Added optional bytes arg to io.streams.MemoryOutputStream constructor (@thekid)
  • Added read() and write() methods to io.FileUtil as replacements for getContents() and setContents() (@thekid)
  • Added io.streams.MemoryOutputStream::bytes() method w/o get prefix (@thekid)
  • Added io.TempFile::persistent() method to keep temporary files even after they are garbage-collected (@thekid)
  • Added destructor to file ensuring file handles are closed when io.File are garbage-collected (@thekid)
  • Added io.TempFile::containing() method to easily create temporary files and write content to them in one step (@thekid)
  • Merged PR #204: Deprecate util.PropertyManager - @thekid

9.7.0 / 2018-09-06

Features

  • Multiple API improvements in the util.TimeZone class.
    • Deprecated getName() in favor of the shorter name() method
    • Deprecated getOffset() in favor of difference(); and the method getOffsetInSeconds() in favor of offset(); making the TimeZone API consistent with TimeZoneTransition. (@thekid)
  • Multiple API improvements in the util.TimeZoneTransition class.
    • Added difference() method to util.TimeZoneTransition which returns the offset in the "[+-]HHMM" format.
    • Changed previous() and next() to return the calculated transition instead of returning void.
    • Deprecated getTz() in favor of timezone(); and getDate() in favor of date(); making the API more consistent. (@thekid)

9.6.0 / 2018-08-13

Features

  • Merged pull request #203: Implement Process::terminate() (@thekid)

9.5.4 / 2018-08-12

Features

  • Ensured compatibility with PHP 7.3 beta (@thekid)
  • Merged PR #202: PHP 7.4 forward compatiblity (@thekid)

9.5.3 / 2018-08-07

Bugfixes

  • Fixed issue #201: Casting to int: Uninitialized string offset: 1 (@thekid)

9.5.2 / 2018-07-27

Bugfixes

  • Fixed forward compatibility with PHP 7.3, which deprecates string search with non-string needles: https://wiki.php.net/rfc/deprecations_php_7_3 (@thekid)
  • Fixed Primitive::$INT->cast() and Primitive::$INT->newInstance() for strings containing hexadecimal or octal numbers. (@thekid)
  • Fixed octal and hexadecimal literals in annotations (@thekid)

9.5.1 / 2018-06-10

Bugfixes

  • Merged PR #200: Fix path normalization (@thekid)

9.5.0 / 2018-06-08

Features

  • Merged pull request #199: Add DateUtil::add() and DateUtil::subtract() (@thekid)
  • Changed io.File to allow URIs created with io.streams.Streams (@thekid)
  • Added io.streams.MemoryInputStream::size() accessor (@thekid)

Bugfixes

  • Fixed io.File::size() to work when the instance has been created with a file descriptor, e.g. from Streams::readableFd(). (@thekid)

9.4.1 / 2018-05-27

Bugfixes

  • Fixed StringReader::readLine() calling underlying stream's read() method too often, resulting in hanging when reading from the console. (@thekid)

9.4.0 / 2018-04-02

RFCs

Features

  • Upgraded bundled unittest library to 9.4.1 (@thekid)

9.3.2 / 2018-04-02

Bugfixes

  • Fixed newinstance() resolving value types for parameter or return types incorrectly inside namespaces (@thekid)

9.3.1 / 2018-03-30

Bugfixes

  • Fixed #191: Void return type breaks newinstance() (@thekid)
  • Fixed #190: Iterable type hint breaks newinstance() (@thekid)
  • Fixed #189: Scalar type hints break newinstance() (@thekid)

9.3.0 / 2017-12-05

Bugfixes

  • Fixed #186: Type union parsing (@thekid)

Features

  • Merged #188: Implement PHP 7.2 sodium extension based encryption (@thekid)

9.2.0 / 2017-10-28

RFCs

Features

  • Added PHP 7.2 to test matrix (@thekid)

9.1.0 / 2017-09-24

Bugfixes

  • Merged #183: Remove all reference to lang.Object (@thekid)

Features

  • Added util.Comparison trait to make lang.Object -> lang.Value migration easier. See issue #184 (@thekid)

9.0.0 / 2017-09-24

Heads up!

  • Changed type system to prefer "float" over "double" to be consistent with PHP 7's scalar types, which use the first; see issue #181. (@thekid)
  • Minimum HHVM version required is now 3.20, see issue #176. (@thekid)
  • Deprecated package-info.xp files previously used for documentation purposes. Packages have been split into libraries with their own repos, and documentation typically resides in a README file therein. (@thekid)
  • Merged PR #169: Remove MCrypt (from util.Secret & util.Random), see https://wiki.php.net/rfc/mcrypt-viking-funeral (@thekid)

RFCs

Features

  • Merged PR #180: Secret::equals() - @thekid
  • Added preliminary PHP 7.2.0 support - tested successfully using PHP 7.2.0 Alpha 1 up to PHP 7.2.0 RC2. (@thekid)
  • Added xp version runners which will display XP runners version (@thekid)
  • Merged PR #179: Clean up inheritance and implementation oddities in io.streams (StringReader and TextReader as well as StringWriter and TextWriter are now interchangeable - the Text versions handle charset encoding, the String versions don't). (@thekid)

8.2.0 / 2017-05-28

Bugfixes

  • Fixed issue #172: Endless loop in io.Path::relativeTo() - @thekid

Features

  • Refactored code to use typeof() instead of xp::typeOf(), see xp-framework/rfc#323 (@thekid)
  • Un-deprecated newinstance(), which is here to stay. By being able to capture local variables in methods, it is helpful in unittest scenarios and has a clear advantage over PHP's anonymous classes; at least until https://wiki.php.net/rfc/lexical-anon is implemented. (@thekid)

8.1.2 / 2017-04-16

Features

  • Merged PR #167: Increase TextReader::readLine() performance 50-fold (!) This decreases .ini-file parsing times by a factor of roughly 12. (@thekid)

8.1.1 / 2017-01-16

Bugfixes

  • Fixed flaky test for Process class if process exited too quickly - @thekid

8.1.0 / 2016-12-18

Features

  • Merged PR #164: Implement new Process::running() method which tests if a process is running (@thekid)
  • Merged PR #163: Make adding property file expansions easy to use (@thekid)

8.0.0 / 2016-08-29

Heads up!

  • Removed deprecated ARCHIVE_* constants (use class constants from lang.Archive instead!) (@thekid)
  • Removed deprecated io.Folder methods getEntries(), isOpen() and rewind() - replaced by entries() iterator. (@thekid)
  • Removed deprecated io.File methods get(Input|Output)Stream() - replace by in() and out(). (@thekid)
  • Removed deprecated util.Properties I/O methods save(), fromString() and fromFile(). See #160 (@thekid)
  • Removed support for legacy XP runners. The XP7 runners have been available for more than half a year now and are well-tested on various operating systems and distributions. (@thekid)
  • Removed support for legacy date serialization (has been deprecated since October 2011). See #159 (@thekid)
  • Heads up: Bumped minimum required PHP version to 7.0.0 (@thekid)

RFCs

  • Implemented xp-framework/rfc#312: Advertise scripts as entry point (@thekid)
  • Implemented xp-framework/rfc#311: Deprecate array() syntax (@thekid)
  • Implemented xp-framework/rfc#310: XP8 . Deprecated newinstance in favor of builtin anonymous class support . Rewrote codebase to use grouped use statements where applicable . Made use of ?? and <=> operators . Added return type hints in various places . Simplified code by removing PHP5-specific handling (@thekid)

Features

  • Merged PR #134: Change lang.XPClass::getClasses() to return an iterator

7.8.0 / 2016-10-06

Features

  • Merged PR #163: Make adding property file expansions easy to use (@thekid)

7.7.0 / 2016-08-29

Features

  • Added forward compatiblity with XP8: Backported BC-break-free parts of #160 (new fluent interface, load() now also accepting strings and io.Channel / io.File instances, deprecations) (@thekid)

7.6.1 / 2016-08-28

Bugfixes

  • Fixed issue #158: PHP Nightly failing test with __PHP_Incomplete_Class (@thekid)

Features

7.6.0 / 2016-08-14

Heads up!

Bugfixes

  • Fixed Runtime::newInstance() to inherit all currently loaded paths (@thekid)
  • Fixed ClassLoaders' path output if environment doesn't contain resolved paths - e.g. paths with symlinks or ".." parts inside. (@thekid)

7.5.0 / 2016-07-24

Bugfixes

Features

  • Merged #155: Implement object type union - @thekid
  • Merged #153: Environment class - @thekid
  • Merged #154: Implement iterable type. Forward compat with PHP 7.1's iterable type (@thekid)

7.4.0 / 2016-06-04

Bugfixes

  • Fixed passing unicode arguments via Runtime::newInstance() (@thekid)

Features

  • Extended lang.FunctionType's constructor to accept type names in addition to Type instances. (@thekid)

7.3.1 / 2016-05-07

Bugfixes

  • Fixed #147: TypeUnion literal bug - @thekid

7.3.0 / 2016-05-05

Features

  • Merged #146: Create util.Random class: A random number generator with a preference for secure pseudo-random sources (@thekid)
  • Merged #145: Generic fields - @thekid

7.2.1 / 2016-04-03

Bugfixes

  • Merged #140: Fix {Type,XPClass}::forName to support absolute type names (@johannes85, @thekid)
  • Fixed cast() to wrap any thrown exception from Type::forName() in a lang.ClassCastException (@thekid)

7.2.0 / 2016-02-27

Heads up!

  • Removed net.xp_framework.unittest.StartServer - unused inside core, but xp-framework/networking's test suite depended on this (fixed by copying there and releasing as 7.0.1). (@thekid)

Features

  • Code QA: Use ::class throughout codebase where applicable - @thekid
  • Code QA: Use yield throughout codebase where applicable - @thekid
  • Made test suite run on AppVeyor (@thekid)

7.1.2 / 2016-02-23

Features

  • Merged #131: OS Version handling for Mac OS X (@thekid)
  • Merged #133: OS Version handling for systems with /etc/os-release (@thekid)

7.1.1 / 2016-02-22

Bugfixes

7.1.0 / 2016-02-14

Features

  • Merged #129: Shebang support - @thekid
  • Added version details to version subcommand: . xp version xp: XP Version . xp version php: PHP Version . xp version engine: Engine version - HHVM_VERSION || zend_version() . xp version os: OS Version (and distribution if available) (@thekid)
  • Added missing help topics - see #130 - @thekid

7.0.1 / 2016-02-07

Bugfixes

  • Fixed support for varargs in typeof() - @thekid
  • Fixed support for primitive parameter types in typeof() - @thekid
  • Fixed support for function return types in typeof() - @thekid

Features

7.0.0 / 2016-02-01

Heads up!

  • Changed newinstance to raise an error if no constructor is defined but arguments are passed. Errors surface earlier this way! (@thekid)
  • Removed deprecated overload of ClassLoader::defineType() - @thekid
  • Removed deprecated Hashmap class. See #121 - @thekid
  • Removed deprecated global FILE_MODE_* constants - @thekid

RFCs

6.13.1 / 2016-05-07

Bugfixes

  • Backported fix for issue #147: TypeUnion literal bug - @thekid

6.13.0 / 2016-05-06

Heads up!

  • Heads up: Changed UUID class to return util.Bytes instead of the version from lang.types (@thekid)

Bugfixes

  • Fixed PHP 5.4 compatibility for util.Bytes class added in 6.11 - @thekid

6.12.0 / 2016-05-05

Features

  • Backported #146 from XP 7 - @thekid

6.11.4 / 2016-04-22

Features

  • Merged #141: Backported separation of connecting and enabling crypto for SSL sockets. (@kiesel, @thekid)

6.11.3 / 2016-03-29

Bugfixes

  • Fixed malformed typehint for util.log.LogCategory (@elquand, @haimich)

6.11.2 / 2016-03-18

Bugfixes

  • Backported AppVeyor integration (@thekid)
  • Fixed issue when expected exception's message was empty. Originally reported in #135 by @kiesel (@thekid)

6.11.1 / 2016-03-15

Bugfixes

  • Fixed problem w/ static initializer and MockProxy (@beorgler, @haimich, @kiesel)
  • Restored PHP 5.4 compatibility. Note: PHP 5.4 is supported unofficially! Composer requirements are PHP 5.5.0 minimum. See xp-framework/rfc#298 (comment) (@thekid, @kiesel)

6.11.0 / 2016-02-18

Features

  • Added util.Bytes class as replacement for deprecated lang.types.Bytes (@thekid)

6.10.3 / 2016-01-27

Bugfixes

  • Fixed #128: ClassParser chokes on ::class inside members (@thekid)

Features

  • Made util.Hashmap class implement ArrayAccess to ease forward-compatible migrations of code using it (@thekid)
  • Merged #127: Enable running scripts from files - @thekid

6.10.2 / 2016-01-17

Bugfixes

  • Fixed #116: ClassParser and "use .. as .." - @thekid
  • Fixed lang.reflect.ClassParser to raise an exception if parent is used in annotations inside a type without parent instead of causing a method call on NULL. (@thekid)

6.10.1 / 2016-01-12

Features

  • Merged #114: Improve error messages when file loaded fails to declare type. Now includes mismatching declaration. (@thekid, @mikey179)

6.10.0 / 2016-01-10

RFCs

Features

6.9.2 / 2016-01-05

Bugfixes

  • Fixed util.Objects to handle instances of non-XP classes in equal(), compare() and hashOf(). See #113 (@thekid)

6.9.1 / 2015-12-28

Bugfixes

  • Fix wrapping \Exceptions behavior difference between PHP5 and PHP7 (@thekid)
  • Made lang.XPClass::forName() accept native class names, also (@thekid)

6.9.0 / 2015-12-24

Heads up!

  • Heads up: Removed deprecated ensure(), which has been replaced by the finally statement. See #111 (@thekid)

RFCs

Bugfixes

  • Fixed #110: Fatal error location swallowed - @thekid
  • Catch both PHP 5 and PHP 7 base exceptions in lang.Thread - @thekid

Features

  • Added static lang.Throwable::wrap() to wrap any exception, including PHP 5 and PHP 7's native base exceptions, in a lang.Throwable instance (@thekid)
  • Changed lang.Throwable to accept any other instance of itself as cause as well as PHP 5 and PHP 7's native base exceptions. (@thekid)

6.8.0 / 2015-12-20

Heads up!

  • Heads up: Removed classes deprecated since XP 6.3.0: . util: util.StringUtil . io: Stream, ZipFile, SearchableStream, SpoolDirectory, FilePermission . io.sys: StdStream . security: Permission, Policy, PolicyException . security.password: RandomPasswordGenerator, RandomCodeGenerator (@thekid)

Bugfixes

  • Fixed util.Objects::compare() consistency with PHP7's <=> operator for arrays and maps. (@thekid)
  • Fixed lang.reflect.Constructor to catch PHP7's native \Throwable class instead of \BaseException class, which was the root class before the Throwable RFC. (@thekid)

Features

  • Refactored util.Properties to work without Tokenizer API, which has been extracted to its own package in 6.7.0 (@thekid)
  • Merged PR #108: security.SecureString -> util.Secret (@thekid, @mikey179, @kiesel)

6.7.0 / 2015-12-09

RFCs

Bugfixes

  • Fixed lang.reflect.Method to use PHP's type information if available but consistently prefer the apidocs for the reason stated below. (@thekid)
  • Fixed lang.reflect.Parameter to only use PHP's type information if no apidoc is present. The reason is that we might have much "richer" information, e.g. a parameter typed string[] (whereas PHP would only know about an array of whatever). (@thekid)

6.6.0 / 2015-11-23

RFCs

  • Implemented next part of xp-framework/rfc#297: Merged PR #100 (@thekid)
  • Implemented next part of xp-framework/rfc#298: . Removed deprecated xp::null() . Removed deprecated xp::nameOf() . Removed deprecated xp::error() and replace by exceptions . Removed deprecated this() - replaced by syntactic support (@thekid)

Bugfixes

  • Fixed fatal errors when parsing URLs w/ hashes. See xp-framework/xp-framework#380 (@patzerr)
  • Fixed "Call to undefined method lang.FunctionType::isGeneric()" in lang.WildcardType (occurred in the sequence library when using the current development checkout) (@thekid)
  • Fixed FunctionType not handling varargs correctly - @thekid

Features

  • Merged PR #107: Variadic parameter support in reflection (@thekid)

6.5.6 / 2015-10-25

Bugfixes

  • Fixed XPClass not searching traits for member declarations - @thekid

6.5.5 / 2015-10-07

Features

  • Made reflection resolve unqualified classes inside api doc via imports (@thekid)
  • Changed reflection to support fully-qualified class names inside api doc tags for fields, methods and constructors: @param \util\Date $param, @return \util\Date, @throws \lang\Throwable and @var \util\Date. (@thekid, @mikey179)
  • Changed ClassLoader::defineType() to also support native type notation with backslashes inside its first argument. (@thekid, @mikey179)

6.5.4 / 2015-09-27

Features

Bugfixes

  • Fixed xp -r T for when T refers to a trait - @thekid

6.5.3 / 2015-09-27

Features

  • Merged #102: Add in() and out() methods to io.collections - @thekid
  • Merged #103: Refactor: Use ::class - @thekid
  • Merged #104: Show traits w/ trait keyword, w/o abstract - @thekid

6.5.2 / 2015-09-04

Features

  • Created an XP Framework release from an airplane - @thekid
  • Cleaned up deprecated "mixed" type in favor of "var" - @thekid

6.5.1 / 2015-08-24

Bugfixes

  • Fixed peer.SocketOutputStream declaration - @thekid
  • Fixed lang.FunctionType to work as part of a generic type - @thekid
  • Merged #101: Make collections API work with closures (@thekid)
  • Fixed util.Objects::hashOf() for arrays and maps containing closures (@thekid)
  • Fixed lang.types.ArrayList and lang.types.ArrayMap's equals() methods in conjunction with lang.Value instances. (@thekid)

6.5.0 / 2015-08-22

Heads up!

  • Heads up: Bumped the minimum PHP version requirement to PHP 5.5! . Rewrote test code base to use finally instead of ensure (see #97) . Rewrote test code base to use ::class where applicable (see #98) (@thekid)
  • Deprecated the ensure core functionality. It was a future-ready replacement for the finally statement introduced with PHP 5.5 (@thekid)
  • Removed deprecated delete core functionality. Instead, use the language construct unset(). (@thekid)
  • Removed deprecated text.format and text.parser packages. (@thekid)
  • Removed deprecated and dysfunctional XP installer. Instead, use Composer (@thekid)

RFCs

Bugfixes

  • Fixed util.log.SyslogAppender problems with multiple instances logging to the same identifier and facility. (@mikey179, @thekid)

Features

  • Implemented setting log appender's layout via ini file (@thekid, @mikey179)

6.4.2 / 2015-08-05

Bugfixes

  • Fixed issue #96: Endless recursion when registering own classloader in front of class path inside a module. This is useful when a module provides a so-called "core overlay". (@thekid)

6.4.1 / 2015-08-05

Bugfixes

  • Fixed unittest.XmlTestListener::uriFor() raising exceptions - @thekid
  • Fixed WebTestCase test class using obsolete assertClass() - @thekid
  • Fixed SelectField::setValue() double-encoding UTF8 - @thekid
  • Fixed syntax errors in unittest.web package - @thekid

6.4.0 / 2015-07-12

Heads up!

  • Deprecated long array syntax (for annotations and in code) See #93 (@thekid)
  • Deprecated this() core functionality. See #92 (@thekid)
  • Removed variant of create() which returns object given. See #91 (@thekid)
  • Removed deprecated raise() core functionality. See #89 (@thekid)
  • Removed pre-namespace class loading:
    • The deprecated uses() core functionality has been removed.
    • It is no longer possible to use package-qualified classes.
    • Using classes declared in the global namespace as fully-qualified is also no longer supported. See #88 (@thekid)

Features

  • Merged #94: Use "use" statements in commandline (@thekid)

6.3.4 / 2015-06-25

Heads up!

  • Dropped support for PHP7 alpha1, now requires alpha2! This second alpha includes the "Throwable" RFC which changes the builtin exception hierarchy. (@thekid)

Bugfixes

  • Adopted to changes in PHP7's exception hierarchy. See php/php-src#1284 and https://wiki.php.net/rfc/throwable-interface (@thekid)
  • Changed lang.CommandLine, text.TextTokenizer, text.StreamTokenizer and io.streams.StringReader to cope with a behaviour change to substr. See https://bugs.php.net/69931. (@thekid)
  • Fixed bug with PHP7 when reading lines from the console (@thekid)
  • Fixed bug with importing into global scope on HHVM (@thekid)

6.3.3 / 2015-06-24

  • Fixed bug when using uses() with classes that have an __import method. (@johannes85)

6.3.2 / 2015-06-23

Bugfixes

  • Fixed forking server to handle SIGTERM correctly, which is what xpws sends when the user presses Enter. (@thekid)
  • Fixed race condition inside peer.server.PreforkingServer which would prevent a clean shutdown (@thekid)
  • Fixed math.BigNum division on HHVM cutting off below default precision (@thekid)

Features

  • Added toString() method to BigNum class (and thus BigInt and BigFloat) (@thekid)

6.3.1 / 2015-06-13

Heads up!

  • This release creates forward compatibility with PHP7. Please note the XP6 series will not support PHP7 officially: It reserves the name object, which clashes with our root class lang.Object.

    However, PHP7 alpha 1 does not yet raise an error if this class name is used.

    Parts of the XP test suite do not pass on PHP7, as we still use other features incompatible with this new version. These are now in an extra unittest configuration file, not-on-php-nightly.ini. All other tests are expected to pass, and we're working on reducing the incompatible ones. (@thekid)

Features

  • Restored PHP7 forward compatibility by renaming internal null class to __null. See pull request #86 (@thekid)

Bugfixes

  • Fixed annotation parser to handle PHP7 eval() throwing exceptions instead of raising errors (@thekid)
  • Fixed parity for PHP7 when handling undefined methods in PHP7, which now behaves like HHVM (!). See #87 (@thekid)
  • Wrapped PHP7's BaseException inside a TargetInvocationException in method and constructor invocations (@thekid)

6.3.0 / 2015-06-02

Heads up!

  • Added a new nameof() core function aimed at replacing the getClassName() method and deprecated the \xp::nameOf() method. (@thekid)
  • Deprecated wrapper types in lang.types, primitive boxing and unboxing. See #84 (@thekid)

RFCs

  • Implemented first part of xp-framework/rfc#297: Added new lang.Value interface and support for it throughout the framnework as a forward- compatibility measure. See #85 (@thekid)

Bugfixes

  • Fixed unittest.actions.VerifyThat not running static methods correctly (@thekid)

Features

  • Added util.Objects::compare() method which mimics PHP7's <=> operator including support for lang.Value::compareTo(). (@thekid)
  • Merged #76: Implement type unions. Instead of using the var type on methods following the be liberal in what you accept rule and documenting what is accepted in the apidocs, the type system now allows for types such as int|string. This is widely used in PHP pseudo code, and may even end up in syntax if the union types RFC gets accepted: https://wiki.php.net/rfc/union_types (@thekid)

6.2.5 / 2015-05-25

Heads up!

  • Added class constants for Archive::open() and deprecated ARCHIVE_*. See #80 (@thekid)
  • Added class constants for File::open() and deprecated FILE_MODE_*. See #79 (@thekid)
  • Deprecated io.ZipFile class - use GzDecompressingInputStream instead! See #78 (@thekid)
  • Deprecated io.SpoolDirectory class (@thekid)

Features

  • Merged #83: New io.Path::real() shorthand (@thekid)
  • Merged #82: Path::asFile() and asFolder() prevent conditionals (@thekid)
  • Merged #81: Feature: Folder entries (@thekid)
  • Changed io.Path::equals() to perform normalization before comparing (@thekid)
  • Changed io.File::open() to return the file itself, enabling fluent API usage: $f= (new File('test'))->open(File::READ);. (@thekid)
  • Changed io.streams.TextWriter to accept output streams or I/O channels as its constructor argument, and io.streams.TextReader to accept input streams, strings or I/O channels as their constructor arguments. (@thekid)
  • Merged #77: Text reader iteration (@thekid)

6.2.4 / 2015-05-23

Heads up!

  • Deprecated XPI (XP Installer). Use Composer or Glue instead. (@thekid)

Features

6.2.3 / 2015-05-18

Heads up!

  • Deprecated RandomCodeGenerator and RandomPasswordGenerator classes from the security.password package (@thekid)
  • Deprecated io.sys.StdStream class, superseded by io.streams API (@thekid)
  • Deprecated text.format and text.parser APIs. (@thekid)
  • Deprecated io.SearchableStream class, superseded by text.Tokenizer API (@thekid)
  • Deprecated security.Policy class and API (@thekid)

Features

  • Made ResourceProvider useable via new import("lang.ResourceProvider"). This way, you don't need to force its loading by adding e.g. a call to XPClass::forName() to the static initializer / constructor / etcetera. (@thekid)
  • Made typeof() behave consistent with reflection on callable type hint. (@thekid)
  • Made util.log.LogCategory's first parameter optional, using "default" as identifier if omitted. (@thekid)

Bugfixes

  • Fixed is() to support function types correctly (@thekid)
  • Fixed Objects::hashOf() raising an exception when invoked w/ functions (@thekid)
  • Fixed xp::stringOf() producing incorrect indentation for values nested inside arrays (@thekid)

6.2.2 / 2015-05-17

Bugfixes

  • Fixed class detail parsing for function types (@thekid)
  • Fixed Type::forName() to also work for the callable type union. (@thekid)
  • Fixed issue #74: Ambiguity in function types (@thekid)

6.2.1 / 2015-05-14

Features

  • Merged #73: Optimized reflection details for exception class being initialized multiple times. (@thekid, @kiesel)

6.2.0 / 2015-05-05

Heads up!

  • Changed lang.XPClass to load the reflection instance lazily. This way, we can defer class loading until we actually access a details requiring the reflection instance; and thus speed up iterating a packages' classes, for instance. (@thekid)
  • Deprecated null() core functionality and rewrote codebase to do without it. See pull request #70 (@thekid)
  • Deprecated delete() core functionality - use the unset language construct instead. See pull request #69 (@thekid)

Features

  • Merged #71: Unicode unittest icons - @thekid

6.1.1 / 2015-04-25

Bugfixes

  • Fixed thrown exceptions not appearing in xp -r output for interface (@thekid)

Features

  • Replaced all occurrences of create_function() with real closures (@thekid)
  • Added support for /** @type [type] */ for fields. (@thekid)

6.1.0 / 2015-04-06

Heads up!

  • Deprecated uses() core functionality - use the use statement and PHP's namespaces instead. This also deprecates classes in the global namespace and the "package"-classes introduced in xp-framework/rfc#37. (@thekid)
  • Deprecated raise() core functionality - use the throw statement instead, it also uses lazy classloading for namespaced classes. (@thekid)
  • Removed deprecated support for "mixed", "char", "*", "array" and "array<string, string>"' in Type::forName(), see #64 (@thekid)
  • Removed peer.server.Server::addListener() and related classes which had been deprecated since August 2006. See pull request #63 (@thekid)
  • Deprecated lang.ClassLoader::defineType(string, string, var) usage. Its second parameter now expects a map containing "kind" (either "class", "trait" or "interface"), "extends", "implements" and "use" (arrays of type references - either XPClass instances or strings). (@thekid)

RFCs

  • Implemented relevant part of xp-framework/rfc#298: The getClassName() method is now deprecated. Rewrite code to use nameof($this). (@thekid)
  • Implemented xp-framework/rfc#292: Create anonymous instances from traits with newinstance(). See pull request #60 (@thekid)

Features

Bugfixes

  • Ensured modules are only initialized once - @thekid

6.0.1 / 2015-02-27

Bugfixes

  • Added code compensating for removed hex support in strings in PHP7 - @thekid
  • Added GzDecompressingInputStream::header() method - @thekid
  • Fixed GzDecompressingInputStream not supporting gzip data with embedded original filenames - @thekid

6.0.0 / 2015-02-08

Heads up!

  • Added experimental support HHVM support. The version tested successfully while writing this is 3.6.0-dev. See #56 (@thekid)
  • Added PHP 7.0 forward compatibility for the Catchable "Call to a member function" functionality and throw a NullPointerException. (@thekid)
  • Made xp-framework available via Composer (@thekid)
  • Refactor fatal error handling, see #30 - (@thekid)
  • Changed Console class to throw exceptions if read and/or write operations are invoked outside of a console environment - (@thekid, @kiesel)
  • Removed deprecated lang.Enum::membersOf() method - (@thekid)
  • Removed deprecated static getProxyClass() and newProxyInstance() methods from the unittest.mock.MockProxyBuilder class - (@thekid)
  • Removed deprecated methods in lang.archive.Archive:
    • addFileBytes() - replaced by addFile()
    • add() - replaced by addBytes() (@thekid)
  • Removed deprecated methods in util.Date:
    • mktime() - replaced by create()
    • fromString() - handled by regular constructor (@thekid)
  • Removed deprecated add*() methods in util.TimeSpan class - (@thekid)
  • Removed support for deprecated multi-value annotations - (@thekid)
  • Removed deprecated lang.ChainedException - (@thekid)
  • Removed deprecated text.CSVGenerator and text.parser.CSVParser classes. Use https://github.com/xp-framework/csv instead - (@thekid)
  • Removed deprecated Primitive::$[BOOLEAN, INTEGER] and Type::$ANY- (@thekid)
  • Removed deprecated lang.types.Number::floatVal() - (@thekid)
  • Minimum PHP version reqired is now PHP 5.4.0 - (@thekid)
  • Removed deprecated assertArray(), assertObject(), assertEmpty(), assertNotEmpty(), assertClass() and assertSubclass() methods from unittest.TestCase - (@thekid)
  • Changed xp::ENCODING to 'utf-8', all strings are now per default to be regarded as containing this charset except where explicitely stated otherwise! - (@thekid)
  • Classes are now only referenceable by their namespaced names except for those in the lang package (and subpackages thereof) - (@thekid)
  • Removed support for __generic style generics which have been deprecated since the implementation of RFC #193 - (@thekid)
  • Removed deprecated xp::registry() function, which has been superseded by the static xp::$registry member. Continue considering this a core internal API, though! (@thekid)
  • Removed obsolete top-level gui package - (@thekid)
  • Removed deprecated ref() and deref() functionality - (@thekid)
  • Moved classes inside text.util - Random(Code|Password)Generator to the package security.password - (@thekid)
  • Moved classes inside scriptlet.rpc to webservices.rpc - (@thekid)

RFCs

Bugfixes

  • Fixed problem with enum member auto-initialization and non-public static properties. (@thekid)
  • Fixed #38: Use of undefined constant STR_ENC- (@thekid)
  • Fixed #37: var not assignable from var?! - (@thekid)
  • Fixed #34: FunctionType doesn't load classes - (@thekid)
  • Fixed #32: Warning in String::endsWith() - (@thekid)
  • Fixed #20: Generic classes and namespaces - (@thekid)
  • Fixed io.streams.Streams instances to return true for is_file() (@thekid)
  • Fixed BufferedInputStream::available() (see xp-framework/xp-runners#17) (@thekid)
  • Fixed closures inside objects and arrays leading to xp::stringOf() raising an exception (Serialization of 'Closure' is not allowed) - (@thekid)
  • Fixed xp-framework/xp-framework#347 - "Undefined variable: len" in BSDSocket (@haimich)

Features

  • Added support for ::class in annotations - #52 (@thekid)
  • Made io.streams.MemoryOutputStream implement io.streams.Seekable - (@thekid)
  • Implemented support for expanding environment variables in property files. See PR #42 and xp-framework/xp-framework#365 (@thekid, @johannes85)
  • Added support for callable typehint - (@thekid)
  • Changed util.profiling.Timer to be able to provide intermediate results with elapsedTime() without prior call to stop(), and added fluent interface to util.profiling.Timer's start() and stop() methods - (@thekid)
  • Implemented taking exceptions from tearDown() into account for test failure / success in the unittest package, see #32 - (@thekid)
  • Implemented pushing back bytes to buffered stream (see #16) (@thekid)
  • Added support for closures in annotations - #7 - (@thekid)
  • Merged xp-framework/xp-framework#353: Add support for rolling logfile names in FileAppender (and Logger) - (@thekid, @kiesel)
  • Changed Console class to print true and false for booleans instead of 1 for true and an empty string for false - (@thekid)
  • Implemented generic util.log.LogCategory::log($level, $args) See #4 - (@thekid)
  • Added util.ConfigurationException and util.ApplicationException as requested in xp-framework/xp-framework#346 - (@thekid)
  • Added support for xpcli -? for consistency reasons - (@thekid)
  • Extended the with statement to to work with lang.Closeable instances. See #2 - (@thekid)