blob: b63163fabd5eb76209757c03aa2b52b3761db007 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.jeview.views;
import java.util.Objects;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jdt.core.IAnnotation;
import org.eclipse.jdt.core.IMemberValuePair;
import org.eclipse.jdt.core.JavaModelException;
public class JEMemberValuePair extends JEAttribute {
private final JEAttribute fParent;
private String fName; // can be null
private IMemberValuePair fMemberValuePair; // can be null
JEMemberValuePair(JEAttribute parent, String name, IMemberValuePair memberValuePair) {
Assert.isNotNull(parent);
fParent= parent;
fName= name;
fMemberValuePair= memberValuePair;
}
JEMemberValuePair(JEAttribute parent, IMemberValuePair memberValuePair) {
this(parent, null, memberValuePair);
}
@Override
public JEAttribute getParent() {
return fParent;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || !obj.getClass().equals(getClass())) {
return false;
}
JEMemberValuePair other= (JEMemberValuePair) obj;
if (!Objects.equals(fParent, other.fParent)) {
return false;
}
if (!Objects.equals(fName, other.fName)) {
return false;
}
if (fMemberValuePair == null) {
if (other.fMemberValuePair != null)
return false;
} else if (! fMemberValuePair.getMemberName().equals(other.fMemberValuePair.getMemberName())) {
return false;
}
return true;
}
@Override
public int hashCode() {
return (fParent != null ? fParent.hashCode() : 0)
+ (fName != null ? fName.hashCode() : 0)
+ (fMemberValuePair != null ? fMemberValuePair.getMemberName().hashCode() : 0);
}
@Override
public Object getWrappedObject() {
return fMemberValuePair;
}
@Override
public JEAttribute[] getChildren() {
if (fMemberValuePair == null)
return EMPTY;
Object value= fMemberValuePair.getValue();
return new JEAttribute[] { createMVPairValue(this, "VALUE", value)};
}
@Override
public String getLabel() {
StringBuilder sb= new StringBuilder();
if (fName != null) {
sb.append(fName).append(": ");
}
sb.append("IMemberValuePair: ");
if (fMemberValuePair == null) {
sb.append(fMemberValuePair);
} else {
sb.append(fMemberValuePair.getMemberName());
}
return sb.toString();
}
static JEAttribute createMVPairValue(JEAttribute parent, String name, Object value) {
if ((value instanceof Object[])) {
return createArrayValuedMVPair(parent, name, (Object[]) value);
} else if (value instanceof IAnnotation) {
return new JavaElement(parent, name, (IAnnotation) value);
} else if (value != null) {
return new JavaElementProperty(parent, name, value);
} else {
return new Null(parent, name);
}
}
static JEAttribute createArrayValuedMVPair(JEAttribute parent, String name, final Object[] values) {
return new JavaElementChildrenProperty(parent, name) {
@Override
protected JEAttribute[] computeChildren() throws JavaModelException {
JEAttribute[] children= new JEAttribute[values.length];
for (int i= 0; i < values.length; i++) {
Object value= values[i];
String childName= value == null ? "" : value.getClass().getSimpleName();
children[i]= createMVPairValue(this, childName, value);
}
return children;
}
};
}
}