private static boolean isComingFromSealedPackage(Class<?> type) { return type.getPackage() != null && type.getPackage().isSealed(); }
Class<?> createClass(InputStream is, String packageName, String origName) { if (is == null) { return null; } byte[] clBuf; try { clBuf = Streams.readFully(is); } catch (IOException e) { return null; } if (packageName != null) { String packageDotName = packageName.replace('/', '.'); Package packageObj = getPackage(packageDotName); if (packageObj == null) { definePackage(packageDotName, null, null, null, null, null, null, null); } else { if (packageObj.isSealed()) { throw new SecurityException("Package is sealed"); } } } return defineClass(origName, clBuf, 0, clBuf.length, new CodeSource(codeSourceUrl, (Certificate[]) null)); }
static String findConverterName(StructInfo structInfo) { int dotIndex = structInfo.binaryName.lastIndexOf('.'); String className = structInfo.binaryName.substring(dotIndex + 1); if (dotIndex == -1) return String.format("_%s_DslJsonConverter", className); String packageName = structInfo.binaryName.substring(0, dotIndex); Package packageClass = Package.getPackage(packageName); boolean useDslPackage = packageClass != null && packageClass.isSealed() || structInfo.binaryName.startsWith("java."); return String.format("%s%s._%s_DslJsonConverter", useDslPackage ? "dsl_json." : "", packageName, className); }
private boolean requiresPublic(Element element) { if (onlyBasicFeatures) return true; final String name = element.asType().toString(); if (name.startsWith("java.")) return true; //TODO: maybe some other namespaces !? final PackageElement pkg = elements.getPackageOf(element); if (pkg == null) return false; final Package packageClass = Package.getPackage(pkg.getQualifiedName().toString()); return packageClass != null && packageClass.isSealed(); }
@Nonnull public static String getNameForGeneratedClass(@Nonnull Class<?> aClass, @Nullable String suffix) { String prefix = aClass.isInterface() ? IMPLCLASS_PREFIX : SUBCLASS_PREFIX; StringBuilder name = new StringBuilder(60).append(prefix).append(aClass.getSimpleName()); if (suffix != null) { name.append('_').append(suffix); } if (aClass.getClassLoader() != null) { Package targetPackage = aClass.getPackage(); if (targetPackage != null && !targetPackage.isSealed()) { name.insert(0, '.').insert(0, targetPackage.getName()); } } return name.toString(); }
public String getEnhancedClassName() { final StringBuffer buf = new StringBuffer(200); final String targetClassName = targetClass.getName(); final Package pkg = targetClass.getPackage(); if (targetClassName.startsWith("java.") || (pkg != null && pkg.isSealed())) { buf.append(PREFIX_ENHANCED_CLASS); } buf.append(targetClassName).append(SUFFIX_ENHANCED_CLASS).append(Integer.toHexString(hashCode())); final int length = buf.length(); for (int i = 0; enhancedClassNames.contains(new String(buf)); ++i) { buf.setLength(length); buf.append("_").append(i); } String name = new String(buf); enhancedClassNames.add(name); return name; }
public void setupConstructor() { final Constructor<?>[] constructors = targetClass.getDeclaredConstructors(); if (constructors.length == 0) { createDefaultConstructor(enhancedClass); } else { for (int i = 0; i < constructors.length; ++i) { final int modifier = constructors[i].getModifiers(); final Package pkg = targetClass.getPackage(); if (Modifier.isPublic(modifier) || Modifier.isProtected(modifier) || (!Modifier.isPrivate(modifier) && !targetClass.getName().startsWith("java.") && (pkg == null || !pkg.isSealed()))) { createConstructor(enhancedClass, constructors[i]); } } } }
/** * {@link Constructor}のセットアップを行ないます。 */ public void setupConstructor() { final Constructor[] constructors = targetClass .getDeclaredConstructors(); if (constructors.length == 0) { createDefaultConstructor(enhancedClass); } else { for (int i = 0; i < constructors.length; ++i) { final int modifier = constructors[i].getModifiers(); final Package pkg = targetClass.getPackage(); if (Modifier.isPublic(modifier) || Modifier.isProtected(modifier) || (!Modifier.isPrivate(modifier) && !targetClass.getName().startsWith("java.") && (pkg == null || !pkg .isSealed()))) { createConstructor(enhancedClass, constructors[i]); } } } }
private static void validateArgs(Ruby runtime, String targetClassName, Class superClass) { if (Modifier.isFinal(superClass.getModifiers())) { throw runtime.newTypeError("cannot extend final class " + superClass.getName()); } String targetPackage = packageName(targetClassName); String pkg = targetPackage.replace('.', '/'); if (pkg.startsWith("java")) { throw runtime.newTypeError("cannot add classes to package " + pkg); } Package p = Package.getPackage(pkg); if (p != null) { if (p.isSealed()) { throw runtime.newTypeError("package " + p + " is sealed"); } } }
@JRubyMethod(name = "sealed?") public IRubyObject sealed_p(ThreadContext context) { final Package pkg = Package.getPackage(packageName); if ( pkg == null ) return context.nil; return context.runtime.newBoolean(pkg.isSealed()); }
@JRubyMethod(name = "sealed?") public IRubyObject sealed_p(ThreadContext context) { final Package pkg = Package.getPackage(packageName); if ( pkg == null ) return context.nil; return context.runtime.newBoolean(pkg.isSealed()); }
private static void validateArgs(Ruby runtime, String targetClassName, Class superClass) { if ( Modifier.isFinal(superClass.getModifiers()) ) { throw runtime.newTypeError("cannot extend final class " + superClass.getName()); } if ( ! hasPublicOrProtectedConstructor(superClass) ) { throw runtime.newTypeError("class " + superClass.getName() + " doesn't have a public or protected constructor"); } String targetPackage = packageName(targetClassName); String packagePath = targetPackage.replace('.', '/'); if (packagePath.startsWith("java")) { throw runtime.newTypeError("cannot add classes to package " + packagePath); } final Package pkg = Package.getPackage(packagePath); if ( pkg != null && pkg.isSealed() ) { throw runtime.newTypeError("package " + pkg + " is sealed"); } }
private static void validateArgs(Ruby runtime, String targetClassName, Class superClass) { if ( Modifier.isFinal(superClass.getModifiers()) ) { throw runtime.newTypeError("cannot extend final class " + superClass.getName()); } if ( ! hasPublicOrProtectedConstructor(superClass) ) { throw runtime.newTypeError("class " + superClass.getName() + " doesn't have a public or protected constructor"); } String targetPackage = packageName(targetClassName); String packagePath = targetPackage.replace('.', '/'); if (packagePath.startsWith("java")) { throw runtime.newTypeError("cannot add classes to package " + packagePath); } final Package pkg = Package.getPackage(packagePath); if ( pkg != null && pkg.isSealed() ) { throw runtime.newTypeError("package " + pkg + " is sealed"); } }
private static void validateArgs(Ruby runtime, String targetClassName, Class superClass) { if (Modifier.isFinal(superClass.getModifiers())) { throw runtime.newTypeError("cannot extend final class " + superClass.getName()); } if(!hasPublicOrProtectedConstructors(superClass)) { throw runtime.newTypeError("class " + superClass.getName() + " doesn't have any public or private constructors"); } String targetPackage = packageName(targetClassName); String pkg = targetPackage.replace('.', '/'); if (pkg.startsWith("java")) { throw runtime.newTypeError("cannot add classes to package " + pkg); } Package p = Package.getPackage(pkg); if (p != null) { if (p.isSealed()) { throw runtime.newTypeError("package " + p + " is sealed"); } } }
private static void validateArgs(Ruby runtime, String targetClassName, Class superClass) { if (Modifier.isFinal(superClass.getModifiers())) { throw runtime.newTypeError("cannot extend final class " + superClass.getName()); } if(!hasPublicOrProtectedConstructors(superClass)) { throw runtime.newTypeError("class " + superClass.getName() + " doesn't have any public or private constructors"); } String targetPackage = packageName(targetClassName); String pkg = targetPackage.replace('.', '/'); if (pkg.startsWith("java")) { throw runtime.newTypeError("cannot add classes to package " + pkg); } Package p = Package.getPackage(pkg); if (p != null) { if (p.isSealed()) { throw runtime.newTypeError("package " + p + " is sealed"); } } }
/** * Verify the package loaded with class loader. */ private void verifyPackage(final Package pack, final boolean sealed) { if (getBaseFolder().getFileSystem().hasCapability(Capability.MANIFEST_ATTRIBUTES)) { assertEquals("ImplTitle", pack.getImplementationTitle()); assertEquals("ImplVendor", pack.getImplementationVendor()); assertEquals("1.1", pack.getImplementationVersion()); assertEquals("SpecTitle", pack.getSpecificationTitle()); assertEquals("SpecVendor", pack.getSpecificationVendor()); assertEquals("1.0", pack.getSpecificationVersion()); assertEquals(sealed, pack.isSealed()); } else { assertNull(pack.getImplementationTitle()); assertNull(pack.getImplementationVendor()); assertNull(pack.getImplementationVersion()); assertNull(pack.getSpecificationTitle()); assertNull(pack.getSpecificationVendor()); assertNull(pack.getSpecificationVersion()); assertFalse(pack.isSealed()); } }