/* * Copyright (c) 2013, 2015 QNX Software Systems 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 */ package org.eclipse.cdt.internal.qt.core.index; import java.util.Collection; import org.eclipse.cdt.internal.qt.core.Activator; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; /** * The public interface to the Qt index. The Qt index is a small wrapper around the * core CDT's CIndex that adds Qt specific information. The Qt index is designed to * interpret multiple versions of Qt, however only 4.8 has been implemented for now. * * @see #getIndex(IProject) */ public abstract class QtIndex { /** * Return an instance of the Qt index for the argument project. The CDT index is * examined to discover appropriate version of Qt (using the value of QT_VERSION). * Returns null if the Qt index cannot be created. This could happen if the argument * project does not have the qtnature, or if the value of QT_VERSION is not supported * by this implementation. * * @param project A Qt enabled project that should be indexed with Qt-specific information. * @return The Qt index or null if the index cannot be created. */ public static QtIndex getIndex(IProject project) { if (project == null) return null; try { Object index = project.getSessionProperty(Activator.QTINDEX_PROP_NAME); if (index instanceof QtIndex) return (QtIndex)index; } catch(CoreException e) { Activator.log(e); } // create and store a new instance when needed QtIndex index = QtFactory.create(project); if (index == null) return null; try { project.setSessionProperty(Activator.QTINDEX_PROP_NAME, index); } catch( CoreException e ) { Activator.log(e); } return index; } /** * Find and return a subclass of QObject with the given qualified name. Returns null if * the index does not have a subclass of QObject with the given name. */ public abstract IQObject findQObject(String[] qualifiedName); /** * Find and return a class that has been marked with the Q_GADGET macro. These are * normal C++ classes that are able to introduce Q_ENUMS and Q_FLAGS to the Qt * meta-object system. Returns null if the index does not have a Q_GADGET with * the given name. */ public abstract IQGadget findQGadget(String[] qualifiedName); /** * Find and return the types that have been registered with the Qt meta type system. This * is the result of the function calls like: * <pre> * qmlRegisterType<Q>( "uri", 1, 2, "Qv1.2" ); * </pre> */ public abstract Collection<IQmlRegistration> getQmlRegistrations(); }