aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sourcelookup/AdtSourceLookupDirector.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sourcelookup/AdtSourceLookupDirector.java')
-rwxr-xr-xeclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sourcelookup/AdtSourceLookupDirector.java119
1 files changed, 119 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sourcelookup/AdtSourceLookupDirector.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sourcelookup/AdtSourceLookupDirector.java
new file mode 100755
index 000000000..bcb9c48b1
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sourcelookup/AdtSourceLookupDirector.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Eclipse Public License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/org/documents/epl-v10.php
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *******************************************************************************/
+
+package com.android.ide.eclipse.adt.internal.sourcelookup;
+
+import com.android.ide.eclipse.adt.internal.sdk.ProjectState;
+import com.android.ide.eclipse.adt.internal.sdk.Sdk;
+import com.android.sdklib.IAndroidTarget;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.sourcelookup.ISourceContainer;
+import org.eclipse.debug.core.sourcelookup.containers.DefaultSourceContainer;
+import org.eclipse.debug.core.sourcelookup.containers.DirectorySourceContainer;
+import org.eclipse.debug.core.sourcelookup.containers.ExternalArchiveSourceContainer;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.internal.launching.JavaSourceLookupDirector;
+import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
+
+import java.io.File;
+
+public class AdtSourceLookupDirector extends JavaSourceLookupDirector {
+
+ @Override
+ public void initializeDefaults(ILaunchConfiguration configuration) throws CoreException {
+ dispose();
+ setLaunchConfiguration(configuration);
+ String projectName =
+ configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME,
+ ""); //$NON-NLS-1$
+ if (projectName != null && projectName.length() > 0) {
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+ if (project != null && project.isOpen()) {
+ ProjectState state = Sdk.getProjectState(project);
+ if (state == null) {
+ initDefaults();
+ return;
+ }
+ IAndroidTarget target = state.getTarget();
+ if (target == null) {
+ initDefaults();
+ return;
+ }
+ String path = target.getPath(IAndroidTarget.ANDROID_JAR);
+ if (path == null) {
+ initDefaults();
+ return;
+ }
+ IJavaProject javaProject = JavaCore.create(project);
+ if (javaProject != null && javaProject.isOpen()) {
+ IClasspathEntry[] entries = javaProject.getResolvedClasspath(true);
+ IClasspathEntry androidEntry = null;
+ for (int i = 0; i < entries.length; i++) {
+ IClasspathEntry entry = entries[i];
+ if (entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY
+ && path.equals(entry.getPath().toString())) {
+ androidEntry = entry;
+ break;
+ }
+ }
+ if (androidEntry != null) {
+ IPath sourceAttachmentPath = androidEntry.getSourceAttachmentPath();
+ if (sourceAttachmentPath != null) {
+ String androidSrc = sourceAttachmentPath.toString();
+ if (androidSrc != null && androidSrc.trim().length() > 0) {
+ File srcFile = new File(androidSrc);
+ ISourceContainer adtContainer = null;
+ if (srcFile.isFile()) {
+ adtContainer = new ExternalArchiveSourceContainer(androidSrc,
+ true);
+ }
+ if (srcFile.isDirectory()) {
+ adtContainer = new DirectorySourceContainer(srcFile, false);
+ }
+ if (adtContainer != null) {
+ ISourceContainer defaultContainer =
+ new DefaultSourceContainer();
+ setSourceContainers(new ISourceContainer[] {
+ adtContainer, defaultContainer
+ });
+ initializeParticipants();
+ return;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ initDefaults();
+ }
+
+ private void initDefaults() {
+ setSourceContainers(new ISourceContainer[] {
+ new DefaultSourceContainer()
+ });
+ initializeParticipants();
+ }
+
+}