Neilcaffrei
- Neilcaffrei
- neilcaffrei
- Europe/Stockholm
- Yes
- No
It seems that the current mappings produce a lot of lambda$null reference for synthetic and anonymous methods, if possible it would be great to keep the name of those methods or have them in the mappings.
[Proguard example website|https://www.guardsquare.com/en/products/proguard/manual/examples] even have a paragraph about it:In the rare event that you are serializing lambda expressions in Java 8 or higher, you need to preserve some methods and adapt the hard-coded names of the classes in which they occur: -keepclassmembers class * { private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda); } -keepclassmembernames class * { private static synthetic *** lambda$*(...); } -adaptclassstrings com.example.Test This should satisfy the reflection in the deserialization code of the Java run-time.
It seems that the current mappings produce a lot of lambda$null reference for synthetic and anonymous methods, if possible it would be great to keep the name of those methods or have them in the mappings.
[Proguard example website|https://www.guardsquare.com/en/products/proguard/manual/examples] even have a paragraph about it:
In the rare event that you are serializing lambda expressions in Java 8 or higher, you need to preserve some methods and adapt the hard-coded names of the classes in which they occur: -keepclassmembers class * { private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda); } -keepclassmembernames class * { private static synthetic *** lambda$*(...); } -adaptclassstrings com.example.Test This should satisfy the reflection in the deserialization code of the Java run-time.
It seems that the current mappings produce a lot of lambda$null reference for synthetic and anonymous methods, if possible it would be great to keep the name of those methods or have them in the mappings.
[Proguard example website|https://www.guardsquare.com/en/products/proguard/manual/examples]even have a paragraph about it:In the rare event that you are serializing lambda expressions in Java 8 or higher, you need to preserve some methods and adapt the hard-coded names of the classes in which they occur: -keepclassmembers class * { private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda); } -keepclassmembernames class * { private static synthetic *** lambda$*(...); } -adaptclassstrings com.example.Test This should satisfy the reflection in the deserialization code of the Java run-time.
It seems that the current mappings produce a lot of lambda$null reference for synthetic and anonymous methods, if possible it would be great to keep the name of those methods or have them in the mappings.
Proguard example website (https://www.guardsquare.com/en/products/proguard/manual/examples) even have a paragraph about it:
In the rare event that you are serializing lambda expressions in Java 8 or higher, you need to preserve some methods and adapt the hard-coded names of the classes in which they occur: -keepclassmembers class * { private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda); } -keepclassmembernames class * { private static synthetic *** lambda$*(...); } -adaptclassstrings com.example.Test This should satisfy the reflection in the deserialization code of the Java run-time.
It seems that the current mappings produce a lot of lambda$null reference for synthetic and anonymous methods, if possible it would be great to keep the name of those methods or have them in the mappings.
Proguard example website
(https://www.guardsquare.com/en/products/proguard/manual/examples) even have a paragraph about it:In the rare event that you are serializing lambda expressions in Java 8 or higher, you need to preserve some methods and adapt the hard-coded names of the classes in which they occur: -keepclassmembers class * { private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda); } -keepclassmembernames class * { private static synthetic *** lambda$*(...); } -adaptclassstrings com.example.Test This should satisfy the reflection in the deserialization code of the Java run-time.
It seems that the current mappings produce a lot of lambda$null reference for synthetic and anonymous methods, if possible it would be great to keep the name of those methods or have them in the mappings.
Proguard example website even have a paragraph about it
https://www.guardsquare.com/en/products/proguard/manual/examples)
In the rare event that you are serializing lambda expressions in Java 8 or higher, you need to preserve some methods and adapt the hard-coded names of the classes in which they occur: -keepclassmembers class * { private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda); } -keepclassmembernames class * { private static synthetic *** lambda$*(...); } -adaptclassstrings com.example.Test This should satisfy the reflection in the deserialization code of the Java run-time.
It seems that the current mappings produce a lot of lambda$null reference for synthetic and anonymous methods, if possible it would be great to keep the name of those methods or have them in the mappings.
Proguard example website even have a paragraph about ithttps://www.guardsquare.com/en/products/proguard/manual/examples)
In the rare event that you are serializing lambda expressions in Java 8 or higher, you need to preserve some methods and adapt the hard-coded names of the classes in which they occur: -keepclassmembers class * { private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda); } -keepclassmembernames class * { private static synthetic *** lambda$*(...); } -adaptclassstrings com.example.Test This should satisfy the reflection in the deserialization code of the Java run-time.
It seems that the current mappings produce a lot of lambda$null reference for synthetic and anonymous methods, if possible it would be great to keep the name of those methods or have them in the mappings.
Proguard example website even have a paragraph about it. (https://www.guardsquare.com/en/products/proguard/manual/examples)
In the rare event that you are serializing lambda expressions in Java 8 or higher, you need to preserve some methods and adapt the hard-coded names of the classes in which they occur: -keepclassmembers class * { private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda); } -keepclassmembernames class * { private static synthetic *** lambda$*(...); } -adaptclassstrings com.example.Test This should satisfy the reflection in the deserialization code of the Java run-time.
In the current release the word vsync and the graphic quality are not separated by a space.
This is due to a mistake in the string method (or the formatter).
this.fpsString = String.format("%d fps T: %s%s%s%s B: %d", fps, (double)this.options.framerateLimit == Option.FRAMERATE_LIMIT.getMaxValue() ? "inf" : Integer.valueOf(this.options.framerateLimit), this.options.enableVsync ? " vsync" : "", this.options.graphicsMode.toString(), this.options.renderClouds == CloudStatus.OFF ? "" : (this.options.renderClouds == CloudStatus.FAST ? " fast-clouds" : " fancy-clouds"), this.options.biomeBlendRadius);as you can see in this line all the format in the 4 %s are prepended with a space if they display, all? Except one this.options.graphicsMode.toString() will return:
public String toString() { switch (this) { case FAST: { return "fast"; } case FANCY: { return "fancy"; } case FABULOUS: { return "fabulous"; } } throw new IllegalArgumentException(); }and this is not space prepended.
The fix?
just
makedo " "+this.options.graphicsMode.toString() in the formatting line.
Here a picture showing this game experience breaking bug:
In the current release the word vsync and the graphic quality are not separated by a space.
This is due to a mistake in the string method (or the formatter).
this.fpsString = String.format("%d fps T: %s%s%s%s B: %d", fps, (double)this.options.framerateLimit == Option.FRAMERATE_LIMIT.getMaxValue() ? "inf" : Integer.valueOf(this.options.framerateLimit), this.options.enableVsync ? " vsync" : "", this.options.graphicsMode.toString(), this.options.renderClouds == CloudStatus.OFF ? "" : (this.options.renderClouds == CloudStatus.FAST ? " fast-clouds" : " fancy-clouds"), this.options.biomeBlendRadius);as you can see in this line all the format in the 4 %s are prepended with a space if they display, all? Except one this.options.graphicsMode.toString() will return:
public String toString() { switch (this) { case FAST: { return "fast"; } case FANCY: { return "fancy"; } case FABULOUS: { return "fabulous"; } } throw new IllegalArgumentException(); }and this is not space prepended.
The fix?
just add a space like so " "+this.options.graphicsMode.toString() in the formatting line.
Here a picture showing this game experience breaking bug:
In the current release the word vsync and the graphic quality are not separated by a space.
This is due to a mistake in the string method (or the formatter).
this.fpsString = String.format("%d fps T: %s%s%s%s B: %d", fps, (double)this.options.framerateLimit == Option.FRAMERATE_LIMIT.getMaxValue() ? "inf" : Integer.valueOf(this.options.framerateLimit), this.options.enableVsync ? " vsync" : "", this.options.graphicsMode.toString(), this.options.renderClouds == CloudStatus.OFF ? "" : (this.options.renderClouds == CloudStatus.FAST ? " fast-clouds" : " fancy-clouds"), this.options.biomeBlendRadius);as you can see in this line all the format in the 4 %s are prepended with a space if they display, all? Except one this.options.graphicsMode.toString() will return:
public String toString() { switch (this) { case FAST: { return "fast"; } case FANCY: { return "fancy"; } case FABULOUS: { return "fabulous"; } } throw new IllegalArgumentException(); }and this is not space prepended.
The fix?
just add a space like so " "+this.options.graphicsMode.toString() in the formatting line.
Here a picture showing this game experience breaking bug:
In the current release the word vsync and the graphic quality are not separated by a space.
This is due to a mistake in the string method (or the formatter).
this.fpsString = String.format("%d fps T: %s%s%s%s B: %d", fps, (double)this.options.framerateLimit == Option.FRAMERATE_LIMIT.getMaxValue() ? "inf" : Integer.valueOf(this.options.framerateLimit), this.options.enableVsync ? " vsync" : "", this.options.graphicsMode.toString(), this.options.renderClouds == CloudStatus.OFF ? "" : (this.options.renderClouds == CloudStatus.FAST ? " fast-clouds" : " fancy-clouds"), this.options.biomeBlendRadius);as you can see in this line all the format in the 4 %s are prepended with a space if they display, all? Except one this.options.graphicsMode.toString() will return:
public String toString() { switch (this) { case FAST: { return "fast"; } case FANCY: { return "fancy"; } case FABULOUS: { return "fabulous"; } } throw new IllegalArgumentException(); }and this is not space prepended.
The fix?
just add a space like so " "+this.options.graphicsMode.toString() in the formatting line.
( or change the toString method but i would not recommend it as it is a side effect)
Here a picture showing this game experience breaking bug:
In the current release the word vsync and the graphic quality are not separated by a space.
This is due to a mistake in the string method (or the formatter).
this.fpsString = String.format("%d fps T: %s%s%s%s B: %d",fps,(double)this.options.framerateLimit == Option.FRAMERATE_LIMIT.getMaxValue() ? "inf" : Integer.valueOf(this.options.framerateLimit), this.options.enableVsync ? " vsync" : "", this.options.graphicsMode.toString(), this.options.renderClouds == CloudStatus.OFF ? "" : (this.options.renderClouds == CloudStatus.FAST ? " fast-clouds" : " fancy-clouds"), this.options.biomeBlendRadius);as you can see in this line all the format in the 4 %s are prepended with a space if they display, all? Except one this.options.graphicsMode.toString() will return:
public String toString() { switch (this) { case FAST: { return "fast"; } case FANCY: { return "fancy"; } case FABULOUS: { return "fabulous"; } } throw new IllegalArgumentException(); }and this is not space prepended.
The fix?
just add a space like so " "+this.options.graphicsMode.toString() in the formatting line.
( or change the toString method but i would not recommend it as it is a side effect)
Here a picture showing this game experience breaking bug:
In the current release the word vsync and the graphic quality are not separated by a space.
This is due to a mistake in the string method (or the formatter).
this.fpsString = String.format("%d fps T: %s%s%s%s B: %d", fps, (double)this.options.framerateLimit == Option.FRAMERATE_LIMIT.getMaxValue() ? "inf" : Integer.valueOf(this.options.framerateLimit), this.options.enableVsync ? " vsync" : "", this.options.graphicsMode.toString(), this.options.renderClouds == CloudStatus.OFF ? "" : (this.options.renderClouds == CloudStatus.FAST ? " fast-clouds" : " fancy-clouds"), this.options.biomeBlendRadius );as you can see in this line all the format in the 4 %s are prepended with a space if they display, all? Except one this.options.graphicsMode.toString() will return:
public String toString() { switch (this) { case FAST: { return "fast"; } case FANCY: { return "fancy"; } case FABULOUS: { return "fabulous"; } } throw new IllegalArgumentException(); }and this is not space prepended.
The fix?
just add a space like so " "+this.options.graphicsMode.toString() in the formatting line.
( or change the toString method but i would not recommend it as it is a side effect)
Here a picture showing this game experience breaking bug:
