diff --git a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXOptimizeImportsTest.java b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXOptimizeImportsTest.java index 096f60913508..9db7f2f3e319 100644 --- a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXOptimizeImportsTest.java +++ b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXOptimizeImportsTest.java @@ -16,18 +16,10 @@ package org.jetbrains.plugins.javaFX.fxml; import com.intellij.codeInsight.actions.OptimizeImportsProcessor; -import com.intellij.codeInsight.daemon.DaemonAnalyzerTestCase; import com.intellij.openapi.application.PluginPathManager; -import com.intellij.testFramework.PsiTestUtil; import org.jetbrains.annotations.NotNull; -public class JavaFXOptimizeImportsTest extends DaemonAnalyzerTestCase { - @Override - protected void setUpModule() { - super.setUpModule(); - PsiTestUtil.addLibrary(getModule(), "javafx", PluginPathManager.getPluginHomePath("javaFX") + "/testData", "jfxrt.jar"); - } - +public class JavaFXOptimizeImportsTest extends AbstractJavaFXTestCase { public void testCollapseOnDemand() throws Exception { doTest(); } @@ -40,10 +32,22 @@ public class JavaFXOptimizeImportsTest extends DaemonAnalyzerTestCase { doTest(); } + public void testStaticPropertiesAttrAndCustomComponents() throws Exception { + myFixture.addClass("import javafx.scene.layout.GridPane;\n" + + "public class MyGridPane extends GridPane {}\n"); + doTest(); + } + + public void testStaticPropertiesTagAndCustomComponents() throws Exception { + myFixture.addClass("import javafx.scene.layout.GridPane;\n" + + "public class MyGridPane extends GridPane {}\n"); + doTest(); + } + private void doTest() throws Exception { - configureByFile(getTestName(true) + ".fxml"); - new OptimizeImportsProcessor(getProject(), getFile()).run(); - checkResultByFile(getTestName(true) + "_after.fxml"); + myFixture.configureByFile(getTestName(true) + ".fxml"); + new OptimizeImportsProcessor(getProject(), myFixture.getFile()).run(); + myFixture.checkResultByFile(getTestName(true) + "_after.fxml"); } @NotNull diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/JavaFxImportsOptimizer.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/JavaFxImportsOptimizer.java index 14bcc14dcda5..a88c7762e811 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/JavaFxImportsOptimizer.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/JavaFxImportsOptimizer.java @@ -32,10 +32,13 @@ import com.intellij.psi.impl.source.codeStyle.ImportHelper; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.xml.*; import com.intellij.util.containers.HashSet; +import com.intellij.xml.XmlAttributeDescriptor; import com.intellij.xml.XmlElementDescriptor; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.javaFX.fxml.JavaFxFileTypeFactory; import org.jetbrains.plugins.javaFX.fxml.descriptors.JavaFxClassBackedElementDescriptor; +import org.jetbrains.plugins.javaFX.fxml.descriptors.JavaFxPropertyElementDescriptor; +import org.jetbrains.plugins.javaFX.fxml.descriptors.JavaFxStaticPropertyAttributeDescriptor; import java.util.*; @@ -123,21 +126,35 @@ public class JavaFxImportsOptimizer implements ImportOptimizer { public void visitXmlProcessingInstruction(XmlProcessingInstruction processingInstruction) {} @Override - public void visitXmlAttribute(XmlAttribute attribute) {} + public void visitXmlAttribute(XmlAttribute attribute) { + final XmlAttributeDescriptor descriptor = attribute.getDescriptor(); + if (descriptor instanceof JavaFxStaticPropertyAttributeDescriptor) { + final PsiElement declaration = descriptor.getDeclaration(); + if (declaration instanceof PsiMember) { + appendClassName(((PsiMember)declaration).getContainingClass()); + } + } + } @Override public void visitXmlTag(XmlTag tag) { super.visitXmlTag(tag); final XmlElementDescriptor descriptor = tag.getDescriptor(); if (descriptor instanceof JavaFxClassBackedElementDescriptor) { + appendClassName(descriptor.getDeclaration()); + } else if (descriptor instanceof JavaFxPropertyElementDescriptor && ((JavaFxPropertyElementDescriptor)descriptor).isStatic()) { final PsiElement declaration = descriptor.getDeclaration(); - if (declaration instanceof PsiClass) { - names.add(Pair.create(((PsiClass)declaration).getQualifiedName(), false)); + if (declaration instanceof PsiMember) { + appendClassName(((PsiMember)declaration).getContainingClass()); } } } - + private void appendClassName(PsiElement declaration) { + if (declaration instanceof PsiClass) { + names.add(Pair.create(((PsiClass)declaration).getQualifiedName(), false)); + } + } }); } } diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyElementDescriptor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyElementDescriptor.java index 0762f6aeef02..150a8a2db80a 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyElementDescriptor.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyElementDescriptor.java @@ -41,6 +41,10 @@ public class JavaFxPropertyElementDescriptor implements XmlElementDescriptor { myStatic = isStatic; } + public boolean isStatic() { + return myStatic; + } + @Override public String getQualifiedName() { return getName(); diff --git a/plugins/javaFX/testData/optimizeImports/staticPropertiesAttrAndCustomComponents.fxml b/plugins/javaFX/testData/optimizeImports/staticPropertiesAttrAndCustomComponents.fxml new file mode 100644 index 000000000000..68fdd3467344 --- /dev/null +++ b/plugins/javaFX/testData/optimizeImports/staticPropertiesAttrAndCustomComponents.fxml @@ -0,0 +1,6 @@ + + + + +