You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2022/01/03 03:08:14 UTC
[groovy] branch GROOVY-4266 created (now b6f8669)
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a change to branch GROOVY-4266
in repository https://gitbox.apache.org/repos/asf/groovy.git.
at b6f8669 GROOVY-4266: stubgen: only write static imports
This branch includes the following new commits:
new b6f8669 GROOVY-4266: stubgen: only write static imports
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[groovy] 01/01: GROOVY-4266: stubgen: only write static imports
Posted by em...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY-4266
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit b6f8669c4ad4a88d87fddf09473a0e7428af5385
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)"
}
}
}
-