javafx: disable create field from usage when the reference name is empty (IDEA-105237)

This commit is contained in:
anna
2013-04-12 18:21:11 +02:00
parent 72cde34363
commit b27f23f377
4 changed files with 19 additions and 1 deletions

View File

@@ -59,6 +59,13 @@ public class JavaFXQuickfixTest extends LightCodeInsightFixtureTestCase {
doTest("Create Field 'btn'", ".java");
}
public void testCreateFieldEmptyName() throws Exception {
String path = getTestName(true) + ".fxml";
final IntentionAction intention =
myFixture.getAvailableIntention("Create Field 'btn'", path, getTestName(false) + ".java");
assertNull(intention);
}
public void testRegisterPageLanguage() throws Exception {
myFixture.configureByFile(getTestName(true) + ".fxml");
final IntentionAction intention = myFixture.findSingleIntention("Specify page language");

View File

@@ -23,6 +23,8 @@ import com.intellij.codeInsight.daemon.QuickFixBundle;
import com.intellij.codeInsight.daemon.impl.quickfix.CreateFieldFromUsageFix;
import com.intellij.codeInsight.daemon.impl.quickfix.CreateFieldFromUsageHelper;
import com.intellij.codeInspection.*;
import com.intellij.lang.LanguageNamesValidation;
import com.intellij.lang.refactoring.NamesValidator;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
@@ -67,8 +69,11 @@ public class JavaFxUnresolvedFxIdReferenceInspection extends XmlSuppressableInsp
final PsiClass fieldClass =
checkContext(((JavaFxFieldIdReferenceProvider.JavaFxControllerFieldRef)reference).getXmlAttributeValue());
if (fieldClass != null) {
final String text = reference.getCanonicalText();
final NamesValidator namesValidator = LanguageNamesValidation.INSTANCE.forLanguage(fieldClass.getLanguage());
boolean validName = namesValidator != null && namesValidator.isIdentifier(text, fieldClass.getProject());
holder.registerProblem(reference.getElement(), reference.getRangeInElement(), "Unresolved fx:id reference",
isOnTheFly ? new LocalQuickFix[]{new CreateFieldFromUsageQuickFix(reference.getCanonicalText())} : LocalQuickFix.EMPTY_ARRAY);
isOnTheFly && validName ? new LocalQuickFix[]{new CreateFieldFromUsageQuickFix(text)} : LocalQuickFix.EMPTY_ARRAY);
}
}
}

View File

@@ -0,0 +1 @@
public class CreateControllerMethod {}

View File

@@ -0,0 +1,5 @@
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Button?>
<GridPane xmlns:fx="http://javafx.com/fxml" fx:controller="CreateFieldEmptyName">
<Button fx:id="<caret>"/>
</GridPane>