Exemple #1
0
 private IJstType parseAndResolve(SourceTypeName typeName) {
   IJstType jstType = null;
   try {
     VjoParserToJstAndIType parser = new VjoParserToJstAndIType();
     if (VjetPlugin.TRACE_PARSER) {
       System.out.println("parsing for " + getClass().getName());
     }
     IScriptUnit scriptUnit =
         parser.parse(typeName.groupName(), getTypeName().typeName(), typeName.source());
     if (scriptUnit != null) {
       jstType = scriptUnit.getType();
     }
   } catch (Exception e) {
     DLTKCore.error(e.getMessage(), e);
   }
   return jstType;
 }
Exemple #2
0
  private void processType(char[] contents) {

    // fix bug 2206, add for findbugs NP warning, the contents might be
    // null.
    if (contents == null) {
      return;
    }

    m_typeProcessed = true;

    // String group = getGroupName();
    SourceTypeName typeName = getTypeName();
    String source = new String(contents);
    typeName.setSource(source);

    if (isConsistent) {
      jstType = parseAndResolve(typeName);
    } else {
      jstType = mgr.findType(typeName);
      if (jstType == null) {
        jstType = parseAndResolve(typeName);
      }
    }
  }
Exemple #3
0
  private boolean doBuild(
      OpenableElementInfo info,
      IProgressMonitor progressMonitor,
      Map newElements,
      IResource underlyingResource)
      throws ModelException {
    try {

      final JSSourceModuleElementInfo moduleInfo = (JSSourceModuleElementInfo) info;

      IBuffer buffer = null;
      // ensure buffer is opened
      if (hasBuffer()) {
        buffer = getBufferManager().getBuffer(this);
        if (buffer == null) {
          buffer = openBuffer(progressMonitor, moduleInfo);
        }
      }

      final char[] contents = (buffer == null) ? null : buffer.getCharacters();

      // generate structure and compute syntax problems if needed
      final VjoSourceModuleStructureRequestor requestor =
          new VjoSourceModuleStructureRequestor(this, moduleInfo, newElements);

      // System.out.println("==> Parsing: " + resource.getName());
      final String natureId = getNatureId();
      if (natureId == null) {
        throw new ModelException(new ModelStatus(ModelStatus.INVALID_NAME));
      }

      SourceTypeName stName = getTypeName();
      IResource resource = getResource();
      // it is not a workspace file
      // if ("".equals(stName.groupName().trim()) && (resource == null ||
      // !resource.exists())) {
      // jstType = CodeassistUtils.findNativeJstType(stName.typeName());
      // } else {
      // processType(contents);
      // }
      final VjoSourceElementParser parser =
          (VjoSourceElementParser) getSourceElementParser(natureId);
      if (!isReadOnly()) {
        ((ISourceElementParserExtension) parser).setScriptProject(this.getScriptProject());
      }

      parser.setRequestor(requestor);
      final AccumulatingProblemReporter problemReporter = getAccumulatingProblemReporter();
      parser.setReporter(problemReporter);

      boolean reparsed = false;
      if (problemReporter != null) {
        if (!problemReporter.hasErrors()) {
          StructureBuilder.build(natureId, this, problemReporter);
          reparsed = true;
        }
        problemReporter.reportToRequestor();
      }

      if (jstType == null && isVirtualTypeResource(resource)) {

        IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
        IResource typespaceresource = root.findMember(resource.getFullPath());
        if (typespaceresource != null) {
          URI location = typespaceresource.getLocationURI();
          String typeName = location.getPath().replace("/", ".");
          String groupName = location.getHost();
          if (typeName.indexOf(".") == 0) {
            typeName = typeName.substring(1, typeName.length());
          }
          typeName = typeName.replace(".js", "");

          jstType = CodeassistUtils.findJstType(groupName, typeName);
        }
      } else if (jstType == null || !reparsed) {
        if ("".equals(stName.groupName().trim()) && (resource == null || !resource.exists())) {
          jstType = CodeassistUtils.findNativeJstType(stName.typeName());
        } else {
          processType(contents);
        }
      }

      // parse source module after getting the JstType
      //
      SourceParserUtil.parseSourceModule(this, parser);

      if (DLTKCore.DEBUG_PRINT_MODEL) {
        System.out.println("Source Module Debug print:"); // $NON-NLS-1$

        CorePrinter printer = new CorePrinter(System.out);
        printNode(printer);
        printer.flush();
      }

      // update timestamp (might be IResource.NULL_STAMP if original does
      // not exist)
      if (underlyingResource == null) {
        underlyingResource = getResource();
      }
      // underlying resource is null in the case of a working copy out of
      // workspace
      if (underlyingResource != null) {
        moduleInfo.setTimestamp(((IFile) underlyingResource).getModificationStamp());
      }

      isConsistent = true;

      return moduleInfo.isStructureKnown();
    } catch (CoreException e) {
      throw new ModelException(e);
    }
  }