Skip to content

Commit 8b9d687

Browse files
authored
Merge pull request #1323 from NativeScript/vmutafov/sbg-refactoring-rel
Improve handling of nested Java class name writing
2 parents d40bf57 + cc321ab commit 8b9d687

File tree

3 files changed

+12
-10
lines changed

3 files changed

+12
-10
lines changed

test-app/build-tools/static-binding-generator/src/main/java/org/nativescript/staticbindinggenerator/generating/parsing/classes/hierarchy/generics/impl/GenericsAwareClassHierarchyParserImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ private Pattern getNestedGenericArgumentRegexPattern(String providedFormalTypePa
276276
Pattern cachedPattern = NESTED_GENERICS_REGEX_CACHE.get(providedFormalTypeParameterKey);
277277

278278
if (cachedPattern == null) {
279-
Pattern pattern = Pattern.compile("([^\\w\\[]*)" + providedFormalTypeParameterKey + "([^\\w\\[]*)");
279+
Pattern pattern = Pattern.compile("([^\\w\\.])" + providedFormalTypeParameterKey + "(\\W)");
280280
NESTED_GENERICS_REGEX_CACHE.put(providedFormalTypeParameterKey, pattern);
281281
return pattern;
282282
}

test-app/build-tools/static-binding-generator/src/main/java/org/nativescript/staticbindinggenerator/generating/parsing/methods/impl/MethodSignatureReifier.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.nativescript.staticbindinggenerator.generating.parsing.classes.hierarchy.generics.GenericParameters;
55
import org.nativescript.staticbindinggenerator.generating.parsing.methods.JavaMethod;
66
import org.nativescript.staticbindinggenerator.generating.parsing.methods.ReifiedJavaMethod;
7+
import org.nativescript.staticbindinggenerator.naming.BcelNamingUtil;
78
import org.nativescript.staticbindinggenerator.naming.JavaClassNames;
89
import org.objectweb.asm.signature.SignatureReader;
910
import org.objectweb.asm.util.TraceSignatureVisitor;
@@ -72,7 +73,7 @@ private GenericParameters getResolvedFormalTypeParametersFromDeclaringClass(Java
7273
return initialJavaClassGenericHierarchyView.getAllImplementedInterfaces().get(interfaceName);
7374
} else {
7475
String className = javaMethod.getDeclaringClassName();
75-
if(initialJavaClassGenericHierarchyView.getInitialClassName().equals(className)){
76+
if (initialJavaClassGenericHierarchyView.getInitialClassName().equals(className)) {
7677
return initialJavaClassGenericHierarchyView.getInitialClassGenericParameters();
7778
}
7879
return initialJavaClassGenericHierarchyView.getAllParentClasses().get(className);
@@ -84,11 +85,12 @@ private String reifyArgumentsDeclarationIfNecessary(String declaration, GenericP
8485
String reifiedDeclaration = declaration;
8586

8687
for (Map.Entry<String, String> resolvedFormalTypeParameter : resolvedFormalTypeParameters.getGenericParameters().entrySet()) {
87-
Pattern pattern = Pattern.compile("(\\W)" + resolvedFormalTypeParameter.getKey() + "(\\W)");
88+
Pattern pattern = Pattern.compile("([^\\w\\.])" + resolvedFormalTypeParameter.getKey() + "(\\W)");
8889

8990
Matcher m = pattern.matcher(declaration);
9091
if (m.find()) {
91-
reifiedDeclaration = m.replaceAll("$1" + resolvedFormalTypeParameter.getValue() + "$2");
92+
String replacement = BcelNamingUtil.resolveClassName(resolvedFormalTypeParameter.getValue());
93+
reifiedDeclaration = m.replaceAll("$1" + replacement + "$2");
9294
}
9395
}
9496

@@ -102,15 +104,16 @@ private String reifyReturnTypeIfNecessary(String returnType, GenericParameters r
102104
if (returnType.equals(resolvedFormalTypeParameter.getKey())) {
103105
return resolvedFormalTypeParameter.getValue();
104106
} else {
105-
Pattern pattern = Pattern.compile("(\\W)" + resolvedFormalTypeParameter.getKey() + "(\\W)");
107+
Pattern pattern = Pattern.compile("([^\\w\\.])" + resolvedFormalTypeParameter.getKey() + "(\\W)");
106108
Matcher m = pattern.matcher(returnType);
107109
if (m.find()) {
108-
reifiedReturnType = m.replaceAll("$1" + resolvedFormalTypeParameter.getValue() + "$2");
110+
String replacement = BcelNamingUtil.resolveClassName(resolvedFormalTypeParameter.getValue());
111+
reifiedReturnType = m.replaceAll("$1" + replacement + "$2");
109112
}
110113
}
111114
}
112115

113-
return reifiedReturnType;
116+
return reifiedReturnType.replaceAll("\\$", ".");
114117
}
115118

116119
private List<String> getReifiedArgumentsFromReifiedDeclaration(String reifiedDeclaration) {
@@ -148,6 +151,8 @@ private List<String> getReifiedArgumentsFromReifiedDeclaration(String reifiedDec
148151
} else {
149152
reifiedArgumentBuffer.append(c);
150153
}
154+
} else if (c == '$') {
155+
reifiedArgumentBuffer.append('.');
151156
} else {
152157
reifiedArgumentBuffer.append(c);
153158
}

test-app/build-tools/static-binding-generator/src/test/java/org/nativescript/staticbindinggenerator/generating/parsing/classes/hierarchy/generics/impl/GenericsAwareClassHierarchyParserImplTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.nativescript.staticbindinggenerator.generating.parsing.classes.hierarchy.generics.impl;
22

3-
import com.google.gson.GsonBuilder;
4-
53
import org.apache.bcel.classfile.JavaClass;
64
import org.junit.Before;
75
import org.junit.Rule;
@@ -10,7 +8,6 @@
108
import org.nativescript.staticbindinggenerator.files.FileSystemHelper;
119
import org.nativescript.staticbindinggenerator.files.impl.FileSystemHelperImpl;
1210
import org.nativescript.staticbindinggenerator.generating.parsing.classes.hierarchy.generics.GenericHierarchyView;
13-
import org.nativescript.staticbindinggenerator.generating.parsing.classes.hierarchy.generics.GenericParameters;
1411
import java.util.Map;
1512

1613
public class GenericsAwareClassHierarchyParserImplTest {

0 commit comments

Comments
 (0)