Program: 137252
Project: 137252
Buggy source:
@Override public void mouseDown(MouseEvent e){
  if (table.getMenu() != null) {
    table.getMenu().setVisible(false);
  }
  if (e.button == 3) {
    StructuredSelection selection=(StructuredSelection)tbViewer.getSelection();
    final ChartDataEntity dataEntity=(ChartDataEntity)selection.getFirstElement();
    final Indicator indicator=dataEntity != null ? dataEntity.getIndicator() : null;
    if (indicator != null && dataEntity != null) {
      Menu menu=new Menu(table.getShell(),SWT.POP_UP);
      table.setMenu(menu);
      MenuItemEntity[] itemEntities=ChartTableMenuGenerator.generate(explorer,analysis,dataEntity);
      Long rowCount=getRowCount(analysis,dataEntity.getIndicator().getAnalyzedElement());
      if (!isJAVALanguage) {
        boolean showExtraMenu=false;
        for (        final MenuItemEntity itemEntity : itemEntities) {
          MenuItem item=new MenuItem(menu,SWT.PUSH);
          item.setText(itemEntity.getLabel());
          item.setImage(itemEntity.getIcon());
          item.addSelectionListener(new SelectionAdapter(){
            @Override public void widgetSelected(            SelectionEvent e){
              String query=itemEntity.getQuery();
              String editorName=indicator.getName();
              if (isPatternMatchingIndicator(indicator) && !((PatternExplorer)explorer).isImplementRegexFunction(itemEntity.getLabel())) {
                MessageDialog.openInformation(new Shell(),itemEntity.getLabel(),DefaultMessagesImpl.getString("String_Node_Str"));
                return;
              }
              CorePlugin.getDefault().runInDQViewer(tdDataProvider,query,editorName);
            }
          }
);
          if (IndicatorHelper.isWhereRuleIndicatorNotAide(indicator)) {
            WhereRuleIndicator ind=(WhereRuleIndicator)indicator;
            EList<JoinElement> joinConditions=ind.getJoinConditions();
            if (joinConditions.size() > 0) {
              showExtraMenu=true;
            }
          }
          if (isPatternFrequencyIndicator(indicator)) {
            MenuItem itemCreatePatt=new MenuItem(menu,SWT.PUSH);
            itemCreatePatt.setText(DefaultMessagesImpl.getString("String_Node_Str"));
            itemCreatePatt.setImage(ImageLib.getImage(ImageLib.PATTERN_REG));
            itemCreatePatt.addSelectionListener(new SelectionAdapter(){
              @Override public void widgetSelected(              SelectionEvent e){
                DbmsLanguage language=DbmsLanguageFactory.createDbmsLanguage(analysis);
                PatternTransformer pattTransformer=new PatternTransformer(language);
                createPattern(analysis,itemEntity,pattTransformer);
              }
            }
);
          }
        }
        if (showExtraMenu) {
          MenuItem itemCreateWhereRule=new MenuItem(menu,SWT.PUSH);
          itemCreateWhereRule.setText(DefaultMessagesImpl.getString("String_Node_Str"));
          itemCreateWhereRule.addSelectionListener(new SelectionAdapter(){
            @Override public void widgetSelected(            SelectionEvent e){
              final StructuredSelection selectionOne=(StructuredSelection)tbViewer.getSelection();
              Object firstElement=selectionOne.getFirstElement();
              if (firstElement instanceof WhereRuleChartDataEntity) {
                WhereRuleChartDataEntity wrChartDataEntity=(WhereRuleChartDataEntity)firstElement;
                WhereRuleIndicator wrInd=(WhereRuleIndicator)wrChartDataEntity.getIndicator();
                CreateDuplicatesAnalysisAction action=new CreateDuplicatesAnalysisAction(buildColumnsMap(wrInd));
                action.run();
              }
            }
            /** 
 * DOC xqliu Comment method "buildColumnsMap".
 * @param wrInd
 * @return
 */
            private Map<ColumnSet,List<TdColumn>> buildColumnsMap(            WhereRuleIndicator wrInd){
              Map<ColumnSet,List<TdColumn>> map=new HashMap<ColumnSet,List<TdColumn>>();
              List<TdColumn> columns=new ArrayList<TdColumn>();
              EList<JoinElement> joinConditions=wrInd.getJoinConditions();
              for (              JoinElement joinElement : joinConditions) {
                TdColumn tempColumn=(TdColumn)joinElement.getColA();
                if (!columns.contains(tempColumn)) {
                  columns.add(tempColumn);
                }
                tempColumn=(TdColumn)joinElement.getColB();
                if (!columns.contains(tempColumn)) {
                  columns.add(tempColumn);
                }
              }
              for (              TdColumn column : columns) {
                ColumnSet columnSet=ColumnHelper.getColumnOwnerAsColumnSet(column);
                List<TdColumn> list=map.get(columnSet);
                if (list == null) {
                  list=new ArrayList<TdColumn>();
                  map.put(columnSet,list);
                }
                list.add(column);
              }
              return getUserSelectedMap(map);
            }
            /** 
 * DOC xqliu Comment method "getUserSelectedMap".
 * @param map
 * @return
 */
            private Map<ColumnSet,List<TdColumn>> getUserSelectedMap(            Map<ColumnSet,List<TdColumn>> map){
              Map<ColumnSet,List<TdColumn>> userMap=new HashMap<ColumnSet,List<TdColumn>>();
              List<RepositoryNode> columnNodes=getColumnNodes(map);
              RepositoryNode rootNode=getConnectionNode(map);
              if (!columnNodes.isEmpty() && rootNode != null) {
                ColumnsMapSelectionDialog dialog=new ColumnsMapSelectionDialog(null,PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),DefaultMessagesImpl.getString("String_Node_Str"),columnNodes,rootNode,DefaultMessagesImpl.getString("String_Node_Str"));
                dialog.setAllMap(map);
                if (dialog.open() == Window.OK) {
                  userMap=dialog.getUserMap();
                }
              }
              return userMap;
            }
            /** 
 * DOC xqliu Comment method "getConnectionNode".
 * @param map
 * @return
 */
            private RepositoryNode getConnectionNode(            Map<ColumnSet,List<TdColumn>> map){
              RepositoryNode node=null;
              if (map != null && !map.isEmpty()) {
                Connection connection=ConnectionHelper.getConnection(map.keySet().iterator().next());
                if (connection != null) {
                  node=RepositoryNodeHelper.recursiveFind(connection);
                }
              }
              return node;
            }
            /** 
 * DOC xqliu Comment method "getColumnNodes".
 * @param map
 * @return
 */
            private List<RepositoryNode> getColumnNodes(            Map<ColumnSet,List<TdColumn>> map){
              List<RepositoryNode> nodes=new ArrayList<RepositoryNode>();
              if (map != null && !map.isEmpty()) {
                List<TdColumn> columns=new ArrayList<TdColumn>();
                Set<ColumnSet> keySet=map.keySet();
                for (                ColumnSet cs : keySet) {
                  columns.addAll(map.get(cs));
                }
                if (!columns.isEmpty()) {
                  for (                  TdColumn column : columns) {
                    nodes.add(RepositoryNodeHelper.recursiveFind(column));
                  }
                }
              }
              return nodes;
            }
          }
);
        }
      }
 else {
        if (analysis.getParameters().isStoreData()) {
          if (indicator.isSaveTempDataToFile()) {
            createDrillDownMenuForMapDB(dataEntity,menu,itemEntities);
          }
 else {
            createDrillDownMenuForJava(dataEntity,menu,itemEntities);
          }
          if (isPatternFrequencyIndicator(indicator)) {
            for (            final MenuItemEntity itemEntity : itemEntities) {
              if (itemEntity.getQuery() == null) {
                if (dataEntity.getKey() == null) {
                  itemEntity.setQuery(dataEntity.getLabel());
                }
 else {
                  itemEntity.setQuery(dataEntity.getKey().toString());
                }
              }
              MenuItem itemCreatePatt=new MenuItem(menu,SWT.PUSH);
              itemCreatePatt.setText(DefaultMessagesImpl.getString("String_Node_Str"));
              itemCreatePatt.setImage(ImageLib.getImage(ImageLib.PATTERN_REG));
              itemCreatePatt.addSelectionListener(new SelectionAdapter(){
                @Override public void widgetSelected(                SelectionEvent e){
                  DbmsLanguage language=DbmsLanguageFactory.createDbmsLanguage(analysis);
                  PatternTransformer pattTransformer=new PatternTransformer(language);
                  createPattern(analysis,itemEntity,pattTransformer);
                }
              }
);
            }
          }
        }
        if (isDatePatternFrequencyIndicator(indicator)) {
          final DatePatternFreqIndicator dateIndicator=(DatePatternFreqIndicator)indicator;
          MenuItem itemCreatePatt=new MenuItem(menu,SWT.PUSH);
          itemCreatePatt.setText(DefaultMessagesImpl.getString("String_Node_Str"));
          itemCreatePatt.setImage(ImageLib.getImage(ImageLib.PATTERN_REG));
          itemCreatePatt.addSelectionListener(new SelectionAdapter(){
            @Override public void widgetSelected(            SelectionEvent e){
              DbmsLanguage language=DbmsLanguageFactory.createDbmsLanguage(analysis);
              IFolder folder=ResourceManager.getPatternRegexFolder();
              String model=dataEntity.getLabel();
              String regex=dateIndicator.getRegex(model);
              new CreatePatternAction(folder,ExpressionType.REGEXP,"String_Node_Str" + regex + "String_Node_Str",model == null ? "String_Node_Str" : "String_Node_Str" + model + "String_Node_Str",language.getDbmsName()).run();
            }
          }
);
        }
      }
      addJobGenerationMenu(menu,analysis,indicator);
      menu.setVisible(true);
    }
  }
}

