Fixed filtering error

This commit is contained in:
Michael Bogdanov
2015-12-11 14:20:56 +03:00
parent 4ad113d836
commit a849f3f5d4
4 changed files with 21 additions and 20 deletions
@@ -69,16 +69,16 @@ public class GenerationState @JvmOverloads constructor(
public val progress: Progress = Progress.DEAF public val progress: Progress = Progress.DEAF
) { ) {
public abstract class GenerateClassFilter { public abstract class GenerateClassFilter {
public abstract fun shouldAnnotateClass(classOrObject: KtClassOrObject): Boolean public abstract fun shouldAnnotateClass(processingClassOrObject: KtClassOrObject): Boolean
public abstract fun shouldGenerateClass(classOrObject: KtClassOrObject): Boolean public abstract fun shouldGenerateClass(processingClassOrObject: KtClassOrObject): Boolean
public abstract fun shouldGeneratePackagePart(jetFile: KtFile): Boolean public abstract fun shouldGeneratePackagePart(jetFile: KtFile): Boolean
public abstract fun shouldGenerateScript(script: KtScript): Boolean public abstract fun shouldGenerateScript(script: KtScript): Boolean
companion object { companion object {
public val GENERATE_ALL: GenerateClassFilter = object : GenerateClassFilter() { public val GENERATE_ALL: GenerateClassFilter = object : GenerateClassFilter() {
override fun shouldAnnotateClass(classOrObject: KtClassOrObject): Boolean = true override fun shouldAnnotateClass(processingClassOrObject: KtClassOrObject): Boolean = true
override fun shouldGenerateClass(classOrObject: KtClassOrObject): Boolean = true override fun shouldGenerateClass(processingClassOrObject: KtClassOrObject): Boolean = true
override fun shouldGenerateScript(script: KtScript): Boolean = true override fun shouldGenerateScript(script: KtScript): Boolean = true
@@ -240,18 +240,19 @@ class LightClassDataProviderForClassOrObject(private val classOrObject: KtClassO
return true return true
} }
override fun shouldAnnotateClass(classOrObject: KtClassOrObject): Boolean { override fun shouldAnnotateClass(processingClassOrObject: KtClassOrObject): Boolean {
return shouldGenerateClass(classOrObject) return shouldGenerateClass(processingClassOrObject)
} }
override fun shouldGenerateClass(classOrObject: KtClassOrObject): Boolean { override fun shouldGenerateClass(processingClassOrObject: KtClassOrObject): Boolean {
// Trivial: generate and analyze class we are interested in. // Trivial: generate and analyze class we are interested in.
if (classOrObject === classOrObject) return true if (classOrObject === processingClassOrObject) return true
// Process all parent classes as they are context for current class // Process all parent classes as they are context for current class
// Process child classes because they probably affect members (heuristic) // Process child classes because they probably affect members (heuristic)
if (PsiTreeUtil.isAncestor(classOrObject, classOrObject, true) || PsiTreeUtil.isAncestor(classOrObject, classOrObject, true)) { if (PsiTreeUtil.isAncestor(classOrObject, processingClassOrObject, true) ||
PsiTreeUtil.isAncestor(processingClassOrObject, classOrObject, true)) {
return true return true
} }
@@ -269,8 +270,8 @@ class LightClassDataProviderForClassOrObject(private val classOrObject: KtClassO
// TODO: current method will process local classes in irrelevant declarations, it should be fixed. // TODO: current method will process local classes in irrelevant declarations, it should be fixed.
// We generate all enclosing classes // We generate all enclosing classes
if (classOrObject.isLocal() && classOrObject.isLocal()) { if (classOrObject.isLocal() && processingClassOrObject.isLocal()) {
val commonParent = PsiTreeUtil.findCommonParent(classOrObject, classOrObject) val commonParent = PsiTreeUtil.findCommonParent(classOrObject, processingClassOrObject)
return commonParent != null && commonParent !is PsiFile return commonParent != null && commonParent !is PsiFile
} }
@@ -320,12 +321,12 @@ class LightClassDataProviderForFileFacade(
override val generateClassFilter: GenerationState.GenerateClassFilter override val generateClassFilter: GenerationState.GenerateClassFilter
get() = object : GenerationState.GenerateClassFilter() { get() = object : GenerationState.GenerateClassFilter() {
override fun shouldAnnotateClass(classOrObject: KtClassOrObject): Boolean { override fun shouldAnnotateClass(processingClassOrObject: KtClassOrObject): Boolean {
return shouldGenerateClass(classOrObject) return shouldGenerateClass(processingClassOrObject)
} }
override fun shouldGenerateClass(classOrObject: KtClassOrObject): Boolean { override fun shouldGenerateClass(processingClassOrObject: KtClassOrObject): Boolean {
return KtPsiUtil.isLocal(classOrObject) return KtPsiUtil.isLocal(processingClassOrObject)
} }
override fun shouldGeneratePackagePart(jetFile: KtFile): Boolean { override fun shouldGeneratePackagePart(jetFile: KtFile): Boolean {
@@ -364,8 +364,8 @@ class KotlinEvaluator(val codeFragment: KtCodeFragment, val sourcePosition: Sour
val generateClassFilter = object : GenerationState.GenerateClassFilter() { val generateClassFilter = object : GenerationState.GenerateClassFilter() {
override fun shouldGeneratePackagePart(jetFile: KtFile) = jetFile == jetFile override fun shouldGeneratePackagePart(jetFile: KtFile) = jetFile == jetFile
override fun shouldAnnotateClass(classOrObject: KtClassOrObject) = true override fun shouldAnnotateClass(processingClassOrObject: KtClassOrObject) = true
override fun shouldGenerateClass(classOrObject: KtClassOrObject) = classOrObject.getContainingKtFile() == jetFile override fun shouldGenerateClass(processingClassOrObject: KtClassOrObject) = processingClassOrObject.getContainingKtFile() == jetFile
override fun shouldGenerateScript(script: KtScript) = false override fun shouldGenerateScript(script: KtScript) = false
} }
@@ -212,13 +212,13 @@ public class KotlinBytecodeToolWindow extends JPanel implements Disposable {
} }
@Override @Override
public boolean shouldAnnotateClass(@NotNull KtClassOrObject classOrObject) { public boolean shouldAnnotateClass(@NotNull KtClassOrObject processingClassOrObject) {
return true; return true;
} }
@Override @Override
public boolean shouldGenerateClass(@NotNull KtClassOrObject classOrObject) { public boolean shouldGenerateClass(@NotNull KtClassOrObject processingClassOrObject) {
return classOrObject.getContainingKtFile() == jetFile; return processingClassOrObject.getContainingKtFile() == jetFile;
} }
@Override @Override