use of com.android.tools.idea.gradle.structure.model.PsIssue in project android by JetBrains.
the class NodeHyperlinkSupport method addHyperlinkBehaviorToSupportedNodes.
private void addHyperlinkBehaviorToSupportedNodes() {
myTree.setCellRenderer(new NodeRenderer() {
@NotNull
@Override
protected SimpleTextAttributes getSimpleTextAttributes(@NotNull PresentationData presentation, Color color, @NotNull Object node) {
List<PsIssue> issues = Collections.emptyList();
if (myShowIssues && node instanceof AbstractPsModelNode) {
AbstractPsModelNode<? extends PsModel> modelNode = (AbstractPsModelNode<? extends PsModel>) node;
issues = findIssues(modelNode, IssuesByTypeAndTextComparator.INSTANCE);
presentation.setTooltip(getTooltipText(issues, false));
}
if (myHoveredNode != null && myHoveredNode == node) {
return LINK_ATTRIBUTES;
}
SimpleTextAttributes textAttributes = super.getSimpleTextAttributes(presentation, color, node);
if (!issues.isEmpty()) {
PsIssue issue = issues.get(0);
Color waveColor = issue.getSeverity().getColor();
textAttributes = textAttributes.derive(STYLE_WAVED, null, null, waveColor);
}
return textAttributes;
}
@Override
public void customizeCellRenderer(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
if (myShowIssues) {
AbstractPsModelNode<? extends PsModel> modelNode = findModelNode(value);
if (modelNode != null) {
List<PsIssue> issues = findIssues(modelNode, null);
if (!issues.isEmpty()) {
// Force color change of the node.
modelNode.getPresentation().clearText();
}
}
}
super.customizeCellRenderer(tree, value, selected, expanded, leaf, row, hasFocus);
Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
if (userObject instanceof CellAppearanceEx) {
((CellAppearanceEx) userObject).customize(this);
}
}
@Nullable
private AbstractPsModelNode<? extends PsModel> findModelNode(@Nullable Object value) {
if (value instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
Object userObject = node.getUserObject();
if (userObject instanceof AbstractPsModelNode) {
return (AbstractPsModelNode<? extends PsModel>) userObject;
}
}
return null;
}
});
MouseAdapter mouseListener = new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
Cursor cursor = getDefaultCursor();
T node = getIfHyperlink(e);
if (node != null) {
cursor = getPredefinedCursor(HAND_CURSOR);
}
setHoveredNode(node);
myTree.setCursor(cursor);
}
};
myTree.addMouseMotionListener(mouseListener);
// Make the cursor change to 'hand' if the mouse pointer is over a supported node and the user presses Ctrl or Cmd.
myKeyEventDispatcher = e -> {
T node = null;
if (e.getID() == KEY_PRESSED) {
Cursor cursor = getDefaultCursor();
if (isMetaOrCtrlKeyPressed(e)) {
node = getNodeUnderMousePointer();
if (node != null) {
cursor = getPredefinedCursor(HAND_CURSOR);
}
}
setHoveredNode(node);
myTree.setCursor(cursor);
} else if (e.getID() == KEY_RELEASED) {
if (isMetaOrCtrlKeyPressed(e)) {
setHoveredNode(null);
}
myTree.setCursor(getDefaultCursor());
}
return false;
};
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(myKeyEventDispatcher);
}
use of com.android.tools.idea.gradle.structure.model.PsIssue in project android by JetBrains.
the class PsAndroidModuleAnalyzerTest method createIssueFrom.
@Test
public void createIssueFrom() {
SyncIssue syncIssue = mock(SyncIssue.class);
when(syncIssue.getMessage()).thenReturn("Conflict with dependency 'com.google.guava:guava'. Resolved versions for app (16.0) " + "and test app (16.0.1) differ. See http://g.co/androidstudio/app-test-app-conflict for " + "details.");
when(syncIssue.getSeverity()).thenReturn(SEVERITY_ERROR);
PsPath path = mock(PsPath.class);
PsIssue issue = PsAndroidModuleAnalyzer.createIssueFrom(syncIssue, path, null);
assertThat(issue.getText()).isEqualTo("Conflict with dependency 'com.google.guava:guava'. Resolved versions for app (16.0) " + "and test app (16.0.1) differ. See " + "<a href='http://g.co/androidstudio/app-test-app-conflict'>http://g.co/androidstudio/app-test-app-conflict</a> " + "for details.");
assertThat(issue.getSeverity()).isEqualTo(ERROR);
}
use of com.android.tools.idea.gradle.structure.model.PsIssue in project android by JetBrains.
the class DependencyGraphPanel method updateIssues.
private void updateIssues(@NotNull List<AbstractDependencyNode<? extends PsAndroidDependency>> selection) {
List<PsIssue> issues = Lists.newArrayList();
for (AbstractDependencyNode<? extends PsAndroidDependency> node : selection) {
for (PsAndroidDependency dependency : node.getModels()) {
issues.addAll(myContext.getAnalyzerDaemon().getIssues().findIssues(dependency, null));
}
}
displayIssues(issues);
}
use of com.android.tools.idea.gradle.structure.model.PsIssue in project android by JetBrains.
the class NodeHyperlinkSupport method findIssues.
@NotNull
private List<PsIssue> findIssues(@NotNull AbstractPsModelNode<? extends PsModel> modelNode, @Nullable Comparator<PsIssue> comparator) {
List<PsIssue> issues = Lists.newArrayList();
PsIssueCollection issueCollection = myContext.getAnalyzerDaemon().getIssues();
for (PsModel model : modelNode.getModels()) {
issues.addAll(issueCollection.findIssues(model, null));
}
if (comparator != null && issues.size() > 1) {
Collections.sort(issues, comparator);
}
return issues;
}
Aggregations