diff options
author | Xavier Ducrohet <xav@android.com> | 2012-11-05 10:55:13 -0800 |
---|---|---|
committer | Xavier Ducrohet <xav@android.com> | 2012-11-29 17:09:46 -0800 |
commit | fbf28acf3eb01515e94444de8a916a3c2d779211 (patch) | |
tree | fa45276338a2d57398e22c19f512f4959442455f /eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide | |
parent | 1456483b66473b16ecc8b2dcfb05a450decf9456 (diff) | |
download | sdk-fbf28acf3eb01515e94444de8a916a3c2d779211.zip sdk-fbf28acf3eb01515e94444de8a916a3c2d779211.tar.gz sdk-fbf28acf3eb01515e94444de8a916a3c2d779211.tar.bz2 |
Add filterscript suppport.
Change-Id: Iaefb640f35bdad1dc5d4be8565c2cafdc02e8324
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide')
5 files changed, 61 insertions, 26 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AdtConstants.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AdtConstants.java index cbbb1b7..f83bd3c 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AdtConstants.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AdtConstants.java @@ -20,6 +20,7 @@ import static com.android.SdkConstants.DOT_AIDL; import static com.android.SdkConstants.DOT_DEP; import static com.android.SdkConstants.DOT_JAVA; import static com.android.SdkConstants.DOT_RS; +import static com.android.SdkConstants.DOT_FS; import com.android.SdkConstants; import com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder; @@ -118,6 +119,8 @@ public class AdtConstants { public final static String RE_AIDL_EXT = "\\" + DOT_AIDL + "$"; //$NON-NLS-1$ //$NON-NLS-2$ /** Regexp for rs extension, i.e. "\.rs$" */ public final static String RE_RS_EXT = "\\" + DOT_RS + "$"; //$NON-NLS-1$ //$NON-NLS-2$ + /** Regexp for rs extension, i.e. "\.fs$" */ + public final static String RE_FS_EXT = "\\" + DOT_FS + "$"; //$NON-NLS-1$ //$NON-NLS-2$ /** Regexp for .d extension, i.e. "\.d$" */ public final static String RE_DEP_EXT = "\\" + DOT_DEP + "$"; //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/AidlProcessor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/AidlProcessor.java index 52e887a..e399b69 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/AidlProcessor.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/AidlProcessor.java @@ -45,7 +45,9 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -65,6 +67,7 @@ public class AidlProcessor extends SourceProcessor { */ private static Pattern sAidlPattern1 = Pattern.compile("^(.+?):(\\d+):?\\s(.+)$"); //$NON-NLS-1$ + private final static Set<String> EXTENSIONS = Collections.singleton(SdkConstants.EXT_AIDL); private enum AidlType { UNKNOWN, INTERFACE, PARCELABLE; @@ -83,8 +86,8 @@ public class AidlProcessor extends SourceProcessor { } @Override - protected String getExtension() { - return SdkConstants.EXT_AIDL; + protected Set<String> getExtensions() { + return EXTENSIONS; } @Override diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/RenderScriptProcessor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/RenderScriptProcessor.java index 5b58c4f..2ec781f 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/RenderScriptProcessor.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/RenderScriptProcessor.java @@ -26,6 +26,7 @@ import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import com.android.resources.ResourceFolderType; import com.android.sdklib.IAndroidTarget; +import com.google.common.collect.Sets; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; @@ -47,6 +48,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -63,6 +65,12 @@ public class RenderScriptProcessor extends SourceProcessor { */ private static Pattern sLlvmPattern1 = Pattern.compile("^(.+?):(\\d+):(\\d+):\\s(.+)$"); //$NON-NLS-1$ + private final static Set<String> EXTENSIONS = Sets.newHashSetWithExpectedSize(2); + static { + EXTENSIONS.add(SdkConstants.EXT_RS); + EXTENSIONS.add(SdkConstants.EXT_FS); + } + private static class RsChangeHandler extends SourceChangeHandler { @Override @@ -85,31 +93,50 @@ public class RenderScriptProcessor extends SourceProcessor { // remove the file name segment relative = relative.removeLastSegments(1); // add the file name of a Renderscript file. - relative = relative.append(file.getName().replaceAll(AdtConstants.RE_DEP_EXT, - SdkConstants.DOT_RS)); - - // now look for a match in the source folders. - List<IPath> sourceFolders = BaseProjectHelper.getSourceClasspaths( - processor.getJavaProject()); - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - - for (IPath sourceFolderPath : sourceFolders) { - IFolder sourceFolder = root.getFolder(sourceFolderPath); - // we don't look in the 'gen' source folder as there will be no source in there. - if (sourceFolder.exists() && sourceFolder.equals(genFolder) == false) { - IFile sourceFile = sourceFolder.getFile(relative); - SourceFileData data = processor.getFileData(sourceFile); - if (data != null) { - addFileToCompile(sourceFile); - return true; - } - } + relative = relative.append(file.getName().replaceAll( + AdtConstants.RE_DEP_EXT, SdkConstants.DOT_RS)); + + if (!findInSourceFolders(processor, genFolder, relative)) { + // could be a FilterScript file? + relative = file.getFullPath().makeRelativeTo(genFolder.getFullPath()); + // remove the file name segment + relative = relative.removeLastSegments(1); + // add the file name of a FilterScript file. + relative = relative.append(file.getName().replaceAll( + AdtConstants.RE_DEP_EXT, SdkConstants.DOT_FS)); + + return findInSourceFolders(processor, genFolder, relative); } + + return true; } return r; } + private boolean findInSourceFolders(SourceProcessor processor, IFolder genFolder, + IPath relative) { + // now look for a match in the source folders. + List<IPath> sourceFolders = BaseProjectHelper.getSourceClasspaths( + processor.getJavaProject()); + IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); + + for (IPath sourceFolderPath : sourceFolders) { + IFolder sourceFolder = root.getFolder(sourceFolderPath); + // we don't look in the 'gen' source folder as there will be no source in there. + if (sourceFolder.exists() && sourceFolder.equals(genFolder) == false) { + IFile sourceFile = sourceFolder.getFile(relative); + SourceFileData data = processor.getFileData(sourceFile); + if (data != null) { + addFileToCompile(sourceFile); + return true; + } + } + } + + return false; + } + @Override protected boolean filterResourceFolder(IContainer folder) { return ResourceFolderType.RAW.getName().equals(folder.getName()); @@ -121,8 +148,8 @@ public class RenderScriptProcessor extends SourceProcessor { } @Override - protected String getExtension() { - return SdkConstants.EXT_RS; + protected Set<String> getExtensions() { + return EXTENSIONS; } @Override diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/SourceChangeHandler.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/SourceChangeHandler.java index 537dd61..5436798 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/SourceChangeHandler.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/SourceChangeHandler.java @@ -59,7 +59,7 @@ public class SourceChangeHandler { public void handleSourceFile(IFile file, int kind) { // first the file itself if this is a match for the processor's extension - if (mProcessor.getExtension().equals(file.getFileExtension())) { + if (mProcessor.getExtensions().contains(file.getFileExtension())) { if (kind == IResourceDelta.REMOVED) { mRemoved.add(file); } else { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/SourceProcessor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/SourceProcessor.java index 8e50ec6..794ed52 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/SourceProcessor.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/SourceProcessor.java @@ -38,6 +38,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; @@ -210,7 +211,7 @@ public abstract class SourceProcessor { * Returns the extension of the source files handled by this processor. * @return */ - protected abstract String getExtension(); + protected abstract Set<String> getExtensions(); protected abstract String getSavePropertyName(); @@ -369,7 +370,8 @@ public abstract class SourceProcessor { // if this a file, check that the file actually exist // and that it's the type of of file that's used in this processor if (r.exists() && - getExtension().equalsIgnoreCase(r.getFileExtension())) { + getExtensions().contains( + r.getFileExtension().toLowerCase(Locale.US))) { mFiles.put((IFile) r, new SourceFileData((IFile) r)); } break; |