code: private boolean useQualifiedReference(DAType type) {
      if (type.getKind() != DATypeKind.DECLARED) {
        return false;
      }
      if (DATypePredicates.isJavaLangType().apply(type)) {
        return false;
      }
      if (fileContext.hasExpliciteImport(type)) {
        return false;
      }
      if (fileContext.hasHomonymousImport(type)) {
        return true;
      }
      if (type.getPackageName() == null && fileContext.getPackageName().isEmpty()) {
        return false;
      }
      if (type.getPackageName() != null && type.getPackageName().equals(fileContext.getPackageName())) {
        return false;
      }
      // unless import are incomplete (and generated class will not compile), this should not happen
      throw new IllegalArgumentException(
          fromNullable(type.getQualifiedName()).or(type.getSimpleName()) + " is neither imported nor in the " +
              "current package. Can not print reference without creating compilation error");
    }
docs: Compute whether a qualified reference should be used for the specified {@link fr.javatronic.damapping.processor.model.impl.DATypeImpl}.
  <p>
  Compute uses the following test, in order:
  <ul>
  <li>if the specified type does not represent a declared type or a array of declared types, use simple reference</li>
  <li>if the specified type is a type or an array of type from "java.lang", use simple reference</li>
  <li>if the specified type has an explicite import, use simple reference</li>
  <li>if the specified type has an homonymous amough the explicite imports, use qualified reference</li>
  <li>if the specified type belongs to the current package, use implicit reference</li>
  <li>if the specified type did not match any of the above rules, raise an error, there is something wrong</li>
  </ul>
  </p>
  
  @param type a {@link fr.javatronic.damapping.processor.model.impl.DATypeImpl}
  @return a flag indicating to use a qualified reference or not²