Force activating post processing actions in order to initialize built-ins properly
This commit is contained in:
+1
-1
@@ -54,7 +54,7 @@ public class AddOpenModifierToClassDeclarationFix extends JetIntentionAction<Jet
|
|||||||
PsiReference reference = referenceExpression.getReference();
|
PsiReference reference = referenceExpression.getReference();
|
||||||
if (reference != null) {
|
if (reference != null) {
|
||||||
PsiElement target = reference.resolve();
|
PsiElement target = reference.resolve();
|
||||||
if (target instanceof JetClass && target.isWritable()) {
|
if (target instanceof JetClass && QuickFixUtil.canModifyElement(target)) {
|
||||||
classDeclaration = (JetClass) target;
|
classDeclaration = (JetClass) target;
|
||||||
return !(classDeclaration.isEnum() || classDeclaration.isTrait());
|
return !(classDeclaration.isEnum() || classDeclaration.isTrait());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ public class MakeClassAnAnnotationClassFix extends JetIntentionAction<JetAnnotat
|
|||||||
PsiElement target = reference.resolve();
|
PsiElement target = reference.resolve();
|
||||||
if (target instanceof JetClass) {
|
if (target instanceof JetClass) {
|
||||||
annotationClass = (JetClass) target;
|
annotationClass = (JetClass) target;
|
||||||
return annotationClass.isWritable();
|
return QuickFixUtil.canModifyElement(annotationClass);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,9 @@ import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
|
|||||||
import org.jetbrains.jet.plugin.JetBundle;
|
import org.jetbrains.jet.plugin.JetBundle;
|
||||||
import org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade;
|
import org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static org.jetbrains.jet.lexer.JetTokens.OPEN_KEYWORD;
|
import static org.jetbrains.jet.lexer.JetTokens.OPEN_KEYWORD;
|
||||||
|
|
||||||
@@ -64,7 +66,7 @@ public class MakeOverriddenMemberOpenFix extends JetIntentionAction<JetDeclarati
|
|||||||
if (!overriddenDescriptor.getModality().isOverridable()) {
|
if (!overriddenDescriptor.getModality().isOverridable()) {
|
||||||
PsiElement overriddenMember =
|
PsiElement overriddenMember =
|
||||||
BindingContextUtils.descriptorToDeclaration(resolveSession.getBindingContext(), overriddenDescriptor);
|
BindingContextUtils.descriptorToDeclaration(resolveSession.getBindingContext(), overriddenDescriptor);
|
||||||
if (overriddenMember == null || !overriddenMember.isWritable()) {
|
if (overriddenMember == null || !QuickFixUtil.canModifyElement(overriddenMember)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
String containingDeclarationName = overriddenDescriptor.getContainingDeclaration().getName().getName();
|
String containingDeclarationName = overriddenDescriptor.getContainingDeclaration().getName().getName();
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import com.intellij.psi.PsiElement;
|
|||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import com.intellij.psi.PsiWhiteSpace;
|
import com.intellij.psi.PsiWhiteSpace;
|
||||||
import com.intellij.psi.util.PsiTreeUtil;
|
import com.intellij.psi.util.PsiTreeUtil;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
|
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
@@ -32,6 +33,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
|
|||||||
import org.jetbrains.jet.lang.types.DeferredType;
|
import org.jetbrains.jet.lang.types.DeferredType;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
||||||
|
import org.jetbrains.jet.plugin.references.BuiltInsReferenceResolver;
|
||||||
|
|
||||||
import static org.jetbrains.jet.plugin.project.AnalyzeSingleFileUtil.getContextForSingleFile;
|
import static org.jetbrains.jet.plugin.project.AnalyzeSingleFileUtil.getContextForSingleFile;
|
||||||
|
|
||||||
@@ -88,4 +90,8 @@ public class QuickFixUtil {
|
|||||||
}
|
}
|
||||||
return matchingReturnType;
|
return matchingReturnType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean canModifyElement(@NotNull PsiElement element) {
|
||||||
|
return element.isWritable() && !BuiltInsReferenceResolver.isFromBuiltIns(element);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,10 @@ package org.jetbrains.jet.plugin.references;
|
|||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.components.AbstractProjectComponent;
|
import com.intellij.openapi.components.AbstractProjectComponent;
|
||||||
|
import com.intellij.openapi.project.DumbService;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.startup.StartupManager;
|
import com.intellij.openapi.startup.StartupManager;
|
||||||
import com.intellij.openapi.vfs.VfsUtil;
|
import com.intellij.openapi.vfs.VfsUtil;
|
||||||
@@ -51,9 +54,11 @@ import java.net.URL;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
||||||
private BindingContext bindingContext = null;
|
private BindingContext bindingContext = null;
|
||||||
|
private Set<? extends PsiFile> builtInsSources = Sets.newHashSet();
|
||||||
|
|
||||||
public BuiltInsReferenceResolver(
|
public BuiltInsReferenceResolver(
|
||||||
Project project,
|
Project project,
|
||||||
@@ -85,9 +90,10 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
|||||||
scope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
scope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
||||||
jetNamespace.setMemberScope(scope);
|
jetNamespace.setMemberScope(scope);
|
||||||
|
|
||||||
TopDownAnalyzer.processStandardLibraryNamespace(myProject, context, scope, jetNamespace,
|
List<JetFile> jetBuiltInsFiles = getJetFiles("jet", Predicates.<JetFile>alwaysTrue());
|
||||||
getJetFiles("jet", Predicates.<JetFile>alwaysTrue()));
|
TopDownAnalyzer.processStandardLibraryNamespace(myProject, context, scope, jetNamespace, jetBuiltInsFiles);
|
||||||
|
|
||||||
|
builtInsSources = Sets.newHashSet(jetBuiltInsFiles);
|
||||||
bindingContext = context.getBindingContext();
|
bindingContext = context.getBindingContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,9 +176,9 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Collection<PsiElement> resolveStandardLibrarySymbol(@NotNull BindingContext originalContext,
|
public Collection<PsiElement> resolveStandardLibrarySymbol(@NotNull BindingContext originalContext, @Nullable JetReferenceExpression referenceExpression) {
|
||||||
@Nullable JetReferenceExpression referenceExpression) {
|
|
||||||
if (bindingContext == null) {
|
if (bindingContext == null) {
|
||||||
|
assert DumbService.getInstance(myProject).isDumb() : "Builtins component wasn't initialized properly";
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,6 +190,7 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
|||||||
@NotNull
|
@NotNull
|
||||||
public Collection<PsiElement> resolveStandardLibrarySymbol(@NotNull DeclarationDescriptor declarationDescriptor) {
|
public Collection<PsiElement> resolveStandardLibrarySymbol(@NotNull DeclarationDescriptor declarationDescriptor) {
|
||||||
if (bindingContext == null) {
|
if (bindingContext == null) {
|
||||||
|
assert DumbService.getInstance(myProject).isDumb() : "Builtins component wasn't initialized properly";
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,6 +204,11 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
|||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isFromBuiltIns(@NotNull PsiElement element) {
|
||||||
|
assert ApplicationManager.getApplication().isUnitTestMode() : "In non tested mode element.isWritable() should be sufficient";
|
||||||
|
return element.getProject().getComponent(BuiltInsReferenceResolver.class).builtInsSources.contains(element.getContainingFile());
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static JetScope getMemberScope(@Nullable DeclarationDescriptor parent) {
|
private static JetScope getMemberScope(@Nullable DeclarationDescriptor parent) {
|
||||||
if (parent instanceof ClassDescriptor) {
|
if (parent instanceof ClassDescriptor) {
|
||||||
|
|||||||
@@ -16,10 +16,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.plugin.importOptimizer;
|
package org.jetbrains.jet.plugin.importOptimizer;
|
||||||
|
|
||||||
|
import com.intellij.ide.startup.impl.StartupManagerImpl;
|
||||||
import com.intellij.openapi.command.CommandProcessor;
|
import com.intellij.openapi.command.CommandProcessor;
|
||||||
import com.intellij.openapi.command.UndoConfirmationPolicy;
|
import com.intellij.openapi.command.UndoConfirmationPolicy;
|
||||||
import com.intellij.openapi.projectRoots.JavaSdk;
|
import com.intellij.openapi.projectRoots.JavaSdk;
|
||||||
import com.intellij.openapi.projectRoots.Sdk;
|
import com.intellij.openapi.projectRoots.Sdk;
|
||||||
|
import com.intellij.openapi.startup.StartupManager;
|
||||||
import com.intellij.testFramework.LightCodeInsightTestCase;
|
import com.intellij.testFramework.LightCodeInsightTestCase;
|
||||||
import org.apache.commons.lang.SystemUtils;
|
import org.apache.commons.lang.SystemUtils;
|
||||||
import org.jetbrains.jet.plugin.PluginTestCaseBase;
|
import org.jetbrains.jet.plugin.PluginTestCaseBase;
|
||||||
@@ -29,6 +31,12 @@ import org.jetbrains.jet.testing.ConfigLibraryUtil;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
public class OptimizeImportsTest extends LightCodeInsightTestCase {
|
public class OptimizeImportsTest extends LightCodeInsightTestCase {
|
||||||
|
@Override
|
||||||
|
protected void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
((StartupManagerImpl) StartupManager.getInstance(getProject())).runPostStartupActivities();
|
||||||
|
}
|
||||||
|
|
||||||
public void testAlreadyOptimized() throws Exception {
|
public void testAlreadyOptimized() throws Exception {
|
||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,10 @@ package org.jetbrains.jet.plugin.quickfix;
|
|||||||
|
|
||||||
import com.intellij.codeInsight.daemon.quickFix.LightQuickFixTestCase;
|
import com.intellij.codeInsight.daemon.quickFix.LightQuickFixTestCase;
|
||||||
import com.intellij.codeInsight.intention.IntentionAction;
|
import com.intellij.codeInsight.intention.IntentionAction;
|
||||||
|
import com.intellij.ide.startup.impl.StartupManagerImpl;
|
||||||
import com.intellij.openapi.projectRoots.JavaSdk;
|
import com.intellij.openapi.projectRoots.JavaSdk;
|
||||||
import com.intellij.openapi.projectRoots.Sdk;
|
import com.intellij.openapi.projectRoots.Sdk;
|
||||||
|
import com.intellij.openapi.startup.StartupManager;
|
||||||
import com.intellij.openapi.util.Pair;
|
import com.intellij.openapi.util.Pair;
|
||||||
import org.apache.commons.lang.SystemUtils;
|
import org.apache.commons.lang.SystemUtils;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -31,6 +33,12 @@ import org.jetbrains.jet.testing.ConfigLibraryUtil;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public abstract class AbstractQuickFixTest extends LightQuickFixTestCase {
|
public abstract class AbstractQuickFixTest extends LightQuickFixTestCase {
|
||||||
|
@Override
|
||||||
|
protected void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
((StartupManagerImpl) StartupManager.getInstance(getProject())).runPostStartupActivities();
|
||||||
|
}
|
||||||
|
|
||||||
protected void doTest(@NotNull String beforeFileName) throws Exception {
|
protected void doTest(@NotNull String beforeFileName) throws Exception {
|
||||||
boolean isWithRuntime = beforeFileName.endsWith("Runtime.kt");
|
boolean isWithRuntime = beforeFileName.endsWith("Runtime.kt");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user