private boolean containsNonBlacklistedPages(final Collection<MetaClass> pages) { for (final MetaClass page : pages) { if (!BLACKLISTED_PAGES.contains(page.getCanonicalName())) { return true; } } return false; }
private boolean containsNonBlacklistedPages(final Collection<MetaClass> pages) { for (final MetaClass page : pages) { if (!BLACKLISTED_PAGES.contains(page.getCanonicalName())) { return true; } } return false; }
private String getImportForClass(final MetaClass clazz) { checkThread(); String imp = null; final String fqcn = clazz.getCanonicalName(); final int idx = fqcn.lastIndexOf('.'); if (idx != -1) { imp = fqcn.substring(0, idx); } return imp; }
private String getImportForClass(final MetaClass clazz) { checkThread(); String imp = null; final String fqcn = clazz.getCanonicalName(); final int idx = fqcn.lastIndexOf('.'); if (idx != -1) { imp = fqcn.substring(0, idx); } return imp; }
public static String createCallSignature(final MetaMethod m) { final StringBuilder append = new StringBuilder(m.getName()).append(':'); for (final MetaParameter parm : m.getParameters()) { append.append(parm.getType().getCanonicalName()).append(':'); } return append.toString(); }
public static String createCallSignature(final MetaMethod m) { final StringBuilder append = new StringBuilder(m.getName()).append(':'); for (final MetaParameter parm : m.getParameters()) { append.append(parm.getType().getCanonicalName()).append(':'); } return append.toString(); }
private static String _getClassReference(final MetaType metaClass, final Context context, final boolean typeParms) { final MetaClass erased; if (metaClass instanceof MetaClass) { erased = ((MetaClass) metaClass).getErased(); } else { return "Object"; } String fqcn = erased.getCanonicalName(); final int idx = fqcn.lastIndexOf('.'); if (idx != -1) { if ((context.isAutoImportActive() || "java.lang".equals(erased.getPackageName())) && !context.hasImport(erased)) { context.addImport(erased); } if (context.hasImport(erased)) { fqcn = fqcn.substring(idx + 1); } } final StringBuilder buf = new StringBuilder(fqcn); if (typeParms) { buf.append(getClassReferencesForParameterizedTypes(((MetaClass) metaClass).getParameterizedType(), context)); } return buf.toString(); }
private static String _getClassReference(final MetaType metaClass, final Context context, final boolean typeParms) { final MetaClass erased; if (metaClass instanceof MetaClass) { erased = ((MetaClass) metaClass).getErased(); } else { return "Object"; } String fqcn = erased.getCanonicalName(); final int idx = fqcn.lastIndexOf('.'); if (idx != -1) { if ((context.isAutoImportActive() || "java.lang".equals(erased.getPackageName())) && !context.hasImport(erased)) { context.addImport(erased); } if (context.hasImport(erased)) { fqcn = fqcn.substring(idx + 1); } } final StringBuilder buf = new StringBuilder(fqcn); if (typeParms) { buf.append(getClassReferencesForParameterizedTypes(((MetaClass) metaClass).getParameterizedType(), context)); } return buf.toString(); }
@Test public void testGetFields() { final List<String> expectedFields = Lists.newLinkedList(); expectedFields.add(Child.class.getCanonicalName() + "." + "childPublic"); expectedFields.add(Parent.class.getCanonicalName() + "." + "parentPublic"); final ArrayList<String> actualFields = new ArrayList<>(); for (final MetaField field : getMetaClass(Child.class).getFields()) { actualFields.add(field.getDeclaringClass().getCanonicalName() + "." + field.getName()); } Collections.sort(expectedFields); Collections.sort(actualFields); assertEquals(expectedFields.toString(), actualFields.toString()); }
@Test public void testGetDeclaredFields() { final List<String> expectedFields = Lists.newLinkedList(); expectedFields.add(Child.class.getCanonicalName() + "." + "childPrivate"); expectedFields.add(Child.class.getCanonicalName() + "." + "childPackage"); expectedFields.add(Child.class.getCanonicalName() + "." + "childProtected"); expectedFields.add(Child.class.getCanonicalName() + "." + "childPublic"); final ArrayList<String> actualFields = new ArrayList<>(); for (final MetaField field : getMetaClass(Child.class).getDeclaredFields()) { actualFields.add(field.getDeclaringClass().getCanonicalName() + "." + field.getName()); } Collections.sort(expectedFields); Collections.sort(actualFields); assertEquals(expectedFields.toString(), actualFields.toString()); }
@Test public void testNamingMethods() throws Exception { final MetaClass child = getMetaClass(Child.class); assertEquals(Child.class.getSimpleName(), child.getName()); assertEquals(Child.class.getName(), child.getFullyQualifiedName()); assertEquals(Child.class.getName(), child.getCanonicalName()); assertEquals("L" + Child.class.getName().replace('.', '/') + ";", child.getInternalName()); }
@Test public void testGetDeclaredFields() { final ClassStructureBuilder<?> classBuilder = ClassBuilder .define("Child", Parent.class) .publicScope() .body() .privateField("childPrivate", int.class).finish() .packageField("childPackage", int.class).finish() .protectedField("childProtected", int.class).finish() .publicField("childPublic", int.class).finish(); final MetaClass child = classBuilder.getClassDefinition(); final ArrayList<String> fields = new ArrayList<String>(); for (MetaField field : child.getDeclaredFields()) { fields.add(field.getDeclaringClass().getCanonicalName() + "." + field.getName()); } final List<String> expectedFields = Lists.newLinkedList(); expectedFields.add(child.getCanonicalName() + "." + "childPrivate"); expectedFields.add(child.getCanonicalName() + "." + "childPackage"); expectedFields.add(child.getCanonicalName() + "." + "childProtected"); expectedFields.add(child.getCanonicalName() + "." + "childPublic"); Collections.sort(fields); Collections.sort(expectedFields); assertEquals(expectedFields.toString(), fields.toString()); } }
@Test public void testGetFields() { final ClassStructureBuilder<?> classBuilder = ClassBuilder .define("Child", Parent.class) .publicScope() .body() .privateField("childPrivate", int.class).finish() .packageField("childPackage", int.class).finish() .protectedField("childProtected", int.class).finish() .publicField("childPublic", int.class).finish(); final MetaClass child = classBuilder.getClassDefinition(); final ArrayList<String> fields = new ArrayList<String>(); for (MetaField field : child.getFields()) { fields.add(field.getDeclaringClass().getCanonicalName() + "." + field.getName()); } final List<String> expectedFields = Lists.newLinkedList(); expectedFields.add(child.getCanonicalName() + "." + "childPublic"); expectedFields.add(Parent.class.getCanonicalName() + "." + "parentPublic"); Collections.sort(fields); Collections.sort(expectedFields); assertEquals(expectedFields.toString(), fields.toString()); }
@Override public void makeMethodAccessible(final ClassStructureBuilder<?> classBuilder, final MetaMethod method, final Modifier[] modifiers) { final MetaMethod erasedMethod = method.getDeclaringClass().getErased().getDeclaredMethod(method.getName(), getErasedParamterTypes(method)); final List<Parameter> wrapperDefParms = new ArrayList<Parameter>(); if (!erasedMethod.isStatic()) { wrapperDefParms.add(Parameter.of(erasedMethod.getDeclaringClass().getErased(), "instance")); } final List<Parameter> methodDefParms = DefParameters.from(erasedMethod).getParameters(); wrapperDefParms.addAll(methodDefParms); Annotation[] annotations = NO_ANNOTATIONS; for (MetaParameter p : erasedMethod.getParameters()) { if (p.getType().getCanonicalName().equals("long")) { annotations = new Annotation[] { UNSAFE_NATIVE_LONG_ANNOTATION }; } } if (erasedMethod.getReturnType().getCanonicalName().equals("long")) { annotations = new Annotation[] { UNSAFE_NATIVE_LONG_ANNOTATION }; } classBuilder.publicMethod(erasedMethod.getReturnType(), PrivateAccessUtil.getPrivateMethodName(method)) .annotatedWith(annotations) .parameters(DefParameters.fromParameters(wrapperDefParms)) .modifiers(appendJsni(modifiers)) .body() ._(StringStatement.of(JSNIUtil.methodAccess(erasedMethod))) .finish(); }
@Override public void makeConstructorAccessible(final ClassStructureBuilder<?> classBuilder, final MetaConstructor constructor) { final DefParameters methodDefParms = DefParameters.from(constructor); Annotation[] annotations = NO_ANNOTATIONS; for (MetaParameter p : constructor.getParameters()) { if (p.getType().getCanonicalName().equals("long")) { annotations = new Annotation[] { UNSAFE_NATIVE_LONG_ANNOTATION }; } } classBuilder.publicMethod(constructor.getReturnType(), PrivateAccessUtil.getPrivateMethodName(constructor)) .annotatedWith(annotations) .parameters(methodDefParms) .modifiers(Modifier.Static, Modifier.JSNI) .body() ._(StringStatement.of(JSNIUtil.methodAccess(constructor))) .finish(); }
@Override public void makeConstructorAccessible(final ClassStructureBuilder<?> classBuilder, final MetaConstructor constructor) { final DefParameters methodDefParms = DefParameters.from(constructor); Annotation[] annotations = NO_ANNOTATIONS; for (MetaParameter p : constructor.getParameters()) { if (p.getType().getCanonicalName().equals("long")) { annotations = new Annotation[] { UNSAFE_NATIVE_LONG_ANNOTATION }; } } classBuilder.publicMethod(constructor.getReturnType(), PrivateAccessUtil.getPrivateMethodName(constructor)) .annotatedWith(annotations) .parameters(methodDefParms) .modifiers(Modifier.Static, Modifier.JSNI) .body() ._(StringStatement.of(JSNIUtil.methodAccess(constructor))) .finish(); }
@Override public void createReadableField(final MetaClass type, final ClassStructureBuilder<?> classBuilder, final MetaField field, final Modifier[] modifiers) { final MethodBlockBuilder<? extends ClassStructureBuilder<?>> instance = classBuilder.packageMethod(type, PrivateAccessUtil.getPrivateFieldAccessorName(field)); if (!field.isStatic()) { instance.parameters(DefParameters.fromParameters(Parameter.of(field.getDeclaringClass().getErased(), "instance"))); } if (type.getCanonicalName().equals("long")) { instance.annotatedWith(UNSAFE_NATIVE_LONG_ANNOTATION); } instance.modifiers(appendJsni(modifiers)) .body() ._(StringStatement.of("return " + JSNIUtil.fieldAccess(field))) .finish(); }
@Override public void createReadableField(final MetaClass type, final ClassStructureBuilder<?> classBuilder, final MetaField field, final Modifier[] modifiers) { final MethodBlockBuilder<? extends ClassStructureBuilder<?>> instance = classBuilder.packageMethod(type, PrivateAccessUtil.getPrivateFieldAccessorName(field)); if (!field.isStatic()) { instance.parameters(DefParameters.fromParameters(Parameter.of(field.getDeclaringClass().getErased(), "instance"))); } if (type.getCanonicalName().equals("long")) { instance.annotatedWith(UNSAFE_NATIVE_LONG_ANNOTATION); } instance.modifiers(appendJsni(modifiers)) .body() ._(StringStatement.of("return " + JSNIUtil.fieldAccess(field))) .finish(); }
@Override public void createWritableField(final MetaClass type, final ClassStructureBuilder<?> classBuilder, final MetaField field, final Modifier[] modifiers) { final MethodCommentBuilder<? extends ClassStructureBuilder<?>> methodBuilder = classBuilder.packageMethod(void.class, PrivateAccessUtil.getPrivateFieldAccessorName(field)); if (type.getCanonicalName().equals("long")) { methodBuilder.annotatedWith(UNSAFE_NATIVE_LONG_ANNOTATION); } if (!field.isStatic()) { methodBuilder .parameters(DefParameters.fromParameters(Parameter.of(field.getDeclaringClass().getErased(), "instance"), Parameter.of(type, "value"))); } else { methodBuilder .parameters(DefParameters.fromParameters(Parameter.of(type, "value"))); } methodBuilder.modifiers(appendJsni(modifiers)) .body() ._(StringStatement.of(JSNIUtil.fieldAccess(field) + " = value")) .finish(); }
@Override public void createWritableField(final MetaClass type, final ClassStructureBuilder<?> classBuilder, final MetaField field, final Modifier[] modifiers) { final MethodCommentBuilder<? extends ClassStructureBuilder<?>> methodBuilder = classBuilder.packageMethod(void.class, PrivateAccessUtil.getPrivateFieldAccessorName(field)); if (type.getCanonicalName().equals("long")) { methodBuilder.annotatedWith(UNSAFE_NATIVE_LONG_ANNOTATION); } if (!field.isStatic()) { methodBuilder .parameters(DefParameters.fromParameters(Parameter.of(field.getDeclaringClass().getErased(), "instance"), Parameter.of(type, "value"))); } else { methodBuilder .parameters(DefParameters.fromParameters(Parameter.of(type, "value"))); } methodBuilder.modifiers(appendJsni(modifiers)) .body() ._(StringStatement.of(JSNIUtil.fieldAccess(field) + " = value")) .finish(); }