Search in sources :

Example 1 with ContentDescriberForJSP

use of org.eclipse.jst.jsp.core.internal.contenttype.ContentDescriberForJSP in project liferay-ide by liferay.

the class AlloyContentDescriberForJSP method describe.

@Override
public int describe(InputStream contents, IContentDescription description) throws IOException {
    int retval = new ContentDescriberForJSP().describe(contents, description);
    try {
        Class<?> contentsClass = contents.getClass();
        Field inputStreamField = contentsClass.getDeclaredField("in");
        inputStreamField.setAccessible(true);
        InputStream inputStream = (InputStream) inputStreamField.get(contents);
        Class<?> ipStream = inputStream.getClass();
        Field fileStoreField = ipStream.getDeclaredField("target");
        fileStoreField.setAccessible(true);
        IFileStore fileStore = (IFileStore) fileStoreField.get(inputStream);
        if (fileStore != null) {
            IFile[] files = CoreUtil.getWorkspaceRoot().findFilesForLocationURI(fileStore.toURI());
            for (IFile file : files) {
                if (ProjectUtil.isPortletProject(file.getProject()) || LiferayNature.hasNature(file.getProject())) {
                    return VALID;
                }
            }
        }
    } catch (Exception e) {
    }
    return retval;
}
Also used : Field(java.lang.reflect.Field) IFile(org.eclipse.core.resources.IFile) InputStream(java.io.InputStream) IFileStore(org.eclipse.core.filesystem.IFileStore) ContentDescriberForJSP(org.eclipse.jst.jsp.core.internal.contenttype.ContentDescriberForJSP) IOException(java.io.IOException)

Example 2 with ContentDescriberForJSP

use of org.eclipse.jst.jsp.core.internal.contenttype.ContentDescriberForJSP in project liferay-ide by liferay.

the class AlloyContentDescriberForJSP method describe.

@Override
public int describe(Reader contents, IContentDescription description) throws IOException {
    int retval = new ContentDescriberForJSP().describe(contents, description);
    try {
        Class<?> reader = contents.getClass();
        Field documentReaderField = reader.getDeclaredField("in");
        documentReaderField.setAccessible(true);
        Object documentReader = documentReaderField.get(contents);
        Class<?> docReader = documentReader.getClass();
        Field fDocumentField = docReader.getDeclaredField("fDocument");
        fDocumentField.setAccessible(true);
        Object fDocument = fDocumentField.get(documentReader);
        Class<?> documentClass = fDocument.getClass();
        Class<?> superDocument = documentClass.getSuperclass().getSuperclass();
        Field fDocumentListenersField = superDocument.getDeclaredField("fDocumentListeners");
        fDocumentListenersField.setAccessible(true);
        ListenerList<?> fDocumentListeners = (ListenerList<?>) fDocumentListenersField.get(fDocument);
        Object[] listeners = fDocumentListeners.getListeners();
        for (Object listener : listeners) {
            try {
                Class<?> listenerClass = listener.getClass();
                Class<?> enclosingClass = listenerClass.getEnclosingClass();
                Class<?> superClass = enclosingClass.getSuperclass();
                Field fFileField = superClass.getDeclaredField("fFile");
                fFileField.setAccessible(true);
                // get enclosing instance of listener
                Field thisField = listenerClass.getDeclaredField("this$0");
                thisField.setAccessible(true);
                Object enclosingObject = thisField.get(listener);
                Object fFile = fFileField.get(enclosingObject);
                if (fFile instanceof IFile) {
                    IFile file = (IFile) fFile;
                    if (ProjectUtil.isPortletProject(file.getProject()) || LiferayNature.hasNature(file.getProject())) {
                        return VALID;
                    }
                }
            } catch (Exception e) {
            }
        }
    } catch (Exception e) {
    }
    return retval;
}
Also used : ListenerList(org.eclipse.core.runtime.ListenerList) Field(java.lang.reflect.Field) IFile(org.eclipse.core.resources.IFile) ContentDescriberForJSP(org.eclipse.jst.jsp.core.internal.contenttype.ContentDescriberForJSP) IOException(java.io.IOException)

Aggregations

IOException (java.io.IOException)2 Field (java.lang.reflect.Field)2 IFile (org.eclipse.core.resources.IFile)2 ContentDescriberForJSP (org.eclipse.jst.jsp.core.internal.contenttype.ContentDescriberForJSP)2 InputStream (java.io.InputStream)1 IFileStore (org.eclipse.core.filesystem.IFileStore)1 ListenerList (org.eclipse.core.runtime.ListenerList)1