diff --git a/README.md b/README.md index 62d68cc..f294114 100644 --- a/README.md +++ b/README.md @@ -61,8 +61,8 @@ Usage: jst [-hV] [--debug] [--in-format=] [--libraries-list=] [--classpath=]... [--ignore-prefix=]... [--enable-parchment --parchment-mappings= [--[no-]parchment-javadoc] - [--parchment-conflict-prefix=]] [--enable-accesstransformers - --access-transformer= [--access-transformer=]... + [--only-parchment-javadoc] [--parchment-conflict-prefix=]] + [--enable-accesstransformers --access-transformer= [--access-transformer=]... [--access-transformer-validation=]] [--enable-interface-injection [--interface-injection-stubs=] [--interface-injection-marker=] @@ -102,6 +102,9 @@ Plugin - parchment existing variable names --[no-]parchment-javadoc Whether Parchment javadocs should be applied + --only-parchment-javadoc + Whether to only apply Parchment javadocs, skipping parameter renaming. + Overrides the --[no-]parchment-javadoc setting --parchment-mappings= The location of the Parchment mappings file Plugin - accesstransformers diff --git a/parchment/src/main/java/net/neoforged/jst/parchment/GatherReplacementsVisitor.java b/parchment/src/main/java/net/neoforged/jst/parchment/GatherReplacementsVisitor.java index 1d57043..24ce5c5 100644 --- a/parchment/src/main/java/net/neoforged/jst/parchment/GatherReplacementsVisitor.java +++ b/parchment/src/main/java/net/neoforged/jst/parchment/GatherReplacementsVisitor.java @@ -30,6 +30,7 @@ class GatherReplacementsVisitor extends PsiRecursiveElementVisitor { private final NamesAndDocsDatabase namesAndDocs; private final boolean enableJavadoc; + private final boolean onlyJavadoc; @Nullable private final UnaryOperator conflictResolver; private final Replacements replacements; @@ -47,10 +48,12 @@ class GatherReplacementsVisitor extends PsiRecursiveElementVisitor { public GatherReplacementsVisitor(NamesAndDocsDatabase namesAndDocs, boolean enableJavadoc, + boolean onlyJavadoc, @Nullable UnaryOperator conflictResolver, Replacements replacements) { this.namesAndDocs = namesAndDocs; - this.enableJavadoc = enableJavadoc; + this.enableJavadoc = enableJavadoc || onlyJavadoc; + this.onlyJavadoc = onlyJavadoc; this.conflictResolver = conflictResolver; this.replacements = replacements; } @@ -138,34 +141,40 @@ else if (PsiHelper.isNonStaticInnerClass(psiMethod.getContainingClass())) { // implications for the field names. if (paramData != null && paramData.getName() != null && !PsiHelper.isRecordConstructor(psiMethod)) { var paramName = namer.apply(paramData.getName()); - - // We cannot rename a parameter to name that was already taken in this scope - if (activeNames.contains(paramName)) { - // If we have no conflict resolver then we simply don't try to rename this parameter - if (conflictResolver == null) { - parameterOrder.add(psiParameter.getName()); - continue; - } - - // Keep applying the conflict resolver until the name is no longer used - while (activeNames.contains(paramName)) { - paramName = conflictResolver.apply(paramName); + if (!onlyJavadoc) { + // We cannot rename a parameter to name that was already taken in this scope + if (activeNames.contains(paramName)) { + // If we have no conflict resolver then we simply don't try to rename this parameter + if (conflictResolver == null) { + parameterOrder.add(psiParameter.getName()); + continue; + } + + // Keep applying the conflict resolver until the name is no longer used + while (activeNames.contains(paramName)) { + paramName = conflictResolver.apply(paramName); + } } - } - // Replace parameters within the method body - activeParameters.put(psiParameter, paramName); - activeNames.add(paramName); + // Replace parameters within the method body + activeParameters.put(psiParameter, paramName); + activeNames.add(paramName); - // Find and replace the parameter identifier - replacements.replace(psiParameter.getNameIdentifier(), paramName); + // Find and replace the parameter identifier + replacements.replace(psiParameter.getNameIdentifier(), paramName); - // Record the replacement for remapping existing Javadoc @param tags - renamedParameters.put(psiParameter.getName(), paramName); + // Record the replacement for remapping existing Javadoc @param tags + renamedParameters.put(psiParameter.getName(), paramName); - hadReplacements = true; + hadReplacements = true; - parameterOrder.add(paramName); + parameterOrder.add(paramName); + } else { + // Remap the existing Javadoc @param tags to the param names present in the source + renamedParameters.put(paramName, psiParameter.getName()); + + parameterOrder.add(psiParameter.getName()); + } } else { parameterOrder.add(psiParameter.getName()); } @@ -208,10 +217,12 @@ else if (PsiHelper.isNonStaticInnerClass(psiMethod.getContainingClass())) { } } } else if (element instanceof PsiReferenceExpression refExpr && refExpr.getReferenceNameElement() != null) { - for (var entry : activeParameters.entrySet()) { - if (refExpr.isReferenceTo(entry.getKey())) { - replacements.replace(refExpr.getReferenceNameElement(), entry.getValue()); - break; + if (!onlyJavadoc) { + for (var entry : activeParameters.entrySet()) { + if (refExpr.isReferenceTo(entry.getKey())) { + replacements.replace(refExpr.getReferenceNameElement(), entry.getValue()); + break; + } } } } diff --git a/parchment/src/main/java/net/neoforged/jst/parchment/ParchmentTransformer.java b/parchment/src/main/java/net/neoforged/jst/parchment/ParchmentTransformer.java index 9f7f233..dffd1f4 100644 --- a/parchment/src/main/java/net/neoforged/jst/parchment/ParchmentTransformer.java +++ b/parchment/src/main/java/net/neoforged/jst/parchment/ParchmentTransformer.java @@ -26,6 +26,9 @@ public class ParchmentTransformer implements SourceTransformer { ) public boolean enableJavadoc = true; + @CommandLine.Option(names = "--only-parchment-javadoc", description = "Whether to only apply Parchment javadocs, skipping parameter renaming. Overrides the --[no-]parchment-javadoc setting") + public boolean onlyJavadoc = false; + @CommandLine.Option(names = "--parchment-conflict-prefix", description = "Apply the prefix specified if a Parchment parameter name conflicts with existing variable names") public String conflictPrefix; @@ -56,7 +59,7 @@ public void beforeRun(TransformContext context) { @Override public void visitFile(PsiFile psiFile, Replacements replacements) { - var visitor = new GatherReplacementsVisitor(namesAndDocs, enableJavadoc, conflictResolver, replacements); + var visitor = new GatherReplacementsVisitor(namesAndDocs, enableJavadoc, onlyJavadoc, conflictResolver, replacements); visitor.visitElement(psiFile); }