mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
merge with master
This commit is contained in:
@@ -83,10 +83,8 @@ public abstract class ValueResourcesFileParser implements IXMLBuilder {
|
||||
final ResourceType resType = resTypeStr != null ? ResourceType.getEnum(resTypeStr) : null;
|
||||
if (resType != null) {
|
||||
if (resType == ResourceType.ATTR) {
|
||||
if (!myLastNameAttr.startsWith("android:")) {
|
||||
final String contextName = myContextNames.peek();
|
||||
process(new ResourceEntry(resTypeStr, myLastNameAttr, contextName));
|
||||
}
|
||||
final String contextName = myContextNames.peek();
|
||||
process(new ResourceEntry(resTypeStr, myLastNameAttr, contextName));
|
||||
}
|
||||
else {
|
||||
process(new ResourceEntry(resTypeStr, myLastNameAttr, ""));
|
||||
|
||||
@@ -68,9 +68,6 @@
|
||||
<action id="Android.EnableDdms" class="org.jetbrains.android.actions.AndroidEnableAdbServiceAction">
|
||||
<add-to-group group-id="AndroidToolsGroup" anchor="last"/>
|
||||
</action>
|
||||
<!--<action id="GotoAndroidResourceDefinition" class="org.jetbrains.android.actions.GotoResourceAction">
|
||||
<keyboard-shortcut first-keystroke="control shift alt R" keymap="$default"/>
|
||||
</action>-->
|
||||
<action id="RegenerateRJavaFile" class="org.jetbrains.android.actions.AndroidRegenerateRJavaFileAction">
|
||||
<add-to-group group-id="EditorPopupMenu" anchor="last"/>
|
||||
<add-to-group group-id="ProjectViewPopupMenu" anchor="last"/>
|
||||
|
||||
@@ -54,7 +54,19 @@ public class AndroidGotoDeclarationHandler implements GotoDeclarationHandler {
|
||||
return null;
|
||||
}
|
||||
|
||||
final Pair<String, String> pair = AndroidResourceUtil.getReferredResourceField(facet, refExp);
|
||||
Pair<String, String> pair = AndroidResourceUtil.getReferredResourceField(facet, refExp);
|
||||
if (pair == null) {
|
||||
PsiElement parent = refExp.getParent();
|
||||
if (parent instanceof PsiReferenceExpression) {
|
||||
pair = AndroidResourceUtil.getReferredResourceField(facet, (PsiReferenceExpression)parent);
|
||||
}
|
||||
if (pair == null) {
|
||||
parent = parent.getParent();
|
||||
if (parent instanceof PsiReferenceExpression) {
|
||||
pair = AndroidResourceUtil.getReferredResourceField(facet, (PsiReferenceExpression)parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (pair == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -177,6 +177,6 @@ public class AndroidValueResourcesIndex extends FileBasedIndexExtension<Resource
|
||||
|
||||
@Override
|
||||
public int getVersion() {
|
||||
return 2;
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -75,8 +75,8 @@ public class AndroidCreateLayoutFileAction extends CreateTypedResourceFileAction
|
||||
@NotNull
|
||||
@Override
|
||||
protected PsiElement[] create(String newName, PsiDirectory directory) throws Exception {
|
||||
assert myLastRootComponentName != null;
|
||||
return doCreateAndNavigate(newName, directory, myLastRootComponentName, false);
|
||||
final String rootTag = myLastRootComponentName != null ? myLastRootComponentName : getDefaultRootTag();
|
||||
return doCreateAndNavigate(newName, directory, rootTag, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -97,18 +97,27 @@ public class CreateResourceFileAction extends CreateElementActionBase {
|
||||
@NotNull String resName,
|
||||
boolean chooseResName) {
|
||||
final CreateResourceFileAction action = getInstance();
|
||||
final MyDialog dialog =
|
||||
new MyDialog(facet, action.mySubactions.values(), resType, resName, chooseResName, action, facet.getModule(), true);
|
||||
dialog.show();
|
||||
if (!dialog.isOK()) {
|
||||
return PsiElement.EMPTY_ARRAY;
|
||||
}
|
||||
|
||||
if (chooseResName) {
|
||||
resName = dialog.getFileName();
|
||||
final String subdirName;
|
||||
final Module selectedModule;
|
||||
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
subdirName = resType.getName();
|
||||
selectedModule = facet.getModule();
|
||||
}
|
||||
final String subdirName = dialog.getSubdirName();
|
||||
final AndroidFacet selectedFacet = AndroidFacet.getInstance(dialog.getSelectedModule());
|
||||
else {
|
||||
final MyDialog dialog =
|
||||
new MyDialog(facet, action.mySubactions.values(), resType, resName, chooseResName, action, facet.getModule(), true);
|
||||
dialog.show();
|
||||
if (!dialog.isOK()) {
|
||||
return PsiElement.EMPTY_ARRAY;
|
||||
}
|
||||
if (chooseResName) {
|
||||
resName = dialog.getFileName();
|
||||
}
|
||||
subdirName = dialog.getSubdirName();
|
||||
selectedModule = dialog.getSelectedModule();
|
||||
}
|
||||
final AndroidFacet selectedFacet = AndroidFacet.getInstance(selectedModule);
|
||||
LOG.assertTrue(selectedFacet != null);
|
||||
|
||||
final VirtualFile resourceDir = selectedFacet.getLocalResourceManager().getResourceDir();
|
||||
|
||||
@@ -1,39 +1,50 @@
|
||||
package org.jetbrains.android.augment;
|
||||
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.navigation.NavigationItem;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.ElementPresentationUtil;
|
||||
import com.intellij.psi.impl.PsiClassImplUtil;
|
||||
import com.intellij.psi.impl.PsiVariableEx;
|
||||
import com.intellij.psi.impl.light.LightFieldBuilder;
|
||||
import com.intellij.psi.impl.light.LightElement;
|
||||
import com.intellij.psi.impl.light.LightModifierList;
|
||||
import com.intellij.psi.javadoc.PsiDocComment;
|
||||
import com.intellij.ui.RowIcon;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author Eugene.Kudelevsky
|
||||
*/
|
||||
class AndroidLightField extends LightFieldBuilder implements PsiVariableEx {
|
||||
* @author Eugene.Kudelevsky
|
||||
*/
|
||||
class AndroidLightField extends LightElement implements PsiField, PsiVariableEx, NavigationItem {
|
||||
private final PsiClass myContext;
|
||||
private final PsiType myType;
|
||||
private final Object myConstantValue;
|
||||
private final boolean myFinal;
|
||||
|
||||
private volatile PsiExpression myInitializer;
|
||||
private volatile String myName;
|
||||
private volatile LightModifierList myModifierList;
|
||||
|
||||
public AndroidLightField(@NotNull String name,
|
||||
@NotNull PsiClass context,
|
||||
@NotNull PsiType type,
|
||||
boolean isFinal,
|
||||
@Nullable Object constantValue) {
|
||||
super(name, type, context);
|
||||
myContext = context;
|
||||
super(context.getManager(), JavaLanguage.INSTANCE);
|
||||
myName = name;
|
||||
myType = type;
|
||||
setNavigationElement(context);
|
||||
myContext = context;
|
||||
myConstantValue = constantValue;
|
||||
myFinal = isFinal;
|
||||
setContainingClass(context);
|
||||
|
||||
final List<String> modifiers = new ArrayList<String>();
|
||||
modifiers.add(PsiModifier.PUBLIC);
|
||||
@@ -42,7 +53,7 @@ class AndroidLightField extends LightFieldBuilder implements PsiVariableEx {
|
||||
if (isFinal) {
|
||||
modifiers.add(PsiModifier.FINAL);
|
||||
}
|
||||
setModifiers(ArrayUtil.toStringArray(modifiers));
|
||||
myModifierList = new LightModifierList(getManager(), getLanguage(), ArrayUtil.toStringArray(modifiers));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -58,9 +69,8 @@ class AndroidLightField extends LightFieldBuilder implements PsiVariableEx {
|
||||
|
||||
@Override
|
||||
public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
|
||||
final AndroidLightField field = new AndroidLightField(name, myContext, myType, myFinal, myConstantValue);
|
||||
field.setInitializer(getInitializer());
|
||||
return field;
|
||||
myName = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -72,4 +82,93 @@ class AndroidLightField extends LightFieldBuilder implements PsiVariableEx {
|
||||
public Object computeConstantValue() {
|
||||
return myConstantValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInitializer(@Nullable PsiExpression initializer) throws IncorrectOperationException {
|
||||
myInitializer = initializer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiExpression getInitializer() {
|
||||
return myInitializer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiDocComment getDocComment() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDeprecated() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiClass getContainingClass() {
|
||||
return myContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "AndroidLightField:" + getName();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiType getType() {
|
||||
return myType;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public PsiModifierList getModifierList() {
|
||||
return myModifierList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasModifierProperty(@NonNls @NotNull String name) {
|
||||
return myModifierList.hasModifierProperty(name);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return myName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiTypeElement getTypeElement() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasInitializer() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void normalizeDeclaration() throws IncorrectOperationException {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiIdentifier getNameIdentifier() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiType getTypeNoResolve() {
|
||||
return getType();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isVisibilitySupported() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getElementIcon(final int flags) {
|
||||
final RowIcon baseIcon = ElementPresentationUtil.createLayeredIcon(PlatformIcons.FIELD_ICON, this, false);
|
||||
return ElementPresentationUtil.addVisibilityIcon(this, flags, baseIcon);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,14 +71,17 @@ class ResourceTypeClass extends AndroidLightClass {
|
||||
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(facet.getModule().getProject());
|
||||
final Module circularDepLibWithSamePackage = AndroidCompileUtil.findCircularDependencyOnLibraryWithSamePackage(facet);
|
||||
final boolean generateNonFinalFields = facet.getConfiguration().LIBRARY_PROJECT || circularDepLibWithSamePackage != null;
|
||||
|
||||
int idIterator = ResourceType.getEnum(resClassName).ordinal() * 100000;
|
||||
int i = 0;
|
||||
|
||||
for (Map.Entry<String, PsiType> entry : fieldNames.entrySet()) {
|
||||
final String fieldName = AndroidResourceUtil.getFieldNameByResourceName(entry.getKey());
|
||||
final PsiType type = entry.getValue();
|
||||
final int id = -(idIterator++);
|
||||
final AndroidLightField field =
|
||||
new AndroidLightField(fieldName, context, type, !generateNonFinalFields, generateNonFinalFields ? null : 0);
|
||||
field.setInitializer(factory.createExpressionFromText("0", field));
|
||||
new AndroidLightField(fieldName, context, type, !generateNonFinalFields, generateNonFinalFields ? null : id);
|
||||
field.setInitializer(factory.createExpressionFromText(Integer.toString(id), field));
|
||||
result[i++] = field;
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.intellij.codeInsight.quickfix.UnresolvedReferenceQuickFixProvider;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiReferenceExpression;
|
||||
import org.jetbrains.android.dom.manifest.Manifest;
|
||||
@@ -44,7 +45,13 @@ public class AndroidQuickFixProvider extends UnresolvedReferenceQuickFixProvider
|
||||
return;
|
||||
}
|
||||
|
||||
final Pair<String, String> pair = AndroidResourceUtil.getReferredResourceField(facet, exp);
|
||||
Pair<String, String> pair = AndroidResourceUtil.getReferredResourceField(facet, exp);
|
||||
if (pair == null) {
|
||||
final PsiElement parent = exp.getParent();
|
||||
if (parent instanceof PsiReferenceExpression) {
|
||||
pair = AndroidResourceUtil.getReferredResourceField(facet, (PsiReferenceExpression)parent);
|
||||
}
|
||||
}
|
||||
if (pair == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
+3
-1
@@ -5,6 +5,7 @@ import com.android.tools.lint.client.api.IssueRegistry;
|
||||
import com.android.tools.lint.client.api.LintDriver;
|
||||
import com.android.tools.lint.detector.api.Issue;
|
||||
import com.intellij.codeHighlighting.HighlightDisplayLevel;
|
||||
import com.intellij.codeInsight.CodeInsightUtilBase;
|
||||
import com.intellij.codeInsight.daemon.HighlightDisplayKey;
|
||||
import com.intellij.codeInsight.intention.HighPriorityAction;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
@@ -278,7 +279,8 @@ public class AndroidLintExternalAnnotator extends ExternalAnnotator<State, State
|
||||
|
||||
@Override
|
||||
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
|
||||
myQuickFix.apply(myStartElement, myEndElement, AndroidQuickfixContexts.EditorContext.getInstance(editor) );
|
||||
CodeInsightUtilBase.prepareFileForWrite(file);
|
||||
myQuickFix.apply(myStartElement, myEndElement, AndroidQuickfixContexts.EditorContext.getInstance(editor));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -222,9 +222,14 @@ public abstract class ResourceManager {
|
||||
@NotNull
|
||||
public Collection<String> getValueResourceNames(@NotNull final String resourceType) {
|
||||
final Set<String> result = new HashSet<String>();
|
||||
final boolean attr = ResourceType.ATTR.getName().equals(resourceType);
|
||||
|
||||
for (ResourceEntry entry : getValueResourceEntries(resourceType)) {
|
||||
result.add(entry.getName());
|
||||
final String name = entry.getName();
|
||||
|
||||
if (!attr || !name.startsWith("android:")) {
|
||||
result.add(name);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
public class JavaCreateResourceFromUsage {
|
||||
public void f() {
|
||||
int n = R.layout.un<caret>known;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<TextView
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/unknow<caret>n"
|
||||
/>
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
< xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent">
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
public class InlineResourceField {
|
||||
public void f() {
|
||||
int n = R.string.my_stri<caret>ng;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
public class CreateJavaResourceFromUsage {
|
||||
public void f() {
|
||||
int n = R.drawable.unknown;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
public class CreateJavaResourceFromUsage {
|
||||
public void f() {
|
||||
int n = R.bool.unknown;
|
||||
}
|
||||
}
|
||||
@@ -15,11 +15,18 @@ public class JavaCompletion1 {
|
||||
n5 = R.styleable.MyStyleable_myAttr1;
|
||||
<error>n4 = R.styleable.MyStyleable_myAttr1</error>;
|
||||
n5 = R.styleable.<error>MyStyleable_text</error>;
|
||||
n5 = R.styleable.MyStyleable_android_text;
|
||||
|
||||
switch(n1) {
|
||||
case R.string.my_string:
|
||||
System.out.println("abacaba");
|
||||
break;
|
||||
case R.string.my_string1:
|
||||
System.out.println("abacaba1");
|
||||
break;
|
||||
case R.attr.myAttr1:
|
||||
System.out.println("abacaba1");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
<resources>
|
||||
<bool name="unknown">a</bool>
|
||||
</resources>
|
||||
@@ -0,0 +1,3 @@
|
||||
<resources>
|
||||
<drawable name="unknown">a</drawable>
|
||||
</resources>
|
||||
@@ -1,5 +1,6 @@
|
||||
<resources>
|
||||
<string name="my_string">abacaba</string>
|
||||
<string name="my_string1">abacaba</string>
|
||||
<style name="Theme.MyCustomStyle" parent="android:style/Theme.Dialog"></style>
|
||||
<declare-styleable name="MyStyleable">
|
||||
<attr name="myAttr1" format="string"/>
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
public final class RefR {
|
||||
public void f() {
|
||||
int n = R.string.str;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
public final class RefR {
|
||||
public void f() {
|
||||
int n = R.string.str1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
public final class RefR {
|
||||
public void f() {
|
||||
int n = R.drawable.pic;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
public final class RefR {
|
||||
public void f() {
|
||||
int n = R.drawable.pic1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
class Java {
|
||||
public void g() {
|
||||
int[] ar = R<caret>.styleable.Dec1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
class Java {
|
||||
public void g() {
|
||||
int[] ar = <caret>R.styleable.Dec1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
class Java {
|
||||
public void g() {
|
||||
int[] ar = R.styleable<caret>.Dec1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
class Java {
|
||||
public void g() {
|
||||
int[] ar = R.style<caret>able.Dec1;
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,8 @@ package org.jetbrains.android;
|
||||
|
||||
import com.android.sdklib.SdkConstants;
|
||||
import com.intellij.codeInsight.TargetElementUtilBase;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
@@ -28,9 +30,11 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.refactoring.PackageWrapper;
|
||||
import com.intellij.refactoring.actions.RenameElementAction;
|
||||
import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesProcessor;
|
||||
import com.intellij.refactoring.move.moveClassesOrPackages.SingleSourceRootMoveDestination;
|
||||
import com.intellij.refactoring.rename.*;
|
||||
import com.intellij.testFramework.TestActionEvent;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -63,10 +67,12 @@ public class AndroidRenameTest extends AndroidTestCase {
|
||||
myFixture.copyFileToProject(BASE_PATH + "pic.png", "res/drawable/pic.png");
|
||||
myFixture.copyFileToProject(BASE_PATH + "styles.xml", "res/values/styles.xml");
|
||||
myFixture.copyFileToProject("R.java", R_JAVA_PATH);
|
||||
myFixture.copyFileToProject(BASE_PATH + "RefR2.java", "src/p1/p2/RefR2.java");
|
||||
renameElementWithTextOccurences("pic1.png");
|
||||
myFixture.checkResultByFile(BASE_PATH + "layout_file_after.xml");
|
||||
myFixture.checkResultByFile(R_JAVA_PATH, "R.java", true);
|
||||
myFixture.checkResultByFile("res/values/styles.xml", BASE_PATH + "styles_after.xml", true);
|
||||
myFixture.checkResultByFile("src/p1/p2/RefR2.java", BASE_PATH + "RefR2_after.java", true);
|
||||
assertNotNull(myFixture.findFileInTempDir("res/drawable/pic1.png"));
|
||||
}
|
||||
|
||||
@@ -77,10 +83,12 @@ public class AndroidRenameTest extends AndroidTestCase {
|
||||
myFixture.copyFileToProject(BASE_PATH + "pic.png", "res/drawable/pic.9.png");
|
||||
myFixture.copyFileToProject(BASE_PATH + "styles.xml", "res/values/styles.xml");
|
||||
myFixture.copyFileToProject("R.java", R_JAVA_PATH);
|
||||
myFixture.copyFileToProject(BASE_PATH + "RefR2.java", "src/p1/p2/RefR2.java");
|
||||
renameElementWithTextOccurences("pic1.9.png");
|
||||
myFixture.checkResultByFile(BASE_PATH + "layout_file_after.xml");
|
||||
myFixture.checkResultByFile(R_JAVA_PATH, "R.java", true);
|
||||
myFixture.checkResultByFile("res/values/styles.xml", BASE_PATH + "styles_after.xml", true);
|
||||
myFixture.checkResultByFile("src/p1/p2/RefR2.java", BASE_PATH + "RefR2_after.java", true);
|
||||
assertNotNull(myFixture.findFileInTempDir("res/drawable/pic1.9.png"));
|
||||
}
|
||||
|
||||
@@ -130,9 +138,11 @@ public class AndroidRenameTest extends AndroidTestCase {
|
||||
myFixture.configureFromExistingVirtualFile(file);
|
||||
myFixture.copyFileToProject(BASE_PATH + "strings.xml", "res/values/strings.xml");
|
||||
myFixture.copyFileToProject("R.java", R_JAVA_PATH);
|
||||
myFixture.renameElementAtCaret("str1");
|
||||
myFixture.copyFileToProject(BASE_PATH + "RefR1.java", "src/p1/p2/RefR1.java");
|
||||
checkAndRename("str1");
|
||||
myFixture.checkResultByFile(BASE_PATH + "layout_value_after.xml");
|
||||
myFixture.checkResultByFile(R_JAVA_PATH, "R.java", true);
|
||||
myFixture.checkResultByFile("src/p1/p2/RefR1.java", BASE_PATH + "RefR1_after.java", true);
|
||||
myFixture.checkResultByFile("res/values/strings.xml", BASE_PATH + "strings_after.xml", true);
|
||||
}
|
||||
|
||||
@@ -190,7 +200,7 @@ public class AndroidRenameTest extends AndroidTestCase {
|
||||
myFixture.copyFileToProject("R.java", R_JAVA_PATH);
|
||||
myFixture.copyFileToProject(BASE_PATH + "layout3.xml", "res/layout/layout3.xml");
|
||||
myFixture.copyFileToProject(BASE_PATH + "pic.png", "res/drawable/pic.png");
|
||||
myFixture.renameElementAtCaret("pic1");
|
||||
checkAndRename("pic1");
|
||||
myFixture.checkResultByFile(BASE_PATH + "RefR3_after.java", true);
|
||||
myFixture.checkResultByFile("res/layout/layout3.xml", BASE_PATH + "layout_file_after.xml", true);
|
||||
assertNotNull(myFixture.findFileInTempDir("res/drawable/pic1.png"));
|
||||
@@ -203,7 +213,7 @@ public class AndroidRenameTest extends AndroidTestCase {
|
||||
myFixture.copyFileToProject("R.java", R_JAVA_PATH);
|
||||
myFixture.copyFileToProject(BASE_PATH + "layout4.xml", "res/layout/layout4.xml");
|
||||
myFixture.copyFileToProject(BASE_PATH + "strings.xml", "res/values/strings.xml");
|
||||
myFixture.renameElementAtCaret("str1");
|
||||
checkAndRename("str1");
|
||||
myFixture.checkResultByFile(BASE_PATH + "RefR4_after.java", true);
|
||||
myFixture.checkResultByFile("res/layout/layout4.xml", BASE_PATH + "layout_value_after.xml", true);
|
||||
myFixture.checkResultByFile("res/values/strings.xml", BASE_PATH + "strings_after.xml", true);
|
||||
@@ -214,7 +224,7 @@ public class AndroidRenameTest extends AndroidTestCase {
|
||||
VirtualFile file = myFixture.copyFileToProject(BASE_PATH + "layout5.xml", "res/layout/layout5.xml");
|
||||
myFixture.configureFromExistingVirtualFile(file);
|
||||
myFixture.copyFileToProject("R.java", R_JAVA_PATH);
|
||||
myFixture.renameElementAtCaret("@+id/anchor1");
|
||||
checkAndRename("@+id/anchor1");
|
||||
myFixture.checkResultByFile(BASE_PATH + "layout_id_after.xml");
|
||||
myFixture.checkResultByFile(R_JAVA_PATH, "R.java", true);
|
||||
}
|
||||
@@ -224,7 +234,7 @@ public class AndroidRenameTest extends AndroidTestCase {
|
||||
VirtualFile file = myFixture.copyFileToProject(BASE_PATH + "layout6.xml", "res/layout/layout6.xml");
|
||||
myFixture.configureFromExistingVirtualFile(file);
|
||||
myFixture.copyFileToProject("R.java", R_JAVA_PATH);
|
||||
myFixture.renameElementAtCaret("@+id/anchor1");
|
||||
checkAndRename("@+id/anchor1");
|
||||
myFixture.checkResultByFile(BASE_PATH + "layout_id_after.xml");
|
||||
myFixture.checkResultByFile(R_JAVA_PATH, "R.java", true);
|
||||
}
|
||||
@@ -235,7 +245,7 @@ public class AndroidRenameTest extends AndroidTestCase {
|
||||
myFixture.copyFileToProject("R.java", R_JAVA_PATH);
|
||||
myFixture.configureFromExistingVirtualFile(file);
|
||||
myFixture.copyFileToProject(BASE_PATH + "layout7.xml", "res/layout/layout7.xml");
|
||||
myFixture.renameElementAtCaret("anchor1");
|
||||
checkAndRename("anchor1");
|
||||
myFixture.checkResultByFile(BASE_PATH + "RefR7_after.java", true);
|
||||
myFixture.checkResultByFile("res/layout/layout7.xml", BASE_PATH + "layout_id_after.xml", true);
|
||||
}
|
||||
@@ -246,7 +256,7 @@ public class AndroidRenameTest extends AndroidTestCase {
|
||||
myFixture.copyFileToProject("R.java", R_JAVA_PATH);
|
||||
myFixture.configureFromExistingVirtualFile(file);
|
||||
myFixture.copyFileToProject(BASE_PATH + "attrs8.xml", "res/values/attrs8.xml");
|
||||
myFixture.renameElementAtCaret("LabelView1");
|
||||
checkAndRename("LabelView1");
|
||||
myFixture.checkResultByFile(BASE_PATH + "RefR8_after.java", true);
|
||||
myFixture.checkResultByFile("res/values/attrs8.xml", BASE_PATH + "attrs8_after.xml", true);
|
||||
}
|
||||
@@ -257,7 +267,7 @@ public class AndroidRenameTest extends AndroidTestCase {
|
||||
myFixture.copyFileToProject("R.java", R_JAVA_PATH);
|
||||
myFixture.configureFromExistingVirtualFile(file);
|
||||
myFixture.copyFileToProject(BASE_PATH + "attrs9.xml", "res/values/attrs9.xml");
|
||||
myFixture.renameElementAtCaret("attr1");
|
||||
checkAndRename("attr1");
|
||||
myFixture.checkResultByFile(BASE_PATH + "RefR9_after.java", true);
|
||||
myFixture.checkResultByFile("res/values/attrs9.xml", BASE_PATH + "attrs9_after.xml", true);
|
||||
}
|
||||
@@ -292,7 +302,7 @@ public class AndroidRenameTest extends AndroidTestCase {
|
||||
myFixture.copyFileToProject(BASE_PATH + "MyWidget.java", "src/p1/p2/MyWidget.java");
|
||||
VirtualFile file = myFixture.copyFileToProject(BASE_PATH + "layout_widget.xml", "res/layout/layout_widget.xml");
|
||||
myFixture.configureFromExistingVirtualFile(file);
|
||||
myFixture.renameElementAtCaret("MyWidget1");
|
||||
checkAndRename("MyWidget1");
|
||||
myFixture.checkResultByFile(BASE_PATH + "layout_widget_after.xml");
|
||||
}
|
||||
|
||||
@@ -309,7 +319,7 @@ public class AndroidRenameTest extends AndroidTestCase {
|
||||
myFixture.copyFileToProject(BASE_PATH + "MyActivity.java", "src/p1/p2/MyActivity.java");
|
||||
VirtualFile manifestFile = myFixture.copyFileToProject(BASE_PATH + getTestName(false) + ".xml", SdkConstants.FN_ANDROID_MANIFEST_XML);
|
||||
myFixture.configureFromExistingVirtualFile(manifestFile);
|
||||
myFixture.renameElementAtCaret(newName);
|
||||
checkAndRename(newName);
|
||||
myFixture.checkResultByFile(BASE_PATH + getTestName(false) + "_after.xml");
|
||||
}
|
||||
|
||||
@@ -322,9 +332,17 @@ public class AndroidRenameTest extends AndroidTestCase {
|
||||
final PsiDirectory[] dirs = newParentPackage.getDirectories();
|
||||
assertEquals(dirs.length, 1);
|
||||
|
||||
new MoveClassesOrPackagesProcessor(getProject(), new PsiElement[] {aPackage},
|
||||
new MoveClassesOrPackagesProcessor(getProject(), new PsiElement[]{aPackage},
|
||||
new SingleSourceRootMoveDestination(PackageWrapper.create(newParentPackage), dirs[0]),
|
||||
true, false, null).run();
|
||||
FileDocumentManager.getInstance().saveAllDocuments();
|
||||
}
|
||||
|
||||
private void checkAndRename(String newName) {
|
||||
final RenameElementAction action = new RenameElementAction();
|
||||
final AnActionEvent e = new TestActionEvent(DataManager.getInstance().getDataContext(myFixture.getEditor().getComponent()), action);
|
||||
action.update(e);
|
||||
assertTrue(e.getPresentation().isEnabled() && e.getPresentation().isVisible());
|
||||
myFixture.renameElementAtCaret(newName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,9 @@ package org.jetbrains.android;
|
||||
import com.intellij.codeInsight.navigation.actions.GotoDeclarationAction;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.xml.XmlAttributeValue;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -10,7 +13,8 @@ import java.io.IOException;
|
||||
* @author Eugene.Kudelevsky
|
||||
*/
|
||||
public class AndroidResourcesLineMarkerTest extends AndroidTestCase {
|
||||
public void test1() {}
|
||||
public void test1() {
|
||||
}
|
||||
|
||||
private static final String BASE_PATH = "/resNavigation/";
|
||||
|
||||
@@ -26,41 +30,60 @@ public class AndroidResourcesLineMarkerTest extends AndroidTestCase {
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation1() throws Exception {
|
||||
doJavaFileNavigationTest(1, true);
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation2() throws Exception {
|
||||
doJavaFileNavigationTest(3, true);
|
||||
doJavaFileNavigationTest(3, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation3() throws Exception {
|
||||
doJavaFileNavigationTest(2, true);
|
||||
doJavaFileNavigationTest(2, true, PsiFile.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation4() throws Exception {
|
||||
doJavaFileNavigationTest(0, false);
|
||||
doJavaFileNavigationTest(0, false, null);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation5() throws Exception {
|
||||
doJavaFileNavigationTest(1, true);
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation6() throws Exception {
|
||||
doJavaFileNavigationTest(1, true);
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation7() throws Exception {
|
||||
doJavaFileNavigationTest(1, true);
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
private void doJavaFileNavigationTest(int expectedTargets, boolean expectedEnabled) throws IOException {
|
||||
public void testJavaFileNavigation8() throws Exception {
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation9() throws Exception {
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation10() throws Exception {
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation11() throws Exception {
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
private void doJavaFileNavigationTest(int expectedTargets,
|
||||
boolean expectedEnabled,
|
||||
@Nullable Class<? extends PsiElement> targetElementClass)
|
||||
throws IOException {
|
||||
copyRJava();
|
||||
String path = "src/p1/p2/" + getTestName(false) + ".java";
|
||||
doJavaFileNavigationTest(path, path, expectedTargets, expectedEnabled, true);
|
||||
doJavaFileNavigationTest(path, path, expectedTargets, expectedEnabled, true, targetElementClass);
|
||||
}
|
||||
|
||||
private void doJavaFileNavigationTest(String srcPath, String destPath, int expectedTargets, boolean expectedEnabled,
|
||||
boolean testGotoDeclaration) throws IOException {
|
||||
boolean testGotoDeclaration, Class<? extends PsiElement> targetElementClass) throws IOException {
|
||||
VirtualFile file = myFixture.copyFileToProject(BASE_PATH + srcPath, destPath);
|
||||
myFixture.configureFromExistingVirtualFile(file);
|
||||
|
||||
@@ -69,6 +92,10 @@ public class AndroidResourcesLineMarkerTest extends AndroidTestCase {
|
||||
PsiElement[] targets = GotoDeclarationAction.findAllTargetElements(getProject(), myFixture.getEditor(), myFixture.getCaretOffset());
|
||||
assertNotNull(targets);
|
||||
assertEquals(expectedTargets, targets.length);
|
||||
|
||||
for (PsiElement target : targets) {
|
||||
assertInstanceOf(target, targetElementClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import org.jetbrains.android.inspections.CreateFileResourceQuickFix;
|
||||
import org.jetbrains.android.inspections.CreateValueResourceQuickFix;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -116,7 +117,8 @@ public class AndroidLayoutDomTest extends AndroidDomTest {
|
||||
|
||||
public void testResourceCompletion() throws Throwable {
|
||||
doTestCompletionVariants("av3.xml", "@color/", "@android:", "@drawable/");
|
||||
doTestCompletionVariants("av8.xml", "@android:", "@anim/", "@color/", "@dimen/", "@drawable/", "@id/", "@layout/", "@string/", "@style/");
|
||||
doTestCompletionVariants("av8.xml", "@android:", "@anim/", "@color/", "@dimen/", "@drawable/", "@id/", "@layout/", "@string/",
|
||||
"@style/");
|
||||
}
|
||||
|
||||
public void testLocalResourceCompletion1() throws Throwable {
|
||||
@@ -129,12 +131,12 @@ public class AndroidLayoutDomTest extends AndroidDomTest {
|
||||
|
||||
public void testLocalResourceCompletion3() throws Throwable {
|
||||
doTestCompletionVariants("av7.xml", "@android:", "@string/hello", "@string/hello1", "@string/welcome", "@string/welcome1",
|
||||
"@string/itStr");
|
||||
"@string/itStr");
|
||||
}
|
||||
|
||||
public void testLocalResourceCompletion4() throws Throwable {
|
||||
doTestCompletionVariants("av7.xml", "@android:", "@string/hello", "@string/hello1", "@string/welcome", "@string/welcome1",
|
||||
"@string/itStr");
|
||||
"@string/itStr");
|
||||
}
|
||||
|
||||
public void testLocalResourceCompletion5() throws Throwable {
|
||||
@@ -346,7 +348,7 @@ public class AndroidLayoutDomTest extends AndroidDomTest {
|
||||
|
||||
for (HighlightInfo info : infos) {
|
||||
final List<Pair<HighlightInfo.IntentionActionDescriptor, TextRange>> ranges = info.quickFixActionRanges;
|
||||
|
||||
|
||||
if (ranges != null) {
|
||||
for (Pair<HighlightInfo.IntentionActionDescriptor, TextRange> pair : ranges) {
|
||||
final IntentionAction action = pair.getFirst().getAction();
|
||||
@@ -430,5 +432,45 @@ public class AndroidLayoutDomTest extends AndroidDomTest {
|
||||
copyFileToProject("main.xml", "res/layout/main.xml");
|
||||
doTestJavaHighlighting("p1");
|
||||
}
|
||||
|
||||
public void testJavaCreateResourceFromUsage() throws Throwable {
|
||||
final VirtualFile virtualFile = copyFileToProject(getTestName(false) + ".java", "src/p1/p2/" + getTestName(true) + ".java");
|
||||
doCreateFileResourceFromUsage(virtualFile);
|
||||
myFixture.checkResultByFile("res/layout/unknown.xml", testFolder + '/' + getTestName(true) + "_layout_after.xml", true);
|
||||
}
|
||||
|
||||
public void testCreateResourceFromUsage1() throws Throwable {
|
||||
final VirtualFile virtualFile = copyFileToProject(getTestName(true) + ".xml");
|
||||
doCreateFileResourceFromUsage(virtualFile);
|
||||
myFixture.type("selector");
|
||||
myFixture.checkResultByFile("res/drawable/unknown.xml", testFolder + '/' + getTestName(true) + "_drawable_after.xml", true);
|
||||
}
|
||||
|
||||
private void doCreateFileResourceFromUsage(VirtualFile virtualFile) {
|
||||
myFixture.configureFromExistingVirtualFile(virtualFile);
|
||||
final List<HighlightInfo> infos = myFixture.doHighlighting();
|
||||
final List<IntentionAction> actions = new ArrayList<IntentionAction>();
|
||||
|
||||
for (HighlightInfo info : infos) {
|
||||
final List<Pair<HighlightInfo.IntentionActionDescriptor, TextRange>> ranges = info.quickFixActionRanges;
|
||||
|
||||
if (ranges != null) {
|
||||
for (Pair<HighlightInfo.IntentionActionDescriptor, TextRange> pair : ranges) {
|
||||
final IntentionAction action = pair.getFirst().getAction();
|
||||
if (action instanceof CreateFileResourceQuickFix) {
|
||||
actions.add(action);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
assertEquals(1, actions.size());
|
||||
|
||||
new WriteCommandAction.Simple(getProject()) {
|
||||
@Override
|
||||
protected void run() throws Throwable {
|
||||
actions.get(0).invoke(getProject(), myFixture.getEditor(), myFixture.getFile());
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@ import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.xml.XmlAttributeValue;
|
||||
import com.intellij.refactoring.actions.InlineAction;
|
||||
import com.intellij.refactoring.util.CommonRefactoringUtil;
|
||||
import org.jetbrains.android.inspections.CreateValueResourceQuickFix;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -189,30 +191,7 @@ public class AndroidValueResourcesTest extends AndroidDomTest {
|
||||
|
||||
public void testCreateResourceFromUsage() throws Throwable {
|
||||
final VirtualFile virtualFile = copyFileToProject(getTestName(true) + ".xml", "res/values/drawables.xml");
|
||||
myFixture.configureFromExistingVirtualFile(virtualFile);
|
||||
final List<HighlightInfo> infos = myFixture.doHighlighting();
|
||||
final List<IntentionAction> actions = new ArrayList<IntentionAction>();
|
||||
|
||||
for (HighlightInfo info : infos) {
|
||||
final List<Pair<HighlightInfo.IntentionActionDescriptor, TextRange>> ranges = info.quickFixActionRanges;
|
||||
|
||||
if (ranges != null) {
|
||||
for (Pair<HighlightInfo.IntentionActionDescriptor, TextRange> pair : ranges) {
|
||||
final IntentionAction action = pair.getFirst().getAction();
|
||||
if (action instanceof CreateValueResourceQuickFix) {
|
||||
actions.add(action);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
assertEquals(1, actions.size());
|
||||
|
||||
new WriteCommandAction.Simple(getProject()) {
|
||||
@Override
|
||||
protected void run() throws Throwable {
|
||||
actions.get(0).invoke(getProject(), myFixture.getEditor(), myFixture.getFile());
|
||||
}
|
||||
}.execute();
|
||||
doCreateValueResourceFromUsage(virtualFile);
|
||||
myFixture.checkResultByFile(testFolder + '/' + getTestName(true) + "_after.xml", true);
|
||||
}
|
||||
|
||||
@@ -240,4 +219,56 @@ public class AndroidValueResourcesTest extends AndroidDomTest {
|
||||
copyFileToProject("value_resources.xml", "res/values/value_resources.xml");
|
||||
doTestJavaHighlighting("p1.p2");
|
||||
}
|
||||
|
||||
public void testInlineResourceField() throws Exception {
|
||||
copyFileToProject("value_resources.xml", "res/values/value_resources.xml");
|
||||
final VirtualFile virtualFile = copyFileToProject(getTestName(false) + ".java", "src/p1/p2/" + getTestName(false) + ".java");
|
||||
myFixture.configureFromExistingVirtualFile(virtualFile);
|
||||
try {
|
||||
myFixture.testAction(new InlineAction());
|
||||
fail();
|
||||
}
|
||||
catch (CommonRefactoringUtil.RefactoringErrorHintException e) {
|
||||
}
|
||||
myFixture.checkResultByFile(testFolder + '/' + getTestName(false) + ".java", true);
|
||||
}
|
||||
|
||||
public void testJavaCreateFromUsage() throws Throwable {
|
||||
final VirtualFile virtualFile = copyFileToProject(getTestName(false) + ".java", "src/p1/p2/" + getTestName(false) + ".java");
|
||||
doCreateValueResourceFromUsage(virtualFile);
|
||||
myFixture.checkResultByFile("res/values/drawables.xml", testFolder + '/' + getTestName(true) + "_drawables_after.xml", true);
|
||||
}
|
||||
|
||||
public void testJavaCreateFromUsage1() throws Throwable {
|
||||
final VirtualFile virtualFile = copyFileToProject(getTestName(false) + ".java", "src/p1/p2/" + getTestName(false) + ".java");
|
||||
doCreateValueResourceFromUsage(virtualFile);
|
||||
myFixture.checkResultByFile("res/values/bools.xml", testFolder + '/' + getTestName(true) + "_bools_after.xml", true);
|
||||
}
|
||||
|
||||
private void doCreateValueResourceFromUsage(VirtualFile virtualFile) {
|
||||
myFixture.configureFromExistingVirtualFile(virtualFile);
|
||||
final List<HighlightInfo> infos = myFixture.doHighlighting();
|
||||
final List<IntentionAction> actions = new ArrayList<IntentionAction>();
|
||||
|
||||
for (HighlightInfo info : infos) {
|
||||
final List<Pair<HighlightInfo.IntentionActionDescriptor, TextRange>> ranges = info.quickFixActionRanges;
|
||||
|
||||
if (ranges != null) {
|
||||
for (Pair<HighlightInfo.IntentionActionDescriptor, TextRange> pair : ranges) {
|
||||
final IntentionAction action = pair.getFirst().getAction();
|
||||
if (action instanceof CreateValueResourceQuickFix) {
|
||||
actions.add(action);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
assertEquals(1, actions.size());
|
||||
|
||||
new WriteCommandAction.Simple(getProject()) {
|
||||
@Override
|
||||
protected void run() throws Throwable {
|
||||
actions.get(0).invoke(getProject(), myFixture.getEditor(), myFixture.getFile());
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user