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