You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2022/01/12 07:30:44 UTC
[groovy] branch GROOVY_4_0_X updated: GROOVY-4266: stubgen: only write static imports
This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_4_0_X by this push:
new fe7d7ba GROOVY-4266: stubgen: only write static imports
fe7d7ba is described below
commit fe7d7ba1a7457dc78b6d0c12e4582a42db9fee28
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sun Jan 2 21:05:15 2022 -0600
GROOVY-4266: stubgen: only write static imports
---
.../groovy/tools/javac/JavaStubGenerator.java | 44 +++++++---------------
.../CircularLanguageReferenceTest.groovy | 12 +++---
2 files changed, 20 insertions(+), 36 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
index 80c8e10..e638fea 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
@@ -49,7 +49,6 @@ import org.codehaus.groovy.ast.stmt.Statement;
import org.codehaus.groovy.classgen.FinalVariableAnalyzer;
import org.codehaus.groovy.classgen.Verifier;
import org.codehaus.groovy.classgen.VerifierCodeVisitor;
-import org.codehaus.groovy.control.ResolveVisitor;
import org.codehaus.groovy.runtime.FormatHelper;
import org.codehaus.groovy.tools.Utilities;
import org.codehaus.groovy.transform.trait.Traits;
@@ -174,14 +173,13 @@ public class JavaStubGenerator {
javaStubCompilationUnitSet.add(new RawJavaFileObject(createJavaStubFile(fileName).toPath().toUri()));
}
- private static final int DEFAULT_BUFFER_SIZE = 8 * 1024; // 8K
-
private String generateStubContent(ClassNode classNode) {
- Writer writer = new StringBuilderWriter(DEFAULT_BUFFER_SIZE);
-
+ Writer writer = new StringBuilderWriter(8192);
try (PrintWriter out = new PrintWriter(writer)) {
boolean packageInfo = "package-info".equals(classNode.getNameWithoutPackage());
String packageName = classNode.getPackageName();
+ currentModule = classNode.getModule();
+
if (packageName != null) {
if (packageInfo) {
printAnnotations(out, classNode.getPackage());
@@ -191,11 +189,12 @@ public class JavaStubGenerator {
// should just output the package statement for `package-info` class node
if (!packageInfo) {
- printImports(out, classNode);
+ printImports(out);
printClassContents(out, classNode);
}
+ } finally {
+ currentModule = null;
}
-
return writer.toString();
}
@@ -323,7 +322,6 @@ public class JavaStubGenerator {
if (origNumConstructors == 0 && classNode.getDeclaredConstructors().size() == 1) {
classNode.getDeclaredConstructors().clear();
}
- currentModule = classNode.getModule();
boolean isInterface = isInterfaceOrTrait(classNode);
boolean isEnum = classNode.isEnum();
@@ -390,7 +388,6 @@ public class JavaStubGenerator {
propertyMethods.clear();
propertyMethodsWithSigs.clear();
constructors.clear();
- currentModule = null;
}
}
@@ -983,7 +980,7 @@ public class JavaStubGenerator {
val = ((Expression) memberValue).getText();
} else if (memberValue instanceof VariableExpression) {
val = ((Expression) memberValue).getText();
- //check for an alias
+ // check for an alias
ImportNode alias = currentModule.getStaticImports().get(val);
if (alias != null)
val = alias.getClassName() + "." + alias.getFieldName();
@@ -1020,34 +1017,21 @@ public class JavaStubGenerator {
out.print("abstract ");
}
- private static void printImports(PrintWriter out, ClassNode classNode) {
- List<String> imports = new ArrayList<>();
- ModuleNode module = classNode.getModule();
-
- for (ImportNode imp : module.getImports()) {
- if (imp.getAlias() == null) imports.add(imp.getType().getName());
- }
-
- for (ImportNode imp : module.getStarImports()) {
- imports.add(imp.getPackageName());
- }
-
- Collections.addAll(imports, ResolveVisitor.DEFAULT_IMPORTS);
+ private void printImports(final PrintWriter out) {
+ Map<String, ImportNode> staticImports = currentModule.getStaticImports();
+ Map<String, ImportNode> staticStarImports = currentModule.getStaticStarImports();
- for (Map.Entry<String, ImportNode> entry : module.getStaticImports().entrySet()) {
+ for (Map.Entry<String, ImportNode> entry : staticImports.entrySet()) {
String memberName = entry.getKey();
if (memberName.equals(entry.getValue().getFieldName())
&& !Character.isLowerCase(memberName.charAt(0))) // GROOVY-7510
- imports.add("static " + entry.getValue().getType().getName() + "." + memberName);
+ out.println("import static " + entry.getValue().getType().getName().replace('$', '.') + "." + memberName + ";");
}
- for (Map.Entry<String, ImportNode> entry : module.getStaticStarImports().entrySet()) {
- imports.add("static " + entry.getValue().getType().getName() + ".");
+ for (ImportNode ssi : staticStarImports.values()) {
+ out.println("import static " + ssi.getType().getName().replace('$', '.') + ".*;");
}
- for (String imp : imports) {
- out.println("import " + imp.replace('$', '.') + (imp.endsWith(".") ? "*;" : ";"));
- }
out.println();
}
diff --git a/src/test/org/codehaus/groovy/tools/stubgenerator/CircularLanguageReferenceTest.groovy b/src/test/org/codehaus/groovy/tools/stubgenerator/CircularLanguageReferenceTest.groovy
index c56f16f..b124bc2 100644
--- a/src/test/org/codehaus/groovy/tools/stubgenerator/CircularLanguageReferenceTest.groovy
+++ b/src/test/org/codehaus/groovy/tools/stubgenerator/CircularLanguageReferenceTest.groovy
@@ -25,17 +25,17 @@ package org.codehaus.groovy.tools.stubgenerator
*
* The test below looks at the characteristics of the stub generated in Java for the Rectangle class.
*/
-class CircularLanguageReferenceTest extends StubTestCase {
+final class CircularLanguageReferenceTest extends StubTestCase {
+ @Override
void verifyStubs() {
classes['stubgenerator.circularLanguageReference.Rectangle'].with {
- assert methods['area' ].signature == "public double area()"
- assert methods['Rectangle'].signature == "public Rectangle(double x, double y)"
+ assert !imports
assert !annotations
- assert interfaces.toSet() == ['groovy.lang.GroovyObject', 'stubgenerator.circularLanguageReference.Shape'] as Set
assert baseClass == 'java.lang.Object'
- assert imports == ['java.lang.*', 'java.util.*', 'java.io.*', 'java.net.*', 'groovy.lang.*', 'groovy.util.*']
+ assert interfaces.toSet() == ['groovy.lang.GroovyObject', 'stubgenerator.circularLanguageReference.Shape'] as Set
+ assert methods['area' ].signature == "public double area()"
+ assert methods['Rectangle'].signature == "public Rectangle(double x, double y)"
}
}
}
-