blob: be8833afd55be39fc34aa214902ee5522fc2dd53 [file] [log] [blame]
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.java.debugger.breakpoints.properties;
import com.intellij.debugger.InstanceFilter;
import com.intellij.openapi.util.Comparing;
import com.intellij.ui.classFilter.ClassFilter;
import com.intellij.util.xmlb.annotations.AbstractCollection;
import com.intellij.util.xmlb.annotations.OptionTag;
import com.intellij.util.xmlb.annotations.Tag;
import com.intellij.xdebugger.breakpoints.XBreakpointProperties;
import org.jetbrains.annotations.Nullable;
/**
* @author egor
*/
public class JavaBreakpointProperties<T extends JavaBreakpointProperties> extends XBreakpointProperties<T> {
private boolean COUNT_FILTER_ENABLED = false;
private int COUNT_FILTER = 0;
private boolean CLASS_FILTERS_ENABLED = false;
private ClassFilter[] myClassFilters;
private ClassFilter[] myClassExclusionFilters;
private boolean INSTANCE_FILTERS_ENABLED = false;
private InstanceFilter[] myInstanceFilters;
@Tag("instance-filters")
@AbstractCollection(surroundWithTag = false)
public InstanceFilter[] getInstanceFilters() {
return myInstanceFilters != null ? myInstanceFilters : InstanceFilter.EMPTY_ARRAY;
}
public boolean setInstanceFilters(InstanceFilter[] instanceFilters) {
boolean changed = !filtersEqual(myInstanceFilters, instanceFilters);
myInstanceFilters = instanceFilters;
return changed;
}
public void addInstanceFilter(long l) {
final InstanceFilter[] filters = new InstanceFilter[myInstanceFilters.length + 1];
System.arraycopy(myInstanceFilters, 0, filters, 0, myInstanceFilters.length);
filters[myInstanceFilters.length] = InstanceFilter.create(String.valueOf(l));
myInstanceFilters = filters;
}
@Tag("class-filters")
@AbstractCollection(surroundWithTag = false)
public final ClassFilter[] getClassFilters() {
return myClassFilters != null ? myClassFilters : ClassFilter.EMPTY_ARRAY;
}
public final boolean setClassFilters(ClassFilter[] classFilters) {
boolean changed = !filtersEqual(myClassFilters, classFilters);
myClassFilters = classFilters;
return changed;
}
private static boolean filtersEqual(Object[] a, Object[] b) {
if ((a == null || a.length == 0) && (b == null || b.length == 0)) {
return true;
}
return Comparing.equal(a, b);
}
@Tag("class-exclusion-filters")
@AbstractCollection(surroundWithTag = false)
public ClassFilter[] getClassExclusionFilters() {
return myClassExclusionFilters != null ? myClassExclusionFilters : ClassFilter.EMPTY_ARRAY;
}
public boolean setClassExclusionFilters(ClassFilter[] classExclusionFilters) {
boolean changed = !filtersEqual(myClassExclusionFilters, classExclusionFilters);
myClassExclusionFilters = classExclusionFilters;
return changed;
}
@Nullable
@Override
public T getState() {
return (T)this;
}
@Override
public void loadState(T state) {
setCOUNT_FILTER_ENABLED(state.isCOUNT_FILTER_ENABLED());
setCOUNT_FILTER(state.getCOUNT_FILTER());
setCLASS_FILTERS_ENABLED(state.isCLASS_FILTERS_ENABLED());
myClassFilters = state.getClassFilters();
myClassExclusionFilters = state.getClassExclusionFilters();
setINSTANCE_FILTERS_ENABLED(state.isINSTANCE_FILTERS_ENABLED());
myInstanceFilters = state.getInstanceFilters();
}
@OptionTag("count-filter-enabled")
public boolean isCOUNT_FILTER_ENABLED() {
return COUNT_FILTER_ENABLED;
}
public boolean setCOUNT_FILTER_ENABLED(boolean COUNT_FILTER_ENABLED) {
boolean changed = this.COUNT_FILTER_ENABLED != COUNT_FILTER_ENABLED;
this.COUNT_FILTER_ENABLED = COUNT_FILTER_ENABLED;
return changed;
}
@OptionTag("count-filter")
public int getCOUNT_FILTER() {
return COUNT_FILTER;
}
public boolean setCOUNT_FILTER(int COUNT_FILTER) {
boolean changed = this.COUNT_FILTER != COUNT_FILTER;
this.COUNT_FILTER = COUNT_FILTER;
return changed;
}
@OptionTag("class-filters-enabled")
public boolean isCLASS_FILTERS_ENABLED() {
return CLASS_FILTERS_ENABLED;
}
public boolean setCLASS_FILTERS_ENABLED(boolean CLASS_FILTERS_ENABLED) {
boolean changed = this.CLASS_FILTERS_ENABLED != CLASS_FILTERS_ENABLED;
this.CLASS_FILTERS_ENABLED = CLASS_FILTERS_ENABLED;
return changed;
}
@OptionTag("instance-filters-enabled")
public boolean isINSTANCE_FILTERS_ENABLED() {
return INSTANCE_FILTERS_ENABLED;
}
public boolean setINSTANCE_FILTERS_ENABLED(boolean INSTANCE_FILTERS_ENABLED) {
boolean changed = this.INSTANCE_FILTERS_ENABLED != INSTANCE_FILTERS_ENABLED;
this.INSTANCE_FILTERS_ENABLED = INSTANCE_FILTERS_ENABLED;
return changed;
}
}