Giter Club home page Giter Club logo

jdk-classfile-preview's Introduction

Unofficial JDK Classfile API Backport

Maven Central

This is a (very) unofficial backport to JDK 17 of the new classfile API found in JDK 21 and later. That API is non-public (not even preview) at the time of this writing, so this project gives no compatibility guarnatees and in fact may break compatibility at any time with no notice.

However, it should suffice to allow projects to test out the new API and give feedback which could then potentially even be relayed to the upstream project.

Bugs in this project should be reported to https://github.com/dmlloyd/jdk-classfile-preview/issues first. Bugs in this project are likely to be a result of backporting. Some bugs might be relayed upstream by the project maintainer(s), subject to testing and verification; in this case, the upstream bug will be linked for easier tracking.

Releases

There is, at present, no release schedule. The maintainer(s) may, at their discretion and at any time, update the upstream snapshot, and manually apply differences from the upstream project into the downstream backport.

If you encounter a bug which has been fixed in this project but not yet released, feel free to open an issue to request a release.

Getting started

After adding the appropriate Maven dependency (see the Maven release badge above), the easiest entry points are:

For parsing a class:

byte[] b = Files.readAllBytes(Path.of("some/file.class"));
ClassModel model = ClassFile.of().parse(b);
// now, do something with `model`...

Or for writing a class:

byte[] b = ClassFile.of().build(classDesc, classBuilder -> {
    // ... build the class here ...
});

jdk-classfile-preview's People

Contributors

dependabot[bot] avatar dmlloyd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

lwr84 scottmarlow

jdk-classfile-preview's Issues

Crash in signature parser, would like something easier to understand

Compiling and running the following code crash with

import io.github.dmlloyd.classfile.ClassSignature;

public class Crash {
    public static void main(String[] args) {
	String goodSignature = "Ljava/lang/Object;Ljava/lang/Iterable<LFoo;>;";
	String badSignature = "Ljava/lang/Object;Ljava/lang/Iterable<LFoo;>";

	System.out.println ("Trying to parse good signature");
	ClassSignature.parseFrom (goodSignature);
	System.out.println ("Trying to parse bad signature");
	ClassSignature.parseFrom (badSignature);
    }
}

The stack trace looks like:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
	at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
	at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
	at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
	at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
	at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
	at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
	at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
	at java.base/java.lang.String.checkIndex(String.java:4828)
	at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:46)
	at java.base/java.lang.String.charAt(String.java:1555)
	at io.github.dmlloyd.classfile.impl.SignaturesImpl.referenceTypeSig(SignaturesImpl.java:137)
	at io.github.dmlloyd.classfile.impl.SignaturesImpl.parseClassSignature(SignaturesImpl.java:53)
	at io.github.dmlloyd.classfile.ClassSignature.parseFrom(ClassSignature.java:80)
	at Crash.main(Crash.java:12)

The SIOIBE is hard to understand!
I would be fine with a crash, if it was a bit more helpful, perhaps "IllegalArgumentException: invalid signature" and if it could also say "Missing ";" at position 44" then that would be great.

Documentation still uses Classfile, but the name was changed to ClassFile

Looking at the web page and we find "ClassModel model = Classfile.of().parse(b);" as one example of how to use the library.
This does not compile. The class name was changed in a recent merge to ClassFile.

This affects the README.md file, but possibly also other files in the project.

Expected:
Updates to the documentation/examples.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.