Program: 82782
Project: 82782
Buggy source:
public ResolvedModuleRevision getDependency(DependencyDescriptor dd,ResolveData data) throws ParseException {
  clearIvyAttempts();
  boolean downloaded=false;
  boolean searched=false;
  Date cachedPublicationDate=null;
  ModuleRevisionId mrid=dd.getDependencyRevisionId();
  int index=mrid.getRevision().indexOf("String_Node_Str");
  if (index != -1 && !mrid.getRevision().substring(index + 1).equals(_workspaceName)) {
    Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ mrid.getRevision());
    return null;
  }
  if (!mrid.isExactRevision() && !acceptLatest()) {
    Message.error("String_Node_Str" + getClass().getName() + "String_Node_Str"+ mrid);
    return null;
  }
  if (mrid.isExactRevision() && !isCheckmodified() && !dd.isChanging()) {
    ResolvedModuleRevision rmr=data.getIvy().findModuleInCache(mrid,data.getCache(),doValidate(data));
    if (rmr != null) {
      Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ mrid);
      return rmr;
    }
  }
  URL cachedIvyURL=null;
  ResolvedResource ivyRef=findIvyFileRef(dd,data);
  searched=true;
  ModuleDescriptorParser parser;
  ModuleDescriptor md;
  if (ivyRef == null) {
    parser=XmlModuleDescriptorParser.getInstance();
    md=DefaultModuleDescriptor.newDefaultInstance(mrid,dd.getAllDependencyArtifactsIncludes());
    ResolvedResource artifactRef=findFirstArtifactRef(md,dd,data);
    if (artifactRef == null) {
      Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ mrid);
      logIvyNotFound(mrid);
      String[] conf=md.getConfigurationsNames();
      for (int i=0; i < conf.length; i++) {
        Artifact[] artifacts=md.getArtifacts(conf[i]);
        for (int j=0; j < artifacts.length; j++) {
          logArtifactNotFound(artifacts[j]);
        }
      }
      return null;
    }
 else {
      Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ mrid+ "String_Node_Str");
      logIvyNotFound(mrid);
      if (!mrid.isExactRevision()) {
        md.setResolvedModuleRevisionId(new ModuleRevisionId(mrid.getModuleId(),artifactRef.getRevision()));
      }
    }
  }
 else {
    parser=ModuleDescriptorParserRegistry.getInstance().getParser(ivyRef.getResource());
    if (parser == null) {
      Message.warn("String_Node_Str" + ivyRef.getResource());
      return null;
    }
    Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ mrid);
    Message.verbose("String_Node_Str" + ivyRef);
    Message.debug("String_Node_Str" + parser);
    ModuleRevisionId resolvedMrid=mrid;
    if (!mrid.isExactRevision() && ModuleRevisionId.isExactRevision(ivyRef.getRevision())) {
      resolvedMrid=new ModuleRevisionId(mrid.getModuleId(),ivyRef.getRevision());
      IvyNode node=data.getNode(resolvedMrid);
      if (node != null && node.getModuleRevision() != null) {
        Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ resolvedMrid);
        return searchedRmr(node.getModuleRevision());
      }
    }
    ResolvedModuleRevision rmr=data.getIvy().findModuleInCache(resolvedMrid,data.getCache(),doValidate(data));
    if (rmr != null) {
      if (!isCheckmodified() && !dd.isChanging()) {
        Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ resolvedMrid);
        return searchedRmr(rmr);
      }
      long repLastModified=ivyRef.getLastModified();
      long cacheLastModified=rmr.getDescriptor().getLastModified();
      if (!rmr.getDescriptor().isDefault() && repLastModified <= cacheLastModified) {
        Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ resolvedMrid);
        return searchedRmr(rmr);
      }
 else {
        Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ resolvedMrid);
        if (dd.isChanging()) {
          cachedPublicationDate=rmr.getDescriptor().getResolvedPublicationDate();
        }
      }
    }
    try {
      if (ResourceHelper.equals(ivyRef.getResource(),data.getIvy().getIvyFileInCache(data.getCache(),resolvedMrid))) {
        Message.error("String_Node_Str" + getName() + "String_Node_Str");
        return null;
      }
      File ivyTempFile=File.createTempFile("String_Node_Str","String_Node_Str");
      ivyTempFile.deleteOnExit();
      Message.debug("String_Node_Str" + getName() + "String_Node_Str"+ ivyRef.getResource());
      get(ivyRef.getResource(),ivyTempFile);
      downloaded=true;
      try {
        cachedIvyURL=ivyTempFile.toURL();
      }
 catch (      MalformedURLException ex) {
        Message.warn("String_Node_Str" + ivyTempFile + "String_Node_Str"+ ex.getMessage());
        return null;
      }
    }
 catch (    IOException ex) {
      Message.warn("String_Node_Str" + ivyRef.getResource() + "String_Node_Str"+ ex.getMessage());
      return null;
    }
    try {
      md=parser.parseDescriptor(data.getIvy(),cachedIvyURL,ivyRef.getResource(),doValidate(data));
      Message.debug("String_Node_Str" + getName() + "String_Node_Str"+ mrid+ "String_Node_Str"+ md.getModuleRevisionId());
      if (!mrid.getOrganisation().equals(md.getModuleRevisionId().getOrganisation())) {
        throw new IllegalStateException("String_Node_Str" + ivyRef.getResource() + "String_Node_Str"+ mrid.getOrganisation()+ "String_Node_Str"+ md.getModuleRevisionId().getOrganisation());
      }
      if (!mrid.getName().equals(md.getModuleRevisionId().getName())) {
        throw new IllegalStateException("String_Node_Str" + ivyRef.getResource() + "String_Node_Str"+ mrid.getName()+ "String_Node_Str"+ md.getModuleRevisionId().getName());
      }
      if (ivyRef.getRevision() != null && md.getModuleRevisionId().getRevision() != null && !ModuleRevisionId.acceptRevision(ivyRef.getRevision(),md.getModuleRevisionId().getRevision())) {
        throw new IllegalStateException("String_Node_Str" + ivyRef.getResource() + "String_Node_Str"+ ivyRef.getRevision()+ "String_Node_Str"+ md.getModuleRevisionId().getRevision());
      }
      boolean deleteOldArtifacts=false;
      if (cachedPublicationDate != null && !cachedPublicationDate.equals(md.getResolvedPublicationDate())) {
        Message.verbose("String_Node_Str" + dd + "String_Node_Str");
        deleteOldArtifacts=true;
      }
      if (deleteOldArtifacts) {
        String[] confs=rmr.getDescriptor().getConfigurationsNames();
        for (int i=0; i < confs.length; i++) {
          Artifact[] arts=rmr.getDescriptor().getArtifacts(confs[i]);
          for (int j=0; j < arts.length; j++) {
            File artFile=data.getIvy().getArchiveFileInCache(data.getCache(),arts[j]);
            if (artFile.exists()) {
              Message.debug("String_Node_Str" + artFile);
              artFile.delete();
            }
          }
        }
      }
 else       if (dd.isChanging()) {
        Message.verbose("String_Node_Str" + dd + "String_Node_Str");
      }
    }
 catch (    IOException ex) {
      Message.warn("String_Node_Str" + ivyRef.getResource() + "String_Node_Str"+ ex.getMessage());
      return null;
    }
  }
  if (mrid.getRevision().startsWith("String_Node_Str")) {
    String askedStatus=mrid.getRevision().substring("String_Node_Str".length());
    if (Status.getPriority(askedStatus) < Status.getPriority(md.getStatus())) {
      Message.info("String_Node_Str" + getName() + "String_Node_Str"+ md.getStatus()+ "String_Node_Str"+ askedStatus);
      return null;
    }
  }
 else   if (!mrid.acceptRevision(md.getModuleRevisionId().getRevision())) {
    Message.info("String_Node_Str" + getName() + "String_Node_Str"+ md.getModuleRevisionId().getRevision()+ "String_Node_Str"+ mrid.getRevision());
    return null;
  }
  ModuleRevisionId resolvedMrid=mrid;
  if (!resolvedMrid.isExactRevision()) {
    resolvedMrid=md.getResolvedModuleRevisionId();
    if (resolvedMrid.getRevision() == null || resolvedMrid.getRevision().length() == 0) {
      if (ivyRef.getRevision() == null || ivyRef.getRevision().length() == 0 || !ModuleRevisionId.isExactRevision(ivyRef.getRevision())) {
        resolvedMrid=new ModuleRevisionId(resolvedMrid.getModuleId(),(_envDependent ? "String_Node_Str" : "String_Node_Str") + DATE_FORMAT.format(data.getDate()) + "String_Node_Str"+ _workspaceName);
      }
 else {
        resolvedMrid=new ModuleRevisionId(resolvedMrid.getModuleId(),ivyRef.getRevision());
      }
    }
    Message.verbose("String_Node_Str" + resolvedMrid.getRevision() + "String_Node_Str"+ mrid.getModuleId());
  }
  md.setResolvedModuleRevisionId(resolvedMrid);
  if (data.getDate() != null) {
    long pubDate=getPublicationDate(md,dd,data);
    if (pubDate > data.getDate().getTime()) {
      Message.info("String_Node_Str" + getName() + "String_Node_Str"+ new Date(pubDate)+ "String_Node_Str"+ data.getDate());
      return null;
    }
 else     if (pubDate == -1) {
      Message.info("String_Node_Str" + getName() + "String_Node_Str"+ mrid);
      return null;
    }
    md.setResolvedPublicationDate(new Date(pubDate));
  }
  try {
    File ivyFile=data.getIvy().getIvyFileInCache(data.getCache(),md.getResolvedModuleRevisionId());
    if (ivyRef == null) {
      XmlModuleDescriptorWriter.write(md,ivyFile);
    }
 else {
      parser.toIvyFile(cachedIvyURL,ivyRef.getResource(),ivyFile,md);
      long repLastModified=ivyRef.getLastModified();
      if (repLastModified > 0) {
        ivyFile.setLastModified(repLastModified);
      }
    }
  }
 catch (  Exception e) {
    Message.warn("String_Node_Str" + ivyRef.getResource());
  }
  data.getIvy().saveResolver(data.getCache(),md,getName());
  return new DefaultModuleRevision(this,md,searched,downloaded);
}

