Skip to content

Commit 0830b1c

Browse files
authored
Add a plugin for unpick v3 (#52)
1 parent 8a68e8b commit 0830b1c

File tree

41 files changed

+1836
-7
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1836
-7
lines changed

README.md

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,24 +53,27 @@ To create the executable jar with your custom transformer, you should shadow the
5353
Note that this tool is not intended to be run by users directly. Rather it is integrated into
5454
the [NeoGradle](https://github.com/neoforged/NeoGradle) build process.
5555

56-
It can be invoked as a standalone executable Jar-File. Java 17 is required.
56+
It can be invoked as a standalone executable Jar-File. Java 21 is required.
5757

5858
```
59-
Usage: jst [-hV] [--in-format=<inputFormat>] [--libraries-list=<librariesList>]
59+
Usage: jst [-hV] [--debug] [--in-format=<inputFormat>] [--libraries-list=<librariesList>]
6060
[--max-queue-depth=<maxQueueDepth>] [--out-format=<outputFormat>]
61-
[--classpath=<addToClasspath>]... [--ignore-prefix=<ignoredPrefixes>]...
62-
[--enable-parchment --parchment-mappings=<mappingsPath> [--[no-]parchment-javadoc]
61+
[--problems-report=<problemsReport>] [--classpath=<addToClasspath>]...
62+
[--ignore-prefix=<ignoredPrefixes>]... [--enable-parchment
63+
--parchment-mappings=<mappingsPath> [--[no-]parchment-javadoc]
6364
[--parchment-conflict-prefix=<conflictPrefix>]] [--enable-accesstransformers
6465
--access-transformer=<atFiles> [--access-transformer=<atFiles>]...
6566
[--access-transformer-validation=<validation>]] [--enable-interface-injection
6667
[--interface-injection-stubs=<stubOut>]
6768
[--interface-injection-marker=<annotationMarker>]
68-
[--interface-injection-data=<paths>]...] INPUT OUTPUT
69+
[--interface-injection-data=<paths>]...] [--enable-unpick [--unpick-data=<paths>]...]
70+
INPUT OUTPUT
6971
INPUT Path to a single Java-file, a source-archive or a folder containing the
7072
source to transform.
7173
OUTPUT Path to where the resulting source should be placed.
7274
--classpath=<addToClasspath>
7375
Additional classpath entries to use. Is combined with --libraries-list.
76+
--debug Print additional debugging information
7477
-h, --help Show this help message and exit.
7578
--ignore-prefix=<ignoredPrefixes>
7679
Do not apply transformations to paths that start with any of these
@@ -89,6 +92,8 @@ Usage: jst [-hV] [--in-format=<inputFormat>] [--libraries-list=<librariesList>]
8992
--out-format=<outputFormat>
9093
Specify the format of OUTPUT explicitly. Allows the same options as
9194
--in-format.
95+
--problems-report=<problemsReport>
96+
Write problems to this report file.
9297
-V, --version Print version information and exit.
9398
Plugin - parchment
9499
--enable-parchment Enable parchment
@@ -116,6 +121,10 @@ Plugin - interface-injection
116121
injected interfaces
117122
--interface-injection-stubs=<stubOut>
118123
The path to a zip to save interface stubs in
124+
Plugin - unpick
125+
--enable-unpick Enable unpick
126+
--unpick-data=<paths>
127+
The paths to read unpick definition files from
119128
```
120129

121130
## Licenses

api/src/main/java/net/neoforged/jst/api/PsiHelper.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22

33
import com.intellij.lang.jvm.types.JvmPrimitiveTypeKind;
44
import com.intellij.psi.PsiClass;
5+
import com.intellij.psi.PsiElement;
6+
import com.intellij.psi.PsiExpression;
57
import com.intellij.psi.PsiMethod;
68
import com.intellij.psi.PsiModifier;
79
import com.intellij.psi.PsiParameter;
810
import com.intellij.psi.PsiParameterListOwner;
911
import com.intellij.psi.PsiPrimitiveType;
12+
import com.intellij.psi.PsiReferenceExpression;
1013
import com.intellij.psi.PsiTypeParameter;
1114
import com.intellij.psi.PsiTypes;
1215
import com.intellij.psi.PsiWhiteSpace;
@@ -17,6 +20,7 @@
1720
import com.intellij.psi.util.PsiTreeUtil;
1821
import com.intellij.util.containers.ObjectIntHashMap;
1922
import org.jetbrains.annotations.NotNull;
23+
import org.jetbrains.annotations.Nullable;
2024

2125
import java.util.ArrayList;
2226
import java.util.Iterator;
@@ -242,4 +246,13 @@ public static int getLastLineLength(PsiWhiteSpace psiWhiteSpace) {
242246
return psiWhiteSpace.getTextLength();
243247
}
244248
}
249+
250+
@Nullable
251+
public static PsiElement resolve(PsiReferenceExpression expression) {
252+
try {
253+
return expression.resolve();
254+
} catch (Exception ignored) {
255+
return null;
256+
}
257+
}
245258
}

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ subprojects {
2323

2424
java {
2525
toolchain {
26-
languageVersion = JavaLanguageVersion.of(17)
26+
languageVersion = JavaLanguageVersion.of(21)
2727
}
2828
}
2929

cli/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ dependencies {
3434
include project(":parchment")
3535
include project(":accesstransformers")
3636
include project(':interfaceinjection')
37+
include project(':unpick')
3738

3839
testImplementation platform("org.junit:junit-bom:$junit_version")
3940
testImplementation 'org.junit.jupiter:junit-jupiter'

cli/src/main/java/net/neoforged/jst/cli/io/FolderFileSink.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ public void putDirectory(String relativePath) throws IOException {
1818
public void putFile(String relativePath, FileTime lastModified, byte[] content) throws IOException {
1919
var targetPath = path.resolve(relativePath);
2020

21-
if (targetPath.getParent() != null && !Files.isDirectory(targetPath.getParent()))
21+
if (targetPath.getParent() != null && !Files.isDirectory(targetPath.getParent())) {
2222
Files.createDirectories(targetPath.getParent());
23+
}
2324

2425
Files.write(targetPath, content);
2526
Files.setLastModifiedTime(targetPath, lastModified);

settings.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,4 @@ include 'parchment'
4141
include 'tests'
4242
include 'accesstransformers'
4343
include 'interfaceinjection'
44+
include 'unpick'

tests/data/unpick/const/def.unpick

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
unpick v3
2+
3+
group String
4+
com.example.Constants.VERSION
5+
6+
group float
7+
@strict
8+
java.lang.Math.PI
9+
java.lang.Math.PI / 3
10+
11+
group float
12+
com.example.Constants.FLOAT_CT
13+
14+
group long
15+
com.example.Constants.LONG_VAL
16+
(com.example.Constants.LONG_VAL + 1) * 2
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.example;
2+
3+
public class Constants {
4+
public static final String VERSION = "1.21.4";
5+
6+
public static final float FLOAT_CT = 2.5;
7+
8+
public static final long LONG_VAL = 34L;
9+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.stuff;
2+
3+
import com.example.Constants;
4+
5+
public class Uses {
6+
public String fld = Constants.VERSION;
7+
8+
void run() {
9+
String s = Constants.VERSION + "2";
10+
11+
float f = Math.PI;
12+
13+
f = Math.PI / 3;
14+
15+
double d = 3.141592653589793d; // PI unpick is strict float so this should not be replaced
16+
17+
d = Constants.FLOAT_CT; // but the other float unpick isn't so this double literal should be replaced
18+
19+
System.out.println(Long.toHexString((Constants.LONG_VAL + 1) * 2));
20+
}
21+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.example;
2+
3+
public class Constants {
4+
public static final String VERSION = "1.21.4";
5+
6+
public static final float FLOAT_CT = 2.5;
7+
8+
public static final long LONG_VAL = 34L;
9+
}

0 commit comments

Comments
 (0)