/*******************************************************************************
* Copyright (c) 2000, 2011 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.ui.text.correction;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaModelMarker;
import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
import java.util.HashSet;
import java.util.Set;
public final class ContributedProcessorDescriptor {
// private final IConfigurationElement fConfigurationElement;
private Object fProcessorInstance;
private Boolean fStatus;
private String fRequiredSourceLevel;
// private final Set<String> fHandledMarkerTypes;
private static final String ID= "id"; //$NON-NLS-1$
private static final String CLASS= "class"; //$NON-NLS-1$
private static final String REQUIRED_SOURCE_LEVEL= "requiredSourceLevel"; //$NON-NLS-1$
private static final String HANDLED_MARKER_TYPES= "handledMarkerTypes"; //$NON-NLS-1$
private static final String MARKER_TYPE= "markerType"; //$NON-NLS-1$
public ContributedProcessorDescriptor(Object processorInstance,boolean testMarkerTypes) {
// fConfigurationElement= element;
fProcessorInstance= processorInstance;
fStatus= null; // undefined
// if (fConfigurationElement.getChildren(ExpressionTagNames.ENABLEMENT).length == 0) {
// fStatus= Boolean.TRUE;
// }
// fRequiredSourceLevel= element.getAttribute(REQUIRED_SOURCE_LEVEL);
// fHandledMarkerTypes= testMarkerTypes ? getHandledMarkerTypes(element) : null;
}
private Set<String> getHandledMarkerTypes(IConfigurationElement element) {
HashSet<String> map= new HashSet<String>(7);
IConfigurationElement[] children= element.getChildren(HANDLED_MARKER_TYPES);
for (int i= 0; i < children.length; i++) {
IConfigurationElement[] types= children[i].getChildren(MARKER_TYPE);
for (int k= 0; k < types.length; k++) {
String attribute= types[k].getAttribute(ID);
if (attribute != null) {
map.add(attribute);
}
}
}
if (map.isEmpty()) {
map.add(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER);
map.add(IJavaModelMarker.BUILDPATH_PROBLEM_MARKER);
map.add(IJavaModelMarker.TASK_MARKER);
}
return map;
}
public IStatus checkSyntax() {
// IConfigurationElement[] children= fConfigurationElement.getChildren(ExpressionTagNames.ENABLEMENT);
// if (children.length > 1) {
// String id= fConfigurationElement.getAttribute(ID);
// return new StatusInfo(IStatus.ERROR, "Only one < enablement > element allowed. Disabling " + id); //$NON-NLS-1$
// }
return new StatusInfo(IStatus.OK, "Syntactically correct quick assist/fix processor"); //$NON-NLS-1$
}
// private boolean matches(ICompilationUnit cunit) {
// if (fRequiredSourceLevel != null) {
// String current= cunit.getJavaProject().getOption(JavaCore.COMPILER_SOURCE, true);
// if (JavaModelUtil.isVersionLessThan(current, fRequiredSourceLevel)) {
// return false;
// }
// }
//
// if (fStatus != null) {
// return fStatus.booleanValue();
// }
//
// IConfigurationElement[] children= fConfigurationElement.getChildren(ExpressionTagNames.ENABLEMENT);
// if (children.length == 1) {
// try {
// ExpressionConverter parser= ExpressionConverter.getDefault();
// Expression expression= parser.perform(children[0]);
// EvaluationContext evalContext= new EvaluationContext(null, cunit);
// evalContext.addVariable("compilationUnit", cunit); //$NON-NLS-1$
// IJavaProject javaProject= cunit.getJavaProject();
// String[] natures= javaProject.getProject().getDescription().getNatureIds();
// evalContext.addVariable("projectNatures", Arrays.asList(natures)); //$NON-NLS-1$
// evalContext.addVariable("sourceLevel", javaProject.getOption(JavaCore.COMPILER_SOURCE, true)); //$NON-NLS-1$
// return expression.evaluate(evalContext) == EvaluationResult.TRUE;
// } catch (CoreException e) {
// JavaPlugin.log(e);
// }
// return false;
// }
// fStatus= Boolean.FALSE;
// return false;
// }
public Object getProcessor(ICompilationUnit cunit, Class<?> expectedType) {
// if (matches(cunit)) {
// if (fProcessorInstance == null) {
// try {
// Object extension= fConfigurationElement.createExecutableExtension(CLASS);
// if (expectedType.isInstance(extension)) {
// fProcessorInstance= extension;
// } else {
// String message= "Invalid extension to " + fConfigurationElement.getName() //$NON-NLS-1$
// + ". Must extends '" + expectedType.getName() + "'." + fConfigurationElement.getContributor().getName(); //$NON-NLS-1$ //$NON-NLS-2$
// JavaPlugin.log(new Status(IStatus.ERROR, JavaPlugin.ID_PLUGIN, message));
// fStatus= Boolean.FALSE;
// return null;
// }
// } catch (CoreException e) {
// JavaPlugin.log(e);
// fStatus= Boolean.FALSE;
// return null;
// }
// }
return fProcessorInstance;
// }
// return null;
}
public boolean canHandleMarkerType(String markerType) {
// return fHandledMarkerTypes == null || fHandledMarkerTypes.contains(markerType);
return true;
}
}