aboutsummaryrefslogtreecommitdiffstats
path: root/bundle-plugin/src/main/java/com/yahoo/container/plugin
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-02-01 12:45:45 +0100
committerJon Bratseth <bratseth@gmail.com>2022-02-01 12:45:45 +0100
commit3973e39a4637be97a5579e7a657476e1a0b8d917 (patch)
treebb110e2bee8eca7afc646c44f35152c44f4d6736 /bundle-plugin/src/main/java/com/yahoo/container/plugin
parenta3ac1da80933462fcb332839074efbddaf661023 (diff)
Import types referenced in lambdas
Diffstat (limited to 'bundle-plugin/src/main/java/com/yahoo/container/plugin')
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Analyze.java19
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassVisitor.java4
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeFieldVisitor.java2
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeMethodVisitor.java6
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeSignatureVisitor.java5
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ClassFileMetaData.java2
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ExportPackageAnnotation.java2
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ImportCollector.java2
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java2
9 files changed, 32 insertions, 12 deletions
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Analyze.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Analyze.java
index 054e820b1a4..7c34539921b 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Analyze.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Analyze.java
@@ -13,7 +13,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.Optional;
-
/**
* Main entry point for class analysis
*
@@ -21,6 +20,7 @@ import java.util.Optional;
* @author ollivir
*/
public class Analyze {
+
public static ClassFileMetaData analyzeClass(File classFile) {
return analyzeClass(classFile, null);
}
@@ -44,7 +44,7 @@ public class Analyze {
}
static Optional<String> internalNameToClassName(String internalClassName) {
- if(internalClassName == null) {
+ if (internalClassName == null) {
return Optional.empty();
} else {
return getClassName(Type.getObjectType(internalClassName));
@@ -53,12 +53,14 @@ public class Analyze {
static Optional<String> getClassName(Type aType) {
switch (aType.getSort()) {
- case Type.ARRAY:
- return getClassName(aType.getElementType());
- case Type.OBJECT:
- return Optional.of(aType.getClassName());
- default:
- return Optional.empty();
+ case Type.ARRAY:
+ return getClassName(aType.getElementType());
+ case Type.OBJECT:
+ return Optional.of(aType.getClassName());
+ case Type.METHOD:
+ return getClassName(aType.getReturnType());
+ default:
+ return Optional.empty();
}
}
@@ -89,4 +91,5 @@ public class Analyze {
}
};
}
+
}
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassVisitor.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassVisitor.java
index 88b752ae945..307509f0452 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassVisitor.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassVisitor.java
@@ -24,8 +24,9 @@ import java.util.Set;
* @author ollivir
*/
class AnalyzeClassVisitor extends ClassVisitor implements ImportCollector {
+
private String name = null;
- private Set<String> imports = new HashSet<>();
+ private final Set<String> imports = new HashSet<>();
private Optional<ExportPackageAnnotation> exportPackageAnnotation = Optional.empty();
private final Optional<ArtifactVersion> defaultExportPackageVersion;
@@ -168,4 +169,5 @@ class AnalyzeClassVisitor extends ClassVisitor implements ImportCollector {
assert (!imports.contains("int"));
return new ClassFileMetaData(name, imports, exportPackageAnnotation);
}
+
}
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeFieldVisitor.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeFieldVisitor.java
index b4c44c9ed40..051df41d62b 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeFieldVisitor.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeFieldVisitor.java
@@ -14,6 +14,7 @@ import java.util.Set;
* @author ollivir
*/
public class AnalyzeFieldVisitor extends FieldVisitor implements ImportCollector {
+
private final AnalyzeClassVisitor analyzeClassVisitor;
private final Set<String> imports = new HashSet<>();
@@ -46,4 +47,5 @@ public class AnalyzeFieldVisitor extends FieldVisitor implements ImportCollector
public void visitEnd() {
analyzeClassVisitor.addImports(imports);
}
+
}
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeMethodVisitor.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeMethodVisitor.java
index b7d1291d54a..7913f315cdd 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeMethodVisitor.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeMethodVisitor.java
@@ -20,7 +20,9 @@ import java.util.Set;
* @author ollivir
*/
class AnalyzeMethodVisitor extends MethodVisitor implements ImportCollector {
+
private final Set<String> imports = new HashSet<>();
+
private final AnalyzeClassVisitor analyzeClassVisitor;
AnalyzeMethodVisitor(AnalyzeClassVisitor analyzeClassVisitor) {
@@ -104,13 +106,14 @@ class AnalyzeMethodVisitor extends MethodVisitor implements ImportCollector {
@Override
public void visitInvokeDynamicInsn(String name, String desc, Handle bootstrapMethod, Object... bootstrapMethodArgs) {
+ addImportWithTypeDesc(desc);
for (Object arg : bootstrapMethodArgs) {
if (arg instanceof Type) {
addImport((Type) arg);
} else if (arg instanceof Handle) {
addImportWithInternalName(((Handle) arg).getOwner());
Arrays.asList(Type.getArgumentTypes(desc)).forEach(this::addImport);
- } else if ((arg instanceof Number) == false && (arg instanceof String) == false) {
+ } else if ( ! (arg instanceof Number) && ! (arg instanceof String)) {
throw new AssertionError("Unexpected type " + arg.getClass() + " with value '" + arg + "'");
}
}
@@ -165,4 +168,5 @@ class AnalyzeMethodVisitor extends MethodVisitor implements ImportCollector {
@Override
public void visitCode() {
}
+
}
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeSignatureVisitor.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeSignatureVisitor.java
index d3c32e11201..61c37e99edf 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeSignatureVisitor.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeSignatureVisitor.java
@@ -12,10 +12,10 @@ import java.util.Set;
* @author Tony Vaagenes
* @author ollivir
*/
-
class AnalyzeSignatureVisitor extends SignatureVisitor implements ImportCollector {
+
private final AnalyzeClassVisitor analyzeClassVisitor;
- private Set<String> imports = new HashSet<>();
+ private final Set<String> imports = new HashSet<>();
AnalyzeSignatureVisitor(AnalyzeClassVisitor analyzeClassVisitor) {
super(Opcodes.ASM7);
@@ -116,4 +116,5 @@ class AnalyzeSignatureVisitor extends SignatureVisitor implements ImportCollecto
if (signature != null)
new SignatureReader(signature).acceptType(new AnalyzeSignatureVisitor(analyzeClassVisitor));
}
+
}
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ClassFileMetaData.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ClassFileMetaData.java
index 4195f342e92..5601430a27f 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ClassFileMetaData.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ClassFileMetaData.java
@@ -11,6 +11,7 @@ import java.util.Set;
* @author ollivir
*/
public class ClassFileMetaData {
+
private final String name;
private final Set<String> referencedClasses;
private final Optional<ExportPackageAnnotation> exportPackage;
@@ -32,4 +33,5 @@ public class ClassFileMetaData {
public Optional<ExportPackageAnnotation> getExportPackage() {
return exportPackage;
}
+
}
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ExportPackageAnnotation.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ExportPackageAnnotation.java
index 955056b2306..7f3fb9522f7 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ExportPackageAnnotation.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ExportPackageAnnotation.java
@@ -9,6 +9,7 @@ import java.util.regex.Pattern;
* @author ollivir
*/
public class ExportPackageAnnotation {
+
private final int major;
private final int minor;
private final int micro;
@@ -59,4 +60,5 @@ public class ExportPackageAnnotation {
public int hashCode() {
return Objects.hash(major, minor, micro, qualifier);
}
+
}
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ImportCollector.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ImportCollector.java
index 1dc1e49897d..e341ef1a80f 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ImportCollector.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/ImportCollector.java
@@ -11,6 +11,7 @@ import java.util.Set;
* @author ollivir
*/
public interface ImportCollector {
+
Set<String> imports();
default void addImportWithTypeDesc(String typeDescriptor) {
@@ -32,4 +33,5 @@ public interface ImportCollector {
default void addImport(Optional<String> anImport) {
anImport.ifPresent(pkg -> imports().add(pkg));
}
+
}
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java
index 3d20bfd54df..9eef8a55c01 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Packages.java
@@ -11,6 +11,7 @@ import java.util.Set;
* @author ollivir
*/
public class Packages {
+
public static class PackageMetaData {
public final Set<String> definedPackages;
public final Set<String> referencedExternalPackages;
@@ -40,4 +41,5 @@ public class Packages {
referencedPackages.removeAll(definedPackages);
return new PackageMetaData(definedPackages, referencedPackages);
}
+
}