Fixed version (ground truth):
@Override public void mouseDown(MouseEvent e){
  if (table.getMenu() != null) {
    table.getMenu().setVisible(false);
  }
  if (e.button == 3) {
    StructuredSelection selection=(StructuredSelection)tbViewer.getSelection();
    final ChartDataEntity dataEntity=(ChartDataEntity)selection.getFirstElement();
    final Indicator indicator=dataEntity != null ? dataEntity.getIndicator() : null;
    if (indicator != null && dataEntity != null) {
      Menu menu=new Menu(table.getShell(),SWT.POP_UP);
      table.setMenu(menu);
      MenuItemEntity[] itemEntities=ChartTableMenuGenerator.generate(explorer,analysis,dataEntity);
      Long rowCount=getRowCount(analysis,dataEntity.getIndicator().getAnalyzedElement());
      if (!isJAVALanguage) {
        boolean showExtraMenu=false;
        for (        final MenuItemEntity itemEntity : itemEntities) {
          MenuItem item=new MenuItem(menu,SWT.PUSH);
          item.setText(itemEntity.getLabel());
          item.setImage(itemEntity.getIcon());
          item.addSelectionListener(new SelectionAdapter(){
            @Override public void widgetSelected(            SelectionEvent e){
              String query=itemEntity.getQuery();
              String editorName=indicator.getName();
              if (isPatternMatchingIndicator(indicator) && !((PatternExplorer)explorer).isImplementRegexFunction(itemEntity.getLabel())) {
                MessageDialog.openInformation(new Shell(),itemEntity.getLabel(),DefaultMessagesImpl.getString("String_Node_Str"));
                return;
              }
              CorePlugin.getDefault().runInDQViewer(tdDataProvider,query,editorName);
            }
          }
);
          if (IndicatorHelper.isWhereRuleIndicatorNotAide(indicator)) {
            WhereRuleIndicator ind=(WhereRuleIndicator)indicator;
            EList<JoinElement> joinConditions=ind.getJoinConditions();
            if (joinConditions.size() > 0) {
              showExtraMenu=true;
            }
          }
          if (isPatternFrequencyIndicator(indicator)) {
            MenuItem itemCreatePatt=new MenuItem(menu,SWT.PUSH);
            itemCreatePatt.setText(DefaultMessagesImpl.getString("String_Node_Str"));
            itemCreatePatt.setImage(ImageLib.getImage(ImageLib.PATTERN_REG));
            itemCreatePatt.addSelectionListener(new SelectionAdapter(){
              @Override public void widgetSelected(              SelectionEvent e){
                DbmsLanguage language=DbmsLanguageFactory.createDbmsLanguage(analysis);
                PatternTransformer pattTransformer=new PatternTransformer(language);
                createPattern(analysis,itemEntity,pattTransformer);
              }
            }
);
          }
        }
        if (showExtraMenu) {
          MenuItem itemCreateWhereRule=new MenuItem(menu,SWT.PUSH);
          itemCreateWhereRule.setText(DefaultMessagesImpl.getString("String_Node_Str"));
          itemCreateWhereRule.addSelectionListener(new SelectionAdapter(){
            @Override public void widgetSelected(            SelectionEvent e){
              final StructuredSelection selectionOne=(StructuredSelection)tbViewer.getSelection();
              Object firstElement=selectionOne.getFirstElement();
              if (firstElement instanceof WhereRuleChartDataEntity) {
                WhereRuleChartDataEntity wrChartDataEntity=(WhereRuleChartDataEntity)firstElement;
                WhereRuleIndicator wrInd=(WhereRuleIndicator)wrChartDataEntity.getIndicator();
                CreateDuplicatesAnalysisAction action=new CreateDuplicatesAnalysisAction(buildColumnsMap(wrInd));
                action.run();
              }
            }
            /** 
 * DOC xqliu Comment method "buildColumnsMap".
 * @param wrInd
 * @return
 */
            private Map<ColumnSet,List<TdColumn>> buildColumnsMap(            WhereRuleIndicator wrInd){
              Map<ColumnSet,List<TdColumn>> map=new HashMap<ColumnSet,List<TdColumn>>();
              List<TdColumn> columns=new ArrayList<TdColumn>();
              EList<JoinElement> joinConditions=wrInd.getJoinConditions();
              for (              JoinElement joinElement : joinConditions) {
                TdColumn tempColumn=(TdColumn)joinElement.getColA();
                if (!columns.contains(tempColumn)) {
                  columns.add(tempColumn);
                }
                tempColumn=(TdColumn)joinElement.getColB();
                if (!columns.contains(tempColumn)) {
                  columns.add(tempColumn);
                }
              }
              for (              TdColumn column : columns) {
                ColumnSet columnSet=ColumnHelper.getColumnOwnerAsColumnSet(column);
                List<TdColumn> list=map.get(columnSet);
                if (list == null) {
                  list=new ArrayList<TdColumn>();
                  map.put(columnSet,list);
                }
                list.add(column);
              }
              return getUserSelectedMap(map);
            }
            /** 
 * DOC xqliu Comment method "getUserSelectedMap".
 * @param map
 * @return
 */
            private Map<ColumnSet,List<TdColumn>> getUserSelectedMap(            Map<ColumnSet,List<TdColumn>> map){
              Map<ColumnSet,List<TdColumn>> userMap=new HashMap<ColumnSet,List<TdColumn>>();
              List<RepositoryNode> columnNodes=getColumnNodes(map);
              RepositoryNode rootNode=getConnectionNode(map);
              if (!columnNodes.isEmpty() && rootNode != null) {
                ColumnsMapSelectionDialog dialog=new ColumnsMapSelectionDialog(null,PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),DefaultMessagesImpl.getString("String_Node_Str"),columnNodes,rootNode,DefaultMessagesImpl.getString("String_Node_Str"));
                dialog.setAllMap(map);
                if (dialog.open() == Window.OK) {
                  userMap=dialog.getUserMap();
                }
              }
              return userMap;
            }
            /** 
 * DOC xqliu Comment method "getConnectionNode".
 * @param map
 * @return
 */
            private RepositoryNode getConnectionNode(            Map<ColumnSet,List<TdColumn>> map){
              RepositoryNode node=null;
              if (map != null && !map.isEmpty()) {
                Connection connection=ConnectionHelper.getConnection(map.keySet().iterator().next());
                if (connection != null) {
                  node=RepositoryNodeHelper.recursiveFind(connection);
                }
              }
              return node;
            }
            /** 
 * DOC xqliu Comment method "getColumnNodes".
 * @param map
 * @return
 */
            private List<RepositoryNode> getColumnNodes(            Map<ColumnSet,List<TdColumn>> map){
              List<RepositoryNode> nodes=new ArrayList<RepositoryNode>();
              if (map != null && !map.isEmpty()) {
                List<TdColumn> columns=new ArrayList<TdColumn>();
                Set<ColumnSet> keySet=map.keySet();
                for (                ColumnSet cs : keySet) {
                  columns.addAll(map.get(cs));
                }
                if (!columns.isEmpty()) {
                  for (                  TdColumn column : columns) {
                    nodes.add(RepositoryNodeHelper.recursiveFind(column));
                  }
                }
              }
              return nodes;
            }
          }
);
        }
      }
 else {
        if (analysis.getParameters().isStoreData()) {
          if (indicator.isUsedMapDBMode()) {
            createDrillDownMenuForMapDB(dataEntity,menu,itemEntities);
          }
 else {
            createDrillDownMenuForJava(dataEntity,menu,itemEntities);
          }
          if (isPatternFrequencyIndicator(indicator)) {
            for (            final MenuItemEntity itemEntity : itemEntities) {
              if (itemEntity.getQuery() == null) {
                if (dataEntity.getKey() == null) {
                  itemEntity.setQuery(dataEntity.getLabel());
                }
 else {
                  itemEntity.setQuery(dataEntity.getKey().toString());
                }
              }
              MenuItem itemCreatePatt=new MenuItem(menu,SWT.PUSH);
              itemCreatePatt.setText(DefaultMessagesImpl.getString("String_Node_Str"));
              itemCreatePatt.setImage(ImageLib.getImage(ImageLib.PATTERN_REG));
              itemCreatePatt.addSelectionListener(new SelectionAdapter(){
                @Override public void widgetSelected(                SelectionEvent e){
                  DbmsLanguage language=DbmsLanguageFactory.createDbmsLanguage(analysis);
                  PatternTransformer pattTransformer=new PatternTransformer(language);
                  createPattern(analysis,itemEntity,pattTransformer);
                }
              }
);
            }
          }
        }
        if (isDatePatternFrequencyIndicator(indicator)) {
          final DatePatternFreqIndicator dateIndicator=(DatePatternFreqIndicator)indicator;
          MenuItem itemCreatePatt=new MenuItem(menu,SWT.PUSH);
          itemCreatePatt.setText(DefaultMessagesImpl.getString("String_Node_Str"));
          itemCreatePatt.setImage(ImageLib.getImage(ImageLib.PATTERN_REG));
          itemCreatePatt.addSelectionListener(new SelectionAdapter(){
            @Override public void widgetSelected(            SelectionEvent e){
              DbmsLanguage language=DbmsLanguageFactory.createDbmsLanguage(analysis);
              IFolder folder=ResourceManager.getPatternRegexFolder();
              String model=dataEntity.getLabel();
              String regex=dateIndicator.getRegex(model);
              new CreatePatternAction(folder,ExpressionType.REGEXP,"String_Node_Str" + regex + "String_Node_Str",model == null ? "String_Node_Str" : "String_Node_Str" + model + "String_Node_Str",language.getDbmsName()).run();
            }
          }
);
        }
      }
      addJobGenerationMenu(menu,analysis,indicator);
      menu.setVisible(true);
    }
  }
}