/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.codeInspection.expression; import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.codeInspection.ex.BaseLocalInspectionTool; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiFile; import gw.plugin.ij.intentions.AssertKeywordQuickFix; import gw.plugin.ij.lang.GosuTokenImpl; import gw.plugin.ij.lang.psi.impl.GosuElementVisitor; import gw.plugin.ij.util.GosuBundle; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; public class GosuUpgradeToAssertStatementInspection extends BaseLocalInspectionTool { @Nls @NotNull @Override public String getGroupDisplayName() { return GosuBundle.message("inspection.group.name.upgrade.issues"); } @Nls @NotNull @Override public String getDisplayName() { return GosuBundle.message( "inspection.assert.is.reserved" ); } @Override public boolean isEnabledByDefault() { // Must turn this on explicitly, it's useful just for upgrades return false; } @NotNull @Override public String getShortName() { return "GosuUpgradeToAssertStatementInspection"; } @NotNull @Override public PsiElementVisitor buildVisitor( @NotNull final ProblemsHolder holder, boolean isOnTheFly, @NotNull LocalInspectionToolSession session ) { return new GosuElementVisitor() { @Override public void visitElement( PsiElement elem ) { if( elem instanceof GosuTokenImpl && elem.getText().equals("assert") ) { holder.registerProblem( elem, GosuBundle.message( "inspection.assert.is.reserved" ), ProblemHighlightType.GENERIC_ERROR_OR_WARNING, new AssertKeywordFix( elem ) ); } } }; } private class AssertKeywordFix implements LocalQuickFix { private final AssertKeywordQuickFix _quickFix; public AssertKeywordFix( PsiElement id ) { _quickFix = new AssertKeywordQuickFix( id ); } @NotNull public String getName() { return _quickFix.getText(); } @NotNull public String getFamilyName() { return GosuBundle.message( "inspection.group.name.upgrade.issues" ); } public void applyFix( @NotNull Project project, @NotNull ProblemDescriptor descriptor ) { PsiElement element = descriptor.getPsiElement(); if( element == null ) { return; } final PsiFile psiFile = element.getContainingFile(); if( _quickFix.isAvailable( project, null, psiFile ) ) { _quickFix.invoke( project, null, psiFile ); } } } }