errorString + "non-optional attribute is missing: " + getNameAndDescription(name,description), null, ref, "predicate", null
errorString + "non-optional attribute "+ getNameAndDescription(name,description)+" is missing" , null, ref, "predicate", null
    protected void checkAttribute(Object name, ComponentDescription predicate, ComponentDescription attributes, String schemaDescription)                            throws SmartFrogCompileResolutionException {        boolean optional = true;        String binding = "anyBinding";        String valueClass = "anyClass";        String description = "";        String errorString = "error in schema";        errorString = errorString +           (schemaDescription.equals("") ? ": ": "(" + schemaDescription + "): " ) ;        try {            optional = ((Boolean) predicate.sfResolve(optionalRef)).booleanValue();        } catch (Throwable e) {            throw new SmartFrogCompileResolutionException(                     errorString + "error reading optionality for attribute " + name, e, ref, "predicate", null                    );        }        try {            binding = (String) predicate.sfResolve(bindingRef);            if (!(binding.equals("lazy") || binding.equals("eager") || binding.equals("anyBinding")))                throw new SmartFrogCompileResolutionException (                     errorString + "binding not valid value for attribute '" + name+"'", null, ref, "predicate", null                    );        } catch (Throwable e) {            if (!(e instanceof SmartFrogCompileResolutionException))                throw new SmartFrogCompileResolutionException(                     errorString + "error reading binding for attribute '" + name+"'", e, ref, "predicate", null                    );            else                throw (SmartFrogCompileResolutionException)e;        }        try {            valueClass = (String) predicate.sfResolve(classRef);        } catch (Throwable e) {            throw new SmartFrogCompileResolutionException (                     errorString + "error reading class for attribute '" + name+"'", e, ref, "predicate", null                    );        }        try {            description = (String) predicate.sfResolve(descriptionRef);        } catch (Throwable e) {            description = "";        }        try {            try {                Object testvalue = attributes.sfResolve(new Reference(ReferencePart.here(name)));                String testvalueClass = testvalue.getClass().getName();                if (testvalueClass.equals("org.smartfrog.sfcore.reference.Reference")) {                    boolean condition =                        binding.equals("lazy") ||                        binding.equals("anyBinding") ||                        valueClass.equals("anyClass") ||                        (binding.equals("eager") &&  valueClass.equals(testvalueClass));                    if (!condition)                        throw new SmartFrogCompileResolutionException (                               "errorString + (lazy) reference value for non-reference eager attribute " + getNameAndDescription(name,description), null, ref, "predicate", null                            );                } else {                    if (binding.equals("lazy"))                        throw new SmartFrogCompileResolutionException (                               errorString + "non-reference value found for lazy attribute " + name,                               null, ref, "predicate", null                            );                      else if (!(valueClass.equals("anyClass")) && !(java.lang.Class.forName(valueClass).isAssignableFrom(testvalue.getClass())))                        throw new SmartFrogCompileResolutionException (                               errorString + "wrong class found for attribute " + getNameAndDescription(name,description)+ ", expected: " + valueClass + ", found: " + testvalueClass,                               null, ref, "predicate", null                            );                }            } catch (SmartFrogResolutionException re) {                if (!optional) {                    throw new SmartFrogCompileResolutionException (                     errorString + "non-optional attribute is missing: " + getNameAndDescription(name,description), null, ref, "predicate", null                    );                }            }        } catch (Throwable e) {            if (!(e instanceof SmartFrogCompileResolutionException))                throw new SmartFrogCompileResolutionException (                     "error checking attribute " + getNameAndDescription(name,description), e, ref, "predicate", null                    );            else                throw (SmartFrogCompileResolutionException)e;        }    }