Skip to content

Commit 505e2c4

Browse files
authored
Refactor MDG classes packages and translate some classes to Kotlin (#1521)
1 parent 484059b commit 505e2c4

File tree

66 files changed

+1013
-2106
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+1013
-2106
lines changed

test-app/build-tools/android-metadata-generator/build.gradle

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
1-
/*
2-
* Packs metadata generator in a .tgz file in ~/dist folder
3-
* To build .tgz
4-
* gradlew packmg
5-
* To build jar
6-
* gradlew jarmg
7-
*/
8-
apply plugin: "java"
1+
apply plugin: 'java'
2+
apply plugin: 'kotlin'
93

104
sourceCompatibility = JavaVersion.VERSION_1_8
115
targetCompatibility = JavaVersion.VERSION_1_8
@@ -26,6 +20,9 @@ sourceSets {
2620
java {
2721
srcDir 'src/src'
2822
}
23+
kotlin {
24+
srcDirs += 'src/src'
25+
}
2926
}
3027
}
3128

@@ -35,6 +32,10 @@ compileJava {
3532

3633
compileJava.outputs.dir("$rootDir/dist/classes")
3734

35+
compileKotlin {
36+
kotlinOptions.allWarningsAsErrors = true
37+
}
38+
3839
repositories {
3940
google()
4041
mavenCentral()

test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/Builder.java

Lines changed: 73 additions & 75 deletions
Large diffs are not rendered by default.

test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/ClassDirectory.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
import com.telerik.metadata.analytics.AnalyticsCollector;
44
import com.telerik.metadata.analytics.AnalyticsCollectorProvider;
5-
import com.telerik.metadata.desc.ClassDescriptor;
6-
import com.telerik.metadata.kotlin.classes.KotlinClassMetadataParser;
7-
import com.telerik.metadata.kotlin.classes.impl.KotlinClassMetadataParserImpl;
5+
import com.telerik.metadata.parsing.classes.bytecode.NativeClassBytecodeDescriptor;
6+
import com.telerik.metadata.parsing.classes.NativeClassDescriptor;
7+
import com.telerik.metadata.parsing.classes.kotlin.metadata.ClassMetadataParser;
8+
import com.telerik.metadata.parsing.classes.kotlin.metadata.bytecode.BytecodeClassMetadataParser;
89

910
import org.apache.bcel.classfile.ClassParser;
1011

@@ -17,18 +18,18 @@
1718

1819
public class ClassDirectory implements ClassMapProvider {
1920
private final String path;
20-
private final Map<String, ClassDescriptor> classMap;
21-
private static final KotlinClassMetadataParser kotlinClassMetadataParser = new KotlinClassMetadataParserImpl();
21+
private final Map<String, NativeClassDescriptor> classMap;
22+
private static final ClassMetadataParser kotlinClassMetadataParser = new BytecodeClassMetadataParser();
2223
private static final AnalyticsCollector analyticsCollector = AnalyticsCollectorProvider.getInstance().provideAnalyticsCollector();
2324
private static final String CLASS_EXT = ".class";
2425
private static final String DEX_EXT = ".dex";
2526

2627
private ClassDirectory(String path) {
2728
this.path = path;
28-
this.classMap = new HashMap<String, ClassDescriptor>();
29+
this.classMap = new HashMap<String, NativeClassDescriptor>();
2930
}
3031

31-
public Map<String, ClassDescriptor> getClassMap() {
32+
public Map<String, NativeClassDescriptor> getClassMap() {
3233
return classMap;
3334
}
3435

@@ -50,7 +51,7 @@ private static void readDirectory(ClassDirectory dir, String path)
5051
if (file.isFile()) {
5152
String name = file.getName();
5253
if (name.endsWith(CLASS_EXT)) {
53-
ClassDescriptor clazz = getClassDescriptor(name, file);
54+
NativeClassDescriptor clazz = getClassDescriptor(name, file);
5455
dir.classMap.put(clazz.getClassName(), clazz);
5556
}
5657
} else if (file.isDirectory()) {
@@ -62,11 +63,11 @@ private static void readDirectory(ClassDirectory dir, String path)
6263
}
6364
}
6465

65-
private static ClassDescriptor getClassDescriptor(String name, File file) throws IOException {
66-
ClassDescriptor clazz = null;
66+
private static NativeClassDescriptor getClassDescriptor(String name, File file) throws IOException {
67+
NativeClassDescriptor clazz = null;
6768
if (name.endsWith(CLASS_EXT)) {
6869
ClassParser cp = new ClassParser(file.getAbsolutePath());
69-
clazz = new com.telerik.metadata.bcl.ClassInfo(cp.parse());
70+
clazz = new NativeClassBytecodeDescriptor(cp.parse());
7071
markIfKotlinClass(clazz);
7172
} else if (name.endsWith(DEX_EXT)) {
7273
// TODO:
@@ -75,7 +76,7 @@ private static ClassDescriptor getClassDescriptor(String name, File file) throws
7576
return clazz;
7677
}
7778

78-
private static void markIfKotlinClass(ClassDescriptor classDescriptor) {
79+
private static void markIfKotlinClass(NativeClassDescriptor classDescriptor) {
7980
if (kotlinClassMetadataParser.wasKotlinClass(classDescriptor)) {
8081
analyticsCollector.markHasKotlinRuntimeClassesIfNotMarkedAlready();
8182
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.telerik.metadata;
22

3-
import com.telerik.metadata.desc.ClassDescriptor;
3+
import com.telerik.metadata.parsing.classes.NativeClassDescriptor;
44

55
import java.util.Map;
66

77
public interface ClassMapProvider {
8-
Map<String, ClassDescriptor> getClassMap();
8+
Map<String, NativeClassDescriptor> getClassMap();
99

1010
String getPath();
1111
}

test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/ClassRepo.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.telerik.metadata;
22

3-
import com.telerik.metadata.desc.ClassDescriptor;
3+
import com.telerik.metadata.parsing.classes.NativeClassDescriptor;
44

55
import java.util.ArrayList;
66
import java.util.Arrays;
@@ -15,8 +15,8 @@ public static void addToCache(ClassMapProvider classMapProvider) {
1515
cachedProviders.add(classMapProvider);
1616
}
1717

18-
public static ClassDescriptor findClass(String className) {
19-
ClassDescriptor clazz = null;
18+
public static NativeClassDescriptor findClass(String className) {
19+
NativeClassDescriptor clazz = null;
2020
for (ClassMapProvider classMapProvider : cachedProviders) {
2121
clazz = classMapProvider.getClassMap().get(className);
2222
if (clazz != null) {

test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/ClassUtil.java

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,27 @@
11
package com.telerik.metadata;
22

3-
import com.telerik.metadata.desc.ClassDescriptor;
4-
import com.telerik.metadata.desc.MethodDescriptor;
5-
import com.telerik.metadata.desc.TypeDescriptor;
3+
import com.telerik.metadata.parsing.classes.NativeClassDescriptor;
4+
import com.telerik.metadata.parsing.classes.NativeMethodDescriptor;
5+
import com.telerik.metadata.parsing.classes.NativeTypeDescriptor;
66

77
import java.util.ArrayList;
88

9-
import org.apache.bcel.generic.Type;
10-
119
public class ClassUtil {
1210
private ClassUtil() {
1311
}
1412

15-
public static boolean isPrimitive(ClassDescriptor clazz) {
13+
public static boolean isPrimitive(NativeClassDescriptor clazz) {
1614
boolean isPrimitive = !clazz.isClass() && !clazz.isEnum()
1715
&& !clazz.isInterface();
1816
return isPrimitive;
1917
}
2018

21-
public static boolean isPrimitive(TypeDescriptor type) {
22-
boolean isPrimitive = type.equals(TypeDescriptor.BOOLEAN)
23-
|| type.equals(TypeDescriptor.CHAR) || type.equals(TypeDescriptor.BYTE)
24-
|| type.equals(TypeDescriptor.SHORT) || type.equals(TypeDescriptor.INT)
25-
|| type.equals(TypeDescriptor.LONG) || type.equals(TypeDescriptor.FLOAT)
26-
|| type.equals(TypeDescriptor.DOUBLE) || type.equals(TypeDescriptor.VOID);
19+
public static boolean isPrimitive(NativeTypeDescriptor type) {
20+
boolean isPrimitive = type.equals(NativeTypeDescriptor.Companion.getBOOLEAN())
21+
|| type.equals(NativeTypeDescriptor.Companion.getCHAR()) || type.equals(NativeTypeDescriptor.Companion.getBYTE())
22+
|| type.equals(NativeTypeDescriptor.Companion.getSHORT()) || type.equals(NativeTypeDescriptor.Companion.getINT())
23+
|| type.equals(NativeTypeDescriptor.Companion.getLONG()) || type.equals(NativeTypeDescriptor.Companion.getFLOAT())
24+
|| type.equals(NativeTypeDescriptor.Companion.getDOUBLE()) || type.equals(NativeTypeDescriptor.Companion.getVOID());
2725

2826
return isPrimitive;
2927
}
@@ -36,7 +34,7 @@ public static boolean isPrimitive(String name) {
3634
return isPrimitive;
3735
}
3836

39-
public static boolean isArray(ClassDescriptor clazz) {
37+
public static boolean isArray(NativeClassDescriptor clazz) {
4038
boolean isArray = isArray(clazz.getClassName());
4139
return isArray;
4240
}
@@ -46,8 +44,8 @@ public static boolean isArray(String className) {
4644
return isArray;
4745
}
4846

49-
public static ClassDescriptor getEnclosingClass(ClassDescriptor clazz) {
50-
ClassDescriptor enclosingClass = null;
47+
public static NativeClassDescriptor getEnclosingClass(NativeClassDescriptor clazz) {
48+
NativeClassDescriptor enclosingClass = null;
5149

5250
String className = clazz.getClassName();
5351
int idx = className.lastIndexOf("$");
@@ -59,7 +57,7 @@ public static ClassDescriptor getEnclosingClass(ClassDescriptor clazz) {
5957
return enclosingClass;
6058
}
6159

62-
public static String getSimpleName(ClassDescriptor clazz) {
60+
public static String getSimpleName(NativeClassDescriptor clazz) {
6361
String className = clazz.getClassName();
6462
int idx = className.lastIndexOf("$");
6563
if (idx < 0) {
@@ -69,19 +67,19 @@ public static String getSimpleName(ClassDescriptor clazz) {
6967
return simpleName;
7068
}
7169

72-
public static MethodDescriptor[] getAllMethods(ClassDescriptor clazz) {
73-
ArrayList<MethodDescriptor> methods = new ArrayList<MethodDescriptor>();
74-
ClassDescriptor currentClass = clazz;
70+
public static NativeMethodDescriptor[] getAllMethods(NativeClassDescriptor clazz) {
71+
ArrayList<NativeMethodDescriptor> methods = new ArrayList<NativeMethodDescriptor>();
72+
NativeClassDescriptor currentClass = clazz;
7573
while (currentClass != null) {
76-
MethodDescriptor[] currentClassMethods = currentClass.getMethods();
77-
for (MethodDescriptor m : currentClassMethods) {
74+
NativeMethodDescriptor[] currentClassMethods = currentClass.getMethods();
75+
for (NativeMethodDescriptor m : currentClassMethods) {
7876
if ((m.isPublic() || m.isProtected()) && !m.isSynthetic()) {
7977
methods.add(m);
8078
}
8179
}
8280
currentClass = getSuperclass(currentClass);
8381
}
84-
return methods.toArray(new MethodDescriptor[0]);
82+
return methods.toArray(new NativeMethodDescriptor[0]);
8583
}
8684

8785
public static String getCanonicalName(String className) {
@@ -95,17 +93,17 @@ public static String getCanonicalName(String className) {
9593
return canonicalName;
9694
}
9795

98-
public static ClassDescriptor getSuperclass(ClassDescriptor clazz) {
99-
ClassDescriptor superClass = null;
96+
public static NativeClassDescriptor getSuperclass(NativeClassDescriptor clazz) {
97+
NativeClassDescriptor superClass = null;
10098
if (!clazz.getClassName().equals("java.lang.Object")) {
10199
String superClassName = clazz.getSuperclassName();
102100
superClass = ClassRepo.findClass(superClassName);
103101
}
104102
return superClass;
105103
}
106104

107-
public static ClassDescriptor getClassByName(String className) {
108-
ClassDescriptor clazz = ClassRepo.findClass(className);
105+
public static NativeClassDescriptor getClassByName(String className) {
106+
NativeClassDescriptor clazz = ClassRepo.findClass(className);
109107
return clazz;
110108
}
111109

test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/TreeNode.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
package com.telerik.metadata;
22

3-
import com.telerik.metadata.desc.ClassDescriptor;
4-
import com.telerik.metadata.desc.ExtensionFunctionDescriptor;
5-
import com.telerik.metadata.desc.MethodDescriptor;
6-
import com.telerik.metadata.desc.TypeDescriptor;
3+
import com.telerik.metadata.parsing.classes.NativeClassDescriptor;
4+
import com.telerik.metadata.parsing.classes.kotlin.extensions.KotlinExtensionFunctionDescriptor;
5+
import com.telerik.metadata.parsing.classes.NativeMethodDescriptor;
6+
import com.telerik.metadata.parsing.classes.NativeTypeDescriptor;
77

88
import java.util.ArrayList;
99
import java.util.List;
1010
import java.util.Optional;
1111

1212
public class TreeNode {
1313
public static class MethodInfo {
14-
public MethodInfo(MethodDescriptor m) {
14+
public MethodInfo(NativeMethodDescriptor m) {
1515
this.name = m.getName();
1616
this.sig = m.getSignature();
1717
this.isResolved = false;
18-
this.isExtensionFunction = m instanceof ExtensionFunctionDescriptor;
18+
this.isExtensionFunction = m instanceof KotlinExtensionFunctionDescriptor;
1919

2020
signature = new ArrayList<>();
2121
}
@@ -109,35 +109,35 @@ public TreeNode() {
109109
public static final TreeNode BOOLEAN = getPrimitive("Z", (byte) 7);
110110
public static final TreeNode CHAR = getPrimitive("C", (byte) 8);
111111

112-
public static TreeNode getPrimitive(TypeDescriptor type) throws Exception {
112+
public static TreeNode getPrimitive(NativeTypeDescriptor type) throws Exception {
113113
if (!ClassUtil.isPrimitive(type)) {
114114
throw new Exception("type must be primitive");
115115
}
116116

117-
if (type.equals(TypeDescriptor.BYTE)) {
117+
if (type.equals(NativeTypeDescriptor.Companion.getBYTE())) {
118118
return TreeNode.BYTE;
119-
} else if (type.equals(TypeDescriptor.SHORT)) {
119+
} else if (type.equals(NativeTypeDescriptor.Companion.getSHORT())) {
120120
return TreeNode.SHORT;
121-
} else if (type.equals(TypeDescriptor.INT)) {
121+
} else if (type.equals(NativeTypeDescriptor.Companion.getINT())) {
122122
return TreeNode.INTEGER;
123-
} else if (type.equals(TypeDescriptor.LONG)) {
123+
} else if (type.equals(NativeTypeDescriptor.Companion.getLONG())) {
124124
return TreeNode.LONG;
125-
} else if (type.equals(TypeDescriptor.FLOAT)) {
125+
} else if (type.equals(NativeTypeDescriptor.Companion.getFLOAT())) {
126126
return TreeNode.FLOAT;
127-
} else if (type.equals(TypeDescriptor.DOUBLE)) {
127+
} else if (type.equals(NativeTypeDescriptor.Companion.getDOUBLE())) {
128128
return TreeNode.DOUBLE;
129-
} else if (type.equals(TypeDescriptor.BOOLEAN)) {
129+
} else if (type.equals(NativeTypeDescriptor.Companion.getBOOLEAN())) {
130130
return TreeNode.BOOLEAN;
131-
} else if (type.equals(TypeDescriptor.CHAR)) {
131+
} else if (type.equals(NativeTypeDescriptor.Companion.getCHAR())) {
132132
return TreeNode.CHAR;
133-
} else if (type.equals(TypeDescriptor.VOID)) {
133+
} else if (type.equals(NativeTypeDescriptor.Companion.getVOID())) {
134134
return null;
135135
} else {
136136
throw new Exception("unknown type=" + type.toString());
137137
}
138138
}
139139

140-
public static TreeNode getPrimitive(ClassDescriptor clazz) throws Exception {
140+
public static TreeNode getPrimitive(NativeClassDescriptor clazz) throws Exception {
141141
if (!ClassUtil.isPrimitive(clazz)) {
142142
throw new Exception("clazz must be primitive");
143143
}

test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/analytics/AnalyticsCollectorProvider.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.telerik.metadata.analytics;
22

3-
import com.telerik.metadata.analytics.impl.EnabledAnalyticsCollectorImpl;
4-
import com.telerik.metadata.analytics.impl.NoOpAnalyticsCollector;
3+
import com.telerik.metadata.analytics.enabled.DefaultAnalyticsCollector;
4+
import com.telerik.metadata.analytics.disabled.NoOpAnalyticsCollector;
55

66
public class AnalyticsCollectorProvider {
77
private static final AnalyticsCollectorProvider ourInstance = new AnalyticsCollectorProvider();
@@ -16,7 +16,7 @@ private AnalyticsCollectorProvider() {
1616
public AnalyticsCollector provideAnalyticsCollector() {
1717
if (AnalyticsConfiguration.areAnalyticsEnabled()) {
1818
String analyticsFilePath = AnalyticsConfiguration.getAnalyticsFilePath();
19-
return new EnabledAnalyticsCollectorImpl(analyticsFilePath);
19+
return new DefaultAnalyticsCollector(analyticsFilePath);
2020
} else {
2121
return new NoOpAnalyticsCollector();
2222
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.telerik.metadata.analytics.impl;
1+
package com.telerik.metadata.analytics.disabled;
22

33
import com.telerik.metadata.analytics.AnalyticsCollector;
44

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.telerik.metadata.analytics.impl;
1+
package com.telerik.metadata.analytics.enabled;
22

33
import com.google.gson.Gson;
44
import com.google.gson.GsonBuilder;
@@ -11,7 +11,7 @@
1111
import java.nio.file.Path;
1212
import java.nio.file.Paths;
1313

14-
public final class EnabledAnalyticsCollectorImpl implements AnalyticsCollector {
14+
public final class DefaultAnalyticsCollector implements AnalyticsCollector {
1515

1616
private static final String HAS_KOTLIN_RUNTIME_CLASSES_JSON_PROPERTY_NAME = "hasKotlinRuntimeClasses";
1717
private static final String HAS_USE_KOTLIN_PROPERTY_IN_APP_JSON_PROPERTY_NAME = "hasUseKotlinPropertyInApp";
@@ -23,11 +23,11 @@ public final class EnabledAnalyticsCollectorImpl implements AnalyticsCollector {
2323
private boolean hasMarked;
2424

2525
public static void main(String... args) {
26-
EnabledAnalyticsCollectorImpl a = new EnabledAnalyticsCollectorImpl("/Users/vmutafov/work/android_runtime_release/android-runtime/test-app/analytics/build-statistics.json");
26+
DefaultAnalyticsCollector a = new DefaultAnalyticsCollector("/Users/vmutafov/work/android_runtime_release/android-runtime/test-app/analytics/build-statistics.json");
2727
a.markHasKotlinRuntimeClassesIfNotMarkedAlready();
2828
}
2929

30-
public EnabledAnalyticsCollectorImpl(String analyticsFilePath) {
30+
public DefaultAnalyticsCollector(String analyticsFilePath) {
3131
this.analyticsFilePath = analyticsFilePath;
3232
this.gson = new GsonBuilder().setPrettyPrinting().create();
3333
this.hasMarked = false;

0 commit comments

Comments
 (0)