/*
* Copyright (c) 2013-2016 Chris Newland.
* Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD
* Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki
*/
package org.adoptopenjdk.jitwatch.ui.optimizedvcall;
import java.util.ArrayList;
import java.util.List;
import javafx.collections.FXCollections;
import javafx.event.EventHandler;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
import org.adoptopenjdk.jitwatch.model.IMetaMember;
import org.adoptopenjdk.jitwatch.optimizedvcall.OptimizedVirtualCall;
import org.adoptopenjdk.jitwatch.ui.main.IStageAccessProxy;
public class VCallTableBuilder
{
public static TableView<VCallRow> buildTable(final IStageAccessProxy proxy, List<OptimizedVirtualCall> vCalls)
{
final TableView<VCallRow> tableView = new TableView<>();
TableColumn<VCallRow, String> colCallerClass = new TableColumn<VCallRow, String>("Caller Class");
colCallerClass.setCellValueFactory(new PropertyValueFactory<VCallRow, String>("callerClass"));
TableColumn<VCallRow, String> colCallerMember = new TableColumn<VCallRow, String>("Method");
colCallerMember.setCellValueFactory(new PropertyValueFactory<VCallRow, String>("callerMember"));
TableColumn<VCallRow, Integer> colCallerLine = new TableColumn<VCallRow, Integer>("Source Line");
colCallerLine.setCellValueFactory(new PropertyValueFactory<VCallRow, Integer>("callerSourceLine"));
TableColumn<VCallRow, Integer> colCallerBytecode = new TableColumn<VCallRow, Integer>("BCI");
colCallerBytecode.setCellValueFactory(new PropertyValueFactory<VCallRow, Integer>("callerBCI"));
TableColumn<VCallRow, String> colInvokeType = new TableColumn<VCallRow, String>("Invoke");
colInvokeType.setCellValueFactory(new PropertyValueFactory<VCallRow, String>("invokeType"));
tableView.getColumns().add(colCallerClass);
tableView.getColumns().add(colCallerMember);
tableView.getColumns().add(colCallerLine);
tableView.getColumns().add(colCallerBytecode);
tableView.getColumns().add(colInvokeType);
TableColumn<VCallRow, String> colCalleeClass = new TableColumn<VCallRow, String>("Callee Class");
colCalleeClass.setCellValueFactory(new PropertyValueFactory<VCallRow, String>("calleeClass"));
TableColumn<VCallRow, String> colCalleeMember = new TableColumn<VCallRow, String>("Method");
colCalleeMember.setCellValueFactory(new PropertyValueFactory<VCallRow, String>("calleeMember"));
tableView.getColumns().add(colCalleeClass);
tableView.getColumns().add(colCalleeMember);
tableView.setOnMouseClicked(new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent event)
{
VCallRow selected = tableView.getSelectionModel().getSelectedItem();
if (selected != null)
{
IMetaMember callingMember = selected.getCaller();
proxy.openTriView(callingMember, true, selected.getCallerBCI());
}
}
});
List<VCallRow> rowList = new ArrayList<>();
if (vCalls != null)
{
for (OptimizedVirtualCall vCall : vCalls)
{
VCallRow row = new VCallRow(vCall);
rowList.add(row);
}
}
tableView.setItems(FXCollections.observableArrayList(rowList));
return tableView;
}
}