javafx optimize imports: do not skip static properties

This commit is contained in:
anna
2013-03-21 13:54:17 +01:00
parent f7bfa77ad9
commit e16746fcd7
7 changed files with 63 additions and 16 deletions
@@ -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
@@ -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));
}
}
});
}
}
@@ -41,6 +41,10 @@ public class JavaFxPropertyElementDescriptor implements XmlElementDescriptor {
myStatic = isStatic;
}
public boolean isStatic() {
return myStatic;
}
@Override
public String getQualifiedName() {
return getName();
@@ -0,0 +1,6 @@
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.GridPane?>
<?import MyGridPane?>
<MyGridPane xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<Button GridPane.columnIndex="0"/>
</MyGridPane>
@@ -0,0 +1,6 @@
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.GridPane?>
<?import MyGridPane?>
<MyGridPane xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<Button GridPane.columnIndex="0"/>
</MyGridPane>
@@ -0,0 +1,5 @@
<?import javafx.scene.layout.GridPane?>
<?import MyGridPane?>
<MyGridPane xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<GridPane.columnIndex>1</GridPane.columnIndex>
</MyGridPane>
@@ -0,0 +1,5 @@
<?import javafx.scene.layout.GridPane?>
<?import MyGridPane?>
<MyGridPane xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<GridPane.columnIndex>1</GridPane.columnIndex>
</MyGridPane>