Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support per-element-metadata #41

Draft
wants to merge 22 commits into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
4c72e69
Move Tiny properties to separate class
NebelNidas May 9, 2023
c00c98b
Remove duplicate `escaped-names` property
NebelNidas May 9, 2023
07238f9
Prevent instantiation of `TinyProperties` class
NebelNidas Jun 30, 2023
7e1f237
Create cross-format `StandardProperties` class
NebelNidas Sep 15, 2023
7709261
Fix checkstyle
NebelNidas Sep 18, 2023
98f04f7
Add missing license headers
NebelNidas Sep 20, 2023
14d047d
Fix Tiny v1 metadata detection
NebelNidas Sep 20, 2023
76c2a89
Don't read properties from non-applicable formats
NebelNidas Sep 20, 2023
3348d45
Use builder for standard properties
NebelNidas Sep 20, 2023
2b4ead1
Consolidate builder functionality into `StandardPropertyImpl`
NebelNidas Sep 24, 2023
426bfb0
Properly handle multiple metadata entries with same key
NebelNidas May 9, 2023
1bc07fb
Fix `MetadataEntry`'s `equals` and `hashCode` methods
NebelNidas Sep 17, 2023
d6f7a4d
Always override existing metadata entries, use Map under the hood
NebelNidas Sep 18, 2023
a22d759
Remove unused imports
NebelNidas Sep 18, 2023
39e6781
Revert to previous design
NebelNidas Sep 29, 2023
bea6a69
Expose `MetadataEntry`s instead of `Map.Entry<String, String>`
NebelNidas Sep 29, 2023
803986f
Use `NEEDS_UNIQUENESS` flag instead of `overrideExisting`
NebelNidas Sep 30, 2023
2b2b6a2
Add new placeholder `MetadataEntry` interface
NebelNidas Sep 30, 2023
a7d1bf7
Add tests
NebelNidas Sep 30, 2023
cbc1a0c
Add per-element-metadata
NebelNidas Sep 20, 2023
3662dc4
Remove misleading comment
NebelNidas Oct 1, 2023
40494fb
Remove unused import
NebelNidas Oct 1, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 85 additions & 14 deletions src/main/java/net/fabricmc/mappingio/FlatMappingVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,23 +57,34 @@ default boolean visitContent() throws IOException {
}

boolean visitClass(String srcName, String[] dstNames) throws IOException;
void visitClassMetadata(String srcName, String[] dstNames, String propertyKey, String[] propertyValues) throws IOException;
void visitClassComment(String srcName, String[] dstNames, String comment) throws IOException;

boolean visitField(String srcClsName, String srcName, String srcDesc,
String[] dstClsNames, String[] dstNames, String[] dstDescs) throws IOException;
void visitFieldMetadata(String srcClsName, String srcName, String srcDesc,
String[] dstClsNames, String[] dstNames, String[] dstDescs,
String propertyKey, String[] propertyValues) throws IOException;
void visitFieldComment(String srcClsName, String srcName, String srcDesc,
String[] dstClsNames, String[] dstNames, String[] dstDescs,
String comment) throws IOException;

boolean visitMethod(String srcClsName, String srcName, String srcDesc,
String[] dstClsNames, String[] dstNames, String[] dstDescs) throws IOException;
void visitMethodMetadata(String srcClsName, String srcName, String srcDesc,
String[] dstClsNames, String[] dstNames, String[] dstDescs,
String propertyKey, String[] propertyValues) throws IOException;
void visitMethodComment(String srcClsName, String srcName, String srcDesc,
String[] dstClsNames, String[] dstNames, String[] dstDescs,
String comment) throws IOException;