Fixed version (ground truth):
public ResolvedModuleRevision getDependency(DependencyDescriptor dd,ResolveData data) throws ParseException {
  clearIvyAttempts();
  boolean downloaded=false;
  boolean searched=false;
  Date cachedPublicationDate=null;
  ModuleRevisionId mrid=dd.getDependencyRevisionId();
  int index=mrid.getRevision().indexOf("String_Node_Str");
  if (index != -1 && !mrid.getRevision().substring(index + 1).equals(_workspaceName)) {
    Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ mrid.getRevision());
    return null;
  }
  if (!mrid.isExactRevision() && !acceptLatest()) {
    Message.error("String_Node_Str" + getClass().getName() + "String_Node_Str"+ mrid);
    return null;
  }
  if (mrid.isExactRevision() && !isCheckmodified() && !dd.isChanging()) {
    ResolvedModuleRevision rmr=data.getIvy().findModuleInCache(mrid,data.getCache(),doValidate(data));
    if (rmr != null) {
      Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ mrid);
      return rmr;
    }
  }
  URL cachedIvyURL=null;
  ResolvedResource ivyRef=findIvyFileRef(dd,data);
  searched=true;
  ModuleDescriptorParser parser;
  ModuleDescriptor md;
  if (ivyRef == null) {
    parser=XmlModuleDescriptorParser.getInstance();
    md=DefaultModuleDescriptor.newDefaultInstance(mrid,dd.getAllDependencyArtifactsIncludes());
    ResolvedResource artifactRef=findFirstArtifactRef(md,dd,data);
    if (artifactRef == null) {
      Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ mrid);
      logIvyNotFound(mrid);
      String[] conf=md.getConfigurationsNames();
      for (int i=0; i < conf.length; i++) {
        Artifact[] artifacts=md.getArtifacts(conf[i]);
        for (int j=0; j < artifacts.length; j++) {
          logArtifactNotFound(artifacts[j]);
        }
      }
      return null;
    }
 else {
      Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ mrid+ "String_Node_Str");
      logIvyNotFound(mrid);
      if (!mrid.isExactRevision()) {
        md.setResolvedModuleRevisionId(new ModuleRevisionId(mrid.getModuleId(),artifactRef.getRevision()));
      }
    }
  }
 else {
    parser=ModuleDescriptorParserRegistry.getInstance().getParser(ivyRef.getResource());
    if (parser == null) {
      Message.warn("String_Node_Str" + ivyRef.getResource());
      return null;
    }
    Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ mrid);
    Message.verbose("String_Node_Str" + ivyRef);
    Message.debug("String_Node_Str" + parser);
    ModuleRevisionId resolvedMrid=mrid;
    if (!mrid.isExactRevision() && ModuleRevisionId.isExactRevision(ivyRef.getRevision())) {
      resolvedMrid=new ModuleRevisionId(mrid.getModuleId(),ivyRef.getRevision());
      IvyNode node=data.getNode(resolvedMrid);
      if (node != null && node.getModuleRevision() != null) {
        Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ resolvedMrid);
        return searchedRmr(node.getModuleRevision());
      }
    }
    ResolvedModuleRevision rmr=data.getIvy().findModuleInCache(resolvedMrid,data.getCache(),doValidate(data));
    if (rmr != null) {
      if (!isCheckmodified() && !dd.isChanging()) {
        Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ resolvedMrid);
        return searchedRmr(rmr);
      }
      long repLastModified=ivyRef.getLastModified();
      long cacheLastModified=rmr.getDescriptor().getLastModified();
      if (!rmr.getDescriptor().isDefault() && repLastModified <= cacheLastModified) {
        Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ resolvedMrid);
        return searchedRmr(rmr);
      }
 else {
        Message.verbose("String_Node_Str" + getName() + "String_Node_Str"+ resolvedMrid);
        if (dd.isChanging()) {
          cachedPublicationDate=rmr.getDescriptor().getResolvedPublicationDate();
        }
      }
    }
    try {
      if (ResourceHelper.equals(ivyRef.getResource(),data.getIvy().getIvyFileInCache(data.getCache(),resolvedMrid))) {
        Message.error("String_Node_Str" + getName() + "String_Node_Str");
        return null;
      }
      File ivyTempFile=File.createTempFile("String_Node_Str","String_Node_Str");
      ivyTempFile.deleteOnExit();
      Message.debug("String_Node_Str" + getName() + "String_Node_Str"+ ivyRef.getResource());
      get(ivyRef.getResource(),ivyTempFile);
      downloaded=true;
      try {
        cachedIvyURL=ivyTempFile.toURL();
      }
 catch (      MalformedURLException ex) {
        Message.warn("String_Node_Str" + ivyTempFile + "String_Node_Str"+ ex.getMessage());
        return null;
      }
    }
 catch (    IOException ex) {
      Message.warn("String_Node_Str" + ivyRef.getResource() + "String_Node_Str"+ ex.getMessage());
      return null;
    }
    try {
      md=parser.parseDescriptor(data.getIvy(),cachedIvyURL,ivyRef.getResource(),doValidate(data));
      Message.debug("String_Node_Str" + getName() + "String_Node_Str"+ mrid+ "String_Node_Str"+ md.getModuleRevisionId());
      if (!mrid.getOrganisation().equals(md.getModuleRevisionId().getOrganisation())) {
        throw new IllegalStateException("String_Node_Str" + ivyRef.getResource() + "String_Node_Str"+ mrid.getOrganisation()+ "String_Node_Str"+ md.getModuleRevisionId().getOrganisation());
      }
      if (!mrid.getName().equals(md.getModuleRevisionId().getName())) {
        throw new IllegalStateException("String_Node_Str" + ivyRef.getResource() + "String_Node_Str"+ mrid.getName()+ "String_Node_Str"+ md.getModuleRevisionId().getName());
      }
      if (ivyRef.getRevision() != null && md.getModuleRevisionId().getRevision() != null && !ModuleRevisionId.acceptRevision(ivyRef.getRevision(),md.getModuleRevisionId().getRevision())) {
        throw new IllegalStateException("String_Node_Str" + ivyRef.getResource() + "String_Node_Str"+ ivyRef.getRevision()+ "String_Node_Str"+ md.getModuleRevisionId().getRevision());
      }
      boolean deleteOldArtifacts=false;
      if (cachedPublicationDate != null && !cachedPublicationDate.equals(md.getResolvedPublicationDate())) {
        Message.verbose(dd + "String_Node_Str");
        deleteOldArtifacts=true;
      }
      if (deleteOldArtifacts) {
        String[] confs=rmr.getDescriptor().getConfigurationsNames();
        for (int i=0; i < confs.length; i++) {
          Artifact[] arts=rmr.getDescriptor().getArtifacts(confs[i]);
          for (int j=0; j < arts.length; j++) {
            File artFile=data.getIvy().getArchiveFileInCache(data.getCache(),arts[j]);
            if (artFile.exists()) {
              Message.debug("String_Node_Str" + artFile);
              artFile.delete();
            }
          }
        }
      }
 else       if (dd.isChanging()) {
        Message.verbose(dd + "String_Node_Str");
      }
    }
 catch (    IOException ex) {
      Message.warn("String_Node_Str" + ivyRef.getResource() + "String_Node_Str"+ ex.getMessage());
      return null;
    }
  }
  if (mrid.getRevision().startsWith("String_Node_Str")) {
    String askedStatus=mrid.getRevision().substring("String_Node_Str".length());
    if (Status.getPriority(askedStatus) < Status.getPriority(md.getStatus())) {
      Message.info("String_Node_Str" + getName() + "String_Node_Str"+ md.getStatus()+ "String_Node_Str"+ askedStatus);
      return null;
    }
  }
 else   if (!mrid.acceptRevision(md.getModuleRevisionId().getRevision())) {
    Message.info("String_Node_Str" + getName() + "String_Node_Str"+ md.getModuleRevisionId().getRevision()+ "String_Node_Str"+ mrid.getRevision());
    return null;
  }
  ModuleRevisionId resolvedMrid=mrid;
  if (!resolvedMrid.isExactRevision()) {
    resolvedMrid=md.getResolvedModuleRevisionId();
    if (resolvedMrid.getRevision() == null || resolvedMrid.getRevision().length() == 0) {
      if (ivyRef.getRevision() == null || ivyRef.getRevision().length() == 0 || !ModuleRevisionId.isExactRevision(ivyRef.getRevision())) {
        resolvedMrid=new ModuleRevisionId(resolvedMrid.getModuleId(),(_envDependent ? "String_Node_Str" : "String_Node_Str") + DATE_FORMAT.format(data.getDate()) + "String_Node_Str"+ _workspaceName);
      }
 else {
        resolvedMrid=new ModuleRevisionId(resolvedMrid.getModuleId(),ivyRef.getRevision());
      }
    }
    Message.verbose("String_Node_Str" + resolvedMrid.getRevision() + "String_Node_Str"+ mrid.getModuleId());
  }
  md.setResolvedModuleRevisionId(resolvedMrid);
  if (data.getDate() != null) {
    long pubDate=getPublicationDate(md,dd,data);
    if (pubDate > data.getDate().getTime()) {
      Message.info("String_Node_Str" + getName() + "String_Node_Str"+ new Date(pubDate)+ "String_Node_Str"+ data.getDate());
      return null;
    }
 else     if (pubDate == -1) {
      Message.info("String_Node_Str" + getName() + "String_Node_Str"+ mrid);
      return null;
    }
    md.setResolvedPublicationDate(new Date(pubDate));
  }
  try {
    File ivyFile=data.getIvy().getIvyFileInCache(data.getCache(),md.getResolvedModuleRevisionId());
    if (ivyRef == null) {
      XmlModuleDescriptorWriter.write(md,ivyFile);
    }
 else {
      parser.toIvyFile(cachedIvyURL,ivyRef.getResource(),ivyFile,md);
      long repLastModified=ivyRef.getLastModified();
      if (repLastModified > 0) {
        ivyFile.setLastModified(repLastModified);
      }
    }
  }
 catch (  Exception e) {
    Message.warn("String_Node_Str" + ivyRef.getResource());
  }
  data.getIvy().saveResolver(data.getCache(),md,getName());
  return new DefaultModuleRevision(this,md,searched,downloaded);
}