示例#1
0
 /**
  * Converts an {@link OtpErlangObject} to a {@link OtpErlangList} taking special care if the OTP
  * library converted a list to an {@link OtpErlangString}.
  *
  * @param value the value to convert
  * @return the value as a OtpErlangList
  * @throws ClassCastException if the conversion fails
  */
 static OtpErlangList otpObjectToOtpList(final OtpErlangObject value) throws ClassCastException {
   // need special handling if OTP thought that the value is a string
   if (value instanceof OtpErlangString) {
     final OtpErlangString value_string = (OtpErlangString) value;
     return new OtpErlangList(value_string.stringValue());
   } else {
     return (OtpErlangList) value;
   }
 }
示例#2
0
  private String parse(OtpErlangObject otpObj) {
    if (otpObj instanceof OtpErlangAtom) {
      OtpErlangAtom atom = (OtpErlangAtom) otpObj;
      if (atom.atomValue().equals("null")) return null;
      else throw new IllegalArgumentException("Only atom null is supported");

    } else if (otpObj instanceof OtpErlangString) {
      OtpErlangString str = (OtpErlangString) otpObj;
      return str.stringValue();
    }
    throw new IllegalArgumentException("Unexpected type " + otpObj.getClass().getName());
  }
示例#3
0
 /**
  * Adds all keys from the given operation list to the list of involved keys.
  *
  * @param involvedKeys list of involved keys
  * @param ops new operations
  */
 public static void addInvolvedKeys(
     List<InvolvedKey> involvedKeys, Collection<? extends Operation> ops) {
   assert involvedKeys != null;
   assert ops != null;
   for (Operation op : ops) {
     final OtpErlangString key = op.getKey();
     if (key != null) {
       if (op instanceof ReadOp) {
         involvedKeys.add(new InvolvedKey(InvolvedKey.OP.READ, key.stringValue()));
       } else {
         involvedKeys.add(new InvolvedKey(InvolvedKey.OP.WRITE, key.stringValue()));
       }
     }
   }
 }
示例#4
0
 private static IErlElement findLocalCall(
     final IErlModule module,
     final Backend backend,
     final IErlProject erlProject,
     final OpenResult res,
     final IProject project,
     final IErlElement element,
     final boolean checkAllProjects)
     throws ErlModelException, BackendException {
   if (ErlModelUtils.isTypeDefOrRecordDef(element)) {
     return ModelUtils.findTypespec(module, res.getFun());
   }
   final IErlFunction foundElement = ModelUtils.findFunction(module, res.getFunction());
   if (foundElement != null) {
     return foundElement;
   }
   // not local imports
   OtpErlangObject res2 = null;
   String moduleName = null;
   if (module != null) {
     final IErlImport ei = module.findImport(res.getFunction());
     if (ei != null) {
       moduleName = ei.getImportModule();
       final IErlModel model = ErlangCore.getModel();
       res2 =
           ErlideOpen.getSourceFromModule(
               backend, model.getPathVars(), moduleName, model.getExternalModules(erlProject));
     }
   }
   if (res2 instanceof OtpErlangString && moduleName != null) {
     final OtpErlangString otpErlangString = (OtpErlangString) res2;
     final String modulePath = otpErlangString.stringValue();
     return ErlModelUtils.findExternalFunction(
         moduleName, res.getFunction(), modulePath, project, checkAllProjects, module);
   } else {
     return ErlModelUtils.findExternalFunction(
         moduleName, res.getFunction(), null, project, checkAllProjects, module);
   }
 }
示例#5
0
 private void refreshDirs(final IProject project, final OtpErlangObject element) {
   final OtpErlangList list = (OtpErlangList) element;
   for (final OtpErlangObject ebeam : list) {
     final OtpErlangString beam = (OtpErlangString) ebeam;
     IPath p = new Path(beam.stringValue());
     p = p.removeLastSegments(1);
     p = p.removeFirstSegments(project.getLocation().segmentCount());
     final String projectName = project.getName();
     // FIXME hardcoded "_erl" suffix
     if (projectName.endsWith("_erl")) {
       final String linkname = projectName.substring(0, projectName.length() - 4);
       p = new Path(linkname).append(p);
     }
     final IResource dir = project.findMember(p);
     if (dir != null) {
       try {
         dir.refreshLocal(IResource.DEPTH_ONE, null);
       } catch (final CoreException e) {
       }
     }
   }
 }