boolean visitMethodArg(String srcClsName, String srcMethodName, String srcMethodDesc,
int argPosition, int lvIndex, String srcArgName,
String[] dstClsNames, String[] dstMethodNames, String[] dstMethodDescs, String[] dstArgNames) throws IOException;
void visitMethodArgMetadata(String srcClsName, String srcMethodName, String srcMethodDesc,
int argPosition, int lvIndex, String srcArgName,
String[] dstClsNames, String[] dstMethodNames, String[] dstMethodDescs, String[] dstArgNames,
String propertyKey, String[] propertyValues) throws IOException;
void visitMethodArgComment(String srcClsName, String srcMethodName, String srcMethodDesc,
int argPosition, int lvIndex, String srcArgName,
String[] dstClsNames, String[] dstMethodNames, String[] dstMethodDescs, String[] dstArgNames,
Expand All @@ -82,6 +93,10 @@ void visitMethodArgComment(String srcClsName, String srcMethodName, String srcMe
boolean visitMethodVar(String srcClsName, String srcMethodName, String srcMethodDesc,
int lvtRowIndex, int lvIndex, int startOpIdx, int endOpIdx, String srcVarName,
String[] dstClsNames, String[] dstMethodNames, String[] dstMethodDescs, String[] dstVarNames) throws IOException;
void visitMethodVarMetadata(String srcClsName, String srcMethodName, String srcMethodDesc,
int lvtRowIndex, int lvIndex, int startOpIdx, int endOpIdx, String srcVarName,
String[] dstClsNames, String[] dstMethodNames, String[] dstMethodDescs, String[] dstVarNames,
String propertyKey, String[] propertyValues) throws IOException;
void visitMethodVarComment(String srcClsName, String srcMethodName, String srcMethodDesc,
int lvtRowIndex, int lvIndex, int startOpIdx, int endOpIdx, String srcVarName,
String[] dstClsNames, String[] dstMethodNames, String[] dstMethodDescs, String[] dstVarNames,
Expand Down Expand Up @@ -135,37 +150,53 @@ default boolean visitMethodVar(String srcClsName, String srcMethodName, String s

// convenience / potentially higher efficiency visit methods for only one dst name

// Class
default boolean visitClass(String srcName, String dstName) throws IOException {
return visitClass(srcName, toArray(dstName));
}

default void visitClassMetadata(String srcName, String propertyKey, String[] propertyValues) throws IOException {
visitClassMetadata(srcName, (String) null, propertyKey, propertyValues);
}
default void visitClassMetadata(String srcName, String dstName, String propertyKey, String[] propertyValues) throws IOException {
visitClassMetadata(srcName, toArray(dstName), propertyKey, propertyValues);
}
default void visitClassComment(String srcName, String comment) throws IOException {
visitClassComment(srcName, (String) null, comment);
}

default void visitClassComment(String srcName, String dstName, String comment) throws IOException {
visitClassComment(srcName, toArray(dstName), comment);
}

// Field
default boolean visitField(String srcClsName, String srcName, String srcDesc,
String dstName) throws IOException {
return visitField(srcClsName, srcName, srcDesc,
null, dstName, null);
}

default boolean visitField(String srcClsName, String srcName, String srcDesc,
String dstClsName, String dstName, String dstDesc) throws IOException {
return visitField(srcClsName, srcName, srcDesc,
toArray(dstClsName), toArray(dstName), toArray(dstDesc));
}

default void visitFieldMetadata(String srcClsName, String srcName, String srcDesc,
String propertyKey, String[] propertyValues) throws IOException {
visitFieldMetadata(srcClsName, srcName, srcDesc,
(String) null, null, null,
propertyKey, propertyValues);
}
default void visitFieldMetadata(String srcClsName, String srcName, String srcDesc,
String dstClsName, String dstName, String dstDesc,
String propertyKey, String[] propertyValues) throws IOException {
visitFieldMetadata(srcClsName, srcName, srcDesc,
toArray(dstClsName), toArray(dstName), toArray(dstDesc),
propertyKey, propertyValues);
}
default void visitFieldComment(String srcClsName, String srcName, String srcDesc,
String comment) throws IOException {
visitFieldComment(srcClsName, srcName, srcDesc,
(String) null, null, null,
comment);
}

default void visitFieldComment(String srcClsName, String srcName, String srcDesc,
String dstClsName, String dstName, String dstDesc,
String comment) throws IOException {
Expand All @@ -174,25 +205,36 @@ default void visitFieldComment(String srcClsName, String srcName, String srcDesc
comment);
}

// Method
default boolean visitMethod(String srcClsName, String srcName, String srcDesc,
String dstName) throws IOException {
return visitMethod(srcClsName, srcName, srcDesc,
null, dstName, null);
}

default boolean visitMethod(String srcClsName, String srcName, String srcDesc,
String dstClsName, String dstName, String dstDesc) throws IOException {
return visitMethod(srcClsName, srcName, srcDesc,
toArray(dstClsName), toArray(dstName), toArray(dstDesc));
}

default void visitMethodMetadata(String srcClsName, String srcName, String srcDesc,
String propertyKey, String[] propertyValues) throws IOException {
visitMethodMetadata(srcClsName, srcName, srcDesc,
(String) null, null, null,
propertyKey, propertyValues);
}
default void visitMethodMetadata(String srcClsName, String srcName, String srcDesc,
String dstClsName, String dstName, String dstDesc,
String propertyKey, String[] propertyValues) throws IOException {
visitMethodMetadata(srcClsName, srcName, srcDesc,
toArray(dstClsName), toArray(dstName), toArray(dstDesc),
propertyKey, propertyValues);
}
default void visitMethodComment(String srcClsName, String srcName, String srcDesc,
String comment) throws IOException {
visitMethodComment(srcClsName, srcName, srcDesc,
(String) null, null, null,
comment);
}

default void visitMethodComment(String srcClsName, String srcName, String srcDesc,
String dstClsName, String dstName, String dstDesc,
String comment) throws IOException {
Expand All @@ -201,22 +243,37 @@ default void visitMethodComment(String srcClsName, String srcName, String srcDes
comment);
}

// Method Arg
default boolean visitMethodArg(String srcClsName, String srcMethodName, String srcMethodDesc,
int argPosition, int lvIndex, String srcArgName,
String dstArgName) throws IOException {
return visitMethodArg(srcClsName, srcMethodName, srcMethodDesc,
argPosition, lvIndex, srcArgName,
null, null, null, dstArgName);
}

default boolean visitMethodArg(String srcClsName, String srcMethodName, String srcMethodDesc,
int argPosition, int lvIndex, String srcArgName,
String dstClsName, String dstMethodName, String dstMethodDesc, String dstArgName) throws IOException {
return visitMethodArg(srcClsName, srcMethodName, srcMethodDesc,
argPosition, lvIndex, srcArgName,
toArray(dstClsName), toArray(dstMethodName), toArray(dstMethodDesc), toArray(dstArgName));
}

default void visitMethodArgMetadata(String srcClsName, String srcMethodName, String srcMethodDesc,
int argPosition, int lvIndex, String srcArgName,
String propertyKey, String[] propertyValues) throws IOException {
visitMethodArgMetadata(srcClsName, srcMethodName, srcMethodDesc,
argPosition, lvIndex, srcArgName,
(String) null, null, null, null,
propertyKey, propertyValues);
}
default void visitMethodArgMetadata(String srcClsName, String srcMethodName, String srcMethodDesc,
int argPosition, int lvIndex, String srcArgName,
String dstClsName, String dstMethodName, String dstMethodDesc, String dstArgName,
String propertyKey, String[] propertyValues) throws IOException {
visitMethodArgMetadata(srcClsName, srcMethodName, srcMethodDesc, argPosition, lvIndex, srcArgName,
toArray(dstClsName), toArray(dstMethodName), toArray(dstMethodDesc), toArray(dstArgName),
propertyKey, propertyValues);
}
default void visitMethodArgComment(String srcClsName, String srcMethodName, String srcMethodDesc,
int argPosition, int lvIndex, String srcArgName,
String comment) throws IOException {
Expand All @@ -225,7 +282,6 @@ default void visitMethodArgComment(String srcClsName, String srcMethodName, Stri
(String) null, null, null, null,
comment);
}

default void visitMethodArgComment(String srcClsName, String srcMethodName, String srcMethodDesc,
int argPosition, int lvIndex, String srcArgName,
String dstClsName, String dstMethodName, String dstMethodDesc, String dstArgName,
Expand All @@ -235,22 +291,38 @@ default void visitMethodArgComment(String srcClsName, String srcMethodName, Stri
comment);
}

// Method Var
default boolean visitMethodVar(String srcClsName, String srcMethodName, String srcMethodDesc,
int lvtRowIndex, int lvIndex, int startOpIdx, int endOpIdx, String srcVarName,
String dstVarName) throws IOException {
return visitMethodVar(srcClsName, srcMethodName, srcMethodDesc,
lvtRowIndex, lvIndex, startOpIdx, endOpIdx, srcVarName,
null, null, null, dstVarName);
}

default boolean visitMethodVar(String srcClsName, String srcMethodName, String srcMethodDesc,
int lvtRowIndex, int lvIndex, int startOpIdx, int endOpIdx, String srcVarName,
String dstClsName, String dstMethodName, String dstMethodDesc, String dstVarName) throws IOException {
return visitMethodVar(srcClsName, srcMethodName, srcMethodDesc,
lvtRowIndex, lvIndex, startOpIdx, endOpIdx, srcVarName,
toArray(dstClsName), toArray(dstMethodName), toArray(dstMethodDesc), toArray(dstVarName));
}

default void visitMethodVarMetadata(String srcClsName, String srcMethodName, String srcMethodDesc,
int lvtRowIndex, int lvIndex, int startOpIdx, int endOpIdx, String srcVarName,
String propertyKey, String[] propertyValues) throws IOException {
visitMethodVarMetadata(srcClsName, srcMethodName, srcMethodDesc,
lvtRowIndex, lvIndex, startOpIdx, endOpIdx, srcVarName,
(String) null, null, null, null,
propertyKey, propertyValues);
}
default void visitMethodVarMetadata(String srcClsName, String srcMethodName, String srcMethodDesc,
int lvtRowIndex, int lvIndex, int startOpIdx, int endOpIdx, String srcVarName,
String dstClsName, String dstMethodName, String dstMethodDesc, String dstVarName,
String propertyKey, String[] propertyValues) throws IOException {
visitMethodVarMetadata(srcClsName, srcMethodName, srcMethodDesc,
lvtRowIndex, lvIndex, startOpIdx, endOpIdx, srcVarName,
toArray(dstClsName), toArray(dstMethodName), toArray(dstMethodDesc), toArray(dstVarName),
propertyKey, propertyValues);
}
default void visitMethodVarComment(String srcClsName, String srcMethodName, String srcMethodDesc,
int lvtRowIndex, int lvIndex, int startOpIdx, int endOpIdx, String srcVarName,
String comment) throws IOException {
Expand All @@ -259,7 +331,6 @@ default void visitMethodVarComment(String srcClsName, String srcMethodName, Stri
(String) null, null, null, null,
comment);
}

default void visitMethodVarComment(String srcClsName, String srcMethodName, String srcMethodDesc,
int lvtRowIndex, int lvIndex, int startOpIdx, int endOpIdx, String srcVarName,
String dstClsName, String dstMethodName, String dstMethodDesc, String dstVarName,
Expand Down
15 changes: 10 additions & 5 deletions src/main/java/net/fabricmc/mappingio/MappingVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@
* <ul><li>overall: header -> content -> End -> overall
* <li>header: Header -> Namespaces [-> Metadata]*
* <li>content: Content [-> class|Metadata]*
* <li>class: Class [-> DstName]* -> ElementContent [-> field|method|Comment]*
* <li>field: Field [-> DstName|DstDesc]* -> ElementContent [-> Comment]
* <li>method: Method [-> DstName|DstDesc]* -> ElementContent [-> arg|var|Comment]*
* <li>arg: Arg [-> DstName]* -> ElementContent [-> Comment]
* <li>var: Var [-> DstName]* -> ElementContent [-> Comment]
* <li>class: Class [-> DstName]* -> ElementContent [-> ElementMetadata|field|method|Comment]*
* <li>field: Field [-> DstName|DstDesc]* -> ElementContent [-> ElementMetadata|Comment]*
* <li>method: Method [-> DstName|DstDesc]* -> ElementContent [-> ElementMetadata|arg|var|Comment]*
* <li>arg: Arg [-> DstName]* -> ElementContent [-> ElementMetadata|Comment]*
* <li>var: Var [-> DstName]* -> ElementContent [-> ElementMetadata|Comment]*
* </ul>
*
* <p>The elements with a skip-return (Header/Content/Class/Field/Method/Arg/Var/ElementContent) abort processing the
Expand Down Expand Up @@ -118,6 +118,11 @@ default boolean visitElementContent(MappedElementKind targetKind) throws IOExcep
return true;
}

/**
* Metadata for the specified element (last content-visited or any parent).
*/
default void visitElementMetadata(MappedElementKind targetKind, String key, int namespace, String value) throws IOException { }

/**
* Comment for the specified element (last content-visited or any parent).
*
Expand Down
Loading