diff --git a/java/compiler/impl/src/com/intellij/openapi/projectRoots/impl/MockJdkWrapper.java b/java/compiler/impl/src/com/intellij/openapi/projectRoots/impl/MockJdkWrapper.java index 7c8a77432456..5cf32bef72a9 100644 --- a/java/compiler/impl/src/com/intellij/openapi/projectRoots/impl/MockJdkWrapper.java +++ b/java/compiler/impl/src/com/intellij/openapi/projectRoots/impl/MockJdkWrapper.java @@ -24,15 +24,16 @@ import com.intellij.openapi.projectRoots.SdkAdditionalData; import com.intellij.openapi.projectRoots.SdkModificator; import com.intellij.openapi.projectRoots.SdkType; import com.intellij.openapi.roots.RootProvider; +import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.File; -import org.jetbrains.annotations.NotNull; - /** * used to override JdkHome location in order to provide correct paths */ @@ -70,6 +71,14 @@ public final class MockJdkWrapper implements Sdk { return myDelegate.getRootProvider(); } + public T getUserData(@NotNull Key key) { + return myDelegate.getUserData(key); + } + + public void putUserData(@NotNull Key key, @Nullable T value) { + myDelegate.putUserData(key, value); + } + public Object clone() throws CloneNotSupportedException { throw new CloneNotSupportedException(); } diff --git a/platform/lang-api/src/com/intellij/openapi/projectRoots/Sdk.java b/platform/lang-api/src/com/intellij/openapi/projectRoots/Sdk.java index 5e996afe125b..64c4e5df2d2c 100644 --- a/platform/lang-api/src/com/intellij/openapi/projectRoots/Sdk.java +++ b/platform/lang-api/src/com/intellij/openapi/projectRoots/Sdk.java @@ -16,6 +16,7 @@ package com.intellij.openapi.projectRoots; import com.intellij.openapi.roots.RootProvider; +import com.intellij.openapi.util.UserDataHolder; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.Nullable; @@ -23,7 +24,7 @@ import org.jetbrains.annotations.Nullable; * @author Eugene Zhuravlev * Date: Sep 23, 2004 */ -public interface Sdk { +public interface Sdk extends UserDataHolder { SdkType getSdkType(); diff --git a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/ProjectJdkImpl.java b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/ProjectJdkImpl.java index 0df9273abb14..93bb832970ba 100644 --- a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/ProjectJdkImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/ProjectJdkImpl.java @@ -25,10 +25,7 @@ import com.intellij.openapi.projectRoots.ex.ProjectRootContainer; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.RootProvider; import com.intellij.openapi.roots.impl.RootProviderBaseImpl; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.InvalidDataException; -import com.intellij.openapi.util.JDOMExternalizable; -import com.intellij.openapi.util.WriteExternalException; +import com.intellij.openapi.util.*; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -40,7 +37,7 @@ import org.jetbrains.annotations.NotNull; import java.util.*; -public class ProjectJdkImpl implements JDOMExternalizable, Sdk, SdkModificator { +public class ProjectJdkImpl extends UserDataHolderBase implements JDOMExternalizable, Sdk, SdkModificator { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.projectRoots.impl.ProjectJdkImpl"); private final ProjectRootContainerImpl myRootContainer; private String myName; @@ -205,7 +202,7 @@ public class ProjectJdkImpl implements JDOMExternalizable, Sdk, SdkModificator { } } - public Object clone() throws CloneNotSupportedException { + public Object clone() { ProjectJdkImpl newJdk = new ProjectJdkImpl("", mySdkType); copyTo(newJdk); return newJdk; @@ -295,17 +292,11 @@ public class ProjectJdkImpl implements JDOMExternalizable, Sdk, SdkModificator { // SdkModificator implementation public SdkModificator getSdkModificator() { - try { - ProjectJdkImpl sdk = (ProjectJdkImpl)clone(); - sdk.myOrigin = this; - sdk.myRootContainer.startChange(); - sdk.update(); - return sdk; - } - catch (CloneNotSupportedException e) { - LOG.error(e); // should not happen - return null; - } + ProjectJdkImpl sdk = (ProjectJdkImpl)clone(); + sdk.myOrigin = this; + sdk.myRootContainer.startChange(); + sdk.update(); + return sdk; } public void commitChanges